Fork me on GitHub

Rat (Release Audit Tool) results

The following document contains the results of Rat (Release Audit Tool).

*****************************************************
Summary
-------
Generated at: 2017-07-13T15:48:32+02:00

Notes: 0
Binaries: 22
Archives: 0
Standards: 114

Apache Licensed: 54
Generated Documents: 0

JavaDocs are generated, thus a license header is optional.
Generated files do not require license headers.

60 Unknown Licenses

*****************************************************

Files with unapproved licenses:

  multisynth-studio-data.sql
  multisynth-studio-schema.sql
  src/main/assembly/build-tomcat.xml
  src/main/resources/appconfig.properties
  src/main/resources/jdbc.properties
  src/main/resources/log4j.properties
  src/main/resources/META-INF/persistence.xml
  src/main/webapp/resources/application.css
  src/main/webapp/resources/application.js
  src/main/webapp/resources/plugin_extension/countries-flags/countries-flags.css
  src/main/webapp/resources/plugin_extension/datatables/datatables-columnfilter-utility.js
  src/main/webapp/resources/plugin_extension/datatables/datatables-columnfilter.css
  src/main/webapp/resources/plugin_extension/datatables/datatables-columnfilter.js
  src/main/webapp/resources/plugin_extension/datatables/i18n/datatables-it.properties
  src/main/webapp/resources/plugin_extension/parsleyjs/i18n/en.js
  src/main/webapp/resources/plugin_extension/parsleyjs/i18n/it.js
  src/main/webapp/resources/plugin_extension/parsleyjs/parsley-extra.js
  src/main/webapp/resources/plugin_extension/visjs/i18n/vis.locales.js
  src/main/webapp/resources/plugin_extension/visjs/vis-network.min.css
  src/main/webapp/resources/plugin_extension/visjs/vis-timeline-graph2d.min.css
  src/main/webapp/resources/plugin_extension/visjs/vis.css
  src/main/webapp/resources/plugin_extension/visjs/vis.js.map
  src/main/webapp/resources/plugin_extension/visjs/vis.map
  src/main/webapp/resources/plugin_extension/visjs/vis.min.css
  src/main/webapp/WEB-INF/i18n/multisynth-studio_en.properties
  src/main/webapp/WEB-INF/i18n/multisynth-studio_it.properties
  src/main/webapp/WEB-INF/spring/root-context.xml
  src/main/webapp/WEB-INF/spring/security-config.xml
  src/main/webapp/WEB-INF/spring/tiles-defs.xml
  src/main/webapp/WEB-INF/spring/webmvc-config.xml
  src/main/webapp/WEB-INF/views/administration/user/user_form.jsp
  src/main/webapp/WEB-INF/views/administration/user/user_javascript.jsp
  src/main/webapp/WEB-INF/views/administration/user/user_list.jsp
  src/main/webapp/WEB-INF/views/choreography/abstractparticipantbehavior/abstractparticipantbehavior.jsp
  src/main/webapp/WEB-INF/views/choreography/abstractparticipantbehavior/abstractparticipantbehavior_javascript.jsp
  src/main/webapp/WEB-INF/views/choreography/abstractparticipantbehavior/choreographyspecification_javascript.jsp
  src/main/webapp/WEB-INF/views/choreography/coordinationdelegate/coordinationdelegate.jsp
  src/main/webapp/WEB-INF/views/choreography/coordinationdelegate/coordinationdelegate_javascript.jsp
  src/main/webapp/WEB-INF/views/choreography/hybridsystembehavior/concreteparticipantbehavior_javascript.jsp
  src/main/webapp/WEB-INF/views/choreography/hybridsystembehavior/hybridsystembehavior.jsp
  src/main/webapp/WEB-INF/views/choreography/hybridsystembehavior/hybridsystembehavior_javascript.jsp
  src/main/webapp/WEB-INF/views/common/copyright.jsp
  src/main/webapp/WEB-INF/views/common/welcome.jsp
  src/main/webapp/WEB-INF/views/layout/content_top.jsp
  src/main/webapp/WEB-INF/views/layout/footer.jsp
  src/main/webapp/WEB-INF/views/layout/layout.jsp
  src/main/webapp/WEB-INF/views/layout/layout_css.jsp
  src/main/webapp/WEB-INF/views/layout/layout_javascript.jsp
  src/main/webapp/WEB-INF/views/layout/navigation_left.jsp
  src/main/webapp/WEB-INF/views/layout/navigation_top.jsp
  src/main/webapp/WEB-INF/views/settings/account.jsp
  src/main/webapp/WEB-INF/views/settings/layout.jsp
  src/main/webapp/WEB-INF/views/settings/password.jsp
  src/main/webapp/WEB-INF/views/settings/settings_javascript.jsp
  src/main/webapp/WEB-INF/views/standalone/login.jsp
  src/main/webapp/WEB-INF/views/standalone/page_403.jsp
  src/main/webapp/WEB-INF/views/standalone/page_404.jsp
  src/main/webapp/WEB-INF/views/standalone/page_440.jsp
  src/main/webapp/WEB-INF/views/standalone/page_500.jsp
  src/main/webapp/WEB-INF/web.xml

*****************************************************

*****************************************************
  Files with Apache License headers will be marked AL
  Binary files (which do not require any license headers) will be marked B
  Compressed archives will be marked A
  Notices, licenses etc. will be marked N
 !????? multisynth-studio-data.sql
 !????? multisynth-studio-schema.sql
  AL    pom.xml
  AL    README.md
 !????? src/main/assembly/build-tomcat.xml
  AL    src/main/assembly/resources/server.xml
  AL    src/main/assembly/resources/tomcat-users.xml
  AL    src/main/java/com/sesygroup/choreography/web/business/AvatarRequest.java
  AL    src/main/java/com/sesygroup/choreography/web/business/BusinessException.java
  AL    src/main/java/com/sesygroup/choreography/web/business/CRUDService.java
  AL    src/main/java/com/sesygroup/choreography/web/business/DataTablesRequest.java
  AL    src/main/java/com/sesygroup/choreography/web/business/DataTablesResponse.java
  AL    src/main/java/com/sesygroup/choreography/web/business/GenericResponseBody.java
  AL    src/main/java/com/sesygroup/choreography/web/business/impl/ConversionUtility.java
  AL    src/main/java/com/sesygroup/choreography/web/business/impl/JPACRUDService.java
  AL    src/main/java/com/sesygroup/choreography/web/business/impl/JPARoleService.java
  AL    src/main/java/com/sesygroup/choreography/web/business/impl/JPAUserService.java
  AL    src/main/java/com/sesygroup/choreography/web/business/model/BaseModel.java
  AL    src/main/java/com/sesygroup/choreography/web/business/model/Network.java
  AL    src/main/java/com/sesygroup/choreography/web/business/model/NetworkConstants.java
  AL    src/main/java/com/sesygroup/choreography/web/business/model/NetworkEdge.java
  AL    src/main/java/com/sesygroup/choreography/web/business/model/NetworkMultiple.java
  AL    src/main/java/com/sesygroup/choreography/web/business/model/NetworkNode.java
  AL    src/main/java/com/sesygroup/choreography/web/business/model/NetworkPath.java
  AL    src/main/java/com/sesygroup/choreography/web/business/model/Role.java
  AL    src/main/java/com/sesygroup/choreography/web/business/model/User.java
  AL    src/main/java/com/sesygroup/choreography/web/business/RoleService.java
  AL    src/main/java/com/sesygroup/choreography/web/business/SearchField.java
  AL    src/main/java/com/sesygroup/choreography/web/business/UserService.java
  AL    src/main/java/com/sesygroup/choreography/web/common/spring/security/AuthenticationHolder.java
  AL    src/main/java/com/sesygroup/choreography/web/common/spring/security/GrantedAuthorityImpl.java
  AL    src/main/java/com/sesygroup/choreography/web/common/spring/security/UserDetailsImpl.java
  AL    src/main/java/com/sesygroup/choreography/web/common/spring/security/UserDetailsServiceImpl.java
  AL    src/main/java/com/sesygroup/choreography/web/common/spring/session/SessionService.java
  AL    src/main/java/com/sesygroup/choreography/web/common/utility/AbstractParticipantBehaviorConverter.java
  AL    src/main/java/com/sesygroup/choreography/web/common/utility/ChoreographySpecificationConverter.java
  AL    src/main/java/com/sesygroup/choreography/web/common/utility/ConcreteParticipantBehaviorConverter.java
  AL    src/main/java/com/sesygroup/choreography/web/common/utility/CoordinationDelegateGeneratorConverter.java
  AL    src/main/java/com/sesygroup/choreography/web/common/utility/HybridSystemBehaviorConverter.java
  AL    src/main/java/com/sesygroup/choreography/web/common/utility/NetworkUtils.java
  AL    src/main/java/com/sesygroup/choreography/web/common/utility/Utility.java
  AL    src/main/java/com/sesygroup/choreography/web/presentation/AdministrationUserController.java
  AL    src/main/java/com/sesygroup/choreography/web/presentation/ChoreographyController.java
  AL    src/main/java/com/sesygroup/choreography/web/presentation/GlobalExceptionHandler.java
  AL    src/main/java/com/sesygroup/choreography/web/presentation/mock/ChoreographySpecificationMock.java
  AL    src/main/java/com/sesygroup/choreography/web/presentation/mock/ConcreteParticipantsBehaviorMock.java
  AL    src/main/java/com/sesygroup/choreography/web/presentation/mock/CoordinationDelegatesMock.java
  AL    src/main/java/com/sesygroup/choreography/web/presentation/SettingsController.java
  AL    src/main/java/com/sesygroup/choreography/web/presentation/UtilityController.java
 !????? src/main/resources/appconfig.properties
 !????? src/main/resources/jdbc.properties
 !????? src/main/resources/log4j.properties
 !????? src/main/resources/META-INF/persistence.xml
 !????? src/main/webapp/resources/application.css
 !????? src/main/webapp/resources/application.js
  B     src/main/webapp/resources/favicon.ico
  B     src/main/webapp/resources/images/check-ok.png
  B     src/main/webapp/resources/images/italy.png
  B     src/main/webapp/resources/images/loader_gray_32.gif
  B     src/main/webapp/resources/images/user-template_1.png
  B     src/main/webapp/resources/images/user-template_2.jpg
 !????? src/main/webapp/resources/plugin_extension/countries-flags/countries-flags.css
  B     src/main/webapp/resources/plugin_extension/countries-flags/countries-flags.png
 !????? src/main/webapp/resources/plugin_extension/datatables/datatables-columnfilter-utility.js
 !????? src/main/webapp/resources/plugin_extension/datatables/datatables-columnfilter.css
 !????? src/main/webapp/resources/plugin_extension/datatables/datatables-columnfilter.js
 !????? src/main/webapp/resources/plugin_extension/datatables/i18n/datatables-it.properties
 !????? src/main/webapp/resources/plugin_extension/parsleyjs/i18n/en.js
 !????? src/main/webapp/resources/plugin_extension/parsleyjs/i18n/it.js
 !????? src/main/webapp/resources/plugin_extension/parsleyjs/parsley-extra.js
 !????? src/main/webapp/resources/plugin_extension/visjs/i18n/vis.locales.js
  B     src/main/webapp/resources/plugin_extension/visjs/img/network/acceptDeleteIcon.png
  B     src/main/webapp/resources/plugin_extension/visjs/img/network/addNodeIcon.png
  B     src/main/webapp/resources/plugin_extension/visjs/img/network/backIcon.png
  B     src/main/webapp/resources/plugin_extension/visjs/img/network/connectIcon.png
  B     src/main/webapp/resources/plugin_extension/visjs/img/network/cross.png
  B     src/main/webapp/resources/plugin_extension/visjs/img/network/cross2.png
  B     src/main/webapp/resources/plugin_extension/visjs/img/network/deleteIcon.png
  B     src/main/webapp/resources/plugin_extension/visjs/img/network/downArrow.png
  B     src/main/webapp/resources/plugin_extension/visjs/img/network/editIcon.png
  B     src/main/webapp/resources/plugin_extension/visjs/img/network/leftArrow.png
  B     src/main/webapp/resources/plugin_extension/visjs/img/network/minus.png
  B     src/main/webapp/resources/plugin_extension/visjs/img/network/plus.png
  B     src/main/webapp/resources/plugin_extension/visjs/img/network/rightArrow.png
  B     src/main/webapp/resources/plugin_extension/visjs/img/network/upArrow.png
  B     src/main/webapp/resources/plugin_extension/visjs/img/network/zoomExtends.png
  AL    src/main/webapp/resources/plugin_extension/visjs/vis-graph3d.min.js
 !????? src/main/webapp/resources/plugin_extension/visjs/vis-network.min.css
  AL    src/main/webapp/resources/plugin_extension/visjs/vis-network.min.js
 !????? src/main/webapp/resources/plugin_extension/visjs/vis-timeline-graph2d.min.css
  AL    src/main/webapp/resources/plugin_extension/visjs/vis-timeline-graph2d.min.js
 !????? src/main/webapp/resources/plugin_extension/visjs/vis.css
  AL    src/main/webapp/resources/plugin_extension/visjs/vis.js
 !????? src/main/webapp/resources/plugin_extension/visjs/vis.js.map
 !????? src/main/webapp/resources/plugin_extension/visjs/vis.map
 !????? src/main/webapp/resources/plugin_extension/visjs/vis.min.css
  AL    src/main/webapp/resources/plugin_extension/visjs/vis.min.js
 !????? src/main/webapp/WEB-INF/i18n/multisynth-studio_en.properties
 !????? src/main/webapp/WEB-INF/i18n/multisynth-studio_it.properties
 !????? src/main/webapp/WEB-INF/spring/root-context.xml
 !????? src/main/webapp/WEB-INF/spring/security-config.xml
 !????? src/main/webapp/WEB-INF/spring/tiles-defs.xml
 !????? src/main/webapp/WEB-INF/spring/webmvc-config.xml
 !????? src/main/webapp/WEB-INF/views/administration/user/user_form.jsp
 !????? src/main/webapp/WEB-INF/views/administration/user/user_javascript.jsp
 !????? src/main/webapp/WEB-INF/views/administration/user/user_list.jsp
 !????? src/main/webapp/WEB-INF/views/choreography/abstractparticipantbehavior/abstractparticipantbehavior.jsp
 !????? src/main/webapp/WEB-INF/views/choreography/abstractparticipantbehavior/abstractparticipantbehavior_javascript.jsp
 !????? src/main/webapp/WEB-INF/views/choreography/abstractparticipantbehavior/choreographyspecification_javascript.jsp
 !????? src/main/webapp/WEB-INF/views/choreography/coordinationdelegate/coordinationdelegate.jsp
 !????? src/main/webapp/WEB-INF/views/choreography/coordinationdelegate/coordinationdelegate_javascript.jsp
 !????? src/main/webapp/WEB-INF/views/choreography/hybridsystembehavior/concreteparticipantbehavior_javascript.jsp
 !????? src/main/webapp/WEB-INF/views/choreography/hybridsystembehavior/hybridsystembehavior.jsp
 !????? src/main/webapp/WEB-INF/views/choreography/hybridsystembehavior/hybridsystembehavior_javascript.jsp
 !????? src/main/webapp/WEB-INF/views/common/copyright.jsp
 !????? src/main/webapp/WEB-INF/views/common/welcome.jsp
 !????? src/main/webapp/WEB-INF/views/layout/content_top.jsp
 !????? src/main/webapp/WEB-INF/views/layout/footer.jsp
 !????? src/main/webapp/WEB-INF/views/layout/layout.jsp
 !????? src/main/webapp/WEB-INF/views/layout/layout_css.jsp
 !????? src/main/webapp/WEB-INF/views/layout/layout_javascript.jsp
 !????? src/main/webapp/WEB-INF/views/layout/navigation_left.jsp
 !????? src/main/webapp/WEB-INF/views/layout/navigation_top.jsp
 !????? src/main/webapp/WEB-INF/views/settings/account.jsp
 !????? src/main/webapp/WEB-INF/views/settings/layout.jsp
 !????? src/main/webapp/WEB-INF/views/settings/password.jsp
 !????? src/main/webapp/WEB-INF/views/settings/settings_javascript.jsp
 !????? src/main/webapp/WEB-INF/views/standalone/login.jsp
 !????? src/main/webapp/WEB-INF/views/standalone/page_403.jsp
 !????? src/main/webapp/WEB-INF/views/standalone/page_404.jsp
 !????? src/main/webapp/WEB-INF/views/standalone/page_440.jsp
 !????? src/main/webapp/WEB-INF/views/standalone/page_500.jsp
 !????? src/main/webapp/WEB-INF/web.xml
  AL    src/site/markdown/changelog.md
  AL    src/site/markdown/index.md
  AL    src/site/site.xml
 
*****************************************************

 Printing headers for text files without a valid license header...
 
=====================================================
== File: multisynth-studio-data.sql
=====================================================
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

USE `multisynth-studio`;

--
-- Dumping data for table user
--

SET AUTOCOMMIT=0;
LOCK TABLES user WRITE;
INSERT INTO user VALUES (1,"Admin", "Admin", "admin", "5f4dcc3b5aa765d61d8327deb882cf99", "admin.admin@gmail.com", NULL, TRUE, FALSE, "2017-04-30 15:41:00");
UNLOCK TABLES;
COMMIT;


--
-- Dumping data for table role
--

SET AUTOCOMMIT=0;
INSERT INTO role VALUES (1, "administrator", "System administrator", "2017-04-30 15:41:00"),
(2, "user", "Generic user", "2017-04-30 15:41:00");
COMMIT;

--
-- Dumping data for table user_role
--

SET AUTOCOMMIT=0;
INSERT INTO user_role VALUES
(1, 1, "2017-04-30 15:41:00");
COMMIT;

SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

=====================================================
== File: multisynth-studio-schema.sql
=====================================================
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

DROP SCHEMA IF EXISTS `multisynth-studio`;
CREATE SCHEMA `multisynth-studio`;
USE `multisynth-studio`;

--
-- Table structure for table `user`
--

CREATE TABLE user (
  user_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  first_name VARCHAR(50) NOT NULL,
  last_name VARCHAR(50) NOT NULL,
  username VARCHAR(150) NOT NULL UNIQUE,
  password VARCHAR(32) NOT NULL,
  email VARCHAR(255) DEFAULT NULL UNIQUE,
  picture LONGBLOB DEFAULT NULL,
  active BOOLEAN NOT NULL DEFAULT TRUE,
  password_expired BOOLEAN NOT NULL DEFAULT TRUE,
  last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (user_id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Table structure for table `role`
--

CREATE TABLE role (
  role_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
  name VARCHAR(64) NOT NULL,
  description TEXT DEFAULT NULL,
  last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (role_id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Table structure for table `user_role`
--

CREATE TABLE user_role (
  user_id BIGINT UNSIGNED NOT NULL,
  role_id BIGINT UNSIGNED NOT NULL,
  last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (user_id , role_id),
  CONSTRAINT user_role_user FOREIGN KEY (user_id) REFERENCES user (user_id) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT user_role_role FOREIGN KEY (role_id) REFERENCES role (role_id) ON DELETE CASCADE ON UPDATE CASCADE
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

=====================================================
== File: src/main/assembly/build-tomcat.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<assembly
   xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3
                              http://maven.apache.org/xsd/assembly-1.1.3.xsd">

   <id>build-tomcat</id>

   <formats>
      <format>zip</format>
   </formats>

   <fileSets>
      <fileSet>
         <useDefaultExcludes>false</useDefaultExcludes>
         <directory>${project.build.directory}/${apache-tomcat.dir.name}</directory>
         <includes>
            <include>**</include>
         </includes>
         <outputDirectory></outputDirectory>
         <!--
         <excludes>
            <exclude>**/webapps/docs/**</exclude>
            <exclude>**/webapps/examples/**</exclude>
            <exclude>**/webapps/host-manager/**</exclude>
            <exclude>**/webapps/manager/**</exclude>
         </excludes>
         -->
      </fileSet>
      <fileSet>
         <directory>${project.build.directory}</directory>
         <includes>
            <include>${project.artifactId}.war</include>
         </includes>
         <outputDirectory>webapps</outputDirectory>
      </fileSet>
   </fileSets>
</assembly>

=====================================================
== File: src/main/resources/appconfig.properties
=====================================================
# Put here properties used by Java classes

=====================================================
== File: src/main/resources/jdbc.properties
=====================================================
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc\:mysql\://localhost\:3306/multisynth-studio
jdbc.username=multisynth-studio
jdbc.password=multisynth-studio

=====================================================
== File: src/main/resources/log4j.properties
=====================================================
# Global logging configuration
log4j.rootLogger=INFO,daily, console
#log4j.rootLogger=info, console

# Console output...
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%5p [%t] %c - %m%n


#log4j.logger.org.springframework.web=info
log4j.logger.org.springframework.web=debug


# daily Appender
log4j.appender.daily=org.apache.log4j.DailyRollingFileAppender
log4j.appender.daily.File=${catalina.home}${file.separator}logs${file.separator}multisynth-studio.log
log4j.appender.daily.DatePattern='.'yyyy-MM-dd
log4j.appender.daily.layout=org.apache.log4j.PatternLayout
log4j.appender.daily.layout.ConversionPattern=%d %-5p [%t] %c - %m%n

=====================================================
== File: src/main/resources/META-INF/persistence.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
   xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
   
   <persistence-unit name="persistenceUnit" transaction-type="RESOURCE_LOCAL">
   	  <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

      <class>com.sesygroup.choreography.web.business.model.User</class>
      <class>com.sesygroup.choreography.web.business.model.Role</class>

      <!-- FIXME: Register here your business model -->
      
      <exclude-unlisted-classes>true</exclude-unlisted-classes>
     
      <properties>
         <!-- When remove(entity) is called, reset the identifier value of  entity. so it's considered transient after removal -->
         <property name="hibernate.use_identifier_rollback" value="true" />
         <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
         <property name="hibernate.show_sql" value="true" />
         <!-- value="create" to build a new database on each run;
              value="update" to modify an existing database;
              value="create-drop" means the same as "create" but also drops tables when Hibernate closes;
              value="validate" makes no changes to the database -->
         <property name="hibernate.hbm2ddl.auto" value="validate"/>
         <property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.DefaultNamingStrategy"/>
         <property name="hibernate.connection.charSet" value="UTF-8"/>
         <!-- Uncomment the following two properties for JBoss only -->
         <!-- property name="hibernate.validator.apply_to_ddl" value="false" /-->
         <!-- property name="hibernate.validator.autoregister_listeners" value="false" /-->
      </properties>
   </persistence-unit>
</persistence>

=====================================================
== File: src/main/webapp/resources/application.css
=====================================================
/*===== START override default color =====*/
body {
    background: #252830;
}
.left_col {
    background: #252830;
}
.sidebar-footer {
    background: #252830;
}
.sidebar-footer a {
    background: #252830;
    color: #fff;
}
/*===== END override default color =====*/
/*===== START login =====*/

/* used for add new page in the login*/
.signin_form, .signup_form, .forgot_form {
   position: absolute;
   top: 0px;
   width: 100%
}

.signin_form {
   z-index: 22
}

.signup_form, .forgot_form {
   z-index: 21;
   opacity: 0;
   width: 100%
}

#signin:target ~ .login_wrapper .signin_form, #signup:target ~
   .login_wrapper .signup_form, #forgot:target ~ .login_wrapper .forgot_form
   {
   z-index: 22;
   animation-name: fadeInLeft;
   animation-delay: .1s
}

#signin:target ~ .login_wrapper .signup_form, #signup:target ~
   .login_wrapper .signin_form, #forgot:target ~ .login_wrapper .signin_form
   {
   animation-name: fadeOutLeft
}

/* fix parsley */
.login_content form ul.parsley-errors-list {

=====================================================
== File: src/main/webapp/resources/application.js
=====================================================
// used for load temp image, use always a function !!
function handleImageErrorLoad(image) {
   $(image).attr("src", $(image).attr("data_error_src"));
}

function showMessage (type, title, text) {
   new PNotify({
      title : title,
      text : text,
      type : type,
      animate : {
         animate : true,
         in_class : 'slideInDown',
         out_class : 'slideOutUp'
      },
      hide : true,
      styling : 'bootstrap3'
   });
}

// this function it is used to change the value of the checkbox that use switchery plugin programmatically
function fireCheckboxChanging(element) {
   if (typeof Event === 'function' || !document.fireEvent) {
       var event = document.createEvent('HTMLEvents');
       event.initEvent('change', true, true);
       element.dispatchEvent(event);
   } else {
      element.fireEvent('onchange');
   }
}

$(document).ready(function() {
   /* a message with PNotify is showed for 5 seconds */
   PNotify.prototype.options.delay ? (function() {
      PNotify.prototype.options.delay -= 500;
   }()) : false;

   /* fix select2 clear elements on form reset */
   $(".select2_multiple").select2({
   // maximumSelectionLength: 4,
   // placeholder: "With Max Selection limit 4",
   // allowClear: true
   }).on("change", function() {
      $(this).parsley().validate();
   }).closest("form").on("reset", function(ev) {
      var targetJQForm = $(ev.target);
      setTimeout((function() {
         $(this).find("select").trigger("change");
      }).bind(targetJQForm), 0);
   });

=====================================================
== File: src/main/webapp/resources/plugin_extension/countries-flags/countries-flags.css
=====================================================
.flag-AD,
.flag-AE,
.flag-AF,
.flag-AG,
.flag-AI,
.flag-AL,
.flag-AM,
.flag-AN,
.flag-AO,
.flag-AQ,
.flag-AR,
.flag-AS,
.flag-AT,
.flag-AU,
.flag-AW,
.flag-AX,
.flag-AZ,
.flag-BA,
.flag-BB,
.flag-BD,
.flag-BE,
.flag-BG,
.flag-BH,
.flag-BI,
.flag-BJ,
.flag-BL,
.flag-BM,
.flag-BN,
.flag-BO,
.flag-BR,
.flag-BS,
.flag-BT,
.flag-BW,
.flag-BY,
.flag-BZ,
.flag-CA,
.flag-CD,
.flag-CF,
.flag-CG,
.flag-CH,
.flag-CI,
.flag-CL,
.flag-CM,
.flag-CN,
.flag-CO,
.flag-CR,
.flag-CV,
.flag-CY,
.flag-CZ,
.flag-DJ,

=====================================================
== File: src/main/webapp/resources/plugin_extension/datatables/datatables-columnfilter-utility.js
=====================================================
function objectFindByKey(array, key, value) {
   for (var i = 0; i < array.length; i++) {
      if (array[i][key] === value) {
         return array[i];
      }
   }
   return null;
}

function getSortCol(array) {
   var iSortColValue = objectFindByKey(array, 'name', 'iSortCol_0').value;
   var mPropsValue = objectFindByKey(array, 'name', 'mDataProp_'+ iSortColValue).value;
   return mPropsValue;

}

function getSortDir(array) {
   var iSortDirValue = objectFindByKey(array, 'name', 'sSortDir_0').value;
   return iSortDirValue;
}

function addSearchFields(aoData) {
   var aSearchNames = "";
   var aSearchValues = "";
   var iColumns = objectFindByKey(aoData, 'name', 'iColumns').value;
   var searchColumns = 0;
   for (i = 0; i < iColumns; i++) {
      var searchName = objectFindByKey(aoData, 'name', 'mDataProp_' + i).value;
      var searchValue = objectFindByKey(aoData, 'name', 'sSearch_' + i).value;
      var searchable = objectFindByKey(aoData, 'name', 'bSearchable_' + i).value;
      // alert(searchName);
      // alert(searchValue);
      if (searchable) {
         searchColumns++;
         if (searchColumns > 1) {
            aSearchNames += "|" + searchName;
            aSearchValues += "|" + searchValue;
         } else {
            aSearchNames += searchName;
            aSearchValues += searchValue;
         }
      }
   }
   aoData.push({
      "name" : "aSearchNames",
      "value" : aSearchNames
   });
   aoData.push({
      "name" : "aSearchValues",
      "value" : aSearchValues

=====================================================
== File: src/main/webapp/resources/plugin_extension/datatables/datatables-columnfilter.css
=====================================================
tfoot {
  display: table-header-group;
}

table.table-bordered.dataTable tfoot tr th input {
   height: 30px;
   padding: 5px 10px;
   font-size: 12px;
   line-height: 1.5;
   font-weight: normal;
   margin-left: 0.5em;
   display: inline-block;
   width: auto;
   background-color: #fff;
   background-image: none;
   border: 1px solid #ccc;
   border-radius: 0;
   font-family: inherit;
}

table.table-bordered.dataTable tfoot tr th{
   text-align: right;
}

=====================================================
== File: src/main/webapp/resources/plugin_extension/datatables/datatables-columnfilter.js
=====================================================
/*
* File:        jquery.dataTables.columnFilter.js
* Version:     1.5.1.
* Author:      Jovan Popovic 
* 
* Copyright 2011-2012 Jovan Popovic, all rights reserved.
*
* This source file is free software, under either the GPL v2 license or a
* BSD style license, as supplied with this software.
* 
* This source file is distributed in the hope that it will be useful, but 
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
* or FITNESS FOR A PARTICULAR PURPOSE. 
* 
* Parameters:"
* @sPlaceHolder                 String      Place where inline filtering function should be placed ("tfoot", "thead:before", "thead:after"). Default is "tfoot"
* @sRangeSeparator              String      Separator that will be used when range values are sent to the server-side. Default value is "~".
* @sRangeFormat                 string      Default format of the From ... to ... range inputs. Default is From {from} to {to}
* @aoColumns                    Array       Array of the filter settings that will be applied on the columns
*/
(function ($) {


    $.fn.columnFilter = function (options) {

        var asInitVals, i, label, th;

        //var sTableId = "table";
        var sRangeFormat = "From {from} to {to}";
        //Array of the functions that will override sSearch_ parameters
        var afnSearch_ = new Array();
        var aiCustomSearch_Indexes = new Array();

        var oFunctionTimeout = null;

        var fnOnFiltered = function () { };

        function _fnGetColumnValues(oSettings, iColumn, bUnique, bFiltered, bIgnoreEmpty) {
            ///<summary>
            ///Return values in the column
            ///</summary>
            ///<param name="oSettings" type="Object">DataTables settings</param>
            ///<param name="iColumn" type="int">Id of the column</param>
            ///<param name="bUnique" type="bool">Return only distinct values</param>
            ///<param name="bFiltered" type="bool">Return values only from the filtered rows</param>
            ///<param name="bIgnoreEmpty" type="bool">Ignore empty cells</param>

            // check that we have a column id
            if (typeof iColumn == "undefined") return new Array();


=====================================================
== File: src/main/webapp/resources/plugin_extension/datatables/i18n/datatables-it.properties
=====================================================
{
    "sEmptyTable":     "Nessun dato presente nella tabella",
    "sInfo":           "Vista da _START_ a _END_ di _TOTAL_ elementi",
    "sInfoEmpty":      "Vista da 0 a 0 di 0 elementi",
    "sInfoFiltered":   "(filtrati da _MAX_ elementi totali)",
    "sInfoPostFix":    "",
    "sInfoThousands":  ",",
    "sLengthMenu":     "Visualizza _MENU_ elementi",
    "sLoadingRecords": "Caricamento...",
    "sProcessing":     "Elaborazione...",
    "sSearch":         "Cerca:",
    "sZeroRecords":    "La ricerca non ha portato alcun risultato.",
    "oPaginate": {
        "sFirst":      "Inizio",
        "sPrevious":   "Precedente",
        "sNext":       "Successivo",
        "sLast":       "Fine"
    },
    "oAria": {
        "sSortAscending":  ": attiva per ordinare la colonna in ordine crescente",
        "sSortDescending": ": attiva per ordinare la colonna in ordine decrescente"
    }
}

=====================================================
== File: src/main/webapp/resources/plugin_extension/parsleyjs/i18n/en.js
=====================================================
// This is included with the Parsley library itself,
// thus there is no use in adding it to your project.
Parsley.addMessages('en', {
  defaultMessage: "This value seems to be invalid.",
  type: {
    email:        "This value should be a valid email.",
    url:          "This value should be a valid url.",
    number:       "This value should be a valid number.",
    integer:      "This value should be a valid integer.",
    digits:       "This value should be digits.",
    alphanum:     "This value should be alphanumeric."
  },
  notblank:       "This value should not be blank.",
  required:       "This value is required.",
  pattern:        "This value seems to be invalid.",
  min:            "This value should be greater than or equal to %s.",
  max:            "This value should be lower than or equal to %s.",
  range:          "This value should be between %s and %s.",
  minlength:      "This value is too short. It should have %s characters or more.",
  maxlength:      "This value is too long. It should have %s characters or fewer.",
  length:         "This value length is invalid. It should be between %s and %s characters long.",
  mincheck:       "You must select at least %s choices.",
  maxcheck:       "You must select %s choices or fewer.",
  check:          "You must select between %s and %s choices.",
  equalto:        "This value should be the same.",
  participant_exists: "Participant name already exists.",
  state_exists:       "State name already exists."
});

Parsley.setLocale('en');

=====================================================
== File: src/main/webapp/resources/plugin_extension/parsleyjs/i18n/it.js
=====================================================
Parsley.addMessages('it', {
  defaultMessage: "Questo valore sembra essere non valido.",
  type: {
    email:        "Questo valore deve essere un indirizzo email valido.",
    url:          "Questo valore deve essere un URL valido.",
    number:       "Questo valore deve essere un numero valido.",
    integer:      "Questo valore deve essere un numero valido.",
    digits:       "Questo valore deve essere di tipo numerico.",
    alphanum:     "Questo valore deve essere di tipo alfanumerico."
  },
  notblank:       "Questo valore non deve essere vuoto.",
  required:       "Questo valore &egrave; richiesto.",
  pattern:        "Questo valore non &egrave; corretto.",
  min:            "Questo valore deve essere maggiore di %s.",
  max:            "Questo valore deve essere minore di %s.",
  range:          "Questo valore deve essere compreso tra %s e %s.",
  minlength:      "Questo valore &egrave; troppo corto. La lunghezza minima &egrave; di %s caratteri.",
  maxlength:      "Questo valore &egrave; troppo lungo. La lunghezza massima &egrave; di %s caratteri.",
  length:         "La lunghezza di questo valore deve essere compresa fra %s e %s caratteri.",
  mincheck:       "Devi scegliere almeno %s opzioni.",
  maxcheck:       "Devi scegliere al pi&ugrave; %s opzioni.",
  check:          "Devi scegliere tra %s e %s opzioni.",
  equalto:        "Questo valore deve essere identico.",
  participant_exists: "Nome partecipante gi&agrave; esistente.",
  state_exists:       "Nome stato gi&agrave; esistente."
});

Parsley.setLocale('it');

=====================================================
== File: src/main/webapp/resources/plugin_extension/parsleyjs/parsley-extra.js
=====================================================
/* Fixed it by adding a parsley validate call on the select fields based on select2 event 'select2:select' */
   window.Parsley.on('form:validated', function(){
      $('select').on('change', function(e) {
          $(this).parsley().validate();
      });
  });
  
   window.Parsley.on('field:ajaxoptions', function(){
     this.$element.addClass('show-spinner')
  });
   
   window.Parsley.addAsyncValidator('remote-validator-username', function (xhr) {
      this.$element.removeClass('show-spinner')
      if ($.parseJSON(xhr.responseText).state === 'ERROR') {
          return false;
      } else {
          return true;
      }
  },'', {"dataType": "application/json"});
   
   
   window.Parsley.addAsyncValidator('remote-validator-email', function (xhr) {
      this.$element.removeClass('show-spinner')
      if ($.parseJSON(xhr.responseText).state === 'ERROR') {
          return false;
      } else {
          return true;
      }
  },'', {"dataType": "application/json"});
   
   
   // force reset parsley on form reset
   $("form").on("reset",function(ev){
      var targetJQForm = $(ev.target);
      setTimeout((function(){
         $(this).parsley().reset();
      }).bind(targetJQForm),0);
   });

=====================================================
== File: src/main/webapp/resources/plugin_extension/visjs/i18n/vis.locales.js
=====================================================
var visjs_locales = {
  en: {
    edit: 'Edit',
    del: 'Delete selected',
    back: 'Back',
    addNode: 'Add Node',
    addEdge: 'Add Edge',
    editNode: 'Edit Node',
    editEdge: 'Edit Edge',
    addDescription: 'Click in an empty space to place a new node.',
    edgeDescription: 'Click on a node and drag the edge to another node to connect them.',
    editEdgeDescription: 'Click on the control points and drag them to a node to connect to it.',
    createEdgeError: 'Cannot link edges from/to a cluster.',
    deleteClusterError: 'Clusters cannot be deleted.',
    editClusterError: 'Clusters cannot be edited.',
    sourceNode: 'Source state',
    sinkNode: 'Final state',
    genericNode: 'Generic state',
    internalAction: 'Internal action',
    sendAction: 'Send action',
    receiveAction: 'Receive action',
    asynchSendAction: 'Asynchronous send action',
    asynchReceiveAction: 'Asynchronous receive action',
    synchSendAction: 'Synchronous send action',
    synchReceiveAction: 'Synchronous receive action',
    asynchReceiveActionAndMessageConsumption: 'Asynchronous receive action and message consumption',
    synchSendReceiveActionAndMessageConsumption: 'Synchronous send-receive action and message consumption'
  },
  it: {
     edit: 'Modifica',
     del: 'Cancella elemento selezionato',
     back: 'Indietro',
     addNode: 'Aggiungi stato',
     addEdge: 'Aggiungi transizione',
     editNode: 'Modifica stato',
     editEdge: 'Modifica transizione',
     addDescription: 'Clicca per aggiungere un nuovo stato.',
     edgeDescription: "Clicca su uno stato e trascina su un'altro stato per aggiungere una transizione.",
     editEdgeDescription: 'Trascina il punto di controllo su uno stato per cambiare la transizione.',
     createEdgeError: 'Impossibile creare una transizione da o verso un cluster.',
     deleteClusterError: 'Il partecipante non può essere eliminato.',
     editClusterError: 'Il partecipante non può essere modificato.',
     sourceNode: 'Stato di origine',
     sinkNode: 'Stato finale',
     genericNode: 'Stato generico',
     internalAction: 'Azione interna',
     sendAction: 'Azione di invio',
     receiveAction: 'Azione di ricezione',
     asynchSendAction: 'Azione di invio asincrona',
     asynchReceiveAction: 'Azione di ricezione asincrona',

=====================================================
== File: src/main/webapp/resources/plugin_extension/visjs/vis-network.min.css
=====================================================
.vis .overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10}.vis-active{box-shadow:0 0 10px #86d5f8}.vis [class*=span]{min-height:0;width:auto}div.vis-configuration{position:relative;display:block;float:left;font-size:12px}div.vis-configuration-wrapper{display:block;width:700px}div.vis-configuration-wrapper::after{clear:both;content:"";display:block}div.vis-configuration.vis-config-option-container{display:block;width:495px;background-color:#fff;border:2px solid #f7f8fa;border-radius:4px;margin-top:20px;left:10px;padding-left:5px}div.vis-configuration.vis-config-button{display:block;width:495px;height:25px;vertical-align:middle;line-height:25px;background-color:#f7f8fa;border:2px solid #ceced0;border-radius:4px;margin-top:20px;left:10px;padding-left:5px;cursor:pointer;margin-bottom:30px}div.vis-configuration.vis-config-button.hover{background-color:#4588e6;border:2px solid #214373;color:#fff}div.vis-configuration.vis-config-item{display:block;float:left;width:495px;height:25px;vertical-align:middle;line-height:25px}div.vis-configuration.vis-config-item.vis-config-s2{left:10px;background-color:#f7f8fa;padding-left:5px;border-radius:3px}div.vis-configuration.vis-config-item.vis-config-s3{left:20px;background-color:#e4e9f0;padding-left:5px;border-radius:3px}div.vis-configuration.vis-config-item.vis-config-s4{left:30px;background-color:#cfd8e6;padding-left:5px;border-radius:3px}div.vis-configuration.vis-config-header{font-size:18px;font-weight:700}div.vis-configuration.vis-config-label{width:120px;height:25px;line-height:25px}div.vis-configuration.vis-config-label.vis-config-s3{width:110px}div.vis-configuration.vis-config-label.vis-config-s4{width:100px}div.vis-configuration.vis-config-colorBlock{top:1px;width:30px;height:19px;border:1px solid #444;border-radius:2px;padding:0;margin:0;cursor:pointer}input.vis-configuration.vis-config-checkbox{left:-5px}input.vis-configuration.vis-config-rangeinput{position:relative;top:-5px;width:60px;padding:1px;margin:0;pointer-events:none}input.vis-configuration.vis-config-range{-webkit-appearance:none;border:0 solid #fff;background-color:rgba(0,0,0,0);width:300px;height:20px}input.vis-configuration.vis-config-range::-webkit-slider-runnable-track{width:300px;height:5px;background:#dedede;background:-moz-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#dedede),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-o-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-ms-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:linear-gradient(to bottom,#dedede 0,#c8c8c8 99%);border:1px solid #999;box-shadow:#aaa 0 0 3px 0;border-radius:3px}input.vis-configuration.vis-config-range::-webkit-slider-thumb{-webkit-appearance:none;border:1px solid #14334b;height:17px;width:17px;border-radius:50%;background:#3876c2;background:-moz-linear-gradient(top,#3876c2 0,#385380 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#3876c2),color-stop(100%,#385380));background:-webkit-linear-gradient(top,#3876c2 0,#385380 100%);background:-o-linear-gradient(top,#3876c2 0,#385380 100%);background:-ms-linear-gradient(top,#3876c2 0,#385380 100%);background:linear-gradient(to bottom,#3876c2 0,#385380 100%);box-shadow:#111927 0 0 1px 0;margin-top:-7px}input.vis-configuration.vis-config-range:focus{outline:0}input.vis-configuration.vis-config-range:focus::-webkit-slider-runnable-track{background:#9d9d9d;background:-moz-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#9d9d9d),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:-o-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:-ms-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:linear-gradient(to bottom,#9d9d9d 0,#c8c8c8 99%)}input.vis-configuration.vis-config-range::-moz-range-track{width:300px;height:10px;background:#dedede;background:-moz-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#dedede),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-o-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-ms-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:linear-gradient(to bottom,#dedede 0,#c8c8c8 99%);border:1px solid #999;box-shadow:#aaa 0 0 3px 0;border-radius:3px}input.vis-configuration.vis-config-range::-moz-range-thumb{border:none;height:16px;width:16px;border-radius:50%;background:#385380}input.vis-configuration.vis-config-range:-moz-focusring{outline:1px solid #fff;outline-offset:-1px}input.vis-configuration.vis-config-range::-ms-track{width:300px;height:5px;background:0 0;border-color:transparent;border-width:6px 0;color:transparent}input.vis-configuration.vis-config-range::-ms-fill-lower{background:#777;border-radius:10px}input.vis-configuration.vis-config-range::-ms-fill-upper{background:#ddd;border-radius:10px}input.vis-configuration.vis-config-range::-ms-thumb{border:none;height:16px;width:16px;border-radius:50%;background:#385380}input.vis-configuration.vis-config-range:focus::-ms-fill-lower{background:#888}input.vis-configuration.vis-config-range:focus::-ms-fill-upper{background:#ccc}.vis-configuration-popup{position:absolute;background:rgba(57,76,89,.85);border:2px solid #f2faff;line-height:30px;height:30px;width:150px;text-align:center;color:#fff;font-size:14px;border-radius:4px;-webkit-transition:opacity .3s ease-in-out;-moz-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out}.vis-configuration-popup:after,.vis-configuration-popup:before{left:100%;top:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.vis-configuration-popup:after{border-color:rgba(136,183,213,0);border-left-color:rgba(57,76,89,.85);border-width:8px;margin-top:-8px}.vis-configuration-popup:before{border-color:rgba(194,225,245,0);border-left-color:#f2faff;border-width:12px;margin-top:-12px}div.vis-tooltip{position:absolute;visibility:hidden;padding:5px;white-space:nowrap;font-family:verdana;font-size:14px;color:#000;background-color:#f5f4ed;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;border:1px solid #808074;box-shadow:3px 3px 10px rgba(0,0,0,.2);pointer-events:none;z-index:5}div.vis-color-picker{position:absolute;top:0;left:30px;margin-top:-140px;margin-left:30px;width:310px;height:444px;z-index:1;padding:10px;border-radius:15px;background-color:#fff;display:none;box-shadow:rgba(0,0,0,.5) 0 0 10px 0}div.vis-color-picker div.vis-arrow{position:absolute;top:147px;left:5px}div.vis-color-picker div.vis-arrow::after,div.vis-color-picker div.vis-arrow::before{right:100%;top:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}div.vis-color-picker div.vis-arrow:after{border-color:rgba(255,255,255,0);border-right-color:#fff;border-width:30px;margin-top:-30px}div.vis-color-picker div.vis-color{position:absolute;width:289px;height:289px;cursor:pointer}div.vis-color-picker div.vis-brightness{position:absolute;top:313px}div.vis-color-picker div.vis-opacity{position:absolute;top:350px}div.vis-color-picker div.vis-selector{position:absolute;top:137px;left:137px;width:15px;height:15px;border-radius:15px;border:1px solid #fff;background:#4c4c4c;background:-moz-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#4c4c4c),color-stop(12%,#595959),color-stop(25%,#666),color-stop(39%,#474747),color-stop(50%,#2c2c2c),color-stop(51%,#000),color-stop(60%,#111),color-stop(76%,#2b2b2b),color-stop(91%,#1c1c1c),color-stop(100%,#131313));background:-webkit-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:-o-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:-ms-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:linear-gradient(to bottom,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%)}div.vis-color-picker div.vis-new-color{position:absolute;width:140px;height:20px;border:1px solid rgba(0,0,0,.1);border-radius:5px;top:380px;left:159px;text-align:right;padding-right:2px;font-size:10px;color:rgba(0,0,0,.4);vertical-align:middle;line-height:20px}div.vis-color-picker div.vis-initial-color{position:absolute;width:140px;height:20px;border:1px solid rgba(0,0,0,.1);border-radius:5px;top:380px;left:10px;text-align:left;padding-left:2px;font-size:10px;color:rgba(0,0,0,.4);vertical-align:middle;line-height:20px}div.vis-color-picker div.vis-label{position:absolute;width:300px;left:10px}div.vis-color-picker div.vis-label.vis-brightness{top:300px}div.vis-color-picker div.vis-label.vis-opacity{top:338px}div.vis-color-picker div.vis-button{position:absolute;width:68px;height:25px;border-radius:10px;vertical-align:middle;text-align:center;line-height:25px;top:410px;border:2px solid #d9d9d9;background-color:#f7f7f7;cursor:pointer}div.vis-color-picker div.vis-button.vis-cancel{left:5px}div.vis-color-picker div.vis-button.vis-load{left:82px}div.vis-color-picker div.vis-button.vis-apply{left:159px}div.vis-color-picker div.vis-button.vis-save{left:236px}div.vis-color-picker input.vis-range{width:290px;height:20px}div.vis-network div.vis-manipulation{box-sizing:content-box;border-width:0;border-bottom:1px;border-style:solid;border-color:#d6d9d8;background:#fff;background:-moz-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#fff),color-stop(48%,#fcfcfc),color-stop(50%,#fafafa),color-stop(100%,#fcfcfc));background:-webkit-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:-o-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:-ms-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:linear-gradient(to bottom,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);padding-top:4px;position:absolute;left:0;top:0;width:100%;height:28px}div.vis-network div.vis-edit-mode{position:absolute;left:0;top:5px;height:30px}div.vis-network div.vis-close{position:absolute;right:0;top:0;width:30px;height:30px;background-position:20px 3px;background-repeat:no-repeat;background-image:url(img/network/cross.png);cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div.vis-network div.vis-close:hover{opacity:.6}div.vis-network div.vis-edit-mode div.vis-button,div.vis-network div.vis-manipulation div.vis-button{float:left;font-family:verdana;font-size:12px;-moz-border-radius:15px;border-radius:15px;display:inline-block;background-position:0 0;background-repeat:no-repeat;height:24px;margin-left:10px;cursor:pointer;padding:0 8px 0 8px;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div.vis-network div.vis-manipulation div.vis-button:hover{box-shadow:1px 1px 8px rgba(0,0,0,.2)}div.vis-network div.vis-manipulation div.vis-button:active{box-shadow:1px 1px 8px rgba(0,0,0,.5)}div.vis-network div.vis-manipulation div.vis-button.vis-back{background-image:url(img/network/backIcon.png)}div.vis-network div.vis-manipulation div.vis-button.vis-none:hover{box-shadow:1px 1px 8px transparent;cursor:default}div.vis-network div.vis-manipulation div.vis-button.vis-none:active{box-shadow:1px 1px 8px transparent}div.vis-network div.vis-manipulation div.vis-button.vis-none{padding:0}div.vis-network div.vis-manipulation div.notification{margin:2px;font-weight:700}div.vis-network div.vis-manipulation div.vis-button.vis-add{background-image:url(img/network/addNodeIcon.png)}div.vis-network div.vis-edit-mode div.vis-button.vis-edit,div.vis-network div.vis-manipulation div.vis-button.vis-edit{background-image:url(img/network/editIcon.png)}div.vis-network div.vis-edit-mode div.vis-button.vis-edit.vis-edit-mode{background-color:#fcfcfc;border:1px solid #ccc}div.vis-network div.vis-manipulation div.vis-button.vis-connect{background-image:url(img/network/connectIcon.png)}div.vis-network div.vis-manipulation div.vis-button.vis-delete{background-image:url(img/network/deleteIcon.png)}div.vis-network div.vis-edit-mode div.vis-label,div.vis-network div.vis-manipulation div.vis-label{margin:0 0 0 23px;line-height:25px}div.vis-network div.vis-manipulation div.vis-separator-line{float:left;display:inline-block;width:1px;height:21px;background-color:#bdbdbd;margin:0 7px 0 15px}div.vis-network div.vis-navigation div.vis-button{width:34px;height:34px;-moz-border-radius:17px;border-radius:17px;position:absolute;display:inline-block;background-position:2px 2px;background-repeat:no-repeat;cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div.vis-network div.vis-navigation div.vis-button:hover{box-shadow:0 0 3px 3px rgba(56,207,21,.3)}div.vis-network div.vis-navigation div.vis-button:active{box-shadow:0 0 1px 3px rgba(56,207,21,.95)}div.vis-network div.vis-navigation div.vis-button.vis-up{background-image:url(img/network/upArrow.png);bottom:50px;left:55px}div.vis-network div.vis-navigation div.vis-button.vis-down{background-image:url(img/network/downArrow.png);bottom:10px;left:55px}div.vis-network div.vis-navigation div.vis-button.vis-left{background-image:url(img/network/leftArrow.png);bottom:10px;left:15px}div.vis-network div.vis-navigation div.vis-button.vis-right{background-image:url(img/network/rightArrow.png);bottom:10px;left:95px}div.vis-network div.vis-navigation div.vis-button.vis-zoomIn{background-image:url(img/network/plus.png);bottom:10px;right:15px}div.vis-network div.vis-navigation div.vis-button.vis-zoomOut{background-image:url(img/network/minus.png);bottom:10px;right:55px}div.vis-network div.vis-navigation div.vis-button.vis-zoomExtends{background-image:url(img/network/zoomExtends.png);bottom:50px;right:15px}

=====================================================
== File: src/main/webapp/resources/plugin_extension/visjs/vis-timeline-graph2d.min.css
=====================================================
.vis .overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10}.vis-active{box-shadow:0 0 10px #86d5f8}.vis [class*=span]{min-height:0;width:auto}div.vis-configuration{position:relative;display:block;float:left;font-size:12px}div.vis-configuration-wrapper{display:block;width:700px}div.vis-configuration-wrapper::after{clear:both;content:"";display:block}div.vis-configuration.vis-config-option-container{display:block;width:495px;background-color:#fff;border:2px solid #f7f8fa;border-radius:4px;margin-top:20px;left:10px;padding-left:5px}div.vis-configuration.vis-config-button{display:block;width:495px;height:25px;vertical-align:middle;line-height:25px;background-color:#f7f8fa;border:2px solid #ceced0;border-radius:4px;margin-top:20px;left:10px;padding-left:5px;cursor:pointer;margin-bottom:30px}div.vis-configuration.vis-config-button.hover{background-color:#4588e6;border:2px solid #214373;color:#fff}div.vis-configuration.vis-config-item{display:block;float:left;width:495px;height:25px;vertical-align:middle;line-height:25px}div.vis-configuration.vis-config-item.vis-config-s2{left:10px;background-color:#f7f8fa;padding-left:5px;border-radius:3px}div.vis-configuration.vis-config-item.vis-config-s3{left:20px;background-color:#e4e9f0;padding-left:5px;border-radius:3px}div.vis-configuration.vis-config-item.vis-config-s4{left:30px;background-color:#cfd8e6;padding-left:5px;border-radius:3px}div.vis-configuration.vis-config-header{font-size:18px;font-weight:700}div.vis-configuration.vis-config-label{width:120px;height:25px;line-height:25px}div.vis-configuration.vis-config-label.vis-config-s3{width:110px}div.vis-configuration.vis-config-label.vis-config-s4{width:100px}div.vis-configuration.vis-config-colorBlock{top:1px;width:30px;height:19px;border:1px solid #444;border-radius:2px;padding:0;margin:0;cursor:pointer}input.vis-configuration.vis-config-checkbox{left:-5px}input.vis-configuration.vis-config-rangeinput{position:relative;top:-5px;width:60px;padding:1px;margin:0;pointer-events:none}input.vis-configuration.vis-config-range{-webkit-appearance:none;border:0 solid #fff;background-color:rgba(0,0,0,0);width:300px;height:20px}input.vis-configuration.vis-config-range::-webkit-slider-runnable-track{width:300px;height:5px;background:#dedede;background:-moz-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#dedede),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-o-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-ms-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:linear-gradient(to bottom,#dedede 0,#c8c8c8 99%);border:1px solid #999;box-shadow:#aaa 0 0 3px 0;border-radius:3px}input.vis-configuration.vis-config-range::-webkit-slider-thumb{-webkit-appearance:none;border:1px solid #14334b;height:17px;width:17px;border-radius:50%;background:#3876c2;background:-moz-linear-gradient(top,#3876c2 0,#385380 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#3876c2),color-stop(100%,#385380));background:-webkit-linear-gradient(top,#3876c2 0,#385380 100%);background:-o-linear-gradient(top,#3876c2 0,#385380 100%);background:-ms-linear-gradient(top,#3876c2 0,#385380 100%);background:linear-gradient(to bottom,#3876c2 0,#385380 100%);box-shadow:#111927 0 0 1px 0;margin-top:-7px}input.vis-configuration.vis-config-range:focus{outline:0}input.vis-configuration.vis-config-range:focus::-webkit-slider-runnable-track{background:#9d9d9d;background:-moz-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#9d9d9d),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:-o-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:-ms-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:linear-gradient(to bottom,#9d9d9d 0,#c8c8c8 99%)}input.vis-configuration.vis-config-range::-moz-range-track{width:300px;height:10px;background:#dedede;background:-moz-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#dedede),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-o-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-ms-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:linear-gradient(to bottom,#dedede 0,#c8c8c8 99%);border:1px solid #999;box-shadow:#aaa 0 0 3px 0;border-radius:3px}input.vis-configuration.vis-config-range::-moz-range-thumb{border:none;height:16px;width:16px;border-radius:50%;background:#385380}input.vis-configuration.vis-config-range:-moz-focusring{outline:1px solid #fff;outline-offset:-1px}input.vis-configuration.vis-config-range::-ms-track{width:300px;height:5px;background:0 0;border-color:transparent;border-width:6px 0;color:transparent}input.vis-configuration.vis-config-range::-ms-fill-lower{background:#777;border-radius:10px}input.vis-configuration.vis-config-range::-ms-fill-upper{background:#ddd;border-radius:10px}input.vis-configuration.vis-config-range::-ms-thumb{border:none;height:16px;width:16px;border-radius:50%;background:#385380}input.vis-configuration.vis-config-range:focus::-ms-fill-lower{background:#888}input.vis-configuration.vis-config-range:focus::-ms-fill-upper{background:#ccc}.vis-configuration-popup{position:absolute;background:rgba(57,76,89,.85);border:2px solid #f2faff;line-height:30px;height:30px;width:150px;text-align:center;color:#fff;font-size:14px;border-radius:4px;-webkit-transition:opacity .3s ease-in-out;-moz-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out}.vis-configuration-popup:after,.vis-configuration-popup:before{left:100%;top:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.vis-configuration-popup:after{border-color:rgba(136,183,213,0);border-left-color:rgba(57,76,89,.85);border-width:8px;margin-top:-8px}.vis-configuration-popup:before{border-color:rgba(194,225,245,0);border-left-color:#f2faff;border-width:12px;margin-top:-12px}div.vis-tooltip{position:absolute;visibility:hidden;padding:5px;white-space:nowrap;font-family:verdana;font-size:14px;color:#000;background-color:#f5f4ed;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;border:1px solid #808074;box-shadow:3px 3px 10px rgba(0,0,0,.2);pointer-events:none;z-index:5}.vis-current-time{background-color:#ff7f6e;width:2px;z-index:1;pointer-events:none}.vis-rolling-mode-btn{height:40px;width:40px;position:absolute;top:7px;right:20px;border-radius:50%;font-size:28px;cursor:pointer;opacity:.8;color:#fff;font-weight:700;text-align:center;background:#3876c2}.vis-rolling-mode-btn:before{content:"\26F6"}.vis-rolling-mode-btn:hover{opacity:1}.vis-custom-time{background-color:#6e94ff;width:2px;cursor:move;z-index:1}.vis-panel.vis-background.vis-horizontal .vis-grid.vis-horizontal{position:absolute;width:100%;height:0;border-bottom:1px solid}.vis-panel.vis-background.vis-horizontal .vis-grid.vis-minor{border-color:#e5e5e5}.vis-panel.vis-background.vis-horizontal .vis-grid.vis-major{border-color:#bfbfbf}.vis-data-axis .vis-y-axis.vis-major{width:100%;position:absolute;color:#4d4d4d;white-space:nowrap}.vis-data-axis .vis-y-axis.vis-major.vis-measure{padding:0;margin:0;border:0;visibility:hidden;width:auto}.vis-data-axis .vis-y-axis.vis-minor{position:absolute;width:100%;color:#bebebe;white-space:nowrap}.vis-data-axis .vis-y-axis.vis-minor.vis-measure{padding:0;margin:0;border:0;visibility:hidden;width:auto}.vis-data-axis .vis-y-axis.vis-title{position:absolute;color:#4d4d4d;white-space:nowrap;bottom:20px;text-align:center}.vis-data-axis .vis-y-axis.vis-title.vis-measure{padding:0;margin:0;visibility:hidden;width:auto}.vis-data-axis .vis-y-axis.vis-title.vis-left{bottom:0;-webkit-transform-origin:left top;-moz-transform-origin:left top;-ms-transform-origin:left top;-o-transform-origin:left top;transform-origin:left bottom;-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}.vis-data-axis .vis-y-axis.vis-title.vis-right{bottom:0;-webkit-transform-origin:right bottom;-moz-transform-origin:right bottom;-ms-transform-origin:right bottom;-o-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.vis-legend{background-color:rgba(247,252,255,.65);padding:5px;border:1px solid #b3b3b3;box-shadow:2px 2px 10px rgba(154,154,154,.55)}.vis-legend-text{white-space:nowrap;display:inline-block}.vis-item{position:absolute;color:#1a1a1a;border-color:#97b0f8;border-width:1px;background-color:#d5ddf6;display:inline-block;z-index:1}.vis-item.vis-selected{border-color:#ffc200;background-color:#fff785;z-index:2}.vis-editable.vis-selected{cursor:move}.vis-item.vis-point.vis-selected{background-color:#fff785}.vis-item.vis-box{text-align:center;border-style:solid;border-radius:2px}.vis-item.vis-point{background:0 0}.vis-item.vis-dot{position:absolute;padding:0;border-width:4px;border-style:solid;border-radius:4px}.vis-item.vis-range{border-style:solid;border-radius:2px;box-sizing:border-box}.vis-item.vis-background{border:none;background-color:rgba(213,221,246,.4);box-sizing:border-box;padding:0;margin:0}.vis-item .vis-item-overflow{position:relative;width:100%;height:100%;padding:0;margin:0;overflow:hidden}.vis-item-visible-frame{white-space:nowrap}.vis-item.vis-range .vis-item-content{position:relative;display:inline-block}.vis-item.vis-background .vis-item-content{position:absolute;display:inline-block}.vis-item.vis-line{padding:0;position:absolute;width:0;border-left-width:1px;border-left-style:solid}.vis-item .vis-item-content{white-space:nowrap;box-sizing:border-box;padding:5px}.vis-item .vis-onUpdateTime-tooltip{position:absolute;background:#4f81bd;color:#fff;width:200px;text-align:center;white-space:nowrap;padding:5px;border-radius:1px;transition:.4s;-o-transition:.4s;-moz-transition:.4s;-webkit-transition:.4s}.vis-item .vis-delete,.vis-item .vis-delete-rtl{position:absolute;top:0;width:24px;height:24px;box-sizing:border-box;padding:0 5px;cursor:pointer;-webkit-transition:background .2s linear;-moz-transition:background .2s linear;-ms-transition:background .2s linear;-o-transition:background .2s linear;transition:background .2s linear}.vis-item .vis-delete{right:-24px}.vis-item .vis-delete-rtl{left:-24px}.vis-item .vis-delete-rtl:after,.vis-item .vis-delete:after{content:"\00D7";color:red;font-family:arial,sans-serif;font-size:22px;font-weight:700;-webkit-transition:color .2s linear;-moz-transition:color .2s linear;-ms-transition:color .2s linear;-o-transition:color .2s linear;transition:color .2s linear}.vis-item .vis-delete-rtl:hover,.vis-item .vis-delete:hover{background:red}.vis-item .vis-delete-rtl:hover:after,.vis-item .vis-delete:hover:after{color:#fff}.vis-item .vis-drag-center{position:absolute;width:100%;height:100%;top:0;left:0;cursor:move}.vis-item.vis-range .vis-drag-left{position:absolute;width:24px;max-width:20%;min-width:2px;height:100%;top:0;left:-4px;cursor:w-resize}.vis-item.vis-range .vis-drag-right{position:absolute;width:24px;max-width:20%;min-width:2px;height:100%;top:0;right:-4px;cursor:e-resize}.vis-range.vis-item.vis-readonly .vis-drag-left,.vis-range.vis-item.vis-readonly .vis-drag-right{cursor:auto}.vis-itemset{position:relative;padding:0;margin:0;box-sizing:border-box}.vis-itemset .vis-background,.vis-itemset .vis-foreground{position:absolute;width:100%;height:100%;overflow:visible}.vis-axis{position:absolute;width:100%;height:0;left:0;z-index:1}.vis-foreground .vis-group{position:relative;box-sizing:border-box;border-bottom:1px solid #bfbfbf}.vis-foreground .vis-group:last-child{border-bottom:none}.vis-nesting-group{cursor:pointer}.vis-nested-group{background:#f5f5f5}.vis-label.vis-nesting-group.expanded:before{content:"\25BC"}.vis-label.vis-nesting-group.collapsed-rtl:before{content:"\25C0"}.vis-label.vis-nesting-group.collapsed:before{content:"\25B6"}.vis-overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10}.vis-labelset{position:relative;overflow:hidden;box-sizing:border-box}.vis-labelset .vis-label{position:relative;left:0;top:0;width:100%;color:#4d4d4d;box-sizing:border-box}.vis-labelset .vis-label{border-bottom:1px solid #bfbfbf}.vis-labelset .vis-label.draggable{cursor:pointer}.vis-labelset .vis-label:last-child{border-bottom:none}.vis-labelset .vis-label .vis-inner{display:inline-block;padding:5px}.vis-labelset .vis-label .vis-inner.vis-hidden{padding:0}.vis-panel{position:absolute;padding:0;margin:0;box-sizing:border-box}.vis-panel.vis-bottom,.vis-panel.vis-center,.vis-panel.vis-left,.vis-panel.vis-right,.vis-panel.vis-top{border:1px #bfbfbf}.vis-panel.vis-center,.vis-panel.vis-left,.vis-panel.vis-right{border-top-style:solid;border-bottom-style:solid;overflow:hidden}.vis-left.vis-panel.vis-vertical-scroll,.vis-right.vis-panel.vis-vertical-scroll{height:100%;overflow-x:hidden;overflow-y:scroll}.vis-left.vis-panel.vis-vertical-scroll{direction:rtl}.vis-left.vis-panel.vis-vertical-scroll .vis-content{direction:ltr}.vis-right.vis-panel.vis-vertical-scroll{direction:ltr}.vis-right.vis-panel.vis-vertical-scroll .vis-content{direction:rtl}.vis-panel.vis-bottom,.vis-panel.vis-center,.vis-panel.vis-top{border-left-style:solid;border-right-style:solid}.vis-background{overflow:hidden}.vis-panel>.vis-content{position:relative}.vis-panel .vis-shadow{position:absolute;width:100%;height:1px;box-shadow:0 0 10px rgba(0,0,0,.8)}.vis-panel .vis-shadow.vis-top{top:-1px;left:0}.vis-panel .vis-shadow.vis-bottom{bottom:-1px;left:0}.vis-graph-group0{fill:#4f81bd;fill-opacity:0;stroke-width:2px;stroke:#4f81bd}.vis-graph-group1{fill:#f79646;fill-opacity:0;stroke-width:2px;stroke:#f79646}.vis-graph-group2{fill:#8c51cf;fill-opacity:0;stroke-width:2px;stroke:#8c51cf}.vis-graph-group3{fill:#75c841;fill-opacity:0;stroke-width:2px;stroke:#75c841}.vis-graph-group4{fill:#ff0100;fill-opacity:0;stroke-width:2px;stroke:#ff0100}.vis-graph-group5{fill:#37d8e6;fill-opacity:0;stroke-width:2px;stroke:#37d8e6}.vis-graph-group6{fill:#042662;fill-opacity:0;stroke-width:2px;stroke:#042662}.vis-graph-group7{fill:#00ff26;fill-opacity:0;stroke-width:2px;stroke:#00ff26}.vis-graph-group8{fill:#f0f;fill-opacity:0;stroke-width:2px;stroke:#f0f}.vis-graph-group9{fill:#8f3938;fill-opacity:0;stroke-width:2px;stroke:#8f3938}.vis-timeline .vis-fill{fill-opacity:.1;stroke:none}.vis-timeline .vis-bar{fill-opacity:.5;stroke-width:1px}.vis-timeline .vis-point{stroke-width:2px;fill-opacity:1}.vis-timeline .vis-legend-background{stroke-width:1px;fill-opacity:.9;fill:#fff;stroke:#c2c2c2}.vis-timeline .vis-outline{stroke-width:1px;fill-opacity:1;fill:#fff;stroke:#e5e5e5}.vis-timeline .vis-icon-fill{fill-opacity:.3;stroke:none}.vis-time-axis{position:relative;overflow:hidden}.vis-time-axis.vis-foreground{top:0;left:0;width:100%}.vis-time-axis.vis-background{position:absolute;top:0;left:0;width:100%;height:100%}.vis-time-axis .vis-text{position:absolute;color:#4d4d4d;padding:3px;overflow:hidden;box-sizing:border-box;white-space:nowrap}.vis-time-axis .vis-text.vis-measure{position:absolute;padding-left:0;padding-right:0;margin-left:0;margin-right:0;visibility:hidden}.vis-time-axis .vis-grid.vis-vertical{position:absolute;border-left:1px solid}.vis-time-axis .vis-grid.vis-vertical-rtl{position:absolute;border-right:1px solid}.vis-time-axis .vis-grid.vis-minor{border-color:#e5e5e5}.vis-time-axis .vis-grid.vis-major{border-color:#bfbfbf}.vis-timeline{position:relative;border:1px solid #bfbfbf;overflow:hidden;padding:0;margin:0;box-sizing:border-box}

=====================================================
== File: src/main/webapp/resources/plugin_extension/visjs/vis.css
=====================================================
.vis .overlay {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;

  /* Must be displayed above for example selected Timeline items */
  z-index: 10;
}

.vis-active {
  box-shadow: 0 0 10px #86d5f8;
}

/* override some bootstrap styles screwing up the timelines css */

.vis [class*="span"] {
  min-height: 0;
  width: auto;
}

div.vis-configuration {
    position:relative;
    display:block;
    float:left;
    font-size:12px;
}

div.vis-configuration-wrapper {
    display:block;
    width:700px;
}

div.vis-configuration-wrapper::after {
  clear: both;
  content: "";
  display: block;
}

div.vis-configuration.vis-config-option-container{
    display:block;
    width:495px;
    background-color: #ffffff;
    border:2px solid #f7f8fa;
    border-radius:4px;
    margin-top:20px;
    left:10px;
    padding-left:5px;
}

=====================================================
== File: src/main/webapp/resources/plugin_extension/visjs/vis.js.map
=====================================================
{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap eca1787db4da1a54ed82","webpack:///./index.js","webpack:///./lib/util.js","webpack:///./~/babel-runtime/core-js/get-iterator.js","webpack:///./~/core-js/library/fn/get-iterator.js","webpack:///./~/core-js/library/modules/web.dom.iterable.js","webpack:///./~/core-js/library/modules/es6.array.iterator.js","webpack:///./~/core-js/library/modules/_add-to-unscopables.js","webpack:///./~/core-js/library/modules/_iter-step.js","webpack:///./~/core-js/library/modules/_iterators.js","webpack:///./~/core-js/library/modules/_to-iobject.js","webpack:///./~/core-js/library/modules/_iobject.js","webpack:///./~/core-js/library/modules/_cof.js","webpack:///./~/core-js/library/modules/_defined.js","webpack:///./~/core-js/library/modules/_iter-define.js","webpack:///./~/core-js/library/modules/_library.js","webpack:///./~/core-js/library/modules/_export.js","webpack:///./~/core-js/library/modules/_global.js","webpack:///./~/core-js/library/modules/_core.js","webpack:///./~/core-js/library/modules/_ctx.js","webpack:///./~/core-js/library/modules/_a-function.js","webpack:///./~/core-js/library/modules/_hide.js","webpack:///./~/core-js/library/modules/_object-dp.js","webpack:///./~/core-js/library/modules/_an-object.js","webpack:///./~/core-js/library/modules/_is-object.js","webpack:///./~/core-js/library/modules/_ie8-dom-define.js","webpack:///./~/core-js/library/modules/_descriptors.js","webpack:///./~/core-js/library/modules/_fails.js","webpack:///./~/core-js/library/modules/_dom-create.js","webpack:///./~/core-js/library/modules/_to-primitive.js","webpack:///./~/core-js/library/modules/_property-desc.js","webpack:///./~/core-js/library/modules/_redefine.js","webpack:///./~/core-js/library/modules/_has.js","webpack:///./~/core-js/library/modules/_iter-create.js","webpack:///./~/core-js/library/modules/_object-create.js","webpack:///./~/core-js/library/modules/_object-dps.js","webpack:///./~/core-js/library/modules/_object-keys.js","webpack:///./~/core-js/library/modules/_object-keys-internal.js","webpack:///./~/core-js/library/modules/_array-includes.js","webpack:///./~/core-js/library/modules/_to-length.js","webpack:///./~/core-js/library/modules/_to-integer.js","webpack:///./~/core-js/library/modules/_to-index.js","webpack:///./~/core-js/library/modules/_shared-key.js","webpack:///./~/core-js/library/modules/_shared.js","webpack:///./~/core-js/library/modules/_uid.js","webpack:///./~/core-js/library/modules/_enum-bug-keys.js","webpack:///./~/core-js/library/modules/_html.js","webpack:///./~/core-js/library/modules/_set-to-string-tag.js","webpack:///./~/core-js/library/modules/_wks.js","webpack:///./~/core-js/library/modules/_object-gpo.js","webpack:///./~/core-js/library/modules/_to-object.js","webpack:///./~/core-js/library/modules/es6.string.iterator.js","webpack:///./~/core-js/library/modules/_string-at.js","webpack:///./~/core-js/library/modules/core.get-iterator.js","webpack:///./~/core-js/library/modules/core.get-iterator-method.js","webpack:///./~/core-js/library/modules/_classof.js","webpack:///./~/babel-runtime/core-js/object/create.js","webpack:///./~/core-js/library/fn/object/create.js","webpack:///./~/core-js/library/modules/es6.object.create.js","webpack:///./~/babel-runtime/core-js/object/keys.js","webpack:///./~/core-js/library/fn/object/keys.js","webpack:///./~/core-js/library/modules/es6.object.keys.js","webpack:///./~/core-js/library/modules/_object-sap.js","webpack:///./~/babel-runtime/helpers/typeof.js","webpack:///./~/babel-runtime/core-js/symbol/iterator.js","webpack:///./~/core-js/library/fn/symbol/iterator.js","webpack:///./~/core-js/library/modules/_wks-ext.js","webpack:///./~/babel-runtime/core-js/symbol.js","webpack:///./~/core-js/library/fn/symbol/index.js","webpack:///./~/core-js/library/modules/es6.symbol.js","webpack:///./~/core-js/library/modules/_meta.js","webpack:///./~/core-js/library/modules/_wks-define.js","webpack:///./~/core-js/library/modules/_keyof.js","webpack:///./~/core-js/library/modules/_enum-keys.js","webpack:///./~/core-js/library/modules/_object-gops.js","webpack:///./~/core-js/library/modules/_object-pie.js","webpack:///./~/core-js/library/modules/_is-array.js","webpack:///./~/core-js/library/modules/_object-gopn-ext.js","webpack:///./~/core-js/library/modules/_object-gopn.js","webpack:///./~/core-js/library/modules/_object-gopd.js","webpack:///./~/core-js/library/modules/es7.symbol.async-iterator.js","webpack:///./~/core-js/library/modules/es7.symbol.observable.js","webpack:///./~/babel-runtime/core-js/json/stringify.js","webpack:///./~/core-js/library/fn/json/stringify.js","webpack:///./lib/module/moment.js","webpack:///./~/moment/moment.js","webpack:///(webpack)/buildin/module.js","webpack:///./~/moment/locale ^\\.\\/$^$","webpack:///./lib/module/uuid.js","webpack:///./index-graph3d.js","webpack:///./lib/DOMutil.js","webpack:///./lib/DataSet.js","webpack:///./lib/Queue.js","webpack:///./lib/DataView.js","webpack:///./lib/graph3d/Graph3d.js","webpack:///./~/emitter-component/index.js","webpack:///./lib/graph3d/Point3d.js","webpack:///./lib/graph3d/Point2d.js","webpack:///./lib/graph3d/Camera.js","webpack:///./~/babel-runtime/core-js/math/sign.js","webpack:///./~/core-js/library/fn/math/sign.js","webpack:///./~/core-js/library/modules/es6.math.sign.js","webpack:///./~/core-js/library/modules/_math-sign.js","webpack:///./lib/graph3d/Filter.js","webpack:///./lib/graph3d/Slider.js","webpack:///./lib/graph3d/StepNumber.js","webpack:///./lib/graph3d/Range.js","webpack:///./lib/graph3d/Settings.js","webpack:///./lib/module/hammer.js","webpack:///./~/propagating-hammerjs/propagating.js","webpack:///./~/hammerjs/hammer.js","webpack:///./~/keycharm/keycharm.js","webpack:///./index-timeline-graph2d.js","webpack:///./lib/timeline/Timeline.js","webpack:///./lib/shared/Configurator.js","webpack:///./~/babel-runtime/helpers/classCallCheck.js","webpack:///./~/babel-runtime/helpers/createClass.js","webpack:///./~/babel-runtime/core-js/object/define-property.js","webpack:///./~/core-js/library/fn/object/define-property.js","webpack:///./~/core-js/library/modules/es6.object.define-property.js","webpack:///./lib/shared/ColorPicker.js","webpack:///./lib/hammerUtil.js","webpack:///./lib/shared/Validator.js","webpack:///./lib/timeline/Range.js","webpack:///./lib/timeline/component/Component.js","webpack:///./lib/timeline/DateUtil.js","webpack:///./lib/timeline/Core.js","webpack:///./lib/timeline/component/ItemSet.js","webpack:///./lib/shared/Popup.js","webpack:///./lib/timeline/TimeStep.js","webpack:///./lib/timeline/component/Group.js","webpack:///./lib/timeline/Stack.js","webpack:///./lib/timeline/component/item/RangeItem.js","webpack:///./lib/timeline/component/item/Item.js","webpack:///./lib/timeline/component/BackgroundGroup.js","webpack:///./lib/timeline/component/item/BoxItem.js","webpack:///./lib/timeline/component/item/PointItem.js","webpack:///./lib/timeline/component/item/BackgroundItem.js","webpack:///./lib/timeline/component/TimeAxis.js","webpack:///./lib/shared/Activator.js","webpack:///./lib/timeline/component/CustomTime.js","webpack:///./lib/timeline/locales.js","webpack:///./lib/timeline/component/CurrentTime.js","webpack:///./lib/timeline/optionsTimeline.js","webpack:///./lib/timeline/Graph2d.js","webpack:///./lib/timeline/component/LineGraph.js","webpack:///./lib/timeline/component/DataAxis.js","webpack:///./lib/timeline/component/DataScale.js","webpack:///./lib/timeline/component/GraphGroup.js","webpack:///./lib/timeline/component/graph2d_types/bar.js","webpack:///./lib/timeline/component/graph2d_types/points.js","webpack:///./lib/timeline/component/graph2d_types/line.js","webpack:///./lib/timeline/component/Legend.js","webpack:///./lib/timeline/optionsGraph2d.js","webpack:///./index-network.js","webpack:///./lib/network/Network.js","webpack:///./lib/network/Images.js","webpack:///./lib/network/modules/Groups.js","webpack:///./lib/network/modules/NodesHandler.js","webpack:///./lib/network/modules/components/Node.js","webpack:///./lib/network/modules/components/shared/Label.js","webpack:///./~/babel-runtime/helpers/slicedToArray.js","webpack:///./~/babel-runtime/core-js/is-iterable.js","webpack:///./~/core-js/library/fn/is-iterable.js","webpack:///./~/core-js/library/modules/core.is-iterable.js","webpack:///./lib/network/modules/components/nodes/shapes/Box.js","webpack:///./~/babel-runtime/core-js/object/get-prototype-of.js","webpack:///./~/core-js/library/fn/object/get-prototype-of.js","webpack:///./~/core-js/library/modules/es6.object.get-prototype-of.js","webpack:///./~/babel-runtime/helpers/possibleConstructorReturn.js","webpack:///./~/babel-runtime/helpers/inherits.js","webpack:///./~/babel-runtime/core-js/object/set-prototype-of.js","webpack:///./~/core-js/library/fn/object/set-prototype-of.js","webpack:///./~/core-js/library/modules/es6.object.set-prototype-of.js","webpack:///./~/core-js/library/modules/_set-proto.js","webpack:///./lib/network/modules/components/nodes/util/NodeBase.js","webpack:///./lib/network/modules/components/nodes/shapes/Circle.js","webpack:///./lib/network/modules/components/nodes/util/CircleImageBase.js","webpack:///./lib/network/modules/components/nodes/shapes/CircularImage.js","webpack:///./lib/network/modules/components/nodes/shapes/Database.js","webpack:///./lib/network/modules/components/nodes/shapes/Diamond.js","webpack:///./lib/network/modules/components/nodes/util/ShapeBase.js","webpack:///./lib/network/modules/components/nodes/shapes/Dot.js","webpack:///./lib/network/modules/components/nodes/shapes/Ellipse.js","webpack:///./lib/network/modules/components/nodes/shapes/Icon.js","webpack:///./lib/network/modules/components/nodes/shapes/Image.js","webpack:///./lib/network/modules/components/nodes/shapes/Square.js","webpack:///./lib/network/modules/components/nodes/shapes/Star.js","webpack:///./lib/network/modules/components/nodes/shapes/Text.js","webpack:///./lib/network/modules/components/nodes/shapes/Triangle.js","webpack:///./lib/network/modules/components/nodes/shapes/TriangleDown.js","webpack:///./lib/network/modules/EdgesHandler.js","webpack:///./lib/network/modules/components/Edge.js","webpack:///./lib/network/modules/components/edges/CubicBezierEdge.js","webpack:///./lib/network/modules/components/edges/util/CubicBezierEdgeBase.js","webpack:///./lib/network/modules/components/edges/util/BezierEdgeBase.js","webpack:///./lib/network/modules/components/edges/util/EdgeBase.js","webpack:///./lib/network/modules/components/edges/BezierEdgeDynamic.js","webpack:///./lib/network/modules/components/edges/BezierEdgeStatic.js","webpack:///./lib/network/modules/components/edges/StraightEdge.js","webpack:///./lib/network/modules/PhysicsEngine.js","webpack:///./lib/network/modules/components/physics/BarnesHutSolver.js","webpack:///./lib/network/modules/components/physics/RepulsionSolver.js","webpack:///./lib/network/modules/components/physics/HierarchicalRepulsionSolver.js","webpack:///./lib/network/modules/components/physics/SpringSolver.js","webpack:///./lib/network/modules/components/physics/HierarchicalSpringSolver.js","webpack:///./lib/network/modules/components/physics/CentralGravitySolver.js","webpack:///./lib/network/modules/components/physics/FA2BasedRepulsionSolver.js","webpack:///./lib/network/modules/components/physics/FA2BasedCentralGravitySolver.js","webpack:///./lib/network/modules/Clustering.js","webpack:///./lib/network/NetworkUtil.js","webpack:///./lib/network/modules/components/nodes/Cluster.js","webpack:///./lib/network/modules/CanvasRenderer.js","webpack:///./lib/network/modules/Canvas.js","webpack:///./lib/network/modules/View.js","webpack:///./lib/network/modules/InteractionHandler.js","webpack:///./lib/network/modules/components/NavigationHandler.js","webpack:///./lib/network/modules/SelectionHandler.js","webpack:///./lib/network/modules/LayoutEngine.js","webpack:///./lib/network/modules/ManipulationSystem.js","webpack:///./lib/network/options.js","webpack:///./lib/network/modules/KamadaKawai.js","webpack:///./lib/network/modules/components/algorithms/FloydWarshall.js","webpack:///./lib/network/shapes.js","webpack:///./lib/network/dotparser.js","webpack:///./lib/network/gephiParser.js","webpack:///./lib/network/locales.js"],"names":["util","require","extend","exports","moment","uuid","isNumber","object","Number","elementsCensor","replacer","key","value","Element","JSON","parse","recursiveDOMDelete","DOMobject","hasChildNodes","firstChild","removeChild","giveRange","min","max","total","scale","Math","isString","String","isDate","Date","match","ASPDateRegex","exec","isNaN","randomUUID","v4","assignAllKeys","obj","prop","hasOwnProperty","fillIfDefined","a","b","allowDeletion","undefined","protoExtend","i","arguments","length","other","selectiveExtend","props","Array","isArray","Error","p","selectiveDeepExtend","TypeError","constructor","Object","deepExtend","selectiveNotDeepExtend","indexOf","push","equalArray","len","convert","type","Boolean","valueOf","isMoment","toDate","getType","toISOString","format","copyAndExtendArray","arr","newValue","newArr","copyArray","getAbsoluteLeft","elem","getBoundingClientRect","left","getAbsoluteRight","right","getAbsoluteTop","top","addClassName","className","classes","split","join","removeClassName","index","splice","forEach","callback","toArray","array","updateProperty","throttle","fn","scheduled","throttled","requestAnimationFrame","addEventListener","element","action","listener","useCapture","navigator","userAgent","attachEvent","removeEventListener","detachEvent","preventDefault","event","window","returnValue","getTarget","target","srcElement","nodeType","parentNode","hasParent","parent","e","option","asBoolean","defaultValue","asNumber","asString","asSize","asElement","hexToRGB","hex","shorthandRegex","replace","m","r","g","result","parseInt","overrideOpacity","color","opacity","rgb","substr","RGBToHex","red","green","blue","toString","slice","parseColor","c","isValidRGB","map","isValidHex","hsv","hexToHSV","lighterColorHSV","h","s","v","darkerColorHSV","darkerColorHex","HSVToHex","lighterColorHex","background","border","highlight","hover","RGBToHSV","minRGB","maxRGB","d","hue","saturation","cssUtil","cssText","styles","style","trim","parts","addCssText","currentStyles","newStyles","removeCssText","removeStyles","HSVToRGB","floor","f","q","t","isOk","test","isValidRGBA","rgba","selectiveBridgeObject","fields","referenceObject","objectTo","bridgeObject","insertSort","compare","k","j","mergeOptions","mergeTarget","options","globalOptions","enabled","binarySearchCustom","orderedItems","comparator","field","field2","maxIterations","iteration","low","high","middle","item","searchResult","binarySearchValue","sidePreference","prevValue","nextValue","easingFunctions","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","getScrollBarWidth","inner","document","createElement","width","height","outer","position","visibility","overflow","appendChild","body","w1","offsetWidth","w2","clientWidth","topMost","pile","accessors","candidate","member","module","_rng","globalVar","global","crypto","getRandomValues","_rnds8","Uint8Array","whatwgRNG","_rnds","random","_byteToHex","_hexToByte","buf","offset","ii","toLowerCase","oct","unparse","bth","_seedBytes","_nodeId","_clockseq","_lastMSecs","_lastNSecs","v1","clockseq","msecs","getTime","nsecs","dt","tl","tmh","node","n","rnds","rng","DOMutil","DataSet","DataView","Queue","Graph3d","graph3d","Camera","Filter","Point2d","Point3d","Slider","StepNumber","Hammer","keycharm","prepareElements","JSONcontainer","elementType","redundant","used","cleanupElements","resetElements","getSVGElement","svgContainer","shift","createElementNS","getDOMElement","DOMContainer","insertBefore","drawPoint","x","y","groupTemplate","labelObj","point","setAttributeNS","size","label","xOffset","yOffset","content","textContent","drawBar","rect","data","_options","_data","_fieldId","fieldId","_type","_subscribers","add","setOptions","prototype","queue","_queue","destroy","on","subscribers","subscribe","off","filter","unsubscribe","_trigger","params","senderId","concat","subscriber","addedIds","id","me","_addItem","items","update","updatedIds","oldData","updatedData","addOrUpdate","oldItem","_updateItem","console","warn","get","args","ids","firstType","returnType","allowedValues","itemIds","itemId","_getItem","order","_sort","_filterFields","resultant","getIds","getDataSet","mappedItems","filteredItem","itemFields","name","sort","av","bv","remove","removedIds","removedItems","_remove","ident","clear","maxField","itemField","minField","distinct","values","fieldType","count","exists","types","raw","converted","delay","Infinity","_timeout","_extended","_flushIfNeeded","flush","methods","original","method","context","entry","clearTimeout","setTimeout","apply","_ids","_onEvent","setData","refresh","oldIds","newIds","viewOptions","getArguments","defaultFilter","dataSet","oldItems","updatedItems","Emitter","Range","Settings","STYLE","autoByDefault","DEFAULTS","filterLabel","legendLabel","xLabel","yLabel","zLabel","xValueLabel","yValueLabel","zValueLabel","showGrid","showPerspective","showShadow","keepAspectRatio","verticalRatio","dotSizeRatio","showAnimationControls","animationInterval","animationPreload","animationAutoStart","axisColor","gridColor","xCenter","yCenter","DOT","tooltip","showLegend","backgroundColor","dataColor","fill","stroke","strokeWidth","cameraPosition","horizontal","vertical","distance","xBarWidth","yBarWidth","valueMin","valueMax","xMin","xMax","xStep","yMin","yMax","yStep","zMin","zMax","zStep","container","SyntaxError","containerElement","dataTable","dataPoints","create","setDefaults","colX","colY","colZ","colValue","colFilter","_setScale","xRange","range","yRange","zRange","z","valueRange","center","zCenter","camera","setArmLocation","_convert3Dto2D","point3d","translation","_convertPointToTranslation","_convertTranslationToScreen","cameraLocation","getCameraLocation","cameraRotation","getCameraRotation","ax","ay","az","cx","cy","cz","sinTx","sin","cosTx","cos","sinTy","cosTy","sinTz","cosTz","dx","dy","dz","ex","eye","ey","ez","bx","by","getArmLength","currentXCenter","frame","canvas","currentYCenter","_calcTranslations","points","trans","screen","transBottom","bottom","dist","sortDepth","getNumberOfRows","getNumberOfColumns","counter","column","getDistinctValues","distinctValues","getColumnRange","adjust","_checkValueField","hasValueField","BARCOLOR","BARSIZE","DOTCOLOR","DOTSIZE","_setRangeDefaults","defaultMin","defaultMax","_dataInitialize","rawData","_onChange","withBars","BAR","defaultXBarWidth","dataX","defaultYBarWidth","dataY","NUMSTEPS","expand","defaultXMin","defaultXMax","defaultXStep","defaultYMin","defaultYMax","defaultYStep","defaultZMin","defaultZMax","defaultZStep","defaultValueMin","defaultValueMax","dataFilter","setOnLoadCallback","redraw","_getDataPoints","GRID","SURFACE","sortNumber","dataMatrix","xIndex","yIndex","pointRight","pointTop","pointCross","LINE","pointNext","noCanvas","fontWeight","padding","innerHTML","onmousedown","_onMouseDown","ontouchstart","_onTouchStart","onmousewheel","_onWheel","ontooltip","_onTooltip","onclick","_onClick","onkeydown","_setSize","_resizeCanvas","clientHeight","animationStart","slider","play","animationStop","stop","_resizeCenter","charAt","parseFloat","getCameraPosition","pos","getArmRotation","_readData","_redrawFilter","setPointDrawingMethod","_redrawBarGraphPoint","_redrawBarColorGraphPoint","_redrawBarSizeGraphPoint","_redrawDotGraphPoint","DOTLINE","_redrawDotLineGraphPoint","_redrawDotColorGraphPoint","_redrawDotSizeGraphPoint","_redrawSurfaceGraphPoint","_redrawGridGraphPoint","_redrawLineGraphPoint","_pointDrawingMethod","_redrawSlider","_redrawClear","_redrawAxis","_redrawDataGraph","_redrawInfo","_redrawLegend","_getContext","ctx","getContext","lineJoin","lineCap","clearRect","_dotSize","_getLegendWidth","dotSize","isSizeLegend","isValueLegend","margin","lineWidth","font","ymin","ymax","_hsv2rgb","strokeStyle","beginPath","moveTo","lineTo","strokeRect","widthMin","fillStyle","closePath","gridLineLen","legendMin","legendMax","step","start","from","to","end","getCurrent","_line","textAlign","textBaseline","fillText","next","setValues","setPlayInterval","onchange","getIndex","selectValue","setOnChangeCallback","lineStyle","getLabel","getSelectedValue","drawAxisLabelX","text","armAngle","yMargin","point2d","drawAxisLabelY","drawAxisLabelZ","_line3d","from2d","to2d","prettyStep","xText","yText","zText","gridLenX","gridLenY","textMargin","armVector","msg","from3d","xMin2d","xMax2d","H","S","V","R","G","B","C","Hi","X","abs","_getStrokeWidth","_redrawBar","xWidth","yWidth","borderColor","surface","surfaces","corners","avg","transCenter","diff","_polygon","_drawCircle","radius","_calcRadius","arc","PI","_getColorsRegular","_getColorsColor","_getColorsSize","colors","fraction","cross","topSideVisible","showGrayBottom","aDiff","subtract","bDiff","crossproduct","crossProduct","zAvg","_drawGridLine","call","_storeMousePosition","startMouseX","getMouseX","startMouseY","getMouseY","_startCameraOffset","getOffset","leftButtonDown","_onMouseUp","which","button","touchDown","startStart","startEnd","startArmRotation","cursor","onmousemove","_onMouseMove","onmouseup","moving","diffX","diffY","ctrlKey","scaleX","scaleY","offXNew","armLength","offYNew","setOffset","horizontalNew","verticalNew","snapAngle","snapValue","round","setArmRotation","parameters","emit","onclick_callback","boundingRect","mouseX","mouseY","dataPoint","_dataPointFromXY","showTooltip","tooltipTimeout","_hideTooltip","_showTooltip","ontouchmove","_onTouchMove","ontouchend","_onTouchEnd","delta","wheelDelta","detail","oldLength","newLength","setArmLength","_insideTriangle","triangle","sign","as","bs","cs","distMax","closestDataPoint","closestDist","triangle1","triangle2","distX","distY","sqrt","line","dot","borderRadius","boxShadow","borderLeft","dom","contentWidth","contentHeight","offsetHeight","lineHeight","dotWidth","dotHeight","clientX","targetTouches","clientY","setCameraPosition","setSize","sub","sum","armLocation","armRotation","cameraOffset","offsetMultiplier","calculateCameraOrientation","mul","rot","xa","ya","za","graph","loaded","onLoadCallback","loadInBackground","isLoaded","getLoadedProgress","getColumn","getValues","getValue","dataView","dataPointsTemp","progress","visible","prev","bar","MozBorderRadius","slide","togglePlay","onChangeCallback","playTimeout","playInterval","playLoop","setIndex","playNext","interval","clearInterval","getPlayInterval","setPlayLoop","doLoop","onChange","indexToLeft","startClientX","startSlideX","leftToIndex","_start","_end","_step","precision","_current","setRange","isNumeric","isFinite","setStep","calculatePrettyStep","log10","log","LN10","step1","pow","step2","step5","toPrecision","getStep","checkFirst","combine","val","newMin","newMax","STYLENAME","OPTIONKEYS","PREFIXEDOPTIONKEYS","isEmpty","capitalize","str","toUpperCase","prefixFieldName","prefix","fieldName","forceCopy","src","dst","srcKey","dstKey","safeCopy","setSpecialSettings","setBackgroundColor","setDataColor","setStyle","setShowLegend","isAutoByDefault","isLegendGraphStyle","getStyleNumberByName","styleName","number","checkStyleNumber","valid","styleNumber","borderWidth","borderStyle","camPos","propagating","Timeline","Graph2d","timeline","Core","DateUtil","stack","TimeStep","components","Item","BackgroundItem","BoxItem","PointItem","RangeItem","BackgroundGroup","Component","CurrentTime","CustomTime","DataAxis","DataScale","GraphGroup","Group","ItemSet","Legend","LineGraph","TimeAxis","printStyle","allOptions","configureOptions","groups","forthArgument","throttleRedraw","defaultOptions","autoResize","orientation","axis","maxHeight","minHeight","_create","rtl","directionFromDom","domNode","root","getComputedStyle","direction","parentElement","rollingMode","domProps","emitter","bind","hiddenDates","getScale","timeAxis","toScreen","_toScreen","toGlobalScreen","_toGlobalScreen","toTime","_toTime","toGlobalTime","_toGlobalTime","timeAxis2","currentTime","itemSet","itemsData","groupsData","getEventProperties","ondblclick","oncontextmenu","onmouseover","fitDone","getItemRange","setWindow","animation","fit","setGroups","setItems","_redraw","_createConfigurator","markDirty","refreshItems","errorFound","validate","selection","getSelection","setSelection","newDataSet","group","focus","itemData","dataset","getDataRange","minItem","maxItem","factor","lhs","rhs","getStart","getEnd","groupShowing","show","repositionX","startSide","getWidthRight","endSide","getWidthLeft","centerContainer","itemFromTarget","groupFromTarget","customTime","customTimeFromTarget","snap","time","snappedTime","what","foreground","labelSet","groupId","pageX","srcEvent","pageY","Configurator","parentModule","defaultContainer","pixelRatio","changedOptions","allowCreation","initialized","popupCounter","showButton","moduleOptions","domElements","popupDiv","popupLimit","popupHistory","colorPicker","wrapper","_removePopup","_clean","_handleObject","_makeItem","_makeHeader","generateButton","_printOptions","onmouseout","optionsContainer","_push","_showPopupIfNeeded","path","base","div","objectLabel","select","selectedValue","selected","_update","_makeLabel","err","popupString","popupValue","ceil","input","oninput","itemIndex","_setupPopup","string","html","hideTimeout","deleteTimeout","correspondingElement","checkbox","checked","defaultColor","_showColorPicker","insertTo","setColor","setUpdateCallback","colorString","setCloseCallback","checkOnly","visibleInSet","subObj","newPath","_getValue","_handleArray","_makeTextInput","_makeCheckbox","draw","physics","solver","enabledPath","enabledValue","error","_makeColorField","_makeDropdown","_makeRange","_constructOptions","optionsObj","pointer","getOptions","hammerUtil","ColorPicker","generated","centerCoordinates","hueCircle","initialColor","previousColor","applied","updateCallback","closeCallback","hammer","_bindHammer","htmlColors","black","navy","darkblue","mediumblue","darkgreen","teal","darkcyan","deepskyblue","darkturquoise","mediumspringgreen","lime","springgreen","aqua","cyan","midnightblue","dodgerblue","lightseagreen","forestgreen","seagreen","darkslategray","limegreen","mediumseagreen","turquoise","royalblue","steelblue","darkslateblue","mediumturquoise","indigo","darkolivegreen","cadetblue","cornflowerblue","mediumaquamarine","dimgray","slateblue","olivedrab","slategray","lightslategray","mediumslateblue","lawngreen","chartreuse","aquamarine","maroon","purple","olive","gray","skyblue","lightskyblue","blueviolet","darkred","darkmagenta","saddlebrown","darkseagreen","lightgreen","mediumpurple","darkviolet","palegreen","darkorchid","yellowgreen","sienna","brown","darkgray","lightblue","greenyellow","paleturquoise","lightsteelblue","powderblue","firebrick","darkgoldenrod","mediumorchid","rosybrown","darkkhaki","silver","mediumvioletred","indianred","peru","chocolate","tan","lightgrey","palevioletred","thistle","orchid","goldenrod","crimson","gainsboro","plum","burlywood","lightcyan","lavender","darksalmon","violet","palegoldenrod","lightcoral","khaki","aliceblue","honeydew","azure","sandybrown","wheat","beige","whitesmoke","mintcream","ghostwhite","salmon","antiquewhite","linen","lightgoldenrodyellow","oldlace","fuchsia","magenta","deeppink","orangered","tomato","hotpink","coral","darkorange","lightsalmon","orange","lightpink","pink","gold","peachpuff","navajowhite","moccasin","bisque","mistyrose","blanchedalmond","papayawhip","lavenderblush","seashell","cornsilk","lemonchiffon","floralwhite","snow","yellow","lightyellow","ivory","white","setInitial","htmlColor","_isColorString","rgbaArray","rgbObj","alpha","_setColor","display","_generateHueCircle","storePrevious","_hide","_updatePicker","alert","angleConvert","colorPickerSelector","colorPickerCanvas","pixelRation","devicePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","setTransform","w","putImageData","circle","brightnessRange","opacityRange","initialColorDiv","newColorDiv","colorPickerDiv","opacityDiv","brightnessDiv","arrowDiv","_setOpacity","_setBrightness","brightnessLabel","opacityLabel","cancelButton","applyButton","_apply","saveButton","_save","loadButton","_loadLast","drag","pinch","set","enable","onTouch","_moveSelector","sat","hfac","sfac","fillRect","getImageData","centerY","centerX","angle","atan2","newTop","newLeft","inputHandler","isFirst","onRelease","isFinal","offTouch","offRelease","disablePreventDefaultVertically","pinchRecognizer","TOUCH_ACTION_PAN_Y","getTouchAction","Validator","referenceOptions","subObject","usedOptions","check","__any__","getSuggestion","__type__","checkFields","referenceOption","refOptionObj","optionType","refOptionType","print","printLocation","_isAMomentObject","localSearch","findInOptions","globalSearch","localSearchThreshold","globalSearchThreshold","indexMatch","closestMatch","recursive","closestMatchPath","lowerCaseOption","op","levenshteinDistance","matrix","now","hours","minutes","seconds","milliseconds","clone","rolling","deltaDifference","scaleOffset","startToFront","endToFront","moveable","zoomable","zoomMin","zoomMax","touch","animationTimer","_onDragStart","_onDrag","_onDragEnd","_onMouseWheel","_onTouch","_onPinch","rollingModeBtn","startRolling","validateDirection","stopRolling","conversion","currentTimeTimer","byUser","finalStart","finalEnd","_cancelAnimation","initStart","initEnd","duration","easingName","easingFunction","initTime","anyChanged","dragging","ease","done","changed","_applyRange","updateHiddenDates","newStart","newEnd","getRange","totalHidden","previousDelta","_isInsideRange","allowDragging","deltaX","deltaY","getHiddenDurationBetween","diffRange","safeStart","snapAwayFromHidden","safeEnd","startDate","endDate","zoomKey","horizontalScroll","pointerDate","getPointer","_pointerToDate","zoom","centerDate","hiddenDuration","hiddenDurationBefore","getHiddenDurationBefore","hiddenDurationAfter","move","_isResized","resized","_previousWidth","_previousHeight","convertHiddenOptions","repeat","dateItem","totalRange","pixelTime","_d","runUntil","day","dayOfYear","year","dayOffset","date","month","removeDuplicates","startHidden","isHidden","endHidden","rangeStart","rangeEnd","hidden","safeDates","printDates","dates","stepOverHiddenDates","timeStep","previousTime","stepInHidden","currentValue","current","switchedYear","switchedMonth","switchedDay","hiddenBeforeStart","getHiddenDurationBeforeStart","rangeAfterEnd","correctTimeForHidden","totalDuration","partialDuration","accumulatedHiddenDuration","getAccumulatedHiddenDuration","newTime","timeOffset","requiredDuration","previousPoint","correctionEnabled","Activator","backgroundVertical","backgroundHorizontal","leftContainer","rightContainer","shadowTop","shadowBottom","shadowTopLeft","shadowBottomLeft","shadowTopRight","shadowBottomRight","scrollTop","scrollTopMin","initialDrawDone","_origRedraw","properties","initialItemSetDrawn","threshold","DIRECTION_HORIZONTAL","listeners","events","isActive","onMouseWheel","verticalScroll","adjusted","_setScrollTop","onMouseScrollSide","itemAddedToTimeline","handleDragOver","dataTransfer","dropEffect","handleDrop","getData","_onAddItem","customTimes","redrawCount","drawPoints","onRender","clickToUse","activator","_initAutoResize","component","configurator","configure","appliedOptions","setModuleOptions","active","_stopAutoResize","setCustomTime","getCustomTime","setCustomTimeTitle","title","setCustomTitle","addCustomTime","timestamp","some","removeCustomTime","getVisibleItems","getWindow","zoomIn","percentage","newInterval","zoomOut","borderRootHeight","borderRootWidth","autoHeight","containerHeight","scrollbarWidth","_setDOM","_updateScrollTop","visibilityTop","visibilityBottom","RegExp","contentsOverflow","DIRECTION_ALL","MAX_REDRAW","centerWidth","repaint","setCurrentTime","getCurrentTime","_startAutoResize","_onResize","lastWidth","lastHeight","watchTimer","setInterval","initialScrollTop","oldScrollTop","_getScrollTop","newScrollTop","UNGROUPED","BACKGROUND","align","stackSubgroups","groupOrderSwap","fromGroup","toGroup","targetOrder","groupOrder","selectable","multiselect","itemsAlwaysDraggable","editable","updateTime","updateGroup","overrideItems","groupEditable","onAdd","onUpdate","onMove","onRemove","onMoving","onAddGroup","onMoveGroup","onRemoveGroup","followMouse","overflowMethod","tooltipOnItemUpdateTime","itemOptions","itemListeners","_onAdd","_onUpdate","_onRemove","groupListeners","_onAddGroups","_onUpdateGroups","_onRemoveGroups","groupIds","stackDirty","touchParams","groupTouchParams","box","_updateUngrouped","backgroundGroup","_onSelectItem","_onMultiSelectItem","groupHammer","_onGroupClick","_onGroupDragStart","_onGroupDrag","_onGroupDragEnd","DIRECTION_VERTICAL","_onMouseOver","_onMouseOut","addCallback","Function","dirty","displayed","hide","unselect","rawVisibleItems","visibleItems","_deselect","_orderGroups","visibleInterval","zoomed","lastVisibleInterval","restack","firstGroup","_firstGroup","firstMargin","nonFirstMargin","groupMargin","groupResized","firstGroupIndex","firstGroupId","ungrouped","_getGroupId","getLabelSet","oldItemsData","getItems","nestedGroups","nestedGroupId","updatedNestedGroup","nestedInGroup","showNested","_order","getGroups","removeItem","itemObj","popup","_getType","_removeItem","groupData","groupOptions","_orderNestedGroups","newGroupIdsOrder","nestedGroup","nestedGroupIds","oldGroupId","oldSubGroupId","subgroup","oldGroup","_constructByEndArray","endArray","dragLeftItem","dragRightItem","itemProps","_getGroupIndex","itemIsDragging","selectedItem","initialX","dragLeft","_cloneItemData","dragRight","baseGroupIndex","itemsToDrag","groupIndex","groupOffset","stopPropagation","metaKey","_onDragStartAddItem","xAbs","newItem","offsetLeft","updateGroupAllowed","newGroupBase","initial","updateTimeAllowed","initialEnd","initialStart","newOffset","_moveToGroup","collapsedDirClassName","originalOrder","movingUp","targetGroupTop","draggedGroupHeight","targetGroupHeight","targetGroup","draggedGroup","newOrder","origOrder","draggedId","numGroups","curPos","orgOffset","slippedPosition","switchGroup","shouldBeGroup","switchGroupId","shiftKey","oldSelection","newSelection","related","itemFromRelatedTarget","getTitle","setPopup","setPosition","offsetTop","_onUpdateItem","newItemData","itemGroup","lastSelectedGroup","multiselectPerGroup","_getItemRange","_item","itemFromElement","cur","relatedTarget","itemSetFromTarget","Popup","doShow","maxWidth","isLeft","isTop","minimumStep","autoScale","FORMAT","minorLabels","millisecond","second","minute","hour","weekday","majorLabels","setMoment","setFormat","defaultFormat","setMinimumStep","roundToMinor","hasNext","setScale","setAutoScale","stepYear","stepMonth","stepDay","stepHour","stepMinute","stepSecond","stepMillisecond","isMajor","getLabelMinor","getLabelMajor","getClassName","_moment","locale","lang","even","today","isSame","currentWeek","currentMonth","currentYear","subgroups","subgroupIndex","subgroupOrderer","subgroupOrder","isVisible","itemsInRange","byStart","byEnd","checkRangedItems","marker","templateFunction","paddingRight","paddingLeft","getLabelWidth","markerHeight","lastMarkerHeight","_calculateSubGroupHeights","_isGroupVisible","limitSize","customOrderedItems","_updateItemsInRange","nostack","_updateSubgroupsSizes","_calculateHeight","repositionY","resetSubgroups","setParent","orderSubgroups","_checkIfVisible","sortArray","sortField","removeFromDataSet","startArray","orderByStart","orderByEnd","oldVisibleItems","visibleItemsLookup","lowerBound","upperBound","searchFunction","_checkIfVisibleWithReference","initialPosByStart","_traceVisible","initialPosByEnd","initialPos","breakCondition","EPSILON","aTime","bTime","force","collidingItem","jj","collision","otherSubgroup","collisionByTimes","baseClassName","visibleFrame","_updateContents","_updateTitle","_updateDataAttributes","_updateStyle","_repaintOnItemUpdateTimeTooltip","_repaintDeleteButton","_repaintDragCenter","_repaintDragLeft","_repaintDragRight","parentWidth","contentStartPosition","boxWidth","groupChanged","dragCenter","dragCenterItem","anchor","deleteButton","onItemUpdateTimeTooltip","tooltipOffset","itemDistanceFromTop","isCloseToTop","template","itemVisibleFrameContent","visibleFrameTemplateFunction","frameElement","itemVisibleFrameContentElement","getElementsByClassName","visibleFrameTemplate","_contentToString","setText","dataAttributes","attributes","setAttribute","removeAttribute","outerHTML","msPerPixel","widthInMs","previousRight","previousLeft","itemSetHeight","marginLeft","marginRight","itemSubgroup","lines","majorTexts","minorTexts","lineTop","showMinorLabels","showMajorLabels","maxMinorChars","parentChanged","_calculateCharSize","minorLabelHeight","minorCharHeight","majorLabelHeight","majorCharHeight","minorLineHeight","minorLineWidth","majorLineHeight","majorLineWidth","foregroundNextSibling","nextSibling","backgroundNextSibling","_repaintLabels","timeLabelsize","minorCharWidth","xNext","nextIsMajor","prevWidth","labelMinor","xFirstMajorLabel","MAX","showMinorGrid","_repaintMinorText","_repaintMajorText","_repaintMajorLine","_repaintMinorLine","warnedForOverflow","leftTime","leftText","widthText","majorCharWidth","pop","createTextNode","childNodes","measureCharMinor","measureCharMajor","overlay","_onTapOverlay","onClick","_hasParent","deactivate","escListener","activate","unbind","locales","eventParams","warned","substring","showCurrentTime","bool","any","groupsDraggable","linegraph","initialLoad","getLegend","isGroupVisible","yAxisLeft","yAxisRight","legendLeft","legendRight","screenToValue","Bars","Lines","Points","yAxisOrientation","defaultGroup","sampling","graphHeight","shaded","barChart","sideBySide","interpolation","parametrization","dataAxis","legend","abortedGraphUpdate","updateSVGheight","updateSVGheightOnResize","forceGraphUpdate","lastStart","svgElements","groupsUsingDefaultStyles","svg","framework","_removeGroup","_updateAllGroupData","removeGroup","_updateGroup","addGroup","groupsContent","idMap","groupCounts","existing_items","extended","orginalY","_updateGraph","rangePerPixelInv","_getSortedGroupIds","grouplist","zIndex","bz","groupRanges","changeCalled","minDate","maxDate","_getRelevantData","_applySampling","_convertXcoordinates","_getYRanges","_updateYAxis","below","excludeFromStacking","_stack","_convertYcoordinates","paths","calcPath","subGroupId","drawShading","subData","subPrevPoint","subNextPoint","dateComparator","first","last","dataContainer","increment","amountOfPoints","xDistance","pointsPerPixel","sampledData","idx","combinedDataLeft","combinedDataRight","getYRange","getStackedYRange","yAxisLeftUsed","yAxisRightUsed","minLeft","minRight","maxLeft","maxRight","minVal","maxVal","ignore","_toggleAxisVisiblity","drawIcons","master","masterAxis","lineOffset","tempGroups","axisUsed","datapoints","screen_x","screen_y","svgHeight","convertValue","setZeroPosition","linegraphOptions","icons","majorLinesOffset","minorLinesOffset","labelOffsetX","labelOffsetY","iconWidth","alignZeros","linegraphSVG","DOMelements","labels","conversionFactor","minWidth","stepPixels","zeroCrossing","amountOfSteps","iconsRemoved","amountOfGroups","lineContainer","graphOptions","_redrawGroupIcons","iconHeight","iconOffset","groupArray","_cleanupIcons","activeGroups","_redrawLabels","_redrawTitle","customRange","autoScaleEnd","autoScaleStart","followScale","maxLabelSize","getLines","major","_redrawLabel","_redrawLine","titleWidth","titleCharHeight","characterHeight","largestWidth","textMinor","textMajor","textTitle","measureCharTitle","titleCharWidth","zeroAlign","formattingFunction","majorSteps","minorSteps","customLines","minorStepIdx","magnitudefactor","determineScale","rounded","setCharHeight","setHeight","minimumStepValue","orderOfMagnitude","solutionFound","l","stepSize","is_major","getFirstMajor","majorStep","formatValue","bottomOffset","oldStepIdx","oldStart","oldEnd","increaseMagnitude","decreaseMagnitude","otherZero","otherStep","newRange","myOriginalZero","majorOffset","zeroOffset","pixels","usingDefaultStyle","zeroPosition","drawIcon","icon","Bargraph","fillHeight","fillPath","outline","barWidth","originalWidth","bar1Height","bar2Height","processedGroupData","combinedData","intersections","coreDistance","drawData","barPoints","_getDataIntersections","heightOffset","_getSafeDrawData","nextKey","amount","resolved","prevKey","accumulatedNegative","accumulatedPositive","pointData","groupLabel","_getStackedYRange","xpos","getCallback","getGroupTemplate","callbackResult","Line","_catmullRom","_linear","pathArray","subPathArray","dFill","zero","serializePath","inverse","_catmullRomUniform","p0","p1","p2","p3","bp1","bp2","normalization","d1","d2","d3","A","N","M","d3powA","d2powA","d3pow2A","d2pow2A","d1pow2A","d1powA","side","iconSize","iconSpacing","excludeFromLegend","textArea","scrollableHeight","drawLegendIcons","paddingTop","Network","network","Images","dotparser","gephiParser","convertDot","DOTToGraph","convertGephi","parseGephi","nodes","nodeIndices","edges","edgeIndices","once","eventListeners","onTap","onDoubleTap","onHold","onDragStart","onDrag","onDragEnd","onPinch","onMouseMove","onContext","functions","createNode","createEdge","modules","view","bindEventListeners","images","selectionHandler","interactionHandler","renderer","layoutEngine","clustering","manipulation","nodesHandler","edgesHandler","layout","interaction","networkOptions","_updateVisibleIndices","nodeId","edgeId","_updateValueRange","unselectAll","dotData","gephi","gephiData","valueTotal","setValueRange","canvasToDOM","DOMtoCanvas","findNode","isCluster","openCluster","cluster","getNodesInCluster","clusterByConnection","clusterByHubsize","clusterOutliers","getSeed","enableEditMode","disableEditMode","addNodeMode","editNode","editNodeMode","addEdgeMode","editEdgeMode","deleteSelected","getPositions","storePositions","moveNode","getBoundingBox","getConnectedNodes","objectId","getConnectedEdges","startSimulation","stopSimulation","stabilize","getSelectedNodes","getSelectedEdges","getNodeAt","getEdgeAt","edge","selectNodes","selectEdges","getViewPosition","releaseNode","getOptionsFromConfigurator","imageBroken","url","imageToCache","brokenUrl","imageToLoadBrokenUrlOn","onerror","_addImageToCache","Image","imageToRedrawWith","cachedImage","img","onload","_redrawWithImage","_tryloadBrokenUrl","Groups","defaultIndex","groupsArray","defaultGroups","useDefaultGroups","optionFields","groupName","groupname","NodesHandler","nodesListeners","borderWidthSelected","brokenImage","fixed","face","strokeColor","vadjust","multi","bold","mod","boldital","ital","mono","code","image","labelHighlightBold","level","mass","scaling","maxVisible","drawThreshold","customScalingFunction","shadow","shape","shapeProperties","borderDashes","useImageSize","useBorderWithImage","nodeOptions","parseOptions","updateShape","updateLabelModule","_reset","doNotEmit","oldNodesData","newNodes","positionInitially","changedData","dataChanged","constructorClass","clearPositions","dataArray","boundingBox","nodeList","nodeObj","toId","fromId","edgeList","Node","imagelist","baseSize","baseFontSize","predefinedPosition","labelModule","currentShape","groupObj","choosify","imageObj","load","propagateFonts","chooser","chosen","chosenNode","shadowColor","shadowSize","shadowX","shadowY","constrain","distanceToBorder","sizeDiff","fontDiff","getFormattingValues","updateBoundingBox","resize","parentOptions","newOptions","parsedColor","Label","edgelabel","pointToSelf","fontOptions","yLine","isEdgeLabel","elementOptions","labelDirty","constrainWidth","maxWdt","minWdt","widthConstraint","widthConstraintMaximum","widthConstraintMinimum","constrainHeight","minHgt","valign","heightConstraint","heightConstraintMinimum","heightConstraintValign","chosenLabel","margins","widthBias","heightBias","mods","optionsFontMod","modOptionsArray","ratio","baseline","viewFontSize","calculateLabelSize","_drawBackground","_drawText","lineMargin","fontSize","_setAlignment","labelHeight","lineCount","blocks","block","_getColor","fontColor","strokeText","initialStrokeColor","_processLabel","markupSystem","system","decodeMarkupSystem","splitMarkdownBlocks","splitHtmlBlocks","beginable","spacing","buffer","modStack","modName","emitBlock","override","ch","unshift","selectedState","hoverState","nlLines","accumulate","addAndAccumulate","splitBlocks","words","atStart","measure","lastMeasure","pre","measureText","newOptionsArray","Box","_setMargins","differentState","textSize","getTextSize","roundRect","enableShadow","disableShadow","save","enableBorderDashes","disableBorderDashes","restore","NodeBase","adjustSizes","shadowBlur","shadowOffsetX","shadowOffsetY","setLineDash","dashes","Circle","diameter","_drawRawCircle","CircleImageBase","labelOffset","imageLoaded","globalAlpha","can2","ctx2","drawImage","iterations","labelDimensions","CircularImage","_swapToImageResizeWhenImageLoaded","_resizeImage","clip","_drawImageAtPosition","_drawImageLabel","Database","database","_distanceToBorder","Diamond","_resizeShape","_drawShape","ShapeBase","sizeMultiplier","Dot","Ellipse","ellipse","Icon","_icon","iconTextSpacing","neutralborderWidth","selectionLineWidth","Square","Star","Text","Triangle","TriangleDown","EdgesHandler","edgesListeners","arrows","scaleFactor","arrowStrikethrough","inherit","hoverWidth","selectionWidth","selfReferenceSize","smooth","forceDirection","roundness","emitChange","edgeData","edgeOptions","reconnectEdges","updateEdgeType","oldEdgesData","edgesData","oldEdge","disconnect","connect","cleanup","Edge","baseWidth","edgeType","connected","_setInteractionWidths","chosenEdge","toArrow","fromArrow","middleArrow","inheritsColor","toArrowScale","toArrowType","middleArrowScale","middleArrowType","fromArrowScale","fromArrowType","selectedWidth","changeInType","attachEdge","detachEdge","widthDiff","viaNode","getViaNode","arrowData","fromPoint","toPoint","getArrowData","core","drawLine","drawArrows","drawLabel","drawArrowHead","node1","node2","getPoint","translate","_rotateForLabelAlignment","_pointOnCircle","xFrom","yFrom","xTo","yTo","xObj","yObj","getDistanceToEdge","angleInDegrees","rotate","colorsDefined","CubicBezierEdge","viaNodes","via1","via2","bezierCurveTo","x1","y1","x2","y2","_getViaCoordinates","nearNode","_findBorderPositionBezier","x3","y3","_getDistanceToBezierEdge","vec","CubicBezierEdgeBase","minDistance","lastX","lastY","_getDistanceToLine","BezierEdgeBase","distanceToPoint","difference","via","EdgeBase","colorDirty","getColor","_drawDashedLine","_drawLine","_getCircleData","_circle","pattern","lineDashOffset","dashedLine","_findBorderPosition","_findBorderPositionCircle","grd","createLinearGradient","fromColor","toColor","addColorStop","_getDistanceToEdge","px","py","something","u","arrowPoint","guideOffset","findBorderPosition","guidePos","xi","yi","arrowCore","circleEndpoint","arrowEndpoint","BezierEdgeDynamic","_boundFunction","positionBezierNode","physicsChange","setupSupportNode","parentEdgeId","quadraticCurveTo","cr","BezierEdgeStatic","xVia","yVia","pi","originalAngle","myAngle","StraightEdge","edgeSegmentLength","toBorderDist","toBorderPoint","borderPos","PhysicsEngine","physicsBody","physicsNodeIndices","physicsEdgeIndices","forces","velocities","physicsEnabled","simulationInterval","requiresTimeout","previousStates","referenceState","freezeCache","renderTimer","adaptiveTimestep","adaptiveTimestepEnabled","adaptiveCounter","adaptiveInterval","stabilized","startedStabilization","stabilizationIterations","ready","barnesHut","theta","gravitationalConstant","centralGravity","springLength","springConstant","damping","avoidOverlap","forceAtlas2Based","repulsion","nodeDistance","hierarchicalRepulsion","maxVelocity","minVelocity","stabilization","updateInterval","onlyDynamicEdges","timestep","layoutFailed","initPhysics","updatePhysicsData","init","nodesSolver","edgesSolver","gravitySolver","modelOptions","viewFunction","simulationStep","_emitStabilized","startTime","physicsTick","physicsTime","runDoubleSpeed","amountOfIterations","calculateForces","moveNodes","revert","_evaluateStepQuality","nodeIds","positions","vx","vy","dpos","reference","posThreshold","maxNodeVelocity","averageNodeVelocity","velocityAdaptiveThreshold","nodeVelocity","_performStep","totalVelocity","solve","targetIterations","_freezeNodes","_stabilizationBatch","_finalizeStabilization","_restoreFrozenNodes","colorFactor","forceSize","arrowSize","BarnesHutSolver","barnesHutTree","randomSeed","thetaInversed","overlapAvoidanceFactor","nodeCount","_formBarnesHutTree","_getForceContribution","children","NW","NE","SW","SE","parentBranch","childrenCount","centerOfMass","calcSize","_calculateForces","gravityForce","fx","fy","minX","minY","maxX","maxY","minimumTreeSize","rootSize","halfRootSize","_splitBranch","_placeInTree","totalMass","totalMassInv","biggestSize","skipMassUpdate","_updateBranchMass","_placeInRegion","region","seededRandom","containedNode","_insertRegion","childSize","_drawBranch","branch","RepulsionSolver","repulsingForce","HierarchicalRepulsionSolver","steepness","SpringSolver","edgeLength","node3","_calculateSpringForce","springForce","HierarchicalSpringSolver","springFx","springFy","totalFx","totalFy","correctionFx","correctionFy","CentralGravitySolver","ForceAtlas2BasedRepulsionSolver","degree","ForceAtlas2BasedCentralGravitySolver","ClusterEngine","clusteredNodes","clusteredEdges","hubsize","_getHubSize","_checkOptions","nodesToCluster","refreshData","joinCondition","childNodesObj","childEdgesObj","clonedOptions","cloneOptions","_cluster","edgeCount","clusters","usedNodes","relevantEdgeCount","gatheringSuccessful","childNodeId","_getConnectedId","clusterByEdgeCount","clusterNodeProperties","parentNodeId","parentClonedOptions","childClonedOptions","childNodeIDs","childNode","childEdge","clusterEdgeProperties","otherNodeId","childKeys","createEdges","newEdge","clusteringEdgeReplacingId","edgeReplacedById","_backupEdgeOptions","allowSingleNodeCluster","processProperties","childNodesOptions","childEdgesOptions","clusterId","_getClusterPosition","clusterNode","containedNodes","containedEdges","_createClusterEdges","originalOptions","clusterNodeId","releaseFunction","clusterPosition","newPositions","edgesToBeDeleted","otherCluster","transferEdge","replacedEdge","_restoreEdge","nodesArray","reverse","clusteredNodeId","startEdgeId","allEdgeIds","getClusteredEdges","clusteredEdgeId","baseEdgeId","average","averageSquared","hubCounter","largestHub","variance","standardDeviation","hubThreshold","NetworkUtil","allNodes","specificNodes","amountOfConnections","Cluster","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","CanvasRenderer","redrawRequested","renderingActive","renderRequests","allowRedraw","hideEdgesOnDrag","hideNodesOnDrag","_determineBrowserMethod","_resizeNodes","_requestRedraw","_startRendering","cancelAnimationFrame","_renderStep","_drawEdges","_drawNodes","alwaysShow","topLeft","bottomRight","viewableArea","isSelected","isBoundingBoxOverlappingWith","browserType","Canvas","resizeTimer","resizeFunction","cameraState","canvasViewCenter","hammerFrame","_cleanUp","previousWidth","previousHeight","widthRatio","heightRatio","newScale","currentViewCenter","distanceFromCenter","tabIndex","_prepareValue","emitEvent","oldWidth","oldHeight","previousRatio","_getCameraState","_setCameraState","_XconvertCanvasToDOM","_YconvertCanvasToDOM","_XconvertDOMtoCanvas","_YconvertDOMtoCanvas","View","animationSpeed","renderRefreshRate","animationEasingFunction","easingTime","sourceScale","targetScale","sourceTranslation","targetTranslation","lockedOnNodeId","lockedOnNodeOffset","touchTime","initialZoom","zoomLevel","positionDefined","numberOfNodes","yDistance","xZoomLevel","yZoomLevel","findCenter","animationOptions","nodePosition","lockedOnNode","animateView","locked","_transitionRedraw","viewCenter","_lockedRedraw","finished","InteractionHandler","navigationHandler","popupObj","popupTimer","dragNodes","dragView","keyboard","speed","bindToWindow","navigationButtons","tooltipDelay","zoomView","pinched","changedPointers","checkSelectionChanges","_generateClickEvent","previouslySelectedEdgeCount","_getSelectedEdgeCount","previouslySelectedNodeCount","_getSelectedNodeCount","previousSelection","selectAdditionalOnPoint","selectOnPoint","selectedEdgesCount","selectedNodesCount","currentSelection","_determineIfDifferent","nodesChanged","edgesChanged","nodeSelected","selectObject","selectionObj","xFixed","yFixed","scaleOld","preScaleDragPointer","scaleFrac","tx","ty","postScaleDragPointer","popupVisible","_checkHidePopup","_checkShowPopup","hoverObject","pointerObj","previousPopupObjId","nodeUnderCursor","popupType","overlappingNodes","isOverlappingWith","overlappingEdges","popupTargetType","popupTargetId","_pointerToPositionObject","stillOnObj","overNode","NavigationHandler","iconsCreated","navigationHammers","boundFunctions","activated","configureKeyboardBindings","loadNavigationElements","cleanNavigation","navigationDOM","navigationDivs","navigationDivActions","_fit","bindToRedraw","_stopMovement","boundAction","reset","unbindFromRedraw","SelectionHandler","hoverObj","selectConnectedEdges","hoverConnectedEdges","updateSelection","selectionChanged","deselectObject","eventType","emptySelection","DOM","highlightEdges","_selectConnectedEdges","_addToSelection","_removeFromSelection","canvasPos","returnNode","positionObject","_getAllNodesOverlappingWith","_getEdgesOverlappingWith","returnEdge","mindist","overlappingEdge","_unselectConnectedEdges","clusterSize","_addToHover","hoverChanged","blurObject","_hoverConnectedEdges","edgeIds","idArray","RangeError","LayoutEngine","initialRandomSeed","setPhysics","optionsBackup","improvedLayout","hierarchical","levelSeparation","nodeSpacing","treeSpacing","blockShifting","edgeMinimization","parentCentralization","sortMethod","setupHierarchicalLayout","layoutNetwork","prevHierarchicalState","adaptAllOptionsForHierarchicalLayout","MAX_LEVELS","clusterThreshold","startLength","before","clusterBridges","after","_declusterAll","info","kamadaKawai","_shiftToCenter","getRangeCore","clustersPresent","definedLevel","definedPositions","undefinedLevel","hierarchicalLevels","lastNodeOnLevel","hierarchicalChildrenReference","hierarchicalParentReference","hierarchicalTrees","treeIndex","distributionOrdering","distributionIndex","distributionOrderingPresence","_determineLevelsByHubsize","_determineLevelsDirected","_determineLevelsCustomCallback","distribution","_getDistribution","_generateMap","_placeNodesByHierarchy","_condenseHierarchy","stillShifting","branches","shiftTrees","treeSizes","getTreeSizes","shiftTree","_getPositionForHierarchy","_setPositionForHierarchy","getTreeSize","treeWidths","getBranchNodes","source","getBranchBoundary","branchMap","maxLevel","minSpace","maxSpace","branchNode","_getSpaceAroundNode","minSpaceNode","maxSpaceNode","getMaxLevel","getCollisionLevel","maxLevel1","maxLevel2","hasSameParent","parents1","parents2","shiftElementsCloser","levels","centerParents","levelNodes","branchShiftCallback","centerParent","pos1","pos2","diffAbs","branchNodes1","branchNodes2","min1","max1","minSpace1","maxSpace1","min2","max2","minSpace2","maxSpace2","diffBranch","_shiftBlock","_centerParent","minimizeEdgeLength","allEdges","nodeLevel","C2","referenceNodes","aboveEdges","otherNode","getFx","getDFx","getGuess","guess","guessMap","dfx","limit","moveBranch","branchNodes","minBranch","maxBranch","minSpaceBranch","maxSpaceBranch","branchOffset","newPosition","minimizeEdgeLengthBottomUp","shiftBranchesCloserBottomUp","centerAllParents","centerAllParentsBottomUp","useMap","prevNode","prevPos","nextNode","nextPos","parents","parentId","minPos","maxPos","positionedNodes","nodeArray","_indexArrayToNodes","_sortNodeArray","handledNodeCount","_validataPositionAndContinue","parentLevel","childNodeLevel","previousPos","sharedParent","_findCommonParent","withChild","_placeBranchNodes","hubSize","levelDownstream","nodeA","nodeB","_crawlNetwork","minLevel","customCallback","levelByDirection","levelA","_setMinLevelToZero","fillInRelations","startingNodeId","crawler","tree","childA","childB","iterateParents","child","findParent","foundParent","doNotUpdate","ManipulationSystem","editMode","manipulationDiv","editModeDiv","closeDiv","manipulationHammers","temporaryUIFunctions","temporaryEventFunctions","temporaryIds","guiEnabled","inMode","selectedControlNode","initiallyActive","addNode","addEdge","editEdge","deleteNode","deleteEdge","controlNodeStyle","_restore","_setup","showManipulatorToolbar","_createEditButton","manipulationDOM","selectedNodeCount","selectedEdgeCount","selectedTotalCount","needSeperator","_createAddNodeButton","_createSeperator","_createAddEdgeButton","_createEditNodeButton","_createEditEdgeButton","_createDeleteButton","_bindHammerToDiv","toggleEditMode","_temporaryBindEvent","_createBackButton","_createDescription","_performAddNode","_getSelectedNode","finalizedData","_temporaryBindUI","_handleConnect","_finishConnect","_dragControlNode","editWithoutDrag","edgeBeingEditedId","_performEditEdge","controlNodeFrom","_getNewTargetNode","controlNodeTo","_controlNodeTouch","_controlNodeDragStart","_controlNodeDrag","_controlNodeDragEnd","findBorderPositions","selectedNodes","selectedEdges","deleteFunction","_createWrappers","_removeManipulationDOM","_createButton","_cleanManipulatorHammers","_cleanupTemporaryNodesAndEdges","_unbindTemporaryUIs","_unbindTemporaryEvents","deleteBtnClass","labelClassName","newFunction","boundFunction","UIfunctionName","functionName","eventName","domElement","indexTempEdge","indexTempNode","lastTouch","fromSelect","toSelect","overlappingNodeIds","targetNode","connectionEdge","connectFromId","_performAddEdge","clickData","defaultData","sourceNodeId","targetNodeId","eeFunct","boolean","maximum","minimum","KamadaKawai","edgeStrength","distanceSolver","edgesArray","ignoreClusters","D_matrix","getDistances","_createL_matrix","_createK_matrix","innerThreshold","maxInnerIterations","maxEnergy","highE_nodeId","dE_dx","dE_dy","delta_m","subIterations","_getHighestEnergyNode","_moveNode","_getEnergy","maxEnergyNodeId","dE_dx_max","dE_dy_max","nodeIdx","x_m","y_m","iIdx","x_i","y_i","denominator","K_matrix","L_matrix","d2E_dx2","d2E_dxdy","d2E_dy2","D","E","FloydWarshall","CanvasRenderingContext2D","square","s2","ir","triangleDown","star","diamond","r2d","kappa","ox","oy","xe","ye","xm","ym","wEllipse","hEllipse","ymb","yeb","xt","yt","xl","yl","xr","yr","xc","yc","patternLength","slope","distRemaining","patternIndex","dashLength","parseDOT","parseGraph","NODE_ATTR_MAPPING","EDGE_ATTR_MAPPING","TOKENTYPE","NULL","DELIMITER","IDENTIFIER","UNKNOWN","DELIMITERS","token","tokenType","nextPreview","regexAlphaNumeric","isAlphaNumeric","merge","setValue","keys","o","graphs","attr","getToken","isComment","c2","newSyntaxError","chop","strict","parseStatements","parseStatement","subgraph","parseSubgraph","parseEdge","parseAttributeStatement","parseNodeStatement","subgraphs","parseAttributeList","message","maxLength","forEach2","array1","array2","elem1","elem2","setProp","names","convertAttr","mapping","visProp","visPropI","graphData","dotNode","graphNode","convertEdge","dotEdge","graphEdge","subEdge","gephiJSON","inheritColor","gEdges","gNodes","gEdge","gNode","edit","del","back","addDescription","edgeDescription","editEdgeDescription","createEdgeError","deleteClusterError","editClusterError"],"mappings":"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AACA;AACA;AACA;AACA;AACA;AACA,GAAC;;AAED;AACA;;AAEA;AACA;AACA,8B;;;;;;ACjCA,8BAA4B,e;;;;;;ACA5B;AACA,YAAU;AACV,I;;;;;;ACFA,sB;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA,I;;;;;;ACLA;AACA;AACA;AACA;AACA,I;;;;;;ACJA,mBAAiB;;AAEjB;AACA;AACA,I;;;;;;ACJA;AACA;AACA;AACA;AACA,I;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,8BAA4B,aAAa;;AAEzC;AACA;AACA;AACA;AACA;AACA,0CAAwC,oCAAoC;AAC5E,8CAA4C,oCAAoC;AAChF,OAAK,2BAA2B,oCAAoC;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAgB,mBAAmB;AACnC;AACA;AACA,mCAAiC,2BAA2B;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA,I;;;;;;ACrEA,wB;;;;;;ACAA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qEAAmE;AACnE;AACA,uFAAqF;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAW;AACX,WAAS;AACT;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA,iDAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,gBAAc;AACd,gBAAc;AACd,gBAAc;AACd,gBAAc;AACd,iBAAe;AACf,iBAAe;AACf,iBAAe;AACf,kBAAgB;AAChB,2B;;;;;;AC5DA;AACA;AACA;AACA,yCAAuC,gC;;;;;;ACHvC,+BAA6B;AAC7B,uCAAqC,gC;;;;;;ACDrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,I;;;;;;ACnBA;AACA;AACA;AACA,I;;;;;;ACHA;AACA;AACA;AACA;AACA,GAAC;AACD;AACA;AACA,I;;;;;;ACPA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAG,UAAU;AACb;AACA;AACA;AACA,I;;;;;;ACfA;AACA;AACA;AACA;AACA,I;;;;;;ACJA;AACA;AACA,I;;;;;;ACFA;AACA,uEAAsE,gBAAgB,UAAU,GAAG;AACnG,GAAC,E;;;;;;ACFD;AACA;AACA,mCAAiC,QAAQ,gBAAgB,UAAU,GAAG;AACtE,GAAC,E;;;;;;ACHD;AACA;AACA;AACA,KAAG;AACH;AACA;AACA,I;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA,I;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,I;;;;;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,I;;;;;;ACPA,2C;;;;;;ACAA,yBAAuB;AACvB;AACA;AACA,I;;;;;;ACHA;AACA;AACA;AACA;AACA;;AAEA;AACA,6FAAgF,aAAa,EAAE;;AAE/F;AACA,uDAAqD,0BAA0B;AAC/E;AACA,I;;;;;;ACZA;AACA;AACA;AACA;AACA;AACA,+BAA6B;AAC7B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAG;AACH;AACA;;;;;;;ACxCA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,I;;;;;;ACZA;AACA;AACA;;AAEA;AACA;AACA,I;;;;;;ACNA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,I;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK,WAAW,eAAe;AAC/B;AACA,OAAK;AACL;AACA,I;;;;;;ACpBA;AACA;AACA;AACA;AACA,6DAA2D;AAC3D,I;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA,I;;;;;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA,I;;;;;;ACNA;AACA;AACA;AACA;AACA,I;;;;;;ACJA;AACA;AACA,qDAAmD;AACnD;AACA,yCAAuC;AACvC,I;;;;;;ACLA;AACA;AACA;AACA;AACA,I;;;;;;ACJA;AACA;AACA;AACA,e;;;;;;ACHA,gF;;;;;;ACAA;AACA;AACA;;AAEA;AACA,oEAAkE,+BAA+B;AACjG,I;;;;;;ACNA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,yB;;;;;;ACVA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAG;AACH,I;;;;;;ACZA;AACA;AACA;AACA;AACA,I;;;;;;ACJA;AACA;;AAEA;AACA;AACA,+BAA6B;AAC7B,gBAAc;AACd;AACA,GAAC;AACD;AACA;AACA;AACA,iCAA+B;AAC/B;AACA;AACA,YAAU;AACV,GAAC,E;;;;;;AChBD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,I;;;;;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA,I;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,I;;;;;;ACPA;AACA;AACA;AACA;AACA,2BAAyB,kBAAkB,EAAE;;AAE7C;AACA;AACA;AACA;AACA,KAAG,UAAU;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,I;;;;;;ACtBA,oBAAkB,wD;;;;;;ACAlB;AACA;AACA;AACA;AACA,I;;;;;;ACJA;AACA;AACA,gCAA8B,gCAAoC,E;;;;;;ACFlE,oBAAkB,wD;;;;;;ACAlB;AACA,uD;;;;;;ACDA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAC,E;;;;;;ACRD;AACA;AACA;AACA;AACA;AACA,gCAA8B;AAC9B;AACA;AACA,qDAAmD,OAAO,EAAE;AAC5D,I;;;;;;ACTA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA,mHAAiH,mBAAmB,EAAE,mBAAmB,4JAA4J;;AAErT,wCAAsC,uCAAuC,gBAAgB;;AAE7F;AACA;AACA,GAAC;AACD;AACA,I;;;;;;ACpBA,oBAAkB,wD;;;;;;ACAlB;AACA;AACA,yD;;;;;;ACFA,sC;;;;;;ACAA,oBAAkB,wD;;;;;;ACAlB;AACA;AACA;AACA;AACA,kD;;;;;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,wBAAsB;AACtB,sBAAoB,uBAAuB,SAAS,IAAI;AACxD,KAAG;AACH,GAAC;AACD;AACA;AACA;AACA;AACA,GAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAC;AACD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAAyD;AACzD;AACA,OAAK;AACL;AACA,wBAAsB,iCAAiC;AACvD,OAAK;AACL,KAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAA8D,8BAA8B;AAC5F;AACA;AACA;AACA;AACA,KAAG;;AAEH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,4DAA0D,gBAAgB;;AAE1E;AACA;AACA;AACA,sBAAoB,oBAAoB;;AAExC,4CAA0C,oBAAoB;;AAE9D;AACA;AACA;AACA;AACA;AACA;AACA,KAAG;AACH;AACA;AACA;AACA;AACA,KAAG;AACH,0BAAwB,eAAe,EAAE;AACzC,0BAAwB,gBAAgB;AACxC,GAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,sDAAoD,KAAK,QAAQ,iCAAiC;AAClG,GAAC;AACD;AACA,iDAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4C;;;;;;AC1OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAiD;AACjD,GAAC;AACD;AACA,uBAAqB;AACrB;AACA,WAAS;AACT,MAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,I;;;;;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA,4DAA0D,sBAAsB;AAChF,kFAAgF,sBAAsB;AACtG,I;;;;;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,I;;;;;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAG;AACH,I;;;;;;ACdA,2C;;;;;;ACAA,gBAAc,sB;;;;;;ACAd;AACA;AACA;AACA;AACA,I;;;;;;ACJA;AACA;AACA;AACA,oBAAkB;;AAElB;AACA;;AAEA;AACA;AACA;AACA,KAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;;;;;;AClBA;AACA;AACA;;AAEA;AACA;AACA,I;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAG,UAAU;AACb;AACA,I;;;;;;;;;;;;ACfA,2C;;;;;;ACAA,wC;;;;;;ACAA,oBAAkB,wD;;;;;;ACAlB;AACA,yCAAuC,0BAA0B;AACjE,0CAAwC;AACxC;AACA,I;;;;;;;;ACJA;AACA;AACAE,SAAOvQ,OAAP,GAAkB,OAAOoH,MAAP,KAAkB,WAAnB,IAAmCA,OAAO,QAAP,CAAnC,IAAuD,mBAAAtH,CAAQ,EAAR,CAAxE,C;;;;;;ACFA;AACA;AACA;AACA;AACA;;AAEA,GAAC;AACD;AACA;AACA;AACA,GAAC,qBAAqB;;AAEtB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iBAAe,gBAAgB;AAC/B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAC;AACD;AACA;AACA;;AAEA,yBAAuB,SAAS;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAe,SAAS;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA2B,sBAAsB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,6CAA2C;AAC3C,mBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;AACL;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,oFAAkF,IAAI;AACtF;;AAEA;AACA,yBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,eAAa;AACb;AACA,eAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mCAAiC;AACjC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,GAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,OAAK;;AAEL;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,gCAA8B,IAAI;;AAElC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,8BAA4B;AAC5B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,sBAAoB,iCAAiC;AACrD;AACA;AACA;AACA,OAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA,yBAAuB,wBAAwB;AAC/C;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,0LAAwL,IAAI;;AAE5L,mEAAiE,IAAI;;AAErE;;AAEA;;AAEA;AACA;AACA;AACA,4BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,wCAAsC,YAAY;AAClD;AACA;AACA,WAAS;AACT;AACA;AACA;;AAEA;AACA;AACA,qBAAmB,YAAY;AAC/B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,4BAA0B;AAC1B,8BAA4B;AAC5B,2BAAyB,EAAE,EAAE;AAC7B,2BAAyB,EAAE,EAAE;AAC7B,gCAA8B,EAAE,EAAE;AAClC,+BAA6B;AAC7B,mCAAiC;AACjC,uCAAqC;AACrC,2BAAyB,IAAI,EAAE;AAC/B,2BAAyB,IAAI,EAAE;AAC/B,gCAA8B,IAAI,EAAE;;AAEpC,6BAA2B;AAC3B,kCAAgC;;AAEhC,4CAA0C;AAC1C,mDAAiD;;AAEjD,sCAAoC,IAAI,IAAI;;AAE5C;AACA;AACA,8HAA4H,IAAI;;;AAGhI;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAK;AACL;;AAEA;AACA,4CAA0C;AAC1C;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAe,kBAAkB;AACjC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,GAAC;AACD;AACA;AACA;AACA,qBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,GAAC;;AAED;AACA;AACA,GAAC;;AAED;AACA;AACA,GAAC;;AAED;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAC;AACD;AACA;AACA,GAAC;;AAED;AACA;AACA,GAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA,GAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAmB,QAAQ;AAC3B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA,WAAS;AACT;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAe,QAAQ;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAe,QAAQ;AACvB;AACA;AACA;AACA,iBAAe,QAAQ;AACvB;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAC;;AAED;AACA;AACA,GAAC;;AAED;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAC;AACD;AACA;AACA,GAAC;AACD;AACA;AACA,GAAC;;AAED;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA,OAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA,OAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAC;;AAED;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA,GAAC;;AAED;AACA;AACA,GAAC;;AAED;AACA;AACA,GAAC;;AAED;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAC;AACD;AACA;AACA,GAAC;AACD;AACA;AACA,GAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA,GAAC;;AAED;AACA;AACA,GAAC;;AAED;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,qBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA,WAAS;AACT;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,iBAAe,OAAO;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA,WAAS;AACT;AACA,WAAS;AACT;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAC;;AAED;AACA;AACA;AACA,GAAC;;AAED;AACA;AACA,GAAC;;AAED;AACA;AACA;AACA,GAAC;;AAED;AACA;AACA;AACA,OAAK;AACL;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAC;AACD;AACA;AACA;AACA,GAAC;AACD;AACA;AACA;AACA;AACA;AACA,GAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAC;AACD;AACA;AACA;AACA;AACA,GAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,GAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS,YAAY;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA,eAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,mBAAiB;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,eAAa;AACb;;AAEA;AACA;AACA;AACA;;;AAGA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA,eAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,yCAAuC,EAAE,IAAI,EAAE;AAC/C,sCAAoC,EAAE,IAAI,EAAE;;AAE5C;;AAEA;AACA,+BAA6B,EAAE;AAC/B,yBAAuB,EAAE;AACzB,2BAAyB,EAAE;AAC3B,yBAAuB,EAAE;AACzB,uBAAqB,EAAE,IAAI,EAAE;AAC7B,sBAAoB,EAAE;AACtB,6BAA2B,GAAG;AAC9B,uBAAqB,EAAE;AACvB;AACA,yBAAuB,EAAE,IAAI,EAAE;AAC/B,wBAAsB,EAAE,IAAI,EAAE;AAC9B,sBAAoB,EAAE;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,0CAAwC,OAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA4C,OAAO;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAe,+BAA+B;AAC9C;AACA;;AAEA;AACA,YAAU,OAAO;AACjB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,iBAAe,mBAAmB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,iBAAe,sBAAsB;AACrC;AACA,oCAAkC;AAClC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAK;;AAEL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,gCAA8B,gBAAgB;AAC9C;;AAEA;AACA;AACA;;AAEA;AACA;AACA,OAAK;AACL;AACA,OAAK;AACL;AACA,OAAK;AACL;AACA,OAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA,OAAK;AACL;AACA,OAAK;AACL;AACA;AACA,WAAS;AACT;AACA,OAAK;AACL;AACA,OAAK;AACL;AACA;AACA,OAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAe,oBAAoB;AACnC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iCAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;AACL;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAC;;AAED;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,OAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;AACA,WAAS;AACT;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK,6BAA6B;AAClC;AACA,OAAK;AACL;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAe;;AAEf;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kBAAgB;AAChB;;AAEA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAsB,cAAc;AACpC;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA,OAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iCAA+B,qBAAqB;AACpD,OAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iCAA+B,qBAAqB;AACpD,OAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,sBAAoB;AACpB;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,GAAC;;AAED;AACA;AACA,GAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;;;AAGA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAC;;AAED;AACA;AACA,GAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,GAAC;;AAED;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAC;;AAED;AACA;AACA;AACA,GAAC;;AAED;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAC;;AAED;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA,GAAC;;AAED;AACA;AACA,GAAC;;AAED;AACA;AACA;AACA,GAAC;AACD;AACA;AACA,GAAC;AACD;AACA;AACA,GAAC;AACD;AACA;AACA,GAAC;AACD;AACA;AACA,GAAC;AACD;AACA;AACA,GAAC;;;AAGD;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,sBAAoB,mBAAmB;AACvC;AACA;;AAEA;AACA;AACA;;AAEA,mBAAiB,mBAAmB;AACpC;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iBAAe,QAAQ;AACvB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,iBAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,wBAAsB,IAAI;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAC;;AAED;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAC;AACD;AACA;AACA,GAAC;;AAED;;;AAGA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,GAAC;;;;;;;;AC5sID;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACTA;AACA;AACA;AACA,oCAAkC,WAAW;AAC7C;AACA;AACA;;;;;;;;;ACNA,MAAI0Q,IAAJ;;AAEA,MAAIC,YAAY,OAAOrJ,MAAP,KAAkB,WAAlB,GACVA,MADU,GAEV,OAAOsJ,MAAP,KAAkB,WAAlB,GAAgCA,MAAhC,GAAyC,IAF/C;;AAIA,MAAID,aAAaA,UAAUE,MAAvB,IAAiCA,OAAOC,eAA5C,EAA6D;AAC3D;AACA;AACA,QAAIC,SAAS,IAAIC,UAAJ,CAAe,EAAf,CAAb;AACAN,WAAO,SAASO,SAAT,GAAqB;AAC1BJ,aAAOC,eAAP,CAAuBC,MAAvB;AACA,aAAOA,MAAP;AACD,KAHD;AAID;;AAED,MAAI,CAACL,IAAL,EAAW;AACT;AACA;AACA;AACA;AACA,QAAIQ,QAAQ,IAAI9N,KAAJ,CAAU,EAAV,CAAZ;AACAsN,WAAO,gBAAY;AACjB,WAAK,IAAI5N,IAAI,CAAR,EAAW8F,CAAhB,EAAmB9F,IAAI,EAAvB,EAA2BA,GAA3B,EAAgC;AAC9B,YAAI,CAACA,IAAI,IAAL,MAAe,CAAnB,EAAsB8F,IAAInH,KAAK0P,MAAL,KAAgB,WAApB;AACtBD,cAAMpO,CAAN,IAAW8F,OAAO,CAAC9F,IAAI,IAAL,KAAc,CAArB,IAA0B,IAArC;AACD;;AAED,aAAOoO,KAAP;AACD,KAPD;AAQD;;AAED;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA,MAAIE,aAAa,EAAjB;AACA,MAAIC,aAAa,EAAjB;AACA,OAAK,IAAIvO,IAAI,CAAb,EAAgBA,IAAI,GAApB,EAAyBA,GAAzB,EAA8B;AAC5BsO,eAAWtO,CAAX,IAAgB,CAACA,IAAI,KAAL,EAAY2G,QAAZ,CAAqB,EAArB,EAAyBL,MAAzB,CAAgC,CAAhC,CAAhB;AACAiI,eAAWD,WAAWtO,CAAX,CAAX,IAA4BA,CAA5B;AACD;;AAED;AACA,WAAShC,KAAT,CAAesJ,CAAf,EAAkBkH,GAAlB,EAAuBC,MAAvB,EAA+B;AAC7B,QAAIzO,IAAKwO,OAAOC,MAAR,IAAmB,CAA3B;AAAA,QAA8BC,KAAK,CAAnC;;AAEAF,UAAMA,OAAO,EAAb;AACAlH,MAAEqH,WAAF,GAAgB/I,OAAhB,CAAwB,cAAxB,EAAwC,UAAUgJ,GAAV,EAAe;AACrD,UAAIF,KAAK,EAAT,EAAa;AAAE;AACbF,YAAIxO,IAAI0O,IAAR,IAAgBH,WAAWK,GAAX,CAAhB;AACD;AACF,KAJD;;AAMA;AACA,WAAOF,KAAK,EAAZ,EAAgB;AACdF,UAAIxO,IAAI0O,IAAR,IAAgB,CAAhB;AACD;;AAED,WAAOF,GAAP;AACD;;AAED;AACA,WAASK,OAAT,CAAiBL,GAAjB,EAAsBC,MAAtB,EAA8B;AAC5B,QAAIzO,IAAIyO,UAAU,CAAlB;AAAA,QAAqBK,MAAMR,UAA3B;AACA,WAAOQ,IAAIN,IAAIxO,GAAJ,CAAJ,IAAgB8O,IAAIN,IAAIxO,GAAJ,CAAJ,CAAhB,GACH8O,IAAIN,IAAIxO,GAAJ,CAAJ,CADG,GACa8O,IAAIN,IAAIxO,GAAJ,CAAJ,CADb,GAC6B,GAD7B,GAEH8O,IAAIN,IAAIxO,GAAJ,CAAJ,CAFG,GAEa8O,IAAIN,IAAIxO,GAAJ,CAAJ,CAFb,GAE6B,GAF7B,GAGH8O,IAAIN,IAAIxO,GAAJ,CAAJ,CAHG,GAGa8O,IAAIN,IAAIxO,GAAJ,CAAJ,CAHb,GAG6B,GAH7B,GAIH8O,IAAIN,IAAIxO,GAAJ,CAAJ,CAJG,GAIa8O,IAAIN,IAAIxO,GAAJ,CAAJ,CAJb,GAI6B,GAJ7B,GAKH8O,IAAIN,IAAIxO,GAAJ,CAAJ,CALG,GAKa8O,IAAIN,IAAIxO,GAAJ,CAAJ,CALb,GAMH8O,IAAIN,IAAIxO,GAAJ,CAAJ,CANG,GAMa8O,IAAIN,IAAIxO,GAAJ,CAAJ,CANb,GAOH8O,IAAIN,IAAIxO,GAAJ,CAAJ,CAPG,GAOa8O,IAAIN,IAAIxO,GAAJ,CAAJ,CAPpB;AAQD;;AAED;AACA;AACA;AACA;;AAEA;AACA,MAAI+O,aAAanB,MAAjB;;AAEA;AACA,MAAIoB,UAAU,CACZD,WAAW,CAAX,IAAgB,IADJ,EAEZA,WAAW,CAAX,CAFY,EAEGA,WAAW,CAAX,CAFH,EAEkBA,WAAW,CAAX,CAFlB,EAEiCA,WAAW,CAAX,CAFjC,EAEgDA,WAAW,CAAX,CAFhD,CAAd;;AAKA;AACA,MAAIE,YAAY,CAACF,WAAW,CAAX,KAAiB,CAAjB,GAAqBA,WAAW,CAAX,CAAtB,IAAuC,MAAvD;;AAEA;AACA,MAAIG,aAAa,CAAjB;AAAA,MAAoBC,aAAa,CAAjC;;AAEA;AACA,WAASC,EAAT,CAAY/E,OAAZ,EAAqBmE,GAArB,EAA0BC,MAA1B,EAAkC;AAChC,QAAIzO,IAAIwO,OAAOC,MAAP,IAAiB,CAAzB;AACA,QAAI7O,IAAI4O,OAAO,EAAf;;AAEAnE,cAAUA,WAAW,EAArB;;AAEA,QAAIgF,WAAWhF,QAAQgF,QAAR,KAAqBvP,SAArB,GAAiCuK,QAAQgF,QAAzC,GAAoDJ,SAAnE;;AAEA;AACA;AACA;AACA;AACA,QAAIK,QAAQjF,QAAQiF,KAAR,KAAkBxP,SAAlB,GAA8BuK,QAAQiF,KAAtC,GAA8C,IAAIvQ,IAAJ,GAAWwQ,OAAX,EAA1D;;AAEA;AACA;AACA,QAAIC,QAAQnF,QAAQmF,KAAR,KAAkB1P,SAAlB,GAA8BuK,QAAQmF,KAAtC,GAA8CL,aAAa,CAAvE;;AAEA;AACA,QAAIM,KAAMH,QAAQJ,UAAT,GAAuB,CAACM,QAAQL,UAAT,IAAuB,KAAvD;;AAEA;AACA,QAAIM,KAAK,CAAL,IAAUpF,QAAQgF,QAAR,KAAqBvP,SAAnC,EAA8C;AAC5CuP,iBAAWA,WAAW,CAAX,GAAe,MAA1B;AACD;;AAED;AACA;AACA,QAAI,CAACI,KAAK,CAAL,IAAUH,QAAQJ,UAAnB,KAAkC7E,QAAQmF,KAAR,KAAkB1P,SAAxD,EAAmE;AACjE0P,cAAQ,CAAR;AACD;;AAED;AACA,QAAIA,SAAS,KAAb,EAAoB;AAClB,YAAM,IAAIhP,KAAJ,CAAU,kDAAV,CAAN;AACD;;AAED0O,iBAAaI,KAAb;AACAH,iBAAaK,KAAb;AACAP,gBAAYI,QAAZ;;AAEA;AACAC,aAAS,cAAT;;AAEA;AACA,QAAII,KAAK,CAAC,CAACJ,QAAQ,SAAT,IAAsB,KAAtB,GAA8BE,KAA/B,IAAwC,WAAjD;AACA5P,MAAEI,GAAF,IAAS0P,OAAO,EAAP,GAAY,IAArB;AACA9P,MAAEI,GAAF,IAAS0P,OAAO,EAAP,GAAY,IAArB;AACA9P,MAAEI,GAAF,IAAS0P,OAAO,CAAP,GAAW,IAApB;AACA9P,MAAEI,GAAF,IAAS0P,KAAK,IAAd;;AAEA;AACA,QAAIC,MAAOL,QAAQ,WAAR,GAAsB,KAAvB,GAAgC,SAA1C;AACA1P,MAAEI,GAAF,IAAS2P,QAAQ,CAAR,GAAY,IAArB;AACA/P,MAAEI,GAAF,IAAS2P,MAAM,IAAf;;AAEA;AACA/P,MAAEI,GAAF,IAAS2P,QAAQ,EAAR,GAAa,GAAb,GAAmB,IAA5B,CAzDgC,CAyDE;AAClC/P,MAAEI,GAAF,IAAS2P,QAAQ,EAAR,GAAa,IAAtB;;AAEA;AACA/P,MAAEI,GAAF,IAASqP,aAAa,CAAb,GAAiB,IAA1B;;AAEA;AACAzP,MAAEI,GAAF,IAASqP,WAAW,IAApB;;AAEA;AACA,QAAIO,OAAOvF,QAAQuF,IAAR,IAAgBZ,OAA3B;AACA,SAAK,IAAIa,IAAI,CAAb,EAAgBA,IAAI,CAApB,EAAuBA,GAAvB,EAA4B;AAC1BjQ,QAAEI,IAAI6P,CAAN,IAAWD,KAAKC,CAAL,CAAX;AACD;;AAED,WAAOrB,MAAMA,GAAN,GAAYK,QAAQjP,CAAR,CAAnB;AACD;;AAED;;AAEA;AACA,WAASP,EAAT,CAAYgL,OAAZ,EAAqBmE,GAArB,EAA0BC,MAA1B,EAAkC;AAChC;AACA,QAAIzO,IAAIwO,OAAOC,MAAP,IAAiB,CAAzB;;AAEA,QAAI,OAAOpE,OAAP,IAAmB,QAAvB,EAAiC;AAC/BmE,YAAMnE,WAAW,QAAX,GAAsB,IAAI/J,KAAJ,CAAU,EAAV,CAAtB,GAAsC,IAA5C;AACA+J,gBAAU,IAAV;AACD;AACDA,cAAUA,WAAW,EAArB;;AAEA,QAAIyF,OAAOzF,QAAQgE,MAAR,IAAkB,CAAChE,QAAQ0F,GAAR,IAAenC,IAAhB,GAA7B;;AAEA;AACAkC,SAAK,CAAL,IAAWA,KAAK,CAAL,IAAU,IAAX,GAAmB,IAA7B;AACAA,SAAK,CAAL,IAAWA,KAAK,CAAL,IAAU,IAAX,GAAmB,IAA7B;;AAEA;AACA,QAAItB,GAAJ,EAAS;AACP,WAAK,IAAIE,KAAK,CAAd,EAAiBA,KAAK,EAAtB,EAA0BA,IAA1B,EAAgC;AAC9BF,YAAIxO,IAAI0O,EAAR,IAAcoB,KAAKpB,EAAL,CAAd;AACD;AACF;;AAED,WAAOF,OAAOK,QAAQiB,IAAR,CAAd;AACD;;AAED;AACA,MAAIxS,OAAO+B,EAAX;AACA/B,OAAK8R,EAAL,GAAUA,EAAV;AACA9R,OAAK+B,EAAL,GAAUA,EAAV;AACA/B,OAAKU,KAAL,GAAaA,KAAb;AACAV,OAAKuR,OAAL,GAAeA,OAAf;;AAEAlB,SAAOvQ,OAAP,GAAiBE,IAAjB,C;;;;;;;;;ACvNA;AACAF,UAAQH,IAAR,GAAe,mBAAAC,CAAQ,CAAR,CAAf;AACAE,UAAQ4S,OAAR,GAAkB,mBAAA9S,CAAQ,EAAR,CAAlB;;AAEA;AACAE,UAAQ6S,OAAR,GAAkB,mBAAA/S,CAAQ,EAAR,CAAlB;AACAE,UAAQ8S,QAAR,GAAmB,mBAAAhT,CAAQ,EAAR,CAAnB;AACAE,UAAQ+S,KAAR,GAAgB,mBAAAjT,CAAQ,EAAR,CAAhB;;AAEA;AACAE,UAAQgT,OAAR,GAAkB,mBAAAlT,CAAQ,EAAR,CAAlB;AACAE,UAAQiT,OAAR,GAAkB;AAChBC,YAAQ,mBAAApT,CAAQ,EAAR,CADQ;AAEhBqT,YAAQ,mBAAArT,CAAQ,GAAR,CAFQ;AAGhBsT,aAAS,mBAAAtT,CAAQ,EAAR,CAHO;AAIhBuT,aAAS,mBAAAvT,CAAQ,EAAR,CAJO;AAKhBwT,YAAQ,mBAAAxT,CAAQ,GAAR,CALQ;AAMhByT,gBAAY,mBAAAzT,CAAQ,GAAR;AANI,GAAlB;;AASA;AACAE,UAAQC,MAAR,GAAiB,mBAAAH,CAAQ,EAAR,CAAjB;AACAE,UAAQwT,MAAR,GAAiB,mBAAA1T,CAAQ,GAAR,CAAjB;AACAE,UAAQyT,QAAR,GAAmB,mBAAA3T,CAAQ,GAAR,CAAnB,C;;;;;;;;ACvBA;;AAEA;;;;;AAKAE,UAAQ0T,eAAR,GAA0B,UAASC,aAAT,EAAwB;AAChD;AACA,SAAK,IAAIC,WAAT,IAAwBD,aAAxB,EAAuC;AACrC,UAAIA,cAActR,cAAd,CAA6BuR,WAA7B,CAAJ,EAA+C;AAC7CD,sBAAcC,WAAd,EAA2BC,SAA3B,GAAuCF,cAAcC,WAAd,EAA2BE,IAAlE;AACAH,sBAAcC,WAAd,EAA2BE,IAA3B,GAAkC,EAAlC;AACD;AACF;AACF,GARD;;AAUA;;;;;;;AAOA9T,UAAQ+T,eAAR,GAA0B,UAASJ,aAAT,EAAwB;AAChD;AACA,SAAK,IAAIC,WAAT,IAAwBD,aAAxB,EAAuC;AACrC,UAAIA,cAActR,cAAd,CAA6BuR,WAA7B,CAAJ,EAA+C;AAC7C,YAAID,cAAcC,WAAd,EAA2BC,SAA/B,EAA0C;AACxC,eAAK,IAAIjR,IAAI,CAAb,EAAgBA,IAAI+Q,cAAcC,WAAd,EAA2BC,SAA3B,CAAqC/Q,MAAzD,EAAiEF,GAAjE,EAAsE;AACpE+Q,0BAAcC,WAAd,EAA2BC,SAA3B,CAAqCjR,CAArC,EAAwC8E,UAAxC,CAAmDzG,WAAnD,CAA+D0S,cAAcC,WAAd,EAA2BC,SAA3B,CAAqCjR,CAArC,CAA/D;AACD;AACD+Q,wBAAcC,WAAd,EAA2BC,SAA3B,GAAuC,EAAvC;AACD;AACF;AACF;AACF,GAZD;;AAcA;;;;AAIA7T,UAAQgU,aAAR,GAAwB,UAASL,aAAT,EAAwB;AAC9C3T,YAAQ0T,eAAR,CAAwBC,aAAxB;AACA3T,YAAQ+T,eAAR,CAAwBJ,aAAxB;AACA3T,YAAQ0T,eAAR,CAAwBC,aAAxB;AACD,GAJD;;AAMA;;;;;;;;;;AAUA3T,UAAQiU,aAAR,GAAwB,UAAUL,WAAV,EAAuBD,aAAvB,EAAsCO,YAAtC,EAAoD;AAC1E,QAAIzN,OAAJ;AACA;AACA,QAAIkN,cAActR,cAAd,CAA6BuR,WAA7B,CAAJ,EAA+C;AAAE;AAC/C;AACA,UAAID,cAAcC,WAAd,EAA2BC,SAA3B,CAAqC/Q,MAArC,GAA8C,CAAlD,EAAqD;AACnD2D,kBAAUkN,cAAcC,WAAd,EAA2BC,SAA3B,CAAqC,CAArC,CAAV;AACAF,sBAAcC,WAAd,EAA2BC,SAA3B,CAAqCM,KAArC;AACD,OAHD,MAIK;AACH;AACA1N,kBAAU2I,SAASgF,eAAT,CAAyB,4BAAzB,EAAuDR,WAAvD,CAAV;AACAM,qBAAatE,WAAb,CAAyBnJ,OAAzB;AACD;AACF,KAXD,MAYK;AACH;AACAA,gBAAU2I,SAASgF,eAAT,CAAyB,4BAAzB,EAAuDR,WAAvD,CAAV;AACAD,oBAAcC,WAAd,IAA6B,EAACE,MAAM,EAAP,EAAWD,WAAW,EAAtB,EAA7B;AACAK,mBAAatE,WAAb,CAAyBnJ,OAAzB;AACD;AACDkN,kBAAcC,WAAd,EAA2BE,IAA3B,CAAgCjQ,IAAhC,CAAqC4C,OAArC;AACA,WAAOA,OAAP;AACD,GAvBD;;AA0BA;;;;;;;;;;AAUAzG,UAAQqU,aAAR,GAAwB,UAAUT,WAAV,EAAuBD,aAAvB,EAAsCW,YAAtC,EAAoDC,YAApD,EAAkE;AACxF,QAAI9N,OAAJ;AACA;AACA,QAAIkN,cAActR,cAAd,CAA6BuR,WAA7B,CAAJ,EAA+C;AAAE;AAC/C;AACA,UAAID,cAAcC,WAAd,EAA2BC,SAA3B,CAAqC/Q,MAArC,GAA8C,CAAlD,EAAqD;AACnD2D,kBAAUkN,cAAcC,WAAd,EAA2BC,SAA3B,CAAqC,CAArC,CAAV;AACAF,sBAAcC,WAAd,EAA2BC,SAA3B,CAAqCM,KAArC;AACD,OAHD,MAIK;AACH;AACA1N,kBAAU2I,SAASC,aAAT,CAAuBuE,WAAvB,CAAV;AACA,YAAIW,iBAAiB7R,SAArB,EAAgC;AAC9B4R,uBAAaC,YAAb,CAA0B9N,OAA1B,EAAmC8N,YAAnC;AACD,SAFD,MAGK;AACHD,uBAAa1E,WAAb,CAAyBnJ,OAAzB;AACD;AACF;AACF,KAhBD,MAiBK;AACH;AACAA,gBAAU2I,SAASC,aAAT,CAAuBuE,WAAvB,CAAV;AACAD,oBAAcC,WAAd,IAA6B,EAACE,MAAM,EAAP,EAAWD,WAAW,EAAtB,EAA7B;AACA,UAAIU,iBAAiB7R,SAArB,EAAgC;AAC9B4R,qBAAaC,YAAb,CAA0B9N,OAA1B,EAAmC8N,YAAnC;AACD,OAFD,MAGK;AACHD,qBAAa1E,WAAb,CAAyBnJ,OAAzB;AACD;AACF;AACDkN,kBAAcC,WAAd,EAA2BE,IAA3B,CAAgCjQ,IAAhC,CAAqC4C,OAArC;AACA,WAAOA,OAAP;AACD,GAjCD;;AAsCA;;;;;;;;;;;;;AAaAzG,UAAQwU,SAAR,GAAoB,UAASC,CAAT,EAAYC,CAAZ,EAAeC,aAAf,EAA8BhB,aAA9B,EAA6CO,YAA7C,EAA2DU,QAA3D,EAAqE;AACvF,QAAIC,KAAJ;AACA,QAAIF,cAActJ,KAAd,IAAuB,QAA3B,EAAqC;AACnCwJ,cAAQ7U,QAAQiU,aAAR,CAAsB,QAAtB,EAAgCN,aAAhC,EAA+CO,YAA/C,CAAR;AACAW,YAAMC,cAAN,CAAqB,IAArB,EAA2B,IAA3B,EAAiCL,CAAjC;AACAI,YAAMC,cAAN,CAAqB,IAArB,EAA2B,IAA3B,EAAiCJ,CAAjC;AACAG,YAAMC,cAAN,CAAqB,IAArB,EAA2B,GAA3B,EAAgC,MAAMH,cAAcI,IAApD;AACD,KALD,MAMK;AACHF,cAAQ7U,QAAQiU,aAAR,CAAsB,MAAtB,EAA8BN,aAA9B,EAA6CO,YAA7C,CAAR;AACAW,YAAMC,cAAN,CAAqB,IAArB,EAA2B,GAA3B,EAAgCL,IAAI,MAAME,cAAcI,IAAxD;AACAF,YAAMC,cAAN,CAAqB,IAArB,EAA2B,GAA3B,EAAgCJ,IAAI,MAAMC,cAAcI,IAAxD;AACAF,YAAMC,cAAN,CAAqB,IAArB,EAA2B,OAA3B,EAAoCH,cAAcI,IAAlD;AACAF,YAAMC,cAAN,CAAqB,IAArB,EAA2B,QAA3B,EAAqCH,cAAcI,IAAnD;AACD;;AAED,QAAIJ,cAAcvJ,MAAd,KAAyB1I,SAA7B,EAAwC;AACtCmS,YAAMC,cAAN,CAAqB,IAArB,EAA2B,OAA3B,EAAoCH,cAAcvJ,MAAlD;AACD;AACDyJ,UAAMC,cAAN,CAAqB,IAArB,EAA2B,OAA3B,EAAoCH,cAAcpP,SAAd,GAA0B,YAA9D;AACA;;;AAGA,QAAIqP,QAAJ,EAAc;AACZ,UAAII,QAAQhV,QAAQiU,aAAR,CAAsB,MAAtB,EAA8BN,aAA9B,EAA6CO,YAA7C,CAAZ;AACA,UAAIU,SAASK,OAAb,EAAsB;AACpBR,YAAIA,IAAIG,SAASK,OAAjB;AACD;;AAED,UAAIL,SAASM,OAAb,EAAsB;AACpBR,YAAIA,IAAIE,SAASM,OAAjB;AACD;AACD,UAAIN,SAASO,OAAb,EAAsB;AACpBH,cAAMI,WAAN,GAAoBR,SAASO,OAA7B;AACD;;AAED,UAAIP,SAASrP,SAAb,EAAwB;AACtByP,cAAMF,cAAN,CAAqB,IAArB,EAA2B,OAA3B,EAAoCF,SAASrP,SAAT,GAAsB,YAA1D;AACD;AACDyP,YAAMF,cAAN,CAAqB,IAArB,EAA2B,GAA3B,EAAgCL,CAAhC;AACAO,YAAMF,cAAN,CAAqB,IAArB,EAA2B,GAA3B,EAAgCJ,CAAhC;AACD;;AAED,WAAOG,KAAP;AACD,GA5CD;;AA8CA;;;;;;;AAOA7U,UAAQqV,OAAR,GAAkB,UAAUZ,CAAV,EAAaC,CAAb,EAAgBpF,KAAhB,EAAuBC,MAAvB,EAA+BhK,SAA/B,EAA0CoO,aAA1C,EAAyDO,YAAzD,EAAuE7I,KAAvE,EAA8E;AAC9F,QAAIkE,UAAU,CAAd,EAAiB;AACf,UAAIA,SAAS,CAAb,EAAgB;AACdA,kBAAU,CAAC,CAAX;AACAmF,aAAKnF,MAAL;AACD;AACD,UAAI+F,OAAOtV,QAAQiU,aAAR,CAAsB,MAAtB,EAA6BN,aAA7B,EAA4CO,YAA5C,CAAX;AACAoB,WAAKR,cAAL,CAAoB,IAApB,EAA0B,GAA1B,EAA+BL,IAAI,MAAMnF,KAAzC;AACAgG,WAAKR,cAAL,CAAoB,IAApB,EAA0B,GAA1B,EAA+BJ,CAA/B;AACAY,WAAKR,cAAL,CAAoB,IAApB,EAA0B,OAA1B,EAAmCxF,KAAnC;AACAgG,WAAKR,cAAL,CAAoB,IAApB,EAA0B,QAA1B,EAAoCvF,MAApC;AACA+F,WAAKR,cAAL,CAAoB,IAApB,EAA0B,OAA1B,EAAmCvP,SAAnC;AACA,UAAI8F,KAAJ,EAAW;AACTiK,aAAKR,cAAL,CAAoB,IAApB,EAA0B,OAA1B,EAAmCzJ,KAAnC;AACD;AACF;AACF,GAhBD,C;;;;;;;;;;;;;;;;;;;;;;ACtMA,MAAIxL,OAAO,mBAAAC,CAAQ,CAAR,CAAX;AACA,MAAIiT,QAAQ,mBAAAjT,CAAQ,EAAR,CAAZ;;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CA;AACA,WAAS+S,OAAT,CAAkB0C,IAAlB,EAAwBtI,OAAxB,EAAiC;AAC/B;AACA,QAAIsI,QAAQ,CAACrS,MAAMC,OAAN,CAAcoS,IAAd,CAAb,EAAkC;AAChCtI,gBAAUsI,IAAV;AACAA,aAAO,IAAP;AACD;;AAED,SAAKC,QAAL,GAAgBvI,WAAW,EAA3B;AACA,SAAKwI,KAAL,GAAa,EAAb,CAR+B,CAQkB;AACjD,SAAK3S,MAAL,GAAc,CAAd,CAT+B,CASkB;AACjD,SAAK4S,QAAL,GAAgB,KAAKF,QAAL,CAAcG,OAAd,IAAyB,IAAzC,CAV+B,CAUkB;AACjD,SAAKC,KAAL,GAAa,EAAb,CAX+B,CAWkB;;AAEjD;AACA;AACA,QAAI,KAAKJ,QAAL,CAAcvR,IAAlB,EAAwB;AACtB,UAAIsI,SAAS,uBAAY,KAAKiJ,QAAL,CAAcvR,IAA1B,CAAb;AACA,WAAK,IAAIrB,IAAI,CAAR,EAAWmB,MAAMwI,OAAOzJ,MAA7B,EAAqCF,IAAImB,GAAzC,EAA8CnB,GAA9C,EAAmD;AACjD,YAAI2K,QAAQhB,OAAO3J,CAAP,CAAZ;AACA,YAAInC,QAAQ,KAAK+U,QAAL,CAAcvR,IAAd,CAAmBsJ,KAAnB,CAAZ;AACA,YAAI9M,SAAS,MAAT,IAAmBA,SAAS,SAA5B,IAAyCA,SAAS,SAAtD,EAAiE;AAC/D,eAAKmV,KAAL,CAAWrI,KAAX,IAAoB,MAApB;AACD,SAFD,MAGK;AACH,eAAKqI,KAAL,CAAWrI,KAAX,IAAoB9M,KAApB;AACD;AACF;AACF;;AAED;AACA,QAAI,KAAK+U,QAAL,CAAcxR,OAAlB,EAA2B;AACzB,YAAM,IAAIZ,KAAJ,CAAU,qDAAV,CAAN;AACD;;AAED,SAAKyS,YAAL,GAAoB,EAApB,CAlC+B,CAkCN;;AAEzB;AACA,QAAIN,IAAJ,EAAU;AACR,WAAKO,GAAL,CAASP,IAAT;AACD;;AAED,SAAKQ,UAAL,CAAgB9I,OAAhB;AACD;;AAED;;;;;;;;;AASA4F,UAAQmD,SAAR,CAAkBD,UAAlB,GAA+B,UAAS9I,OAAT,EAAkB;AAC/C,QAAIA,WAAWA,QAAQgJ,KAAR,KAAkBvT,SAAjC,EAA4C;AAC1C,UAAIuK,QAAQgJ,KAAR,KAAkB,KAAtB,EAA6B;AAC3B;AACA,YAAI,KAAKC,MAAT,EAAiB;AACf,eAAKA,MAAL,CAAYC,OAAZ;AACA,iBAAO,KAAKD,MAAZ;AACD;AACF,OAND,MAOK;AACH;AACA,YAAI,CAAC,KAAKA,MAAV,EAAkB;AAChB,eAAKA,MAAL,GAAcnD,MAAMhT,MAAN,CAAa,IAAb,EAAmB;AAC/ByI,qBAAS,CAAC,KAAD,EAAQ,QAAR,EAAkB,QAAlB;AADsB,WAAnB,CAAd;AAGD;;AAED,YAAI,yBAAOyE,QAAQgJ,KAAf,MAAyB,QAA7B,EAAuC;AACrC,eAAKC,MAAL,CAAYH,UAAZ,CAAuB9I,QAAQgJ,KAA/B;AACD;AACF;AACF;AACF,GAtBD;;AAwBA;;;;;;;;;AASApD,UAAQmD,SAAR,CAAkBI,EAAlB,GAAuB,UAASjP,KAAT,EAAgBpB,QAAhB,EAA0B;AAC/C,QAAIsQ,cAAc,KAAKR,YAAL,CAAkB1O,KAAlB,CAAlB;AACA,QAAI,CAACkP,WAAL,EAAkB;AAChBA,oBAAc,EAAd;AACA,WAAKR,YAAL,CAAkB1O,KAAlB,IAA2BkP,WAA3B;AACD;;AAEDA,gBAAYxS,IAAZ,CAAiB;AACfkC,gBAAUA;AADK,KAAjB;AAGD,GAVD;;AAYA;AACA8M,UAAQmD,SAAR,CAAkBM,SAAlB,GAA8B,YAAY;AACxC,UAAM,IAAIlT,KAAJ,CAAU,0DAAV,CAAN;AACD,GAFD;;AAIA;;;;;AAKAyP,UAAQmD,SAAR,CAAkBO,GAAlB,GAAwB,UAASpP,KAAT,EAAgBpB,QAAhB,EAA0B;AAChD,QAAIsQ,cAAc,KAAKR,YAAL,CAAkB1O,KAAlB,CAAlB;AACA,QAAIkP,WAAJ,EAAiB;AACf,WAAKR,YAAL,CAAkB1O,KAAlB,IAA2BkP,YAAYG,MAAZ,CAAmB;AAAA,eAAY7P,SAASZ,QAAT,IAAqBA,QAAjC;AAAA,OAAnB,CAA3B;AACD;AACF,GALD;;AAOA;AACA8M,UAAQmD,SAAR,CAAkBS,WAAlB,GAAgC,YAAY;AAC1C,UAAM,IAAIrT,KAAJ,CAAU,6DAAV,CAAN;AACD,GAFD;;AAIA;;;;;;;AAOAyP,UAAQmD,SAAR,CAAkBU,QAAlB,GAA6B,UAAUvP,KAAV,EAAiBwP,MAAjB,EAAyBC,QAAzB,EAAmC;AAC9D,QAAIzP,SAAS,GAAb,EAAkB;AAChB,YAAM,IAAI/D,KAAJ,CAAU,wBAAV,CAAN;AACD;;AAED,QAAIiT,cAAc,EAAlB;AACA,QAAIlP,SAAS,KAAK0O,YAAlB,EAAgC;AAC9BQ,oBAAcA,YAAYQ,MAAZ,CAAmB,KAAKhB,YAAL,CAAkB1O,KAAlB,CAAnB,CAAd;AACD;AACD,QAAI,OAAO,KAAK0O,YAAhB,EAA8B;AAC5BQ,oBAAcA,YAAYQ,MAAZ,CAAmB,KAAKhB,YAAL,CAAkB,GAAlB,CAAnB,CAAd;AACD;;AAED,SAAK,IAAIjT,IAAI,CAAR,EAAWmB,MAAMsS,YAAYvT,MAAlC,EAA0CF,IAAImB,GAA9C,EAAmDnB,GAAnD,EAAwD;AACtD,UAAIkU,aAAaT,YAAYzT,CAAZ,CAAjB;AACA,UAAIkU,WAAW/Q,QAAf,EAAyB;AACvB+Q,mBAAW/Q,QAAX,CAAoBoB,KAApB,EAA2BwP,MAA3B,EAAmCC,YAAY,IAA/C;AACD;AACF;AACF,GAnBD;;AAqBA;;;;;;;AAOA/D,UAAQmD,SAAR,CAAkBF,GAAlB,GAAwB,UAAUP,IAAV,EAAgBqB,QAAhB,EAA0B;AAChD,QAAIG,WAAW,EAAf;AAAA,QACIC,EADJ;AAAA,QAEIC,KAAK,IAFT;;AAIA,QAAI/T,MAAMC,OAAN,CAAcoS,IAAd,CAAJ,EAAyB;AACvB;AACA,WAAK,IAAI3S,IAAI,CAAR,EAAWmB,MAAMwR,KAAKzS,MAA3B,EAAmCF,IAAImB,GAAvC,EAA4CnB,GAA5C,EAAiD;AAC/CoU,aAAKC,GAAGC,QAAH,CAAY3B,KAAK3S,CAAL,CAAZ,CAAL;AACAmU,iBAASlT,IAAT,CAAcmT,EAAd;AACD;AACF,KAND,MAOK,IAAIzB,gBAAgB9R,MAApB,EAA4B;AAC/B;AACAuT,WAAKC,GAAGC,QAAH,CAAY3B,IAAZ,CAAL;AACAwB,eAASlT,IAAT,CAAcmT,EAAd;AACD,KAJI,MAKA;AACH,YAAM,IAAI5T,KAAJ,CAAU,kBAAV,CAAN;AACD;;AAED,QAAI2T,SAASjU,MAAb,EAAqB;AACnB,WAAK4T,QAAL,CAAc,KAAd,EAAqB,EAACS,OAAOJ,QAAR,EAArB,EAAwCH,QAAxC;AACD;;AAED,WAAOG,QAAP;AACD,GA1BD;;AA4BA;;;;;;AAMAlE,UAAQmD,SAAR,CAAkBoB,MAAlB,GAA2B,UAAU7B,IAAV,EAAgBqB,QAAhB,EAA0B;AACnD,QAAIG,WAAW,EAAf;AACA,QAAIM,aAAa,EAAjB;AACA,QAAIC,UAAU,EAAd;AACA,QAAIC,cAAc,EAAlB;AACA,QAAIN,KAAK,IAAT;AACA,QAAItB,UAAUsB,GAAGvB,QAAjB;;AAEA,QAAI8B,cAAc,SAAdA,WAAc,CAAU1J,IAAV,EAAgB;AAChC,UAAIkJ,KAAKlJ,KAAK6H,OAAL,CAAT;AACA,UAAIsB,GAAGxB,KAAH,CAASuB,EAAT,CAAJ,EAAkB;AAChB,YAAIS,UAAU5X,KAAKE,MAAL,CAAY,EAAZ,EAAgBkX,GAAGxB,KAAH,CAASuB,EAAT,CAAhB,CAAd;AACA;AACAA,aAAKC,GAAGS,WAAH,CAAe5J,IAAf,CAAL;AACAuJ,mBAAWxT,IAAX,CAAgBmT,EAAhB;AACAO,oBAAY1T,IAAZ,CAAiBiK,IAAjB;AACAwJ,gBAAQzT,IAAR,CAAa4T,OAAb;AACD,OAPD,MAQK;AACH;AACAT,aAAKC,GAAGC,QAAH,CAAYpJ,IAAZ,CAAL;AACAiJ,iBAASlT,IAAT,CAAcmT,EAAd;AACD;AACF,KAfD;;AAiBA,QAAI9T,MAAMC,OAAN,CAAcoS,IAAd,CAAJ,EAAyB;AACvB;AACA,WAAK,IAAI3S,IAAI,CAAR,EAAWmB,MAAMwR,KAAKzS,MAA3B,EAAmCF,IAAImB,GAAvC,EAA4CnB,GAA5C,EAAiD;AAC/C,YAAI2S,KAAK3S,CAAL,aAAmBa,MAAvB,EAA8B;AAC5B+T,sBAAYjC,KAAK3S,CAAL,CAAZ;AACD,SAFD,MAEO;AACL+U,kBAAQC,IAAR,CAAa,0DAA0DhV,CAAvE;AACD;AACF;AACF,KATD,MAUK,IAAI2S,gBAAgB9R,MAApB,EAA4B;AAC/B;AACA+T,kBAAYjC,IAAZ;AACD,KAHI,MAIA;AACH,YAAM,IAAInS,KAAJ,CAAU,kBAAV,CAAN;AACD;;AAED,QAAI2T,SAASjU,MAAb,EAAqB;AACnB,WAAK4T,QAAL,CAAc,KAAd,EAAqB,EAACS,OAAOJ,QAAR,EAArB,EAAwCH,QAAxC;AACD;AACD,QAAIS,WAAWvU,MAAf,EAAuB;AACrB,UAAIG,QAAQ,EAAEkU,OAAOE,UAAT,EAAqBC,SAASA,OAA9B,EAAuC/B,MAAMgC,WAA7C,EAAZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAKb,QAAL,CAAc,QAAd,EAAwBzT,KAAxB,EAA+B2T,QAA/B;AACD;;AAED,WAAOG,SAASF,MAAT,CAAgBQ,UAAhB,CAAP;AACD,GA3DD;;AA6DA;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BAxE,UAAQmD,SAAR,CAAkB6B,GAAlB,GAAwB,UAAUC,IAAV,EAAgB;AACtC,QAAIb,KAAK,IAAT;;AAEA;AACA,QAAID,EAAJ,EAAQe,GAAR,EAAa9K,OAAb;AACA,QAAI+K,YAAYnY,KAAKyE,OAAL,CAAazB,UAAU,CAAV,CAAb,CAAhB;AACA,QAAImV,aAAa,QAAb,IAAyBA,aAAa,QAA1C,EAAoD;AAClD;AACAhB,WAAKnU,UAAU,CAAV,CAAL;AACAoK,gBAAUpK,UAAU,CAAV,CAAV;AACD,KAJD,MAKK,IAAImV,aAAa,OAAjB,EAA0B;AAC7B;AACAD,YAAMlV,UAAU,CAAV,CAAN;AACAoK,gBAAUpK,UAAU,CAAV,CAAV;AACD,KAJI,MAKA;AACH;AACAoK,gBAAUpK,UAAU,CAAV,CAAV;AACD;;AAED;AACA,QAAIoV,UAAJ;AACA,QAAIhL,WAAWA,QAAQgL,UAAvB,EAAmC;AACjC,UAAIC,gBAAgB,CAAC,OAAD,EAAU,QAAV,CAApB;AACAD,mBAAaC,cAActU,OAAd,CAAsBqJ,QAAQgL,UAA9B,KAA6C,CAAC,CAA9C,GAAkD,OAAlD,GAA4DhL,QAAQgL,UAAjF;AACD,KAHD,MAIK;AACHA,mBAAa,OAAb;AACD;;AAED;AACA,QAAIhU,OAAOgJ,WAAWA,QAAQhJ,IAAnB,IAA2B,KAAKuR,QAAL,CAAcvR,IAApD;AACA,QAAIuS,SAASvJ,WAAWA,QAAQuJ,MAAhC;AACA,QAAIW,QAAQ,EAAZ;AAAA,QAAgBrJ,IAAhB;AAAA,QAAsBqK,OAAtB;AAAA,QAA+BC,MAA/B;AAAA,QAAuCxV,CAAvC;AAAA,QAA0CmB,GAA1C;;AAEA;AACA,QAAIiT,MAAMtU,SAAV,EAAqB;AACnB;AACAoL,aAAOmJ,GAAGoB,QAAH,CAAYrB,EAAZ,EAAgB/S,IAAhB,CAAP;AACA,UAAI6J,QAAQ0I,MAAR,IAAkB,CAACA,OAAO1I,IAAP,CAAvB,EAAqC;AACnCA,eAAO,IAAP;AACD;AACF,KAND,MAOK,IAAIiK,OAAOrV,SAAX,EAAsB;AACzB;AACA,WAAKE,IAAI,CAAJ,EAAOmB,MAAMgU,IAAIjV,MAAtB,EAA8BF,IAAImB,GAAlC,EAAuCnB,GAAvC,EAA4C;AAC1CkL,eAAOmJ,GAAGoB,QAAH,CAAYN,IAAInV,CAAJ,CAAZ,EAAoBqB,IAApB,CAAP;AACA,YAAI,CAACuS,MAAD,IAAWA,OAAO1I,IAAP,CAAf,EAA6B;AAC3BqJ,gBAAMtT,IAAN,CAAWiK,IAAX;AACD;AACF;AACF,KARI,MASA;AACH;AACAqK,gBAAU,uBAAY,KAAK1C,KAAjB,CAAV;AACA,WAAK7S,IAAI,CAAJ,EAAOmB,MAAMoU,QAAQrV,MAA1B,EAAkCF,IAAImB,GAAtC,EAA2CnB,GAA3C,EAAgD;AAC9CwV,iBAASD,QAAQvV,CAAR,CAAT;AACAkL,eAAOmJ,GAAGoB,QAAH,CAAYD,MAAZ,EAAoBnU,IAApB,CAAP;AACA,YAAI,CAACuS,MAAD,IAAWA,OAAO1I,IAAP,CAAf,EAA6B;AAC3BqJ,gBAAMtT,IAAN,CAAWiK,IAAX;AACD;AACF;AACF;;AAED;AACA,QAAIb,WAAWA,QAAQqL,KAAnB,IAA4BtB,MAAMtU,SAAtC,EAAiD;AAC/C,WAAK6V,KAAL,CAAWpB,KAAX,EAAkBlK,QAAQqL,KAA1B;AACD;;AAED;AACA,QAAIrL,WAAWA,QAAQV,MAAvB,EAA+B;AAC7B,UAAIA,SAASU,QAAQV,MAArB;AACA,UAAIyK,MAAMtU,SAAV,EAAqB;AACnBoL,eAAO,KAAK0K,aAAL,CAAmB1K,IAAnB,EAAyBvB,MAAzB,CAAP;AACD,OAFD,MAGK;AACH,aAAK3J,IAAI,CAAJ,EAAOmB,MAAMoT,MAAMrU,MAAxB,EAAgCF,IAAImB,GAApC,EAAyCnB,GAAzC,EAA8C;AAC5CuU,gBAAMvU,CAAN,IAAW,KAAK4V,aAAL,CAAmBrB,MAAMvU,CAAN,CAAnB,EAA6B2J,MAA7B,CAAX;AACD;AACF;AACF;;AAED;AACA,QAAI0L,cAAc,QAAlB,EAA4B;AAC1B,UAAIrP,SAAS,EAAb;AAAA,UACI6P,SADJ;AAEA,WAAK7V,IAAI,CAAJ,EAAOmB,MAAMoT,MAAMrU,MAAxB,EAAgCF,IAAImB,GAApC,EAAyCnB,GAAzC,EAA8C;AAC5C6V,oBAAYtB,MAAMvU,CAAN,CAAZ;AACAgG,eAAO6P,UAAUzB,EAAjB,IAAuByB,SAAvB;AACD;AACD,aAAO7P,MAAP;AACD,KARD,MASK;AACH,UAAIoO,MAAMtU,SAAV,EAAqB;AACnB;AACA,eAAOoL,IAAP;AACD,OAHD,MAIK;AACH;AACA,eAAOqJ,KAAP;AACD;AACF;AACF,GAvGD;;AAyGA;;;;;;;;AAQAtE,UAAQmD,SAAR,CAAkB0C,MAAlB,GAA2B,UAAUzL,OAAV,EAAmB;AAC5C,QAAIsI,OAAO,KAAKE,KAAhB;AAAA,QACIe,SAASvJ,WAAWA,QAAQuJ,MADhC;AAAA,QAEI8B,QAAQrL,WAAWA,QAAQqL,KAF/B;AAAA,QAGIrU,OAAOgJ,WAAWA,QAAQhJ,IAAnB,IAA2B,KAAKuR,QAAL,CAAcvR,IAHpD;AAAA,QAIIkU,UAAU,uBAAY5C,IAAZ,CAJd;AAAA,QAKI3S,CALJ;AAAA,QAMImB,GANJ;AAAA,QAOIiT,EAPJ;AAAA,QAQIlJ,IARJ;AAAA,QASIqJ,KATJ;AAAA,QAUIY,MAAM,EAVV;;AAYA,QAAIvB,MAAJ,EAAY;AACV;AACA,UAAI8B,KAAJ,EAAW;AACT;AACAnB,gBAAQ,EAAR;AACA,aAAKvU,IAAI,CAAJ,EAAOmB,MAAMoU,QAAQrV,MAA1B,EAAkCF,IAAImB,GAAtC,EAA2CnB,GAA3C,EAAgD;AAC9CoU,eAAKmB,QAAQvV,CAAR,CAAL;AACAkL,iBAAO,KAAKuK,QAAL,CAAcrB,EAAd,EAAkB/S,IAAlB,CAAP;AACA,cAAIuS,OAAO1I,IAAP,CAAJ,EAAkB;AAChBqJ,kBAAMtT,IAAN,CAAWiK,IAAX;AACD;AACF;;AAED,aAAKyK,KAAL,CAAWpB,KAAX,EAAkBmB,KAAlB;;AAEA,aAAK1V,IAAI,CAAJ,EAAOmB,MAAMoT,MAAMrU,MAAxB,EAAgCF,IAAImB,GAApC,EAAyCnB,GAAzC,EAA8C;AAC5CmV,cAAIlU,IAAJ,CAASsT,MAAMvU,CAAN,EAAS,KAAK8S,QAAd,CAAT;AACD;AACF,OAhBD,MAiBK;AACH;AACA,aAAK9S,IAAI,CAAJ,EAAOmB,MAAMoU,QAAQrV,MAA1B,EAAkCF,IAAImB,GAAtC,EAA2CnB,GAA3C,EAAgD;AAC9CoU,eAAKmB,QAAQvV,CAAR,CAAL;AACAkL,iBAAO,KAAKuK,QAAL,CAAcrB,EAAd,EAAkB/S,IAAlB,CAAP;AACA,cAAIuS,OAAO1I,IAAP,CAAJ,EAAkB;AAChBiK,gBAAIlU,IAAJ,CAASiK,KAAK,KAAK4H,QAAV,CAAT;AACD;AACF;AACF;AACF,KA7BD,MA8BK;AACH;AACA,UAAI4C,KAAJ,EAAW;AACT;AACAnB,gBAAQ,EAAR;AACA,aAAKvU,IAAI,CAAJ,EAAOmB,MAAMoU,QAAQrV,MAA1B,EAAkCF,IAAImB,GAAtC,EAA2CnB,GAA3C,EAAgD;AAC9CoU,eAAKmB,QAAQvV,CAAR,CAAL;AACAuU,gBAAMtT,IAAN,CAAW0R,KAAKyB,EAAL,CAAX;AACD;;AAED,aAAKuB,KAAL,CAAWpB,KAAX,EAAkBmB,KAAlB;;AAEA,aAAK1V,IAAI,CAAJ,EAAOmB,MAAMoT,MAAMrU,MAAxB,EAAgCF,IAAImB,GAApC,EAAyCnB,GAAzC,EAA8C;AAC5CmV,cAAIlU,IAAJ,CAASsT,MAAMvU,CAAN,EAAS,KAAK8S,QAAd,CAAT;AACD;AACF,OAbD,MAcK;AACH;AACA,aAAK9S,IAAI,CAAJ,EAAOmB,MAAMoU,QAAQrV,MAA1B,EAAkCF,IAAImB,GAAtC,EAA2CnB,GAA3C,EAAgD;AAC9CoU,eAAKmB,QAAQvV,CAAR,CAAL;AACAkL,iBAAOyH,KAAKyB,EAAL,CAAP;AACAe,cAAIlU,IAAJ,CAASiK,KAAK,KAAK4H,QAAV,CAAT;AACD;AACF;AACF;;AAED,WAAOqC,GAAP;AACD,GAtED;;AAwEA;;;;AAIAlF,UAAQmD,SAAR,CAAkB2C,UAAlB,GAA+B,YAAY;AACzC,WAAO,IAAP;AACD,GAFD;;AAIA;;;;;;;;;;AAUA9F,UAAQmD,SAAR,CAAkBlQ,OAAlB,GAA4B,UAAUC,QAAV,EAAoBkH,OAApB,EAA6B;AACvD,QAAIuJ,SAASvJ,WAAWA,QAAQuJ,MAAhC;AAAA,QACIvS,OAAOgJ,WAAWA,QAAQhJ,IAAnB,IAA2B,KAAKuR,QAAL,CAAcvR,IADpD;AAAA,QAEIsR,OAAO,KAAKE,KAFhB;AAAA,QAGI0C,UAAU,uBAAY5C,IAAZ,CAHd;AAAA,QAII3S,CAJJ;AAAA,QAKImB,GALJ;AAAA,QAMI+J,IANJ;AAAA,QAOIkJ,EAPJ;;AASA,QAAI/J,WAAWA,QAAQqL,KAAvB,EAA8B;AAC5B;AACA,UAAInB,QAAQ,KAAKU,GAAL,CAAS5K,OAAT,CAAZ;;AAEA,WAAKrK,IAAI,CAAJ,EAAOmB,MAAMoT,MAAMrU,MAAxB,EAAgCF,IAAImB,GAApC,EAAyCnB,GAAzC,EAA8C;AAC5CkL,eAAOqJ,MAAMvU,CAAN,CAAP;AACAoU,aAAKlJ,KAAK,KAAK4H,QAAV,CAAL;AACA3P,iBAAS+H,IAAT,EAAekJ,EAAf;AACD;AACF,KATD,MAUK;AACH;AACA,WAAKpU,IAAI,CAAJ,EAAOmB,MAAMoU,QAAQrV,MAA1B,EAAkCF,IAAImB,GAAtC,EAA2CnB,GAA3C,EAAgD;AAC9CoU,aAAKmB,QAAQvV,CAAR,CAAL;AACAkL,eAAO,KAAKuK,QAAL,CAAcrB,EAAd,EAAkB/S,IAAlB,CAAP;AACA,YAAI,CAACuS,MAAD,IAAWA,OAAO1I,IAAP,CAAf,EAA6B;AAC3B/H,mBAAS+H,IAAT,EAAekJ,EAAf;AACD;AACF;AACF;AACF,GA9BD;;AAgCA;;;;;;;;;;;AAWAnE,UAAQmD,SAAR,CAAkBpM,GAAlB,GAAwB,UAAU7D,QAAV,EAAoBkH,OAApB,EAA6B;AACnD,QAAIuJ,SAASvJ,WAAWA,QAAQuJ,MAAhC;AAAA,QACIvS,OAAOgJ,WAAWA,QAAQhJ,IAAnB,IAA2B,KAAKuR,QAAL,CAAcvR,IADpD;AAAA,QAEI2U,cAAc,EAFlB;AAAA,QAGIrD,OAAO,KAAKE,KAHhB;AAAA,QAII0C,UAAU,uBAAY5C,IAAZ,CAJd;AAAA,QAKI3S,CALJ;AAAA,QAMImB,GANJ;AAAA,QAOIiT,EAPJ;AAAA,QAQIlJ,IARJ;;AAUA;AACA,SAAKlL,IAAI,CAAJ,EAAOmB,MAAMoU,QAAQrV,MAA1B,EAAkCF,IAAImB,GAAtC,EAA2CnB,GAA3C,EAAgD;AAC9CoU,WAAKmB,QAAQvV,CAAR,CAAL;AACAkL,aAAO,KAAKuK,QAAL,CAAcrB,EAAd,EAAkB/S,IAAlB,CAAP;AACA,UAAI,CAACuS,MAAD,IAAWA,OAAO1I,IAAP,CAAf,EAA6B;AAC3B8K,oBAAY/U,IAAZ,CAAiBkC,SAAS+H,IAAT,EAAekJ,EAAf,CAAjB;AACD;AACF;;AAED;AACA,QAAI/J,WAAWA,QAAQqL,KAAvB,EAA8B;AAC5B,WAAKC,KAAL,CAAWK,WAAX,EAAwB3L,QAAQqL,KAAhC;AACD;;AAED,WAAOM,WAAP;AACD,GA1BD;;AA4BA;;;;;;;AAOA/F,UAAQmD,SAAR,CAAkBwC,aAAlB,GAAkC,UAAU1K,IAAV,EAAgBvB,MAAhB,EAAwB;AACxD,QAAI,CAACuB,IAAL,EAAW;AAAE;AACX,aAAOA,IAAP;AACD;;AAED,QAAI+K,eAAe,EAAnB;AAAA,QACIC,aAAa,uBAAYhL,IAAZ,CADjB;AAAA,QAEI/J,MAAM+U,WAAWhW,MAFrB;AAAA,QAGIF,CAHJ;AAAA,QAII2K,KAJJ;;AAMA,QAAGrK,MAAMC,OAAN,CAAcoJ,MAAd,CAAH,EAAyB;AACvB,WAAK3J,IAAI,CAAT,EAAYA,IAAImB,GAAhB,EAAqBnB,GAArB,EAA0B;AACxB2K,gBAAQuL,WAAWlW,CAAX,CAAR;AACA,YAAI2J,OAAO3I,OAAP,CAAe2J,KAAf,KAAyB,CAAC,CAA9B,EAAiC;AAC/BsL,uBAAatL,KAAb,IAAsBO,KAAKP,KAAL,CAAtB;AACD;AACF;AACF,KAPD,MAOK;AACH,WAAK3K,IAAI,CAAT,EAAYA,IAAImB,GAAhB,EAAqBnB,GAArB,EAA0B;AACxB2K,gBAAQuL,WAAWlW,CAAX,CAAR;AACA,YAAI2J,OAAOlK,cAAP,CAAsBkL,KAAtB,CAAJ,EAAkC;AAChCsL,uBAAatM,OAAOgB,KAAP,CAAb,IAA8BO,KAAKP,KAAL,CAA9B;AACD;AACF;AACF;;AAED,WAAOsL,YAAP;AACD,GA5BD;;AA8BA;;;;;;AAMAhG,UAAQmD,SAAR,CAAkBuC,KAAlB,GAA0B,UAAUpB,KAAV,EAAiBmB,KAAjB,EAAwB;AAChD,QAAIzY,KAAK2B,QAAL,CAAc8W,KAAd,CAAJ,EAA0B;AACxB;AACA,UAAIS,OAAOT,KAAX,CAFwB,CAEN;AAClBnB,YAAM6B,IAAN,CAAW,UAAUzW,CAAV,EAAaC,CAAb,EAAgB;AACzB,YAAIyW,KAAK1W,EAAEwW,IAAF,CAAT;AACA,YAAIG,KAAK1W,EAAEuW,IAAF,CAAT;AACA,eAAQE,KAAKC,EAAN,GAAY,CAAZ,GAAkBD,KAAKC,EAAN,GAAY,CAAC,CAAb,GAAiB,CAAzC;AACD,OAJD;AAKD,KARD,MASK,IAAI,OAAOZ,KAAP,KAAiB,UAArB,EAAiC;AACpC;AACAnB,YAAM6B,IAAN,CAAWV,KAAX;AACD;AACD;AACA;AALK,SAMA;AACH,cAAM,IAAI/U,SAAJ,CAAc,sCAAd,CAAN;AACD;AACF,GAnBD;;AAqBA;;;;;;;AAOAsP,UAAQmD,SAAR,CAAkBmD,MAAlB,GAA2B,UAAUnC,EAAV,EAAcJ,QAAd,EAAwB;AACjD,QAAIwC,aAAa,EAAjB;AAAA,QACIC,eAAe,EADnB;AAAA,QAEItB,MAAM,EAFV;AAAA,QAGInV,CAHJ;AAAA,QAGOmB,GAHP;AAAA,QAGYqU,MAHZ;AAAA,QAGoBtK,IAHpB;;AAKA;AACAiK,UAAM7U,MAAMC,OAAN,CAAc6T,EAAd,IAAoBA,EAApB,GAAyB,CAACA,EAAD,CAA/B;;AAEA,SAAKpU,IAAI,CAAJ,EAAOmB,MAAMgU,IAAIjV,MAAtB,EAA8BF,IAAImB,GAAlC,EAAuCnB,GAAvC,EAA4C;AAC1CkL,aAAO,KAAKwL,OAAL,CAAavB,IAAInV,CAAJ,CAAb,CAAP;AACA,UAAIkL,IAAJ,EAAU;AACRsK,iBAAStK,KAAK,KAAK4H,QAAV,CAAT;AACA,YAAI0C,UAAU1V,SAAd,EAAyB;AACvB0W,qBAAWvV,IAAX,CAAgBuU,MAAhB;AACAiB,uBAAaxV,IAAb,CAAkBiK,IAAlB;AACD;AACF;AACF;;AAED,QAAIsL,WAAWtW,MAAf,EAAuB;AACrB,WAAK4T,QAAL,CAAc,QAAd,EAAwB,EAACS,OAAOiC,UAAR,EAAoB9B,SAAS+B,YAA7B,EAAxB,EAAoEzC,QAApE;AACD;;AAED,WAAOwC,UAAP;AACD,GAzBD;;AA2BA;;;;;;AAMAvG,UAAQmD,SAAR,CAAkBsD,OAAlB,GAA4B,UAAUtC,EAAV,EAAc;AACxC,QAAIlJ,IAAJ,EACIyL,KADJ;;AAGA;AACA,QAAI1Z,KAAKM,QAAL,CAAc6W,EAAd,KAAqBnX,KAAK2B,QAAL,CAAcwV,EAAd,CAAzB,EAA4C;AAC1CuC,cAAQvC,EAAR;AACD,KAFD,MAGK,IAAIA,cAAcvT,MAAlB,EAA0B;AAC7B8V,cAAQvC,GAAG,KAAKtB,QAAR,CAAR,CAD6B,CACF;AAC5B;;AAED;AACA,QAAI6D,UAAU7W,SAAV,IAAuB,KAAK+S,KAAL,CAAW8D,KAAX,CAA3B,EAA8C;AAC5CzL,aAAO,KAAK2H,KAAL,CAAW8D,KAAX,CAAP;AACA,aAAO,KAAK9D,KAAL,CAAW8D,KAAX,CAAP;AACA,WAAKzW,MAAL;AACA,aAAOgL,IAAP;AACD;AACD,WAAO,IAAP;AACD,GApBD;;AAsBA;;;;;AAKA+E,UAAQmD,SAAR,CAAkBwD,KAAlB,GAA0B,UAAU5C,QAAV,EAAoB;AAC5C,QAAIhU,CAAJ,EAAOmB,GAAP;AACA,QAAIgU,MAAM,uBAAY,KAAKtC,KAAjB,CAAV;AACA,QAAI0B,QAAQ,EAAZ;;AAEA,SAAKvU,IAAI,CAAJ,EAAOmB,MAAMgU,IAAIjV,MAAtB,EAA8BF,IAAImB,GAAlC,EAAuCnB,GAAvC,EAA4C;AAC1CuU,YAAMtT,IAAN,CAAW,KAAK4R,KAAL,CAAWsC,IAAInV,CAAJ,CAAX,CAAX;AACD;;AAED,SAAK6S,KAAL,GAAa,EAAb;AACA,SAAK3S,MAAL,GAAc,CAAd;;AAEA,SAAK4T,QAAL,CAAc,QAAd,EAAwB,EAACS,OAAOY,GAAR,EAAaT,SAASH,KAAtB,EAAxB,EAAsDP,QAAtD;;AAEA,WAAOmB,GAAP;AACD,GAfD;;AAiBA;;;;;AAKAlF,UAAQmD,SAAR,CAAkB5U,GAAlB,GAAwB,UAAUmM,KAAV,EAAiB;AACvC,QAAIgI,OAAO,KAAKE,KAAhB;AAAA,QACI0C,UAAU,uBAAY5C,IAAZ,CADd;AAAA,QAEInU,MAAM,IAFV;AAAA,QAGIqY,WAAW,IAHf;AAAA,QAII7W,CAJJ;AAAA,QAKImB,GALJ;;AAOA,SAAKnB,IAAI,CAAJ,EAAOmB,MAAMoU,QAAQrV,MAA1B,EAAkCF,IAAImB,GAAtC,EAA2CnB,GAA3C,EAAgD;AAC9C,UAAIoU,KAAKmB,QAAQvV,CAAR,CAAT;AACA,UAAIkL,OAAOyH,KAAKyB,EAAL,CAAX;AACA,UAAI0C,YAAY5L,KAAKP,KAAL,CAAhB;AACA,UAAImM,aAAa,IAAb,KAAsB,CAACtY,GAAD,IAAQsY,YAAYD,QAA1C,CAAJ,EAAyD;AACvDrY,cAAM0M,IAAN;AACA2L,mBAAWC,SAAX;AACD;AACF;;AAED,WAAOtY,GAAP;AACD,GAnBD;;AAqBA;;;;;AAKAyR,UAAQmD,SAAR,CAAkB7U,GAAlB,GAAwB,UAAUoM,KAAV,EAAiB;AACvC,QAAIgI,OAAO,KAAKE,KAAhB;AAAA,QACI0C,UAAU,uBAAY5C,IAAZ,CADd;AAAA,QAEIpU,MAAM,IAFV;AAAA,QAGIwY,WAAW,IAHf;AAAA,QAII/W,CAJJ;AAAA,QAKImB,GALJ;;AAOA,SAAKnB,IAAI,CAAJ,EAAOmB,MAAMoU,QAAQrV,MAA1B,EAAkCF,IAAImB,GAAtC,EAA2CnB,GAA3C,EAAgD;AAC9C,UAAIoU,KAAKmB,QAAQvV,CAAR,CAAT;AACA,UAAIkL,OAAOyH,KAAKyB,EAAL,CAAX;AACA,UAAI0C,YAAY5L,KAAKP,KAAL,CAAhB;AACA,UAAImM,aAAa,IAAb,KAAsB,CAACvY,GAAD,IAAQuY,YAAYC,QAA1C,CAAJ,EAAyD;AACvDxY,cAAM2M,IAAN;AACA6L,mBAAWD,SAAX;AACD;AACF;;AAED,WAAOvY,GAAP;AACD,GAnBD;;AAqBA;;;;;;;AAOA0R,UAAQmD,SAAR,CAAkB4D,QAAlB,GAA6B,UAAUrM,KAAV,EAAiB;AAC5C,QAAIgI,OAAO,KAAKE,KAAhB;AACA,QAAI0C,UAAU,uBAAY5C,IAAZ,CAAd;AACA,QAAIsE,SAAS,EAAb;AACA,QAAIC,YAAY,KAAKtE,QAAL,CAAcvR,IAAd,IAAsB,KAAKuR,QAAL,CAAcvR,IAAd,CAAmBsJ,KAAnB,CAAtB,IAAmD,IAAnE;AACA,QAAIwM,QAAQ,CAAZ;AACA,QAAInX,CAAJ,EACIkK,CADJ,EAEI/I,GAFJ;;AAIA,SAAKnB,IAAI,CAAJ,EAAOmB,MAAMoU,QAAQrV,MAA1B,EAAkCF,IAAImB,GAAtC,EAA2CnB,GAA3C,EAAgD;AAC9C,UAAIoU,KAAKmB,QAAQvV,CAAR,CAAT;AACA,UAAIkL,OAAOyH,KAAKyB,EAAL,CAAX;AACA,UAAIvW,QAAQqN,KAAKP,KAAL,CAAZ;AACA,UAAIyM,SAAS,KAAb;AACA,WAAKlN,IAAI,CAAT,EAAYA,IAAIiN,KAAhB,EAAuBjN,GAAvB,EAA4B;AAC1B,YAAI+M,OAAO/M,CAAP,KAAarM,KAAjB,EAAwB;AACtBuZ,mBAAS,IAAT;AACA;AACD;AACF;AACD,UAAI,CAACA,MAAD,IAAYvZ,UAAUiC,SAA1B,EAAsC;AACpCmX,eAAOE,KAAP,IAAgBtZ,KAAhB;AACAsZ;AACD;AACF;;AAED,QAAID,SAAJ,EAAe;AACb,WAAKlX,IAAI,CAAJ,EAAOmB,MAAM8V,OAAO/W,MAAzB,EAAiCF,IAAImB,GAArC,EAA0CnB,GAA1C,EAA+C;AAC7CiX,eAAOjX,CAAP,IAAY/C,KAAKmE,OAAL,CAAa6V,OAAOjX,CAAP,CAAb,EAAwBkX,SAAxB,CAAZ;AACD;AACF;;AAED,WAAOD,MAAP;AACD,GAlCD;;AAoCA;;;;;;AAMAhH,UAAQmD,SAAR,CAAkBkB,QAAlB,GAA6B,UAAUpJ,IAAV,EAAgB;AAC3C,QAAIkJ,KAAKlJ,KAAK,KAAK4H,QAAV,CAAT;;AAEA,QAAIsB,MAAMtU,SAAV,EAAqB;AACnB;AACA,UAAI,KAAK+S,KAAL,CAAWuB,EAAX,CAAJ,EAAoB;AAClB;AACA,cAAM,IAAI5T,KAAJ,CAAU,mCAAmC4T,EAAnC,GAAwC,iBAAlD,CAAN;AACD;AACF,KAND,MAOK;AACH;AACAA,WAAKnX,KAAKmC,UAAL,EAAL;AACA8L,WAAK,KAAK4H,QAAV,IAAsBsB,EAAtB;AACD;;AAED,QAAIjM,IAAI,EAAR;AAAA,QACIwB,SAAS,uBAAYuB,IAAZ,CADb;AAAA,QAEIlL,CAFJ;AAAA,QAGImB,GAHJ;AAIA,SAAKnB,IAAI,CAAJ,EAAOmB,MAAMwI,OAAOzJ,MAAzB,EAAiCF,IAAImB,GAArC,EAA0CnB,GAA1C,EAA+C;AAC7C,UAAI2K,QAAQhB,OAAO3J,CAAP,CAAZ;AACA,UAAIkX,YAAY,KAAKlE,KAAL,CAAWrI,KAAX,CAAhB,CAF6C,CAET;AACpCxC,QAAEwC,KAAF,IAAW1N,KAAKmE,OAAL,CAAa8J,KAAKP,KAAL,CAAb,EAA0BuM,SAA1B,CAAX;AACD;AACD,SAAKrE,KAAL,CAAWuB,EAAX,IAAiBjM,CAAjB;AACA,SAAKjI,MAAL;;AAEA,WAAOkU,EAAP;AACD,GA7BD;;AA+BA;;;;;;;AAOAnE,UAAQmD,SAAR,CAAkBqC,QAAlB,GAA6B,UAAUrB,EAAV,EAAciD,KAAd,EAAqB;AAChD,QAAI1M,KAAJ,EAAW9M,KAAX,EAAkBmC,CAAlB,EAAqBmB,GAArB;;AAEA;AACA,QAAImW,MAAM,KAAKzE,KAAL,CAAWuB,EAAX,CAAV;AACA,QAAI,CAACkD,GAAL,EAAU;AACR,aAAO,IAAP;AACD;;AAED;AACA,QAAIC,YAAY,EAAhB;AAAA,QACI5N,SAAS,uBAAY2N,GAAZ,CADb;;AAGA,QAAID,KAAJ,EAAW;AACT,WAAKrX,IAAI,CAAJ,EAAOmB,MAAMwI,OAAOzJ,MAAzB,EAAiCF,IAAImB,GAArC,EAA0CnB,GAA1C,EAA+C;AAC7C2K,gBAAQhB,OAAO3J,CAAP,CAAR;AACAnC,gBAAQyZ,IAAI3M,KAAJ,CAAR;AACA4M,kBAAU5M,KAAV,IAAmB1N,KAAKmE,OAAL,CAAavD,KAAb,EAAoBwZ,MAAM1M,KAAN,CAApB,CAAnB;AACD;AACF,KAND,MAOK;AACH;AACA,WAAK3K,IAAI,CAAJ,EAAOmB,MAAMwI,OAAOzJ,MAAzB,EAAiCF,IAAImB,GAArC,EAA0CnB,GAA1C,EAA+C;AAC7C2K,gBAAQhB,OAAO3J,CAAP,CAAR;AACAnC,gBAAQyZ,IAAI3M,KAAJ,CAAR;AACA4M,kBAAU5M,KAAV,IAAmB9M,KAAnB;AACD;AACF;;AAED,QAAI,CAAC0Z,UAAU,KAAKzE,QAAf,CAAL,EAA+B;AAC7ByE,gBAAU,KAAKzE,QAAf,IAA2BwE,IAAIlD,EAA/B;AACD;;AAED,WAAOmD,SAAP;AACD,GAlCD;;AAoCA;;;;;;;;AAQAtH,UAAQmD,SAAR,CAAkB0B,WAAlB,GAAgC,UAAU5J,IAAV,EAAgB;AAC9C,QAAIkJ,KAAKlJ,KAAK,KAAK4H,QAAV,CAAT;AACA,QAAIsB,MAAMtU,SAAV,EAAqB;AACnB,YAAM,IAAIU,KAAJ,CAAU,+CAA+C,4BAAe0K,IAAf,CAA/C,GAAsE,GAAhF,CAAN;AACD;AACD,QAAI/C,IAAI,KAAK0K,KAAL,CAAWuB,EAAX,CAAR;AACA,QAAI,CAACjM,CAAL,EAAQ;AACN;AACA,YAAM,IAAI3H,KAAJ,CAAU,yCAAyC4T,EAAzC,GAA8C,QAAxD,CAAN;AACD;;AAED;AACA,QAAIzK,SAAS,uBAAYuB,IAAZ,CAAb;AACA,SAAK,IAAIlL,IAAI,CAAR,EAAWmB,MAAMwI,OAAOzJ,MAA7B,EAAqCF,IAAImB,GAAzC,EAA8CnB,GAA9C,EAAmD;AACjD,UAAI2K,QAAQhB,OAAO3J,CAAP,CAAZ;AACA,UAAIkX,YAAY,KAAKlE,KAAL,CAAWrI,KAAX,CAAhB,CAFiD,CAEb;AACpCxC,QAAEwC,KAAF,IAAW1N,KAAKmE,OAAL,CAAa8J,KAAKP,KAAL,CAAb,EAA0BuM,SAA1B,CAAX;AACD;;AAED,WAAO9C,EAAP;AACD,GApBD;;AAsBAzG,SAAOvQ,OAAP,GAAiB6S,OAAjB,C;;;;;;;;ACt7BA;;;;;;;;;;;;;AAaA,WAASE,KAAT,CAAe9F,OAAf,EAAwB;AACtB;AACA,SAAKmN,KAAL,GAAa,IAAb;AACA,SAAKhZ,GAAL,GAAWiZ,QAAX;;AAEA;AACA,SAAKnE,MAAL,GAAc,EAAd;AACA,SAAKoE,QAAL,GAAgB,IAAhB;AACA,SAAKC,SAAL,GAAiB,IAAjB;;AAEA,SAAKxE,UAAL,CAAgB9I,OAAhB;AACD;;AAED;;;;;;;;;;;;;AAaA8F,QAAMiD,SAAN,CAAgBD,UAAhB,GAA6B,UAAU9I,OAAV,EAAmB;AAC9C,QAAIA,WAAW,OAAOA,QAAQmN,KAAf,KAAyB,WAAxC,EAAqD;AACnD,WAAKA,KAAL,GAAanN,QAAQmN,KAArB;AACD;AACD,QAAInN,WAAW,OAAOA,QAAQ7L,GAAf,KAAuB,WAAtC,EAAmD;AACjD,WAAKA,GAAL,GAAW6L,QAAQ7L,GAAnB;AACD;;AAED,SAAKoZ,cAAL;AACD,GATD;;AAWA;;;;;;;;;;;;;;;;;;;AAmBAzH,QAAMhT,MAAN,GAAe,UAAUK,MAAV,EAAkB6M,OAAlB,EAA2B;AACxC,QAAIgJ,QAAQ,IAAIlD,KAAJ,CAAU9F,OAAV,CAAZ;;AAEA,QAAI7M,OAAOqa,KAAP,KAAiB/X,SAArB,EAAgC;AAC9B,YAAM,IAAIU,KAAJ,CAAU,4CAAV,CAAN;AACD;AACDhD,WAAOqa,KAAP,GAAe,YAAY;AACzBxE,YAAMwE,KAAN;AACD,KAFD;;AAIA,QAAIC,UAAU,CAAC;AACb3B,YAAM,OADO;AAEb4B,gBAAUjY;AAFG,KAAD,CAAd;;AAKA,QAAIuK,WAAWA,QAAQzE,OAAvB,EAAgC;AAC9B,WAAK,IAAI5F,IAAI,CAAb,EAAgBA,IAAIqK,QAAQzE,OAAR,CAAgB1F,MAApC,EAA4CF,GAA5C,EAAiD;AAC/C,YAAImW,OAAO9L,QAAQzE,OAAR,CAAgB5F,CAAhB,CAAX;AACA8X,gBAAQ7W,IAAR,CAAa;AACXkV,gBAAMA,IADK;AAEX4B,oBAAUva,OAAO2Y,IAAP;AAFC,SAAb;AAIA9C,cAAMzN,OAAN,CAAcpI,MAAd,EAAsB2Y,IAAtB;AACD;AACF;;AAED9C,UAAMsE,SAAN,GAAkB;AAChBna,cAAQA,MADQ;AAEhBsa,eAASA;AAFO,KAAlB;;AAKA,WAAOzE,KAAP;AACD,GAhCD;;AAkCA;;;;AAIAlD,QAAMiD,SAAN,CAAgBG,OAAhB,GAA0B,YAAY;AACpC,SAAKsE,KAAL;;AAEA,QAAI,KAAKF,SAAT,EAAoB;AAClB,UAAIna,SAAS,KAAKma,SAAL,CAAena,MAA5B;AACA,UAAIsa,UAAU,KAAKH,SAAL,CAAeG,OAA7B;AACA,WAAK,IAAI9X,IAAI,CAAb,EAAgBA,IAAI8X,QAAQ5X,MAA5B,EAAoCF,GAApC,EAAyC;AACvC,YAAIgY,SAASF,QAAQ9X,CAAR,CAAb;AACA,YAAIgY,OAAOD,QAAX,EAAqB;AACnBva,iBAAOwa,OAAO7B,IAAd,IAAsB6B,OAAOD,QAA7B;AACD,SAFD,MAGK;AACH,iBAAOva,OAAOwa,OAAO7B,IAAd,CAAP;AACD;AACF;AACD,WAAKwB,SAAL,GAAiB,IAAjB;AACD;AACF,GAjBD;;AAmBA;;;;;AAKAxH,QAAMiD,SAAN,CAAgBxN,OAAhB,GAA0B,UAASpI,MAAT,EAAiBwa,MAAjB,EAAyB;AACjD,QAAI3D,KAAK,IAAT;AACA,QAAI0D,WAAWva,OAAOwa,MAAP,CAAf;AACA,QAAI,CAACD,QAAL,EAAe;AACb,YAAM,IAAIvX,KAAJ,CAAU,YAAYwX,MAAZ,GAAqB,YAA/B,CAAN;AACD;;AAEDxa,WAAOwa,MAAP,IAAiB,YAAY;AAC3B;AACA,UAAI9C,OAAO,EAAX;AACA,WAAK,IAAIlV,IAAI,CAAb,EAAgBA,IAAIC,UAAUC,MAA9B,EAAsCF,GAAtC,EAA2C;AACzCkV,aAAKlV,CAAL,IAAUC,UAAUD,CAAV,CAAV;AACD;;AAED;AACAqU,SAAGhB,KAAH,CAAS;AACP6B,cAAMA,IADC;AAEP1R,YAAIuU,QAFG;AAGPE,iBAAS;AAHF,OAAT;AAKD,KAbD;AAcD,GArBD;;AAuBA;;;;AAIA9H,QAAMiD,SAAN,CAAgBC,KAAhB,GAAwB,UAAS6E,KAAT,EAAgB;AACtC,QAAI,OAAOA,KAAP,KAAiB,UAArB,EAAiC;AAC/B,WAAK5E,MAAL,CAAYrS,IAAZ,CAAiB,EAACuC,IAAI0U,KAAL,EAAjB;AACD,KAFD,MAGK;AACH,WAAK5E,MAAL,CAAYrS,IAAZ,CAAiBiX,KAAjB;AACD;;AAED,SAAKN,cAAL;AACD,GATD;;AAWA;;;;AAIAzH,QAAMiD,SAAN,CAAgBwE,cAAhB,GAAiC,YAAY;AAC3C;AACA,QAAI,KAAKtE,MAAL,CAAYpT,MAAZ,GAAqB,KAAK1B,GAA9B,EAAmC;AACjC,WAAKqZ,KAAL;AACD;;AAED;AACAM,iBAAa,KAAKT,QAAlB;AACA,QAAI,KAAKrE,KAAL,CAAWnT,MAAX,GAAoB,CAApB,IAAyB,OAAO,KAAKsX,KAAZ,KAAsB,QAAnD,EAA6D;AAC3D,UAAInD,KAAK,IAAT;AACA,WAAKqD,QAAL,GAAgBU,WAAW,YAAY;AACrC/D,WAAGwD,KAAH;AACD,OAFe,EAEb,KAAKL,KAFQ,CAAhB;AAGD;AACF,GAdD;;AAgBA;;;AAGArH,QAAMiD,SAAN,CAAgByE,KAAhB,GAAwB,YAAY;AAClC,WAAO,KAAKvE,MAAL,CAAYpT,MAAZ,GAAqB,CAA5B,EAA+B;AAC7B,UAAIgY,QAAQ,KAAK5E,MAAL,CAAY/B,KAAZ,EAAZ;AACA2G,YAAM1U,EAAN,CAAS6U,KAAT,CAAeH,MAAMD,OAAN,IAAiBC,MAAM1U,EAAtC,EAA0C0U,MAAMhD,IAAN,IAAc,EAAxD;AACD;AACF,GALD;;AAOAvH,SAAOvQ,OAAP,GAAiB+S,KAAjB,C;;;;;;;;;;;;;;ACvMA,MAAIlT,OAAO,mBAAAC,CAAQ,CAAR,CAAX;AACA,MAAI+S,UAAU,mBAAA/S,CAAQ,EAAR,CAAd;;AAEA;;;;;;;;;;AAUA,WAASgT,QAAT,CAAmByC,IAAnB,EAAyBtI,OAAzB,EAAkC;AAChC,SAAKwI,KAAL,GAAa,IAAb;AACA,SAAKyF,IAAL,GAAY,EAAZ,CAFgC,CAEhB;AAChB,SAAKpY,MAAL,GAAc,CAAd,CAHgC,CAGf;AACjB,SAAK0S,QAAL,GAAgBvI,WAAW,EAA3B;AACA,SAAKyI,QAAL,GAAgB,IAAhB,CALgC,CAKV;AACtB,SAAKG,YAAL,GAAoB,EAApB,CANgC,CAMR;;AAExB,QAAIoB,KAAK,IAAT;AACA,SAAKtQ,QAAL,GAAgB,YAAY;AAC1BsQ,SAAGkE,QAAH,CAAYF,KAAZ,CAAkBhE,EAAlB,EAAsBpU,SAAtB;AACD,KAFD;;AAIA,SAAKuY,OAAL,CAAa7F,IAAb;AACD;;AAED;AACA;;AAEA;;;;AAIAzC,WAASkD,SAAT,CAAmBoF,OAAnB,GAA6B,UAAU7F,IAAV,EAAgB;AAC3C,QAAIwC,GAAJ,EAASf,EAAT,EAAapU,CAAb,EAAgBmB,GAAhB,EAAqBoT,KAArB;;AAEA,QAAI,KAAK1B,KAAT,EAAgB;AACd;AACA,UAAI,KAAKA,KAAL,CAAWc,GAAf,EAAoB;AAClB,aAAKd,KAAL,CAAWc,GAAX,CAAe,GAAf,EAAoB,KAAK5P,QAAzB;AACD;;AAED;AACAoR,YAAM,KAAKtC,KAAL,CAAWiD,MAAX,CAAkB,EAAClC,QAAQ,KAAKhB,QAAL,IAAiB,KAAKA,QAAL,CAAcgB,MAAxC,EAAlB,CAAN;AACAW,cAAQ,EAAR;;AAEA,WAAKvU,IAAI,CAAJ,EAAOmB,MAAMgU,IAAIjV,MAAtB,EAA8BF,IAAImB,GAAlC,EAAuCnB,GAAvC,EAA4C;AAC1CuU,cAAMtT,IAAN,CAAW,KAAK4R,KAAL,CAAWA,KAAX,CAAiBsC,IAAInV,CAAJ,CAAjB,CAAX;AACD;;AAED,WAAKsY,IAAL,GAAY,EAAZ;AACA,WAAKpY,MAAL,GAAc,CAAd;AACA,WAAK4T,QAAL,CAAc,QAAd,EAAwB,EAACS,OAAOY,GAAR,EAAaT,SAASH,KAAtB,EAAxB;AACD;;AAED,SAAK1B,KAAL,GAAaF,IAAb;;AAEA,QAAI,KAAKE,KAAT,EAAgB;AACd;AACA,WAAKC,QAAL,GAAgB,KAAKF,QAAL,CAAcG,OAAd,IACX,KAAKF,KAAL,IAAc,KAAKA,KAAL,CAAWxI,OAAzB,IAAoC,KAAKwI,KAAL,CAAWxI,OAAX,CAAmB0I,OAD5C,IAEZ,IAFJ;;AAIA;AACAoC,YAAM,KAAKtC,KAAL,CAAWiD,MAAX,CAAkB,EAAClC,QAAQ,KAAKhB,QAAL,IAAiB,KAAKA,QAAL,CAAcgB,MAAxC,EAAlB,CAAN;AACA,WAAK5T,IAAI,CAAJ,EAAOmB,MAAMgU,IAAIjV,MAAtB,EAA8BF,IAAImB,GAAlC,EAAuCnB,GAAvC,EAA4C;AAC1CoU,aAAKe,IAAInV,CAAJ,CAAL;AACA,aAAKsY,IAAL,CAAUlE,EAAV,IAAgB,IAAhB;AACD;AACD,WAAKlU,MAAL,GAAciV,IAAIjV,MAAlB;AACA,WAAK4T,QAAL,CAAc,KAAd,EAAqB,EAACS,OAAOY,GAAR,EAArB;;AAEA;AACA,UAAI,KAAKtC,KAAL,CAAWW,EAAf,EAAmB;AACjB,aAAKX,KAAL,CAAWW,EAAX,CAAc,GAAd,EAAmB,KAAKzP,QAAxB;AACD;AACF;AACF,GA5CD;;AA8CA;;;;AAIAmM,WAASkD,SAAT,CAAmBqF,OAAnB,GAA6B,YAAY;AACvC,QAAIrE,EAAJ,EAAQpU,CAAR,EAAWmB,GAAX;AACA,QAAIgU,MAAM,KAAKtC,KAAL,CAAWiD,MAAX,CAAkB,EAAClC,QAAQ,KAAKhB,QAAL,IAAiB,KAAKA,QAAL,CAAcgB,MAAxC,EAAlB,CAAV;AAAA,QACI8E,SAAS,uBAAY,KAAKJ,IAAjB,CADb;AAAA,QAEIK,SAAS,EAFb;AAAA,QAGIxE,WAAW,EAHf;AAAA,QAIIqC,aAAa,EAJjB;AAAA,QAKIC,eAAe,EALnB;;AAOA;AACA,SAAKzW,IAAI,CAAJ,EAAOmB,MAAMgU,IAAIjV,MAAtB,EAA8BF,IAAImB,GAAlC,EAAuCnB,GAAvC,EAA4C;AAC1CoU,WAAKe,IAAInV,CAAJ,CAAL;AACA2Y,aAAOvE,EAAP,IAAa,IAAb;AACA,UAAI,CAAC,KAAKkE,IAAL,CAAUlE,EAAV,CAAL,EAAoB;AAClBD,iBAASlT,IAAT,CAAcmT,EAAd;AACA,aAAKkE,IAAL,CAAUlE,EAAV,IAAgB,IAAhB;AACD;AACF;;AAED;AACA,SAAKpU,IAAI,CAAJ,EAAOmB,MAAMuX,OAAOxY,MAAzB,EAAiCF,IAAImB,GAArC,EAA0CnB,GAA1C,EAA+C;AAC7CoU,WAAKsE,OAAO1Y,CAAP,CAAL;AACA,UAAI,CAAC2Y,OAAOvE,EAAP,CAAL,EAAiB;AACfoC,mBAAWvV,IAAX,CAAgBmT,EAAhB;AACAqC,qBAAaxV,IAAb,CAAkB,KAAK4R,KAAL,CAAWA,KAAX,CAAiBuB,EAAjB,CAAlB;AACA,eAAO,KAAKkE,IAAL,CAAUlE,EAAV,CAAP;AACD;AACF;;AAED,SAAKlU,MAAL,IAAeiU,SAASjU,MAAT,GAAkBsW,WAAWtW,MAA5C;;AAEA;AACA,QAAIiU,SAASjU,MAAb,EAAqB;AACnB,WAAK4T,QAAL,CAAc,KAAd,EAAqB,EAACS,OAAOJ,QAAR,EAArB;AACD;AACD,QAAIqC,WAAWtW,MAAf,EAAuB;AACrB,WAAK4T,QAAL,CAAc,QAAd,EAAwB,EAACS,OAAOiC,UAAR,EAAoB9B,SAAS+B,YAA7B,EAAxB;AACD;AACF,GAtCD;;AAwCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCAvG,WAASkD,SAAT,CAAmB6B,GAAnB,GAAyB,UAAUC,IAAV,EAAgB;AACvC,QAAIb,KAAK,IAAT;;AAEA;AACA,QAAIc,GAAJ,EAAS9K,OAAT,EAAkBsI,IAAlB;AACA,QAAIyC,YAAYnY,KAAKyE,OAAL,CAAazB,UAAU,CAAV,CAAb,CAAhB;AACA,QAAImV,aAAa,QAAb,IAAyBA,aAAa,QAAtC,IAAkDA,aAAa,OAAnE,EAA4E;AAC1E;AACAD,YAAMlV,UAAU,CAAV,CAAN,CAF0E,CAErD;AACrBoK,gBAAUpK,UAAU,CAAV,CAAV;AACA0S,aAAO1S,UAAU,CAAV,CAAP;AACD,KALD,MAMK;AACH;AACAoK,gBAAUpK,UAAU,CAAV,CAAV;AACA0S,aAAO1S,UAAU,CAAV,CAAP;AACD;;AAED;AACA,QAAI2Y,cAAc3b,KAAKE,MAAL,CAAY,EAAZ,EAAgB,KAAKyV,QAArB,EAA+BvI,OAA/B,CAAlB;;AAEA;AACA,QAAI,KAAKuI,QAAL,CAAcgB,MAAd,IAAwBvJ,OAAxB,IAAmCA,QAAQuJ,MAA/C,EAAuD;AACrDgF,kBAAYhF,MAAZ,GAAqB,UAAU1I,IAAV,EAAgB;AACnC,eAAOmJ,GAAGzB,QAAH,CAAYgB,MAAZ,CAAmB1I,IAAnB,KAA4Bb,QAAQuJ,MAAR,CAAe1I,IAAf,CAAnC;AACD,OAFD;AAGD;;AAED;AACA,QAAI2N,eAAe,EAAnB;AACA,QAAI1D,OAAOrV,SAAX,EAAsB;AACpB+Y,mBAAa5X,IAAb,CAAkBkU,GAAlB;AACD;AACD0D,iBAAa5X,IAAb,CAAkB2X,WAAlB;AACAC,iBAAa5X,IAAb,CAAkB0R,IAAlB;;AAEA,WAAO,KAAKE,KAAL,IAAc,KAAKA,KAAL,CAAWoC,GAAX,CAAeoD,KAAf,CAAqB,KAAKxF,KAA1B,EAAiCgG,YAAjC,CAArB;AACD,GArCD;;AAuCA;;;;;;;;AAQA3I,WAASkD,SAAT,CAAmB0C,MAAnB,GAA4B,UAAUzL,OAAV,EAAmB;AAC7C,QAAI8K,GAAJ;;AAEA,QAAI,KAAKtC,KAAT,EAAgB;AACd,UAAIiG,gBAAgB,KAAKlG,QAAL,CAAcgB,MAAlC;AACA,UAAIA,MAAJ;;AAEA,UAAIvJ,WAAWA,QAAQuJ,MAAvB,EAA+B;AAC7B,YAAIkF,aAAJ,EAAmB;AACjBlF,mBAAS,gBAAU1I,IAAV,EAAgB;AACvB,mBAAO4N,cAAc5N,IAAd,KAAuBb,QAAQuJ,MAAR,CAAe1I,IAAf,CAA9B;AACD,WAFD;AAGD,SAJD,MAKK;AACH0I,mBAASvJ,QAAQuJ,MAAjB;AACD;AACF,OATD,MAUK;AACHA,iBAASkF,aAAT;AACD;;AAED3D,YAAM,KAAKtC,KAAL,CAAWiD,MAAX,CAAkB;AACtBlC,gBAAQA,MADc;AAEtB8B,eAAOrL,WAAWA,QAAQqL;AAFJ,OAAlB,CAAN;AAID,KAtBD,MAuBK;AACHP,YAAM,EAAN;AACD;;AAED,WAAOA,GAAP;AACD,GA/BD;;AAiCA;;;;;;;;;;;AAWAjF,WAASkD,SAAT,CAAmBpM,GAAnB,GAAyB,UAAU7D,QAAV,EAAmBkH,OAAnB,EAA4B;AACnD,QAAI2L,cAAc,EAAlB;AACA,QAAI,KAAKnD,KAAT,EAAgB;AACd,UAAIiG,gBAAgB,KAAKlG,QAAL,CAAcgB,MAAlC;AACA,UAAIA,MAAJ;;AAEA,UAAIvJ,WAAWA,QAAQuJ,MAAvB,EAA+B;AAC7B,YAAIkF,aAAJ,EAAmB;AACjBlF,mBAAS,gBAAU1I,IAAV,EAAgB;AACvB,mBAAO4N,cAAc5N,IAAd,KAAuBb,QAAQuJ,MAAR,CAAe1I,IAAf,CAA9B;AACD,WAFD;AAGD,SAJD,MAKK;AACH0I,mBAASvJ,QAAQuJ,MAAjB;AACD;AACF,OATD,MAUK;AACHA,iBAASkF,aAAT;AACD;;AAED9C,oBAAc,KAAKnD,KAAL,CAAW7L,GAAX,CAAe7D,QAAf,EAAwB;AACpCyQ,gBAAQA,MAD4B;AAEpC8B,eAAOrL,WAAWA,QAAQqL;AAFU,OAAxB,CAAd;AAID,KAtBD,MAuBK;AACHM,oBAAc,EAAd;AACD;;AAED,WAAOA,WAAP;AACD,GA9BD;;AAgCA;;;;;AAKA9F,WAASkD,SAAT,CAAmB2C,UAAnB,GAAgC,YAAY;AAC1C,QAAIgD,UAAU,IAAd;AACA,WAAOA,mBAAmB7I,QAA1B,EAAoC;AAClC6I,gBAAUA,QAAQlG,KAAlB;AACD;AACD,WAAOkG,WAAW,IAAlB;AACD,GAND;;AAQA;;;;;;;;;AASA7I,WAASkD,SAAT,CAAmBmF,QAAnB,GAA8B,UAAUhU,KAAV,EAAiBwP,MAAjB,EAAyBC,QAAzB,EAAmC;AAC/D,QAAIhU,CAAJ,EAAOmB,GAAP,EAAYiT,EAAZ,EAAgBlJ,IAAhB;AACA,QAAIiK,MAAMpB,UAAUA,OAAOQ,KAA3B;AACA,QAAIJ,WAAW,EAAf;AAAA,QACIM,aAAa,EADjB;AAAA,QAEI+B,aAAa,EAFjB;AAAA,QAGIwC,WAAW,EAHf;AAAA,QAIIC,eAAe,EAJnB;AAAA,QAKIxC,eAAe,EALnB;;AAOA,QAAItB,OAAO,KAAKtC,KAAhB,EAAuB;AACrB,cAAQtO,KAAR;AACE,aAAK,KAAL;AACE;AACA,eAAKvE,IAAI,CAAJ,EAAOmB,MAAMgU,IAAIjV,MAAtB,EAA8BF,IAAImB,GAAlC,EAAuCnB,GAAvC,EAA4C;AAC1CoU,iBAAKe,IAAInV,CAAJ,CAAL;AACAkL,mBAAO,KAAK+J,GAAL,CAASb,EAAT,CAAP;AACA,gBAAIlJ,IAAJ,EAAU;AACR,mBAAKoN,IAAL,CAAUlE,EAAV,IAAgB,IAAhB;AACAD,uBAASlT,IAAT,CAAcmT,EAAd;AACD;AACF;;AAED;;AAEF,aAAK,QAAL;AACE;AACA;AACA,eAAKpU,IAAI,CAAJ,EAAOmB,MAAMgU,IAAIjV,MAAtB,EAA8BF,IAAImB,GAAlC,EAAuCnB,GAAvC,EAA4C;AAC1CoU,iBAAKe,IAAInV,CAAJ,CAAL;AACAkL,mBAAO,KAAK+J,GAAL,CAASb,EAAT,CAAP;;AAEA,gBAAIlJ,IAAJ,EAAU;AACR,kBAAI,KAAKoN,IAAL,CAAUlE,EAAV,CAAJ,EAAmB;AACjBK,2BAAWxT,IAAX,CAAgBmT,EAAhB;AACA6E,6BAAahY,IAAb,CAAkB8S,OAAOpB,IAAP,CAAY3S,CAAZ,CAAlB;AACAgZ,yBAAS/X,IAAT,CAAc8S,OAAOW,OAAP,CAAe1U,CAAf,CAAd;AACD,eAJD,MAKK;AACH,qBAAKsY,IAAL,CAAUlE,EAAV,IAAgB,IAAhB;AACAD,yBAASlT,IAAT,CAAcmT,EAAd;AACD;AACF,aAVD,MAWK;AACH,kBAAI,KAAKkE,IAAL,CAAUlE,EAAV,CAAJ,EAAmB;AACjB,uBAAO,KAAKkE,IAAL,CAAUlE,EAAV,CAAP;AACAoC,2BAAWvV,IAAX,CAAgBmT,EAAhB;AACAqC,6BAAaxV,IAAb,CAAkB8S,OAAOW,OAAP,CAAe1U,CAAf,CAAlB;AACD,eAJD,MAKK;AACH;AACD;AACF;AACF;;AAED;;AAEF,aAAK,QAAL;AACE;AACA,eAAKA,IAAI,CAAJ,EAAOmB,MAAMgU,IAAIjV,MAAtB,EAA8BF,IAAImB,GAAlC,EAAuCnB,GAAvC,EAA4C;AAC1CoU,iBAAKe,IAAInV,CAAJ,CAAL;AACA,gBAAI,KAAKsY,IAAL,CAAUlE,EAAV,CAAJ,EAAmB;AACjB,qBAAO,KAAKkE,IAAL,CAAUlE,EAAV,CAAP;AACAoC,yBAAWvV,IAAX,CAAgBmT,EAAhB;AACAqC,2BAAaxV,IAAb,CAAkB8S,OAAOW,OAAP,CAAe1U,CAAf,CAAlB;AACD;AACF;;AAED;AAzDJ;;AA4DA,WAAKE,MAAL,IAAeiU,SAASjU,MAAT,GAAkBsW,WAAWtW,MAA5C;;AAEA,UAAIiU,SAASjU,MAAb,EAAqB;AACnB,aAAK4T,QAAL,CAAc,KAAd,EAAqB,EAACS,OAAOJ,QAAR,EAArB,EAAwCH,QAAxC;AACD;AACD,UAAIS,WAAWvU,MAAf,EAAuB;AACrB,aAAK4T,QAAL,CAAc,QAAd,EAAwB,EAACS,OAAOE,UAAR,EAAoBC,SAASsE,QAA7B,EAAuCrG,MAAMsG,YAA7C,EAAxB,EAAoFjF,QAApF;AACD;AACD,UAAIwC,WAAWtW,MAAf,EAAuB;AACrB,aAAK4T,QAAL,CAAc,QAAd,EAAwB,EAACS,OAAOiC,UAAR,EAAoB9B,SAAS+B,YAA7B,EAAxB,EAAoEzC,QAApE;AACD;AACF;AACF,GAnFD;;AAqFA;AACA9D,WAASkD,SAAT,CAAmBI,EAAnB,GAAwBvD,QAAQmD,SAAR,CAAkBI,EAA1C;AACAtD,WAASkD,SAAT,CAAmBO,GAAnB,GAAyB1D,QAAQmD,SAAR,CAAkBO,GAA3C;AACAzD,WAASkD,SAAT,CAAmBU,QAAnB,GAA8B7D,QAAQmD,SAAR,CAAkBU,QAAhD;;AAEA;AACA5D,WAASkD,SAAT,CAAmBM,SAAnB,GAA+BxD,SAASkD,SAAT,CAAmBI,EAAlD;AACAtD,WAASkD,SAAT,CAAmBS,WAAnB,GAAiC3D,SAASkD,SAAT,CAAmBO,GAApD;;AAEAhG,SAAOvQ,OAAP,GAAiB8S,QAAjB,C;;;;;;;;AC/YA,MAAIgJ,UAAU,mBAAAhc,CAAQ,EAAR,CAAd,CAA4C,IAAI+S,UAAU,mBAAA/S,CAAQ,EAAR,CAAd;AAC5C,MAAIgT,WAAW,mBAAAhT,CAAQ,EAAR,CAAf;AACA,MAAID,OAAO,mBAAAC,CAAQ,CAAR,CAAX;AACA,MAAIuT,UAAU,mBAAAvT,CAAQ,EAAR,CAAd;AACA,MAAIsT,UAAU,mBAAAtT,CAAQ,EAAR,CAAd;AACA,MAAIoT,SAAS,mBAAApT,CAAQ,EAAR,CAAb;AACA,MAAIqT,SAAS,mBAAArT,CAAQ,GAAR,CAAb;AACA,MAAIwT,SAAS,mBAAAxT,CAAQ,GAAR,CAAb;AACA,MAAIyT,aAAa,mBAAAzT,CAAQ,GAAR,CAAjB;AACA,MAAIic,QAAQ,mBAAAjc,CAAQ,GAAR,CAAZ;AACA,MAAIkc,WAAW,mBAAAlc,CAAQ,GAAR,CAAf;;AAGA;AACAkT,UAAQiJ,KAAR,GAAgBD,SAASC,KAAzB;;AAGA;;;;;;;AAOA,MAAIC,gBAAgBxZ,SAApB;;AAGA;;;;;;;;;AASA,MAAIyZ,WAAW;AACb7M,WAAmB,OADN;AAEbC,YAAmB,OAFN;AAGb6M,iBAAmB,MAHN;AAIbC,iBAAmB,OAJN;AAKbC,YAAmB,GALN;AAMbC,YAAmB,GANN;AAObC,YAAmB,GAPN;AAQbC,iBAAmB,qBAAStS,CAAT,EAAY;AAAE,aAAOA,CAAP;AAAW,KAR/B;AASbuS,iBAAmB,qBAASvS,CAAT,EAAY;AAAE,aAAOA,CAAP;AAAW,KAT/B;AAUbwS,iBAAmB,qBAASxS,CAAT,EAAY;AAAE,aAAOA,CAAP;AAAW,KAV/B;AAWbyS,cAAmB,IAXN;AAYbC,qBAAmB,IAZN;AAabC,gBAAmB,KAbN;AAcbC,qBAAmB,IAdN;AAebC,mBAAmB,GAfN,EAec;AAC3BC,kBAAmB,IAhBN,EAgBc;;AAE3BC,2BAAuBhB,aAlBV;AAmBbiB,uBAAuB,IAnBV,EAmBgB;AAC7BC,sBAAuB,KApBV;AAqBbC,wBAAuBnB,aArBV;;AAuBboB,eAAmB,SAvBN;AAwBbC,eAAmB,SAxBN;AAyBbC,aAAmB,KAzBN;AA0BbC,aAAmB,KA1BN;;AA4BbpS,WAAmB2H,QAAQiJ,KAAR,CAAcyB,GA5BpB;AA6BbC,aAAmB,KA7BN;AA8BbC,gBAAmB1B,aA9BN,EA8BqB;AAClC2B,qBAAmB3B,aA/BN;;AAiCb4B,eAAmB;AACjBC,YAAa,SADI;AAEjBC,cAAa,SAFI;AAGjBC,mBAAa,CAHI,CAGF;AAHE,KAjCN;;AAuCbC,oBAAmB;AAChBC,kBAAY,GADI;AAEhBC,gBAAY,GAFI;AAGhBC,gBAAY;AAHI,KAvCN;;AA6CbC,eAAYpC,aA7CC;AA8CbqC,eAAYrC,aA9CC;AA+CbsC,cAAYtC,aA/CC;AAgDbuC,cAAYvC,aAhDC;AAiDbwC,UAAYxC,aAjDC;AAkDbyC,UAAYzC,aAlDC;AAmDb0C,WAAY1C,aAnDC;AAoDb2C,UAAY3C,aApDC;AAqDb4C,UAAY5C,aArDC;AAsDb6C,WAAY7C,aAtDC;AAuDb8C,UAAY9C,aAvDC;AAwDb+C,UAAY/C,aAxDC;AAyDbgD,WAAYhD;AAzDC,GAAf;;AA6DA;AACA;AACA;;;AAGA;;;;;;;;;;;AAWA,WAASlJ,OAAT,CAAiBmM,SAAjB,EAA4B5J,IAA5B,EAAkCtI,OAAlC,EAA2C;AACzC,QAAI,EAAE,gBAAgB+F,OAAlB,CAAJ,EAAgC;AAC9B,YAAM,IAAIoM,WAAJ,CAAgB,kDAAhB,CAAN;AACD;;AAED;AACA,SAAKC,gBAAL,GAAwBF,SAAxB;;AAEA,SAAKG,SAAL,GAAiB,IAAjB,CARyC,CAQjB;AACxB,SAAKC,UAAL,GAAkB,IAAlB,CATyC,CASjB;;AAExB;AACA,SAAKC,MAAL;;AAEAxD,aAASyD,WAAT,CAAqBtD,QAArB,EAA+B,IAA/B;;AAEA;AACA,SAAKuD,IAAL,GAAYhd,SAAZ;AACA,SAAKid,IAAL,GAAYjd,SAAZ;AACA,SAAKkd,IAAL,GAAYld,SAAZ;AACA,SAAKmd,QAAL,GAAgBnd,SAAhB;AACA,SAAKod,SAAL,GAAiBpd,SAAjB;;AAEA;;AAEA;AACA,SAAKqT,UAAL,CAAgB9I,OAAhB;;AAEA;AACA,QAAIsI,IAAJ,EAAU;AACR,WAAK6F,OAAL,CAAa7F,IAAb;AACD;AACF;;AAED;AACAuG,UAAQ9I,QAAQgD,SAAhB;;AAEA;;;AAGAhD,UAAQgD,SAAR,CAAkB+J,SAAlB,GAA8B,YAAW;AACvC,SAAKze,KAAL,GAAa,IAAI+R,OAAJ,CACX,IAAI,KAAK2M,MAAL,CAAYC,KAAZ,EADO,EAEX,IAAI,KAAKC,MAAL,CAAYD,KAAZ,EAFO,EAGX,IAAI,KAAKE,MAAL,CAAYF,KAAZ,EAHO,CAAb;;AAMA;AACA,QAAI,KAAKlD,eAAT,EAA0B;AACxB,UAAI,KAAKzb,KAAL,CAAWmT,CAAX,GAAe,KAAKnT,KAAL,CAAWoT,CAA9B,EAAiC;AAC/B;AACA,aAAKpT,KAAL,CAAWoT,CAAX,GAAe,KAAKpT,KAAL,CAAWmT,CAA1B;AACD,OAHD,MAIK;AACH;AACA,aAAKnT,KAAL,CAAWmT,CAAX,GAAe,KAAKnT,KAAL,CAAWoT,CAA1B;AACD;AACF;;AAED;AACA,SAAKpT,KAAL,CAAW8e,CAAX,IAAgB,KAAKpD,aAArB;AACA;;AAEA;AACA,QAAI,KAAKqD,UAAL,KAAoB3d,SAAxB,EAAmC;AACjC,WAAKpB,KAAL,CAAWb,KAAX,GAAmB,IAAI,KAAK4f,UAAL,CAAgBJ,KAAhB,EAAvB;AACD;;AAED;AACA,QAAIzC,UAAU,KAAKwC,MAAL,CAAYM,MAAZ,KAAuB,KAAKhf,KAAL,CAAWmT,CAAhD;AACA,QAAIgJ,UAAU,KAAKyC,MAAL,CAAYI,MAAZ,KAAuB,KAAKhf,KAAL,CAAWoT,CAAhD;AACA,QAAI6L,UAAU,KAAKJ,MAAL,CAAYG,MAAZ,KAAuB,KAAKhf,KAAL,CAAW8e,CAAhD;AACA,SAAKI,MAAL,CAAYC,cAAZ,CAA2BjD,OAA3B,EAAoCC,OAApC,EAA6C8C,OAA7C;AACD,GAjCD;;AAoCA;;;;;;;AAOAvN,UAAQgD,SAAR,CAAkB0K,cAAlB,GAAmC,UAASC,OAAT,EAAkB;AACnD,QAAIC,cAAc,KAAKC,0BAAL,CAAgCF,OAAhC,CAAlB;AACA,WAAO,KAAKG,2BAAL,CAAiCF,WAAjC,CAAP;AACD,GAHD;;AAKA;;;;;;;;;AASA5N,UAAQgD,SAAR,CAAkB6K,0BAAlB,GAA+C,UAASF,OAAT,EAAkB;AAC/D,QAAII,iBAAiB,KAAKP,MAAL,CAAYQ,iBAAZ,EAArB;AAAA,QACEC,iBAAiB,KAAKT,MAAL,CAAYU,iBAAZ,EADnB;AAAA,QAEEC,KAAKR,QAAQlM,CAAR,GAAY,KAAKnT,KAAL,CAAWmT,CAF9B;AAAA,QAGE2M,KAAKT,QAAQjM,CAAR,GAAY,KAAKpT,KAAL,CAAWoT,CAH9B;AAAA,QAIE2M,KAAKV,QAAQP,CAAR,GAAY,KAAK9e,KAAL,CAAW8e,CAJ9B;AAAA,QAMEkB,KAAKP,eAAetM,CANtB;AAAA,QAOE8M,KAAKR,eAAerM,CAPtB;AAAA,QAQE8M,KAAKT,eAAeX,CARtB;;;AAUA;AACEqB,YAAQlgB,KAAKmgB,GAAL,CAAST,eAAexM,CAAxB,CAXV;AAAA,QAYEkN,QAAQpgB,KAAKqgB,GAAL,CAASX,eAAexM,CAAxB,CAZV;AAAA,QAaEoN,QAAQtgB,KAAKmgB,GAAL,CAAST,eAAevM,CAAxB,CAbV;AAAA,QAcEoN,QAAQvgB,KAAKqgB,GAAL,CAASX,eAAevM,CAAxB,CAdV;AAAA,QAeEqN,QAAQxgB,KAAKmgB,GAAL,CAAST,eAAeb,CAAxB,CAfV;AAAA,QAgBE4B,QAAQzgB,KAAKqgB,GAAL,CAASX,eAAeb,CAAxB,CAhBV;;;AAkBA;AACE6B,SAAKH,SAASC,SAASX,KAAKG,EAAd,IAAoBS,SAASb,KAAKG,EAAd,CAA7B,IAAkDO,SAASR,KAAKG,EAAd,CAnBzD;AAAA,QAoBEU,KAAKT,SAASK,SAAST,KAAKG,EAAd,IAAoBK,SAASE,SAASX,KAAKG,EAAd,IAAoBS,SAASb,KAAKG,EAAd,CAA7B,CAA7B,IAAgFK,SAASK,SAASZ,KAAKG,EAAd,IAAoBQ,SAASZ,KAAGG,EAAZ,CAA7B,CApBvF;AAAA,QAqBEa,KAAKR,SAASG,SAAST,KAAKG,EAAd,IAAoBK,SAASE,SAASX,KAAKG,EAAd,IAAoBS,SAASb,KAAKG,EAAd,CAA7B,CAA7B,IAAgFG,SAASO,SAASZ,KAAKG,EAAd,IAAoBQ,SAASZ,KAAGG,EAAZ,CAA7B,CArBvF;;AAuBA,WAAO,IAAIjO,OAAJ,CAAY4O,EAAZ,EAAgBC,EAAhB,EAAoBC,EAApB,CAAP;AACD,GAzBD;;AA2BA;;;;;;;;AAQAnP,UAAQgD,SAAR,CAAkB8K,2BAAlB,GAAgD,UAASF,WAAT,EAAsB;AACpE,QAAIwB,KAAK,KAAKC,GAAL,CAAS5N,CAAlB;AAAA,QACE6N,KAAK,KAAKD,GAAL,CAAS3N,CADhB;AAAA,QAEE6N,KAAK,KAAKF,GAAL,CAASjC,CAFhB;AAAA,QAGE6B,KAAKrB,YAAYnM,CAHnB;AAAA,QAIEyN,KAAKtB,YAAYlM,CAJnB;AAAA,QAKEyN,KAAKvB,YAAYR,CALnB;;AAOA;AACA,QAAIoC,EAAJ;AACA,QAAIC,EAAJ;AACA,QAAI,KAAK5F,eAAT,EAA0B;AACxB2F,WAAK,CAACP,KAAKG,EAAN,KAAaG,KAAKJ,EAAlB,CAAL;AACAM,WAAK,CAACP,KAAKI,EAAN,KAAaC,KAAKJ,EAAlB,CAAL;AACD,KAHD,MAIK;AACHK,WAAKP,KAAK,EAAEM,KAAK,KAAK/B,MAAL,CAAYkC,YAAZ,EAAP,CAAV;AACAD,WAAKP,KAAK,EAAEK,KAAK,KAAK/B,MAAL,CAAYkC,YAAZ,EAAP,CAAV;AACD;;AAED;AACA;AACA,WAAO,IAAItP,OAAJ,CACL,KAAKuP,cAAL,GAAsBH,KAAK,KAAKI,KAAL,CAAWC,MAAX,CAAkB5S,WADxC,EAEL,KAAK6S,cAAL,GAAsBL,KAAK,KAAKG,KAAL,CAAWC,MAAX,CAAkB5S,WAFxC,CAAP;AAGD,GAzBD;;AA4BA;;;AAGA+C,UAAQgD,SAAR,CAAkB+M,iBAAlB,GAAsC,UAASC,MAAT,EAAiBhK,IAAjB,EAAuB;AAC3D,QAAIA,SAAStW,SAAb,EAAwB;AACtBsW,aAAO,IAAP;AACD;;AAED,SAAK,IAAIpW,IAAI,CAAb,EAAgBA,IAAIogB,OAAOlgB,MAA3B,EAAmCF,GAAnC,EAAwC;AACtC,UAAIiS,QAAWmO,OAAOpgB,CAAP,CAAf;AACAiS,YAAMoO,KAAN,GAAe,KAAKpC,0BAAL,CAAgChM,MAAMA,KAAtC,CAAf;AACAA,YAAMqO,MAAN,GAAe,KAAKpC,2BAAL,CAAiCjM,MAAMoO,KAAvC,CAAf;;AAEA;AACA,UAAIE,cAAc,KAAKtC,0BAAL,CAAgChM,MAAMuO,MAAtC,CAAlB;AACAvO,YAAMwO,IAAN,GAAa,KAAKxG,eAAL,GAAuBsG,YAAYrgB,MAAZ,EAAvB,GAA8C,CAACqgB,YAAY/C,CAAxE;AACD;;AAED,QAAI,CAACpH,IAAL,EAAW;AACT;AACD;;AAED;AACA,QAAIsK,YAAY,SAAZA,SAAY,CAAU/gB,CAAV,EAAaC,CAAb,EAAgB;AAC9B,aAAOA,EAAE6gB,IAAF,GAAS9gB,EAAE8gB,IAAlB;AACD,KAFD;AAGAL,WAAOhK,IAAP,CAAYsK,SAAZ;AACD,GAxBD;;AA2BAtQ,UAAQgD,SAAR,CAAkBuN,eAAlB,GAAoC,UAAShO,IAAT,EAAe;AACjD,WAAOA,KAAKzS,MAAZ;AACD,GAFD;;AAKAkQ,UAAQgD,SAAR,CAAkBwN,kBAAlB,GAAuC,UAASjO,IAAT,EAAe;AACpD,QAAIkO,UAAU,CAAd;AACA,SAAK,IAAIC,MAAT,IAAmBnO,KAAK,CAAL,CAAnB,EAA4B;AAC1B,UAAIA,KAAK,CAAL,EAAQlT,cAAR,CAAuBqhB,MAAvB,CAAJ,EAAoC;AAClCD;AACD;AACF;AACD,WAAOA,OAAP;AACD,GARD;;AAWAzQ,UAAQgD,SAAR,CAAkB2N,iBAAlB,GAAsC,UAASpO,IAAT,EAAemO,MAAf,EAAuB;AAC3D,QAAIE,iBAAiB,EAArB;AACA,SAAK,IAAIhhB,IAAI,CAAb,EAAgBA,IAAI2S,KAAKzS,MAAzB,EAAiCF,GAAjC,EAAsC;AACpC,UAAIghB,eAAehgB,OAAf,CAAuB2R,KAAK3S,CAAL,EAAQ8gB,MAAR,CAAvB,KAA2C,CAAC,CAAhD,EAAmD;AACjDE,uBAAe/f,IAAf,CAAoB0R,KAAK3S,CAAL,EAAQ8gB,MAAR,CAApB;AACD;AACF;AACD,WAAOE,cAAP;AACD,GARD;;AAWA;;;;;AAKA5Q,UAAQgD,SAAR,CAAkB6N,cAAlB,GAAmC,UAAStO,IAAT,EAAcmO,MAAd,EAAsB;AACvD,QAAIzD,QAAS,IAAIlE,KAAJ,EAAb;;AAEA;AACA,SAAK,IAAInZ,IAAI,CAAb,EAAgBA,IAAI2S,KAAKzS,MAAzB,EAAiCF,GAAjC,EAAsC;AACpC,UAAIkL,OAAOyH,KAAK3S,CAAL,EAAQ8gB,MAAR,CAAX;AACAzD,YAAM6D,MAAN,CAAahW,IAAb;AACD;;AAED,WAAOmS,KAAP;AACD,GAVD;;AAaA;;;;;AAKAjN,UAAQgD,SAAR,CAAkB+N,gBAAlB,GAAqC,UAAUxO,IAAV,EAAgB;;AAEnD,QAAIyO,gBAAgB,KAAK3Y,KAAL,KAAe2H,QAAQiJ,KAAR,CAAcgI,QAA7B,IACA,KAAK5Y,KAAL,KAAe2H,QAAQiJ,KAAR,CAAciI,OAD7B,IAEA,KAAK7Y,KAAL,KAAe2H,QAAQiJ,KAAR,CAAckI,QAF7B,IAGA,KAAK9Y,KAAL,KAAe2H,QAAQiJ,KAAR,CAAcmI,OAHjD;;AAKA,QAAI,CAACJ,aAAL,EAAoB;AAClB,aADkB,CACR;AACX;;AAED;AACA,QAAI,KAAKnE,QAAL,KAAkBnd,SAAtB,EAAiC;AAC/B,YAAM,IAAIU,KAAJ,CAAU,2BACZ,mBADY,GAEZ,qBAFY,GAEY,KAAKiI,KAFjB,GAEyB,IAFnC,CAAN;AAID;;AAED;AACA;AACA,QAAIkK,KAAK,CAAL,EAAQ,KAAKsK,QAAb,MAA2Bnd,SAA/B,EAA0C;AACxC,YAAM,IAAIU,KAAJ,CAAU,2BACZ,WADY,GACE,KAAKyc,QADP,GACkB,KADlB,GAEZ,qBAFY,GAEY,KAAKxU,KAFjB,GAEyB,IAFnC,CAAN;AAID;AACF,GA3BD;;AA8BA;;;;;;;;;AASA2H,UAAQgD,SAAR,CAAkBqO,iBAAlB,GAAsC,UAAUpE,KAAV,EAAiBqE,UAAjB,EAA6BC,UAA7B,EAAyC;AAC7E,QAAID,eAAe5hB,SAAnB,EAA8B;AAC5Bud,YAAM9e,GAAN,GAAYmjB,UAAZ;AACD;;AAED,QAAIC,eAAe7hB,SAAnB,EAA8B;AAC5Bud,YAAM7e,GAAN,GAAYmjB,UAAZ;AACD;;AAED;AACA;AACA;AACA,QAAItE,MAAM7e,GAAN,IAAa6e,MAAM9e,GAAvB,EAA4B8e,MAAM7e,GAAN,GAAY6e,MAAM9e,GAAN,GAAY,CAAxB;AAC7B,GAbD;;AAgBA;;;;;;;AAOA6R,UAAQgD,SAAR,CAAkBwO,eAAlB,GAAoC,UAAUC,OAAV,EAAmBpZ,KAAnB,EAA0B;AAC5D,QAAI4L,KAAK,IAAT;;AAEA;AACA,QAAI,KAAK0E,OAAT,EAAkB;AAChB,WAAKA,OAAL,CAAapF,GAAb,CAAiB,GAAjB,EAAsB,KAAKmO,SAA3B;AACD;;AAED,QAAID,YAAY/hB,SAAhB,EACE;;AAEF,QAAIQ,MAAMC,OAAN,CAAcshB,OAAd,CAAJ,EAA4B;AAC1BA,gBAAU,IAAI5R,OAAJ,CAAY4R,OAAZ,CAAV;AACD;;AAED,QAAIlP,IAAJ;AACA,QAAIkP,mBAAmB5R,OAAnB,IAA8B4R,mBAAmB3R,QAArD,EAA+D;AAC7DyC,aAAOkP,QAAQ5M,GAAR,EAAP;AACD,KAFD,MAGK;AACH,YAAM,IAAIzU,KAAJ,CAAU,sCAAV,CAAN;AACD;;AAED,QAAImS,KAAKzS,MAAL,IAAe,CAAnB,EACE;;AAEF,SAAK6Y,OAAL,GAAe8I,OAAf;AACA,SAAKnF,SAAL,GAAiB/J,IAAjB;;AAEA;AACA,SAAKmP,SAAL,GAAiB,YAAY;AAC3BzN,SAAGmE,OAAH,CAAWnE,GAAG0E,OAAd;AACD,KAFD;AAGA,SAAKA,OAAL,CAAavF,EAAb,CAAgB,GAAhB,EAAqB,KAAKsO,SAA1B;;AAEA;AACA,SAAKhF,IAAL,GAAY,GAAZ;AACA,SAAKC,IAAL,GAAY,GAAZ;AACA,SAAKC,IAAL,GAAY,GAAZ;;AAGA,QAAI+E,WAAW,KAAKtZ,KAAL,IAAc2H,QAAQiJ,KAAR,CAAc2I,GAA5B,IACb,KAAKvZ,KAAL,IAAc2H,QAAQiJ,KAAR,CAAcgI,QADf,IAEb,KAAK5Y,KAAL,IAAc2H,QAAQiJ,KAAR,CAAciI,OAF9B;;AAIA;AACA,QAAIS,QAAJ,EAAc;AACZ,UAAI,KAAKE,gBAAL,KAA0BniB,SAA9B,EAAyC;AACvC,aAAK4b,SAAL,GAAiB,KAAKuG,gBAAtB;AACD,OAFD,MAGK;AACH,YAAIC,QAAQ,KAAKnB,iBAAL,CAAuBpO,IAAvB,EAA4B,KAAKmK,IAAjC,CAAZ;AACA,aAAKpB,SAAL,GAAkBwG,MAAM,CAAN,IAAWA,MAAM,CAAN,CAAZ,IAAyB,CAA1C;AACD;;AAED,UAAI,KAAKC,gBAAL,KAA0BriB,SAA9B,EAAyC;AACvC,aAAK6b,SAAL,GAAiB,KAAKwG,gBAAtB;AACD,OAFD,MAGK;AACH,YAAIC,QAAQ,KAAKrB,iBAAL,CAAuBpO,IAAvB,EAA4B,KAAKoK,IAAjC,CAAZ;AACA,aAAKpB,SAAL,GAAkByG,MAAM,CAAN,IAAWA,MAAM,CAAN,CAAZ,IAAyB,CAA1C;AACD;AACF;;AAED;AACA,QAAIC,WAAW,CAAf;;AAEA,QAAIjF,SAAS,KAAK6D,cAAL,CAAoBtO,IAApB,EAA0B,KAAKmK,IAA/B,CAAb;AACA,QAAIiF,QAAJ,EAAc;AACZ3E,aAAOkF,MAAP,CAAc,KAAK5G,SAAL,GAAiB,CAA/B;AACD;AACD,SAAK+F,iBAAL,CAAuBrE,MAAvB,EAA+B,KAAKmF,WAApC,EAAiD,KAAKC,WAAtD;AACA,SAAKpF,MAAL,GAAcA,MAAd;AACA,SAAKpB,KAAL,GAAc,KAAKyG,YAAL,KAAsB3iB,SAAvB,GAAoC,KAAK2iB,YAAzC,GAAwDrF,OAAOC,KAAP,KAAegF,QAApF;;AAEA,QAAI/E,SAAS,KAAK2D,cAAL,CAAoBtO,IAApB,EAA0B,KAAKoK,IAA/B,CAAb;AACA,QAAIgF,QAAJ,EAAc;AACZzE,aAAOgF,MAAP,CAAc,KAAK3G,SAAL,GAAiB,CAA/B;AACD;AACD,SAAK8F,iBAAL,CAAuBnE,MAAvB,EAA+B,KAAKoF,WAApC,EAAiD,KAAKC,WAAtD;AACA,SAAKrF,MAAL,GAAcA,MAAd;AACA,SAAKnB,KAAL,GAAc,KAAKyG,YAAL,KAAsB9iB,SAAvB,GAAoC,KAAK8iB,YAAzC,GAAwDtF,OAAOD,KAAP,KAAegF,QAApF;;AAEA,QAAI9E,SAAS,KAAK0D,cAAL,CAAoBtO,IAApB,EAA0B,KAAKqK,IAA/B,CAAb;AACA,SAAKyE,iBAAL,CAAuBlE,MAAvB,EAA+B,KAAKsF,WAApC,EAAiD,KAAKC,WAAtD;AACA,SAAKvF,MAAL,GAAcA,MAAd;AACA,SAAKjB,KAAL,GAAc,KAAKyG,YAAL,KAAsBjjB,SAAvB,GAAoC,KAAKijB,YAAzC,GAAwDxF,OAAOF,KAAP,KAAegF,QAApF;;AAEA,QAAI1P,KAAK,CAAL,EAAQlT,cAAR,CAAuB,OAAvB,CAAJ,EAAqC;AACnC,WAAKwd,QAAL,GAAgB,OAAhB;AACA,UAAIQ,aAAa,KAAKwD,cAAL,CAAoBtO,IAApB,EAAyB,KAAKsK,QAA9B,CAAjB;AACA,WAAKwE,iBAAL,CAAuBhE,UAAvB,EAAmC,KAAKuF,eAAxC,EAAyD,KAAKC,eAA9D;AACA,WAAKxF,UAAL,GAAkBA,UAAlB;AACD;;AAGD;AACA;AACA,QAAI9K,KAAK,CAAL,EAAQlT,cAAR,CAAuB,QAAvB,CAAJ,EAAsC;AACpC;AACA,WAAKyd,SAAL,GAAiB,QAAjB;;AAEA,UAAI,KAAKgG,UAAL,KAAoBpjB,SAAxB,EAAmC;AACjC,aAAKojB,UAAL,GAAkB,IAAI3S,MAAJ,CAAWsR,OAAX,EAAoB,KAAK3E,SAAzB,EAAoC,IAApC,CAAlB;AACA,aAAKgG,UAAL,CAAgBC,iBAAhB,CAAkC,YAAW;AAAC9O,aAAG+O,MAAH;AAAa,SAA3D;AACD;AACF;;AAGD;AACA,SAAKjG,SAAL;AACD,GA/GD;;AAmHA;;;;;;;AAOA/M,UAAQgD,SAAR,CAAkBiQ,cAAlB,GAAmC,UAAU1Q,IAAV,EAAgB;AACjD;AACA;AACA,QAAId,CAAJ,EAAOC,CAAP,EAAU9R,CAAV,EAAawd,CAAb,EAAgBje,GAAhB,EAAqB0S,KAArB;;AAEA,QAAI0K,aAAa,EAAjB;;AAEA,QAAI,KAAKlU,KAAL,KAAe2H,QAAQiJ,KAAR,CAAciK,IAA7B,IACF,KAAK7a,KAAL,KAAe2H,QAAQiJ,KAAR,CAAckK,OAD/B,EACwC;AACtC;AACA;;AAEA;AACA,UAAIrB,QAAQ,EAAZ;AACA,UAAIE,QAAQ,EAAZ;AACA,WAAKpiB,IAAI,CAAT,EAAYA,IAAI,KAAK2gB,eAAL,CAAqBhO,IAArB,CAAhB,EAA4C3S,GAA5C,EAAiD;AAC/C6R,YAAIc,KAAK3S,CAAL,EAAQ,KAAK8c,IAAb,KAAsB,CAA1B;AACAhL,YAAIa,KAAK3S,CAAL,EAAQ,KAAK+c,IAAb,KAAsB,CAA1B;;AAEA,YAAImF,MAAMlhB,OAAN,CAAc6Q,CAAd,MAAqB,CAAC,CAA1B,EAA6B;AAC3BqQ,gBAAMjhB,IAAN,CAAW4Q,CAAX;AACD;AACD,YAAIuQ,MAAMphB,OAAN,CAAc8Q,CAAd,MAAqB,CAAC,CAA1B,EAA6B;AAC3BsQ,gBAAMnhB,IAAN,CAAW6Q,CAAX;AACD;AACF;;AAED,UAAI0R,aAAa,SAAbA,UAAa,CAAU7jB,CAAV,EAAaC,CAAb,EAAgB;AAC/B,eAAOD,IAAIC,CAAX;AACD,OAFD;AAGAsiB,YAAM9L,IAAN,CAAWoN,UAAX;AACApB,YAAMhM,IAAN,CAAWoN,UAAX;;AAEA;AACA,UAAIC,aAAa,EAAjB,CA1BsC,CA0Bf;AACvB,WAAKzjB,IAAI,CAAT,EAAYA,IAAI2S,KAAKzS,MAArB,EAA6BF,GAA7B,EAAkC;AAChC6R,YAAIc,KAAK3S,CAAL,EAAQ,KAAK8c,IAAb,KAAsB,CAA1B;AACAhL,YAAIa,KAAK3S,CAAL,EAAQ,KAAK+c,IAAb,KAAsB,CAA1B;AACAS,YAAI7K,KAAK3S,CAAL,EAAQ,KAAKgd,IAAb,KAAsB,CAA1B;;AAEA;AACA,YAAI0G,SAASxB,MAAMlhB,OAAN,CAAc6Q,CAAd,CAAb;AACA,YAAI8R,SAASvB,MAAMphB,OAAN,CAAc8Q,CAAd,CAAb;;AAEA,YAAI2R,WAAWC,MAAX,MAAuB5jB,SAA3B,EAAsC;AACpC2jB,qBAAWC,MAAX,IAAqB,EAArB;AACD;;AAED,YAAI3F,UAAU,IAAItN,OAAJ,EAAd;AACAsN,gBAAQlM,CAAR,GAAYA,CAAZ;AACAkM,gBAAQjM,CAAR,GAAYA,CAAZ;AACAiM,gBAAQP,CAAR,GAAYA,CAAZ;AACAO,gBAAQpL,IAAR,GAAeA,KAAK3S,CAAL,CAAf;;AAEAT,cAAM,EAAN;AACAA,YAAI0S,KAAJ,GAAY8L,OAAZ;AACAxe,YAAI8gB,KAAJ,GAAYvgB,SAAZ;AACAP,YAAI+gB,MAAJ,GAAaxgB,SAAb;AACAP,YAAIihB,MAAJ,GAAa,IAAI/P,OAAJ,CAAYoB,CAAZ,EAAeC,CAAf,EAAkB,KAAKyL,MAAL,CAAYhf,GAA9B,CAAb;;AAEAklB,mBAAWC,MAAX,EAAmBC,MAAnB,IAA6BpkB,GAA7B;;AAEAod,mBAAW1b,IAAX,CAAgB1B,GAAhB;AACD;;AAED;AACA,WAAKsS,IAAI,CAAT,EAAYA,IAAI4R,WAAWvjB,MAA3B,EAAmC2R,GAAnC,EAAwC;AACtC,aAAKC,IAAI,CAAT,EAAYA,IAAI2R,WAAW5R,CAAX,EAAc3R,MAA9B,EAAsC4R,GAAtC,EAA2C;AACzC,cAAI2R,WAAW5R,CAAX,EAAcC,CAAd,CAAJ,EAAsB;AACpB2R,uBAAW5R,CAAX,EAAcC,CAAd,EAAiB8R,UAAjB,GAA+B/R,IAAI4R,WAAWvjB,MAAX,GAAkB,CAAvB,GAA4BujB,WAAW5R,IAAE,CAAb,EAAgBC,CAAhB,CAA5B,GAAiDhS,SAA/E;AACA2jB,uBAAW5R,CAAX,EAAcC,CAAd,EAAiB+R,QAAjB,GAA+B/R,IAAI2R,WAAW5R,CAAX,EAAc3R,MAAd,GAAqB,CAA1B,GAA+BujB,WAAW5R,CAAX,EAAcC,IAAE,CAAhB,CAA/B,GAAoDhS,SAAlF;AACA2jB,uBAAW5R,CAAX,EAAcC,CAAd,EAAiBgS,UAAjB,GACGjS,IAAI4R,WAAWvjB,MAAX,GAAkB,CAAtB,IAA2B4R,IAAI2R,WAAW5R,CAAX,EAAc3R,MAAd,GAAqB,CAArD,GACEujB,WAAW5R,IAAE,CAAb,EAAgBC,IAAE,CAAlB,CADF,GAEEhS,SAHJ;AAID;AACF;AACF;AACF,KAvED,MAwEK;AAAG;AACN,WAAKqhB,gBAAL,CAAsBxO,IAAtB;;AAEA;AACA,WAAK3S,IAAI,CAAT,EAAYA,IAAI2S,KAAKzS,MAArB,EAA6BF,GAA7B,EAAkC;AAChCiS,gBAAQ,IAAIxB,OAAJ,EAAR;AACAwB,cAAMJ,CAAN,GAAUc,KAAK3S,CAAL,EAAQ,KAAK8c,IAAb,KAAsB,CAAhC;AACA7K,cAAMH,CAAN,GAAUa,KAAK3S,CAAL,EAAQ,KAAK+c,IAAb,KAAsB,CAAhC;AACA9K,cAAMuL,CAAN,GAAU7K,KAAK3S,CAAL,EAAQ,KAAKgd,IAAb,KAAsB,CAAhC;AACA/K,cAAMU,IAAN,GAAaA,KAAK3S,CAAL,CAAb;;AAEA,YAAI,KAAKid,QAAL,KAAkBnd,SAAtB,EAAiC;AAC/BmS,gBAAMpU,KAAN,GAAc8U,KAAK3S,CAAL,EAAQ,KAAKid,QAAb,KAA0B,CAAxC;AACD;;AAED1d,cAAM,EAAN;AACAA,YAAI0S,KAAJ,GAAYA,KAAZ;AACA1S,YAAIihB,MAAJ,GAAa,IAAI/P,OAAJ,CAAYwB,MAAMJ,CAAlB,EAAqBI,MAAMH,CAA3B,EAA8B,KAAKyL,MAAL,CAAYhf,GAA1C,CAAb;AACAgB,YAAI8gB,KAAJ,GAAYvgB,SAAZ;AACAP,YAAI+gB,MAAJ,GAAaxgB,SAAb;;AAEA,YAAI,KAAK2I,KAAL,KAAe2H,QAAQiJ,KAAR,CAAc0K,IAAjC,EAAuC;AACrC,cAAI/jB,IAAI,CAAR,EAAW;AACT;AACA2c,uBAAW3c,IAAI,CAAf,EAAkBgkB,SAAlB,GAA8BzkB,GAA9B;AACD;AACF;;AAEDod,mBAAW1b,IAAX,CAAgB1B,GAAhB;AACD;AACF;;AAED,WAAOod,UAAP;AACD,GAhHD;;AAkHA;;;;;;;AAOAvM,UAAQgD,SAAR,CAAkBwJ,MAAlB,GAA2B,YAAY;AACrC;AACA,WAAO,KAAKH,gBAAL,CAAsBte,aAAtB,EAAP,EAA8C;AAC5C,WAAKse,gBAAL,CAAsBpe,WAAtB,CAAkC,KAAKoe,gBAAL,CAAsBre,UAAxD;AACD;;AAED,SAAK4hB,KAAL,GAAaxT,SAASC,aAAT,CAAuB,KAAvB,CAAb;AACA,SAAKuT,KAAL,CAAWvX,KAAX,CAAiBoE,QAAjB,GAA4B,UAA5B;AACA,SAAKmT,KAAL,CAAWvX,KAAX,CAAiBsE,QAAjB,GAA4B,QAA5B;;AAEA;AACA,SAAKiT,KAAL,CAAWC,MAAX,GAAoBzT,SAASC,aAAT,CAAwB,QAAxB,CAApB;AACA,SAAKuT,KAAL,CAAWC,MAAX,CAAkBxX,KAAlB,CAAwBoE,QAAxB,GAAmC,UAAnC;AACA,SAAKmT,KAAL,CAAWhT,WAAX,CAAuB,KAAKgT,KAAL,CAAWC,MAAlC;AACA;AACA;AACE,UAAIgE,WAAWzX,SAASC,aAAT,CAAwB,KAAxB,CAAf;AACAwX,eAASxb,KAAT,CAAetC,KAAf,GAAuB,KAAvB;AACA8d,eAASxb,KAAT,CAAeyb,UAAf,GAA6B,MAA7B;AACAD,eAASxb,KAAT,CAAe0b,OAAf,GAA0B,MAA1B;AACAF,eAASG,SAAT,GAAsB,kDAAtB;AACA,WAAKpE,KAAL,CAAWC,MAAX,CAAkBjT,WAAlB,CAA8BiX,QAA9B;AACD;;AAED,SAAKjE,KAAL,CAAWpM,MAAX,GAAoBpH,SAASC,aAAT,CAAwB,KAAxB,CAApB;AACA,SAAKuT,KAAL,CAAWpM,MAAX,CAAkBnL,KAAlB,CAAwBoE,QAAxB,GAAmC,UAAnC;AACA,SAAKmT,KAAL,CAAWpM,MAAX,CAAkBnL,KAAlB,CAAwB+X,MAAxB,GAAiC,KAAjC;AACA,SAAKR,KAAL,CAAWpM,MAAX,CAAkBnL,KAAlB,CAAwBpG,IAAxB,GAA+B,KAA/B;AACA,SAAK2d,KAAL,CAAWpM,MAAX,CAAkBnL,KAAlB,CAAwBiE,KAAxB,GAAgC,MAAhC;AACA,SAAKsT,KAAL,CAAWhT,WAAX,CAAuB,KAAKgT,KAAL,CAAWpM,MAAlC;;AAEA;AACA,QAAIS,KAAK,IAAT;AACA,QAAIgQ,cAAc,SAAdA,WAAc,CAAU9f,KAAV,EAAiB;AAAC8P,SAAGiQ,YAAH,CAAgB/f,KAAhB;AAAwB,KAA5D;AACA,QAAIggB,eAAe,SAAfA,YAAe,CAAUhgB,KAAV,EAAiB;AAAC8P,SAAGmQ,aAAH,CAAiBjgB,KAAjB;AAAyB,KAA9D;AACA,QAAIkgB,eAAe,SAAfA,YAAe,CAAUlgB,KAAV,EAAiB;AAAC8P,SAAGqQ,QAAH,CAAYngB,KAAZ;AAAoB,KAAzD;AACA,QAAIogB,YAAY,SAAZA,SAAY,CAAUpgB,KAAV,EAAiB;AAAC8P,SAAGuQ,UAAH,CAAcrgB,KAAd;AAAsB,KAAxD;AACA,QAAIsgB,UAAU,SAAVA,OAAU,CAAStgB,KAAT,EAAgB;AAAC8P,SAAGyQ,QAAH,CAAYvgB,KAAZ;AAAoB,KAAnD;AACA;;AAEAtH,SAAK2G,gBAAL,CAAsB,KAAKoc,KAAL,CAAWC,MAAjC,EAAyC,SAAzC,EAAoD8E,SAApD;AACA9nB,SAAK2G,gBAAL,CAAsB,KAAKoc,KAAL,CAAWC,MAAjC,EAAyC,WAAzC,EAAsDoE,WAAtD;AACApnB,SAAK2G,gBAAL,CAAsB,KAAKoc,KAAL,CAAWC,MAAjC,EAAyC,YAAzC,EAAuDsE,YAAvD;AACAtnB,SAAK2G,gBAAL,CAAsB,KAAKoc,KAAL,CAAWC,MAAjC,EAAyC,YAAzC,EAAuDwE,YAAvD;AACAxnB,SAAK2G,gBAAL,CAAsB,KAAKoc,KAAL,CAAWC,MAAjC,EAAyC,WAAzC,EAAsD0E,SAAtD;AACA1nB,SAAK2G,gBAAL,CAAsB,KAAKoc,KAAL,CAAWC,MAAjC,EAAyC,OAAzC,EAAkD4E,OAAlD;;AAEA;AACA,SAAKpI,gBAAL,CAAsBzP,WAAtB,CAAkC,KAAKgT,KAAvC;AACD,GAjDD;;AAoDA;;;AAGA5P,UAAQgD,SAAR,CAAkB4R,QAAlB,GAA6B,UAAStY,KAAT,EAAgBC,MAAhB,EAAwB;AACnD,SAAKqT,KAAL,CAAWvX,KAAX,CAAiBiE,KAAjB,GAAyBA,KAAzB;AACA,SAAKsT,KAAL,CAAWvX,KAAX,CAAiBkE,MAAjB,GAA0BA,MAA1B;;AAEA,SAAKsY,aAAL;AACD,GALD;;AAQA;;;AAGA7U,UAAQgD,SAAR,CAAkB6R,aAAlB,GAAkC,YAAW;AAC3C,SAAKjF,KAAL,CAAWC,MAAX,CAAkBxX,KAAlB,CAAwBiE,KAAxB,GAAgC,MAAhC;AACA,SAAKsT,KAAL,CAAWC,MAAX,CAAkBxX,KAAlB,CAAwBkE,MAAxB,GAAiC,MAAjC;;AAEA,SAAKqT,KAAL,CAAWC,MAAX,CAAkBvT,KAAlB,GAA0B,KAAKsT,KAAL,CAAWC,MAAX,CAAkB5S,WAA5C;AACA,SAAK2S,KAAL,CAAWC,MAAX,CAAkBtT,MAAlB,GAA2B,KAAKqT,KAAL,CAAWC,MAAX,CAAkBiF,YAA7C;;AAEA;AACA,SAAKlF,KAAL,CAAWpM,MAAX,CAAkBnL,KAAlB,CAAwBiE,KAAxB,GAAiC,KAAKsT,KAAL,CAAWC,MAAX,CAAkB5S,WAAlB,GAAgC,IAAI,EAArC,GAA2C,IAA3E;AACD,GATD;;AAWA;;;AAGA+C,UAAQgD,SAAR,CAAkB+R,cAAlB,GAAmC,YAAW;AAC5C,QAAI,CAAC,KAAKnF,KAAL,CAAWpM,MAAZ,IAAsB,CAAC,KAAKoM,KAAL,CAAWpM,MAAX,CAAkBwR,MAA7C,EACE,MAAM,IAAI5kB,KAAJ,CAAU,wBAAV,CAAN;;AAEF,SAAKwf,KAAL,CAAWpM,MAAX,CAAkBwR,MAAlB,CAAyBC,IAAzB;AACD,GALD;;AAQA;;;AAGAjV,UAAQgD,SAAR,CAAkBkS,aAAlB,GAAkC,YAAW;AAC3C,QAAI,CAAC,KAAKtF,KAAL,CAAWpM,MAAZ,IAAsB,CAAC,KAAKoM,KAAL,CAAWpM,MAAX,CAAkBwR,MAA7C,EAAqD;;AAErD,SAAKpF,KAAL,CAAWpM,MAAX,CAAkBwR,MAAlB,CAAyBG,IAAzB;AACD,GAJD;;AAOA;;;;;;AAMAnV,UAAQgD,SAAR,CAAkBoS,aAAlB,GAAkC,YAAW;AAC3C;AACA,QAAI,KAAK5K,OAAL,CAAa6K,MAAb,CAAoB,KAAK7K,OAAL,CAAa1a,MAAb,GAAoB,CAAxC,MAA+C,GAAnD,EAAwD;AACtD,WAAK6f,cAAL,GACE2F,WAAW,KAAK9K,OAAhB,IAA2B,GAA3B,GACE,KAAKoF,KAAL,CAAWC,MAAX,CAAkB5S,WAFtB;AAGD,KAJD,MAKK;AACH,WAAK0S,cAAL,GAAsB2F,WAAW,KAAK9K,OAAhB,CAAtB,CADG,CAC6C;AACjD;;AAED;AACA,QAAI,KAAKC,OAAL,CAAa4K,MAAb,CAAoB,KAAK5K,OAAL,CAAa3a,MAAb,GAAoB,CAAxC,MAA+C,GAAnD,EAAwD;AACtD,WAAKggB,cAAL,GACEwF,WAAW,KAAK7K,OAAhB,IAA2B,GAA3B,IACG,KAAKmF,KAAL,CAAWC,MAAX,CAAkBiF,YAAlB,GAAiC,KAAKlF,KAAL,CAAWpM,MAAX,CAAkBsR,YADtD,CADF;AAGD,KAJD,MAKK;AACH,WAAKhF,cAAL,GAAsBwF,WAAW,KAAK7K,OAAhB,CAAtB,CADG,CAC6C;AACjD;AACF,GApBD;;AAwBA;;;;;;AAMAzK,UAAQgD,SAAR,CAAkBuS,iBAAlB,GAAsC,YAAW;AAC/C,QAAIC,MAAM,KAAKhI,MAAL,CAAYiI,cAAZ,EAAV;AACAD,QAAInK,QAAJ,GAAe,KAAKmC,MAAL,CAAYkC,YAAZ,EAAf;AACA,WAAO8F,GAAP;AACD,GAJD;;AAMA;;;AAGAxV,UAAQgD,SAAR,CAAkB0S,SAAlB,GAA8B,UAASnT,IAAT,EAAe;AAC3C;AACA,SAAKiP,eAAL,CAAqBjP,IAArB,EAA2B,KAAKlK,KAAhC;;AAGA,QAAI,KAAKya,UAAT,EAAqB;AACnB;AACA,WAAKvG,UAAL,GAAkB,KAAKuG,UAAL,CAAgBG,cAAhB,EAAlB;AACD,KAHD,MAIK;AACH;AACA,WAAK1G,UAAL,GAAkB,KAAK0G,cAAL,CAAoB,KAAK3G,SAAzB,CAAlB;AACD;;AAED;AACA,SAAKqJ,aAAL;AACD,GAhBD;;AAkBA;;;;;AAKA3V,UAAQgD,SAAR,CAAkBoF,OAAlB,GAA4B,UAAU7F,IAAV,EAAgB;AAC1C,SAAKmT,SAAL,CAAenT,IAAf;AACA,SAAKyQ,MAAL;;AAEA;AACA,QAAI,KAAK3I,kBAAL,IAA2B,KAAKyI,UAApC,EAAgD;AAC9C,WAAKiC,cAAL;AACD;AACF,GARD;;AAUA;;;;;AAKA/U,UAAQgD,SAAR,CAAkBD,UAAlB,GAA+B,UAAU9I,OAAV,EAAmB;AAChD,QAAIiR,iBAAiBxb,SAArB;;AAEA,SAAKwlB,aAAL;;AAEAlM,aAASjG,UAAT,CAAoB9I,OAApB,EAA6B,IAA7B;;AAEA,SAAK2b,qBAAL;AACA,SAAKhB,QAAL,CAAc,KAAKtY,KAAnB,EAA0B,KAAKC,MAA/B;;AAEA;AACA,QAAI,KAAK+P,SAAT,EAAoB;AAClB,WAAKlE,OAAL,CAAa,KAAKkE,SAAlB;AACD;;AAED;AACA,QAAI,KAAKjC,kBAAL,IAA2B,KAAKyI,UAApC,EAAgD;AAC9C,WAAKiC,cAAL;AACD;AACF,GAnBD;;AAsBA;;;AAGA/U,UAAQgD,SAAR,CAAkB4S,qBAAlB,GAA0C,YAAW;AACnD,QAAIhO,SAASlY,SAAb;;AAEA,YAAQ,KAAK2I,KAAb;AACE,WAAK2H,QAAQiJ,KAAR,CAAc2I,GAAnB;AACEhK,iBAAS5H,QAAQgD,SAAR,CAAkB6S,oBAA3B;AACA;AACF,WAAK7V,QAAQiJ,KAAR,CAAcgI,QAAnB;AACErJ,iBAAS5H,QAAQgD,SAAR,CAAkB8S,yBAA3B;AACA;AACF,WAAK9V,QAAQiJ,KAAR,CAAciI,OAAnB;AACEtJ,iBAAS5H,QAAQgD,SAAR,CAAkB+S,wBAA3B;AACA;AACF,WAAK/V,QAAQiJ,KAAR,CAAcyB,GAAnB;AACE9C,iBAAS5H,QAAQgD,SAAR,CAAkBgT,oBAA3B;AACA;AACF,WAAKhW,QAAQiJ,KAAR,CAAcgN,OAAnB;AACErO,iBAAS5H,QAAQgD,SAAR,CAAkBkT,wBAA3B;AACA;AACF,WAAKlW,QAAQiJ,KAAR,CAAckI,QAAnB;AACEvJ,iBAAS5H,QAAQgD,SAAR,CAAkBmT,yBAA3B;AACA;AACF,WAAKnW,QAAQiJ,KAAR,CAAcmI,OAAnB;AACExJ,iBAAS5H,QAAQgD,SAAR,CAAkBoT,wBAA3B;AACA;AACF,WAAKpW,QAAQiJ,KAAR,CAAckK,OAAnB;AACEvL,iBAAS5H,QAAQgD,SAAR,CAAkBqT,wBAA3B;AACA;AACF,WAAKrW,QAAQiJ,KAAR,CAAciK,IAAnB;AACEtL,iBAAS5H,QAAQgD,SAAR,CAAkBsT,qBAA3B;AACA;AACF,WAAKtW,QAAQiJ,KAAR,CAAc0K,IAAnB;AACE/L,iBAAS5H,QAAQgD,SAAR,CAAkBuT,qBAA3B;AACA;AACF;AACE,cAAM,IAAInmB,KAAJ,CAAU,4CACA,oBADA,GACuB,KAAKiI,KAD5B,GACoC,IAD9C,CAAN;AAEA;AAlCJ;;AAqCA,SAAKme,mBAAL,GAA2B5O,MAA3B;AACD,GAzCD;;AA4CA;;;AAGA5H,UAAQgD,SAAR,CAAkBgQ,MAAlB,GAA2B,YAAW;AACpC,QAAI,KAAKzG,UAAL,KAAoB7c,SAAxB,EAAmC;AACjC,YAAM,IAAIU,KAAJ,CAAU,4BAAV,CAAN;AACD;;AAED,SAAKykB,aAAL;AACA,SAAKO,aAAL;AACA,SAAKqB,aAAL;AACA,SAAKC,YAAL;AACA,SAAKC,WAAL;;AAEA,SAAKC,gBAAL;;AAEA,SAAKC,WAAL;AACA,SAAKC,aAAL;AACD,GAfD;;AAkBA;;;AAGA9W,UAAQgD,SAAR,CAAkB+T,WAAlB,GAAgC,YAAW;AACzC,QAAIlH,SAAS,KAAKD,KAAL,CAAWC,MAAxB;AACA,QAAImH,MAAMnH,OAAOoH,UAAP,CAAkB,IAAlB,CAAV;;AAEAD,QAAIE,QAAJ,GAAe,OAAf;AACAF,QAAIG,OAAJ,GAAe,OAAf;;AAEA,WAAOH,GAAP;AACD,GARD;;AAWA;;;AAGAhX,UAAQgD,SAAR,CAAkB0T,YAAlB,GAAiC,YAAW;AAC1C,QAAI7G,SAAS,KAAKD,KAAL,CAAWC,MAAxB;AACA,QAAImH,MAAMnH,OAAOoH,UAAP,CAAkB,IAAlB,CAAV;;AAEAD,QAAII,SAAJ,CAAc,CAAd,EAAiB,CAAjB,EAAoBvH,OAAOvT,KAA3B,EAAkCuT,OAAOtT,MAAzC;AACD,GALD;;AAQAyD,UAAQgD,SAAR,CAAkBqU,QAAlB,GAA6B,YAAW;AACtC,WAAO,KAAKzH,KAAL,CAAW3S,WAAX,GAAyB,KAAKgN,YAArC;AACD,GAFD;;AAKA;;;AAGAjK,UAAQgD,SAAR,CAAkBsU,eAAlB,GAAoC,YAAW;AAC7C,QAAIhb,KAAJ;;AAEA,QAAI,KAAKjE,KAAL,KAAe2H,QAAQiJ,KAAR,CAAcmI,OAAjC,EAA0C;AACxC,UAAImG,UAAU,KAAKF,QAAL,EAAd;AACA/a,cAASib,UAAU,CAAV,GAAcA,UAAU,CAAjC;AACD,KAHD,MAGO,IAAI,KAAKlf,KAAL,KAAe2H,QAAQiJ,KAAR,CAAciI,OAAjC,EAA0C;AAC/C5U,cAAQ,KAAKgP,SAAb;AACD,KAFM,MAEA;AACLhP,cAAQ,EAAR;AACD;AACD,WAAOA,KAAP;AACD,GAZD;;AAeA;;;AAGA0D,UAAQgD,SAAR,CAAkB8T,aAAlB,GAAkC,YAAW;;AAE3C;AACA,QAAI,KAAKlM,UAAL,KAAoB,IAAxB,EAA8B;AAC5B;AACD;;AAED;AACA,QAAI,KAAKvS,KAAL,KAAe2H,QAAQiJ,KAAR,CAAc0K,IAA7B,IACA,KAAKtb,KAAL,KAAe2H,QAAQiJ,KAAR,CAAciI,OADjC,CACyC;AADzC,MAEC;AACC;AACD;;AAED;AACA,QAAIsG,eAAgB,KAAKnf,KAAL,KAAe2H,QAAQiJ,KAAR,CAAciI,OAA7B,IACA,KAAK7Y,KAAL,KAAe2H,QAAQiJ,KAAR,CAAcmI,OADjD;;AAGA;AACA,QAAIqG,gBAAiB,KAAKpf,KAAL,KAAe2H,QAAQiJ,KAAR,CAAcmI,OAA7B,IACF,KAAK/Y,KAAL,KAAe2H,QAAQiJ,KAAR,CAAckI,QAD3B,IAEF,KAAK9Y,KAAL,KAAe2H,QAAQiJ,KAAR,CAAcgI,QAFhD;;AAIA,QAAI1U,SAAShO,KAAKH,GAAL,CAAS,KAAKwhB,KAAL,CAAWkF,YAAX,GAA0B,IAAnC,EAAyC,GAAzC,CAAb;AACA,QAAIziB,MAAS,KAAKqlB,MAAlB;AACA,QAAIpb,QAAS,KAAKgb,eAAL,EAAb,CAzB2C,CAyBL;AACtC,QAAInlB,QAAS,KAAKyd,KAAL,CAAW3S,WAAX,GAAyB,KAAKya,MAA3C;AACA,QAAIzlB,OAASE,QAAQmK,KAArB;AACA,QAAI8T,SAAS/d,MAAMkK,MAAnB;;AAEA,QAAIya,MAAM,KAAKD,WAAL,EAAV;AACAC,QAAIW,SAAJ,GAAgB,CAAhB;AACAX,QAAIY,IAAJ,GAAW,YAAX,CAhC2C,CAgClB;;AAEzB,QAAIJ,iBAAiB,KAArB,EAA4B;AAC1B;AACA,UAAIK,OAAO,CAAX;AACA,UAAIC,OAAOvb,MAAX,CAH0B,CAGP;AACnB,UAAImF,CAAJ;;AAEA,WAAKA,IAAImW,IAAT,EAAenW,IAAIoW,IAAnB,EAAyBpW,GAAzB,EAA8B;AAC5B,YAAI3I,IAAI,CAAC2I,IAAImW,IAAL,KAAcC,OAAOD,IAArB,CAAR;AACA,YAAI7f,MAAMe,IAAI,GAAd;AACA,YAAIhD,QAAQ,KAAKgiB,QAAL,CAAc/f,GAAd,EAAmB,CAAnB,EAAsB,CAAtB,CAAZ;;AAEAgf,YAAIgB,WAAJ,GAAkBjiB,KAAlB;AACAihB,YAAIiB,SAAJ;AACAjB,YAAIkB,MAAJ,CAAWjmB,IAAX,EAAiBI,MAAMqP,CAAvB;AACAsV,YAAImB,MAAJ,CAAWhmB,KAAX,EAAkBE,MAAMqP,CAAxB;AACAsV,YAAIhM,MAAJ;AACD;AACDgM,UAAIgB,WAAJ,GAAmB,KAAK1N,SAAxB;AACA0M,UAAIoB,UAAJ,CAAenmB,IAAf,EAAqBI,GAArB,EAA0BiK,KAA1B,EAAiCC,MAAjC;AAED,KApBD,MAoBO;;AAEL;AACA,UAAK8b,QAAL;AACA,UAAI,KAAKhgB,KAAL,KAAe2H,QAAQiJ,KAAR,CAAcmI,OAAjC,EAA0C;AACxC,YAAImG,UAAU,KAAKF,QAAL,EAAd;AACAgB,mBAAWd,UAAU,CAArB,CAFwC,CAEhB;AACzB,OAHD,MAGO,IAAI,KAAKlf,KAAL,KAAe2H,QAAQiJ,KAAR,CAAciI,OAAjC,EAA0C;AAC/C;AACD;AACD8F,UAAIgB,WAAJ,GAAmB,KAAK1N,SAAxB;AACA0M,UAAIsB,SAAJ,GAAiB,KAAKxN,SAAL,CAAeC,IAAhC;AACAiM,UAAIiB,SAAJ;AACAjB,UAAIkB,MAAJ,CAAWjmB,IAAX,EAAiBI,GAAjB;AACA2kB,UAAImB,MAAJ,CAAWhmB,KAAX,EAAkBE,GAAlB;AACA2kB,UAAImB,MAAJ,CAAWhmB,QAAQmK,KAAR,GAAgB+b,QAA3B,EAAqCjI,MAArC;AACA4G,UAAImB,MAAJ,CAAWlmB,IAAX,EAAiBme,MAAjB;AACA4G,UAAIuB,SAAJ;AACAvB,UAAIjM,IAAJ;AACAiM,UAAIhM,MAAJ;AACD;;AAED;AACA,QAAIwN,cAAc,CAAlB,CA7E2C,CA6EtB;;AAErB,QAAIC,YAAYhB,gBAAgB,KAAKpK,UAAL,CAAgBlf,GAAhC,GAAuC,KAAKgf,MAAL,CAAYhf,GAAnE;AACA,QAAIuqB,YAAYjB,gBAAgB,KAAKpK,UAAL,CAAgBjf,GAAhC,GAAuC,KAAK+e,MAAL,CAAY/e,GAAnE;AACA,QAAIuqB,OAAO,IAAIpY,UAAJ,CAAekY,SAAf,EAA0BC,SAA1B,EAAqC,CAACA,YAAUD,SAAX,IAAsB,CAA3D,EAA8D,IAA9D,CAAX;AACAE,SAAKC,KAAL,CAAW,IAAX;;AAEA,QAAIlX,CAAJ;AACA,QAAImX,IAAJ;AACA,QAAIC,EAAJ;AACA,WAAO,CAACH,KAAKI,GAAL,EAAR,EAAoB;AAClBrX,UAAI0O,SAAS,CAACuI,KAAKK,UAAL,KAAoBP,SAArB,KAAmCC,YAAYD,SAA/C,IAA4Dlc,MAAzE;AACAsc,aAAQ,IAAIzY,OAAJ,CAAYnO,OAAOumB,WAAnB,EAAgC9W,CAAhC,CAAR;AACAoX,WAAQ,IAAI1Y,OAAJ,CAAYnO,IAAZ,EAAkByP,CAAlB,CAAR;AACA,WAAKuX,KAAL,CAAWjC,GAAX,EAAgB6B,IAAhB,EAAsBC,EAAtB;;AAEA9B,UAAIkC,SAAJ,GAAgB,OAAhB;AACAlC,UAAImC,YAAJ,GAAmB,QAAnB;AACAnC,UAAIsB,SAAJ,GAAgB,KAAKhO,SAArB;AACA0M,UAAIoC,QAAJ,CAAaT,KAAKK,UAAL,EAAb,EAAgC/mB,OAAO,IAAIumB,WAA3C,EAAwD9W,CAAxD;;AAEAiX,WAAKU,IAAL;AACD;;AAEDrC,QAAIkC,SAAJ,GAAgB,OAAhB;AACAlC,QAAImC,YAAJ,GAAmB,KAAnB;AACA,QAAInX,QAAQ,KAAKqH,WAAjB;AACA2N,QAAIoC,QAAJ,CAAapX,KAAb,EAAoB7P,KAApB,EAA2Bie,SAAS,KAAKsH,MAAzC;AACD,GAzGD;;AA2GA;;;AAGA1X,UAAQgD,SAAR,CAAkB2S,aAAlB,GAAkC,YAAW;AAC3C,SAAK/F,KAAL,CAAWpM,MAAX,CAAkBwQ,SAAlB,GAA8B,EAA9B;;AAEA,QAAI,KAAKlB,UAAT,EAAqB;AACnB,UAAI7Y,UAAU;AACZ,mBAAW,KAAKiQ;AADJ,OAAd;AAGA,UAAI8K,SAAS,IAAI1U,MAAJ,CAAW,KAAKsP,KAAL,CAAWpM,MAAtB,EAA8BvJ,OAA9B,CAAb;AACA,WAAK2V,KAAL,CAAWpM,MAAX,CAAkBwR,MAAlB,GAA2BA,MAA3B;;AAEA;AACA,WAAKpF,KAAL,CAAWpM,MAAX,CAAkBnL,KAAlB,CAAwB0b,OAAxB,GAAkC,MAAlC;AACA;;AAEAiB,aAAOsE,SAAP,CAAiB,KAAKxG,UAAL,CAAgBjM,MAAjC;AACAmO,aAAOuE,eAAP,CAAuB,KAAKpP,iBAA5B;;AAEA;AACA,UAAIlG,KAAK,IAAT;AACA,UAAIuV,WAAW,SAAXA,QAAW,GAAY;AACzB,YAAI5mB,QAAQoiB,OAAOyE,QAAP,EAAZ;;AAEAxV,WAAG6O,UAAH,CAAc4G,WAAd,CAA0B9mB,KAA1B;AACAqR,WAAGsI,UAAH,GAAgBtI,GAAG6O,UAAH,CAAcG,cAAd,EAAhB;;AAEAhP,WAAG+O,MAAH;AACD,OAPD;AAQAgC,aAAO2E,mBAAP,CAA2BH,QAA3B;AACD,KAzBD,MA0BK;AACH,WAAK5J,KAAL,CAAWpM,MAAX,CAAkBwR,MAAlB,GAA2BtlB,SAA3B;AACD;AACF,GAhCD;;AAkCA;;;AAGAsQ,UAAQgD,SAAR,CAAkByT,aAAlB,GAAkC,YAAW;AAC3C,QAAK,KAAK7G,KAAL,CAAWpM,MAAX,CAAkBwR,MAAlB,KAA6BtlB,SAAlC,EAA6C;AAC3C,WAAKkgB,KAAL,CAAWpM,MAAX,CAAkBwR,MAAlB,CAAyBhC,MAAzB;AACD;AACF,GAJD;;AAOA;;;AAGAhT,UAAQgD,SAAR,CAAkB6T,WAAlB,GAAgC,YAAW;AACzC,QAAI,KAAK/D,UAAT,EAAqB;AACnB,UAAIkE,MAAM,KAAKD,WAAL,EAAV;;AAEAC,UAAIY,IAAJ,GAAW,YAAX,CAHmB,CAGM;AACzBZ,UAAI4C,SAAJ,GAAgB,MAAhB;AACA5C,UAAIsB,SAAJ,GAAgB,MAAhB;AACAtB,UAAIkC,SAAJ,GAAgB,MAAhB;AACAlC,UAAImC,YAAJ,GAAmB,KAAnB;;AAEA,UAAI1X,IAAI,KAAKiW,MAAb;AACA,UAAIhW,IAAI,KAAKgW,MAAb;AACAV,UAAIoC,QAAJ,CAAa,KAAKtG,UAAL,CAAgB+G,QAAhB,KAA6B,IAA7B,GAAoC,KAAK/G,UAAL,CAAgBgH,gBAAhB,EAAjD,EAAqFrY,CAArF,EAAwFC,CAAxF;AACD;AACF,GAdD;;AAiBA;;;;;AAKA1B,UAAQgD,SAAR,CAAkBiW,KAAlB,GAA0B,UAASjC,GAAT,EAAc6B,IAAd,EAAoBC,EAApB,EAAwBd,WAAxB,EAAqC;AAC7D,QAAIA,gBAAgBtoB,SAApB,EAA+B;AAC7BsnB,UAAIgB,WAAJ,GAAkBA,WAAlB;AACD;;AAEDhB,QAAIiB,SAAJ;AACAjB,QAAIkB,MAAJ,CAAWW,KAAKpX,CAAhB,EAAmBoX,KAAKnX,CAAxB;AACAsV,QAAImB,MAAJ,CAAWW,GAAGrX,CAAd,EAAmBqX,GAAGpX,CAAtB;AACAsV,QAAIhM,MAAJ;AACD,GATD;;AAYAhL,UAAQgD,SAAR,CAAkB+W,cAAlB,GAAmC,UAAS/C,GAAT,EAAcrJ,OAAd,EAAuBqM,IAAvB,EAA6BC,QAA7B,EAAuCC,OAAvC,EAAgD;AACjF,QAAIA,YAAYxqB,SAAhB,EAA2B;AACzBwqB,gBAAU,CAAV;AACD;;AAED,QAAIC,UAAU,KAAKzM,cAAL,CAAoBC,OAApB,CAAd;;AAEA,QAAIpf,KAAKqgB,GAAL,CAASqL,WAAW,CAApB,IAAyB,CAA7B,EAAgC;AAC9BjD,UAAIkC,SAAJ,GAAgB,QAAhB;AACAlC,UAAImC,YAAJ,GAAmB,KAAnB;AACAgB,cAAQzY,CAAR,IAAawY,OAAb;AACD,KAJD,MAKK,IAAI3rB,KAAKmgB,GAAL,CAASuL,WAAW,CAApB,IAAyB,CAA7B,EAA+B;AAClCjD,UAAIkC,SAAJ,GAAgB,OAAhB;AACAlC,UAAImC,YAAJ,GAAmB,QAAnB;AACD,KAHI,MAIA;AACHnC,UAAIkC,SAAJ,GAAgB,MAAhB;AACAlC,UAAImC,YAAJ,GAAmB,QAAnB;AACD;;AAEDnC,QAAIsB,SAAJ,GAAgB,KAAKhO,SAArB;AACA0M,QAAIoC,QAAJ,CAAaY,IAAb,EAAmBG,QAAQ1Y,CAA3B,EAA8B0Y,QAAQzY,CAAtC;AACD,GAvBD;;AA0BA1B,UAAQgD,SAAR,CAAkBoX,cAAlB,GAAmC,UAASpD,GAAT,EAAcrJ,OAAd,EAAuBqM,IAAvB,EAA6BC,QAA7B,EAAuCC,OAAvC,EAAgD;AACjF,QAAIA,YAAYxqB,SAAhB,EAA2B;AACzBwqB,gBAAU,CAAV;AACD;;AAED,QAAIC,UAAU,KAAKzM,cAAL,CAAoBC,OAApB,CAAd;;AAEA,QAAIpf,KAAKqgB,GAAL,CAASqL,WAAW,CAApB,IAAyB,CAA7B,EAAgC;AAC9BjD,UAAIkC,SAAJ,GAAgB,QAAhB;AACAlC,UAAImC,YAAJ,GAAmB,KAAnB;AACAgB,cAAQzY,CAAR,IAAawY,OAAb;AACD,KAJD,MAKK,IAAI3rB,KAAKmgB,GAAL,CAASuL,WAAW,CAApB,IAAyB,CAA7B,EAA+B;AAClCjD,UAAIkC,SAAJ,GAAgB,OAAhB;AACAlC,UAAImC,YAAJ,GAAmB,QAAnB;AACD,KAHI,MAIA;AACHnC,UAAIkC,SAAJ,GAAgB,MAAhB;AACAlC,UAAImC,YAAJ,GAAmB,QAAnB;AACD;;AAEDnC,QAAIsB,SAAJ,GAAgB,KAAKhO,SAArB;AACA0M,QAAIoC,QAAJ,CAAaY,IAAb,EAAmBG,QAAQ1Y,CAA3B,EAA8B0Y,QAAQzY,CAAtC;AACD,GAvBD;;AA0BA1B,UAAQgD,SAAR,CAAkBqX,cAAlB,GAAmC,UAASrD,GAAT,EAAcrJ,OAAd,EAAuBqM,IAAvB,EAA6B3b,MAA7B,EAAqC;AACtE,QAAIA,WAAW3O,SAAf,EAA0B;AACxB2O,eAAS,CAAT;AACD;;AAED,QAAI8b,UAAU,KAAKzM,cAAL,CAAoBC,OAApB,CAAd;AACAqJ,QAAIkC,SAAJ,GAAgB,OAAhB;AACAlC,QAAImC,YAAJ,GAAmB,QAAnB;AACAnC,QAAIsB,SAAJ,GAAgB,KAAKhO,SAArB;AACA0M,QAAIoC,QAAJ,CAAaY,IAAb,EAAmBG,QAAQ1Y,CAAR,GAAYpD,MAA/B,EAAuC8b,QAAQzY,CAA/C;AACD,GAVD;;AAaA;;;;;;;;AAQA1B,UAAQgD,SAAR,CAAkBsX,OAAlB,GAA4B,UAAStD,GAAT,EAAc6B,IAAd,EAAoBC,EAApB,EAAwBd,WAAxB,EAAqC;AAC/D,QAAIuC,SAAS,KAAK7M,cAAL,CAAoBmL,IAApB,CAAb;AACA,QAAI2B,OAAS,KAAK9M,cAAL,CAAoBoL,EAApB,CAAb;;AAEA,SAAKG,KAAL,CAAWjC,GAAX,EAAgBuD,MAAhB,EAAwBC,IAAxB,EAA8BxC,WAA9B;AACD,GALD;;AAQA;;;AAGAhY,UAAQgD,SAAR,CAAkB2T,WAAlB,GAAgC,YAAW;AACzC,QAAIK,MAAM,KAAKD,WAAL,EAAV;AAAA,QACE8B,IADF;AAAA,QACQC,EADR;AAAA,QACYH,IADZ;AAAA,QACkB8B,UADlB;AAAA,QAEET,IAFF;AAAA,QAEQU,KAFR;AAAA,QAEeC,KAFf;AAAA,QAEsBC,KAFtB;AAAA,QAGEvc,MAHF;AAAA,QAGU4D,OAHV;AAAA,QAGmBC,OAHnB;;AAKA;AACA;AACA8U,QAAIY,IAAJ,GAAW,KAAK,KAAKpK,MAAL,CAAYkC,YAAZ,EAAL,GAAkC,UAA7C;;AAEA;AACA,QAAImL,WAAa,QAAQ,KAAKvsB,KAAL,CAAWmT,CAApC;AACA,QAAIqZ,WAAa,QAAQ,KAAKxsB,KAAL,CAAWoT,CAApC;AACA,QAAIqZ,aAAa,IAAI,KAAKvN,MAAL,CAAYkC,YAAZ,EAArB,CAbyC,CAaQ;AACjD,QAAIuK,WAAa,KAAKzM,MAAL,CAAYiI,cAAZ,GAA6BtK,UAA9C;AACA,QAAI6P,YAAa,IAAI5a,OAAJ,CAAY7R,KAAKqgB,GAAL,CAASqL,QAAT,CAAZ,EAAgC1rB,KAAKmgB,GAAL,CAASuL,QAAT,CAAhC,CAAjB;;AAEA,QAAIjN,SAAS,KAAKA,MAAlB;AACA,QAAIE,SAAS,KAAKA,MAAlB;AACA,QAAIC,SAAS,KAAKA,MAAlB;;AAEA;AACA6J,QAAIW,SAAJ,GAAgB,CAAhB;AACA8C,iBAAc,KAAKpI,YAAL,KAAsB3iB,SAApC;AACAipB,WAAO,IAAIpY,UAAJ,CAAeyM,OAAO7e,GAAtB,EAA2B6e,OAAO5e,GAAlC,EAAuC,KAAKwd,KAA5C,EAAmD6O,UAAnD,CAAP;AACA9B,SAAKC,KAAL,CAAW,IAAX;;AAEA,WAAO,CAACD,KAAKI,GAAL,EAAR,EAAoB;AAClB,UAAItX,IAAIkX,KAAKK,UAAL,EAAR;;AAEA,UAAI,KAAKpP,QAAT,EAAmB;AACjBiP,eAAO,IAAIxY,OAAJ,CAAYoB,CAAZ,EAAeyL,OAAO/e,GAAtB,EAA2Bgf,OAAOhf,GAAlC,CAAP;AACA2qB,aAAO,IAAIzY,OAAJ,CAAYoB,CAAZ,EAAeyL,OAAO9e,GAAtB,EAA2B+e,OAAOhf,GAAlC,CAAP;AACA,aAAKmsB,OAAL,CAAatD,GAAb,EAAkB6B,IAAlB,EAAwBC,EAAxB,EAA4B,KAAKvO,SAAjC;AACD,OAJD,MAKK;AACHsO,eAAO,IAAIxY,OAAJ,CAAYoB,CAAZ,EAAeyL,OAAO/e,GAAtB,EAA2Bgf,OAAOhf,GAAlC,CAAP;AACA2qB,aAAO,IAAIzY,OAAJ,CAAYoB,CAAZ,EAAeyL,OAAO/e,GAAP,GAAW0sB,QAA1B,EAAoC1N,OAAOhf,GAA3C,CAAP;AACA,aAAKmsB,OAAL,CAAatD,GAAb,EAAkB6B,IAAlB,EAAwBC,EAAxB,EAA4B,KAAKxO,SAAjC;;AAEAuO,eAAO,IAAIxY,OAAJ,CAAYoB,CAAZ,EAAeyL,OAAO9e,GAAtB,EAA2B+e,OAAOhf,GAAlC,CAAP;AACA2qB,aAAO,IAAIzY,OAAJ,CAAYoB,CAAZ,EAAeyL,OAAO9e,GAAP,GAAWysB,QAA1B,EAAoC1N,OAAOhf,GAA3C,CAAP;AACA,aAAKmsB,OAAL,CAAatD,GAAb,EAAkB6B,IAAlB,EAAwBC,EAAxB,EAA4B,KAAKxO,SAAjC;AACD;;AAEDqQ,cAAeK,UAAUvZ,CAAV,GAAc,CAAf,GAAoByL,OAAO/e,GAA3B,GAAiC+e,OAAO9e,GAAtD;AACA,UAAIuf,UAAU,IAAItN,OAAJ,CAAYoB,CAAZ,EAAekZ,KAAf,EAAsBxN,OAAOhf,GAA7B,CAAd;AACA,UAAI8sB,MAAU,OAAO,KAAKxR,WAAL,CAAiBhI,CAAjB,CAAP,GAA6B,IAA3C;AACA,WAAKsY,cAAL,CAAoB/C,GAApB,EAAyBrJ,OAAzB,EAAkCsN,GAAlC,EAAuChB,QAAvC,EAAiDc,UAAjD;;AAEApC,WAAKU,IAAL;AACD;;AAED;AACArC,QAAIW,SAAJ,GAAgB,CAAhB;AACA8C,iBAAc,KAAKjI,YAAL,KAAsB9iB,SAApC;AACAipB,WAAO,IAAIpY,UAAJ,CAAe2M,OAAO/e,GAAtB,EAA2B+e,OAAO9e,GAAlC,EAAuC,KAAK2d,KAA5C,EAAmD0O,UAAnD,CAAP;AACA9B,SAAKC,KAAL,CAAW,IAAX;;AAEA,WAAO,CAACD,KAAKI,GAAL,EAAR,EAAoB;AAClB,UAAIrX,IAAIiX,KAAKK,UAAL,EAAR;;AAEA,UAAI,KAAKpP,QAAT,EAAmB;AACjBiP,eAAO,IAAIxY,OAAJ,CAAY2M,OAAO7e,GAAnB,EAAwBuT,CAAxB,EAA2ByL,OAAOhf,GAAlC,CAAP;AACA2qB,aAAO,IAAIzY,OAAJ,CAAY2M,OAAO5e,GAAnB,EAAwBsT,CAAxB,EAA2ByL,OAAOhf,GAAlC,CAAP;AACA,aAAKmsB,OAAL,CAAatD,GAAb,EAAkB6B,IAAlB,EAAwBC,EAAxB,EAA4B,KAAKvO,SAAjC;AACD,OAJD,MAKK;AACHsO,eAAO,IAAIxY,OAAJ,CAAY2M,OAAO7e,GAAnB,EAAwBuT,CAAxB,EAA2ByL,OAAOhf,GAAlC,CAAP;AACA2qB,aAAO,IAAIzY,OAAJ,CAAY2M,OAAO7e,GAAP,GAAW2sB,QAAvB,EAAiCpZ,CAAjC,EAAoCyL,OAAOhf,GAA3C,CAAP;AACA,aAAKmsB,OAAL,CAAatD,GAAb,EAAkB6B,IAAlB,EAAwBC,EAAxB,EAA4B,KAAKxO,SAAjC;;AAEAuO,eAAO,IAAIxY,OAAJ,CAAY2M,OAAO5e,GAAnB,EAAwBsT,CAAxB,EAA2ByL,OAAOhf,GAAlC,CAAP;AACA2qB,aAAO,IAAIzY,OAAJ,CAAY2M,OAAO5e,GAAP,GAAW0sB,QAAvB,EAAiCpZ,CAAjC,EAAoCyL,OAAOhf,GAA3C,CAAP;AACA,aAAKmsB,OAAL,CAAatD,GAAb,EAAkB6B,IAAlB,EAAwBC,EAAxB,EAA4B,KAAKxO,SAAjC;AACD;;AAEDoQ,cAAWM,UAAUtZ,CAAV,GAAc,CAAf,GAAoBsL,OAAO7e,GAA3B,GAAiC6e,OAAO5e,GAAlD;AACAuf,gBAAU,IAAItN,OAAJ,CAAYqa,KAAZ,EAAmBhZ,CAAnB,EAAsByL,OAAOhf,GAA7B,CAAV;AACA,UAAI8sB,MAAM,OAAO,KAAKvR,WAAL,CAAiBhI,CAAjB,CAAP,GAA6B,IAAvC;AACA,WAAK0Y,cAAL,CAAoBpD,GAApB,EAAyBrJ,OAAzB,EAAkCsN,GAAlC,EAAuChB,QAAvC,EAAiDc,UAAjD;;AAEApC,WAAKU,IAAL;AACD;;AAED;AACArC,QAAIW,SAAJ,GAAgB,CAAhB;AACA8C,iBAAc,KAAK9H,YAAL,KAAsBjjB,SAApC;AACAipB,WAAO,IAAIpY,UAAJ,CAAe4M,OAAOhf,GAAtB,EAA2Bgf,OAAO/e,GAAlC,EAAuC,KAAK8d,KAA5C,EAAmDuO,UAAnD,CAAP;AACA9B,SAAKC,KAAL,CAAW,IAAX;;AAEA8B,YAASM,UAAUvZ,CAAV,GAAc,CAAf,GAAoBuL,OAAO7e,GAA3B,GAAiC6e,OAAO5e,GAAhD;AACAusB,YAASK,UAAUtZ,CAAV,GAAc,CAAf,GAAoBwL,OAAO/e,GAA3B,GAAiC+e,OAAO9e,GAAhD;;AAEA,WAAO,CAACuqB,KAAKI,GAAL,EAAR,EAAoB;AAClB,UAAI3L,IAAIuL,KAAKK,UAAL,EAAR;;AAEA;AACA,UAAIkC,SAAS,IAAI7a,OAAJ,CAAYqa,KAAZ,EAAmBC,KAAnB,EAA0BvN,CAA1B,CAAb;AACA,UAAImN,SAAS,KAAK7M,cAAL,CAAoBwN,MAApB,CAAb;AACApC,WAAK,IAAI1Y,OAAJ,CAAYma,OAAO9Y,CAAP,GAAWsZ,UAAvB,EAAmCR,OAAO7Y,CAA1C,CAAL;AACA,WAAKuX,KAAL,CAAWjC,GAAX,EAAgBuD,MAAhB,EAAwBzB,EAAxB,EAA4B,KAAKxO,SAAjC;;AAEA,UAAI2Q,MAAM,KAAKtR,WAAL,CAAiByD,CAAjB,IAAsB,GAAhC;AACA,WAAKiN,cAAL,CAAoBrD,GAApB,EAAyBkE,MAAzB,EAAiCD,GAAjC,EAAsC,CAAtC;;AAEAtC,WAAKU,IAAL;AACD;;AAEDrC,QAAIW,SAAJ,GAAgB,CAAhB;AACAkB,WAAO,IAAIxY,OAAJ,CAAYqa,KAAZ,EAAmBC,KAAnB,EAA0BxN,OAAOhf,GAAjC,CAAP;AACA2qB,SAAO,IAAIzY,OAAJ,CAAYqa,KAAZ,EAAmBC,KAAnB,EAA0BxN,OAAO/e,GAAjC,CAAP;AACA,SAAKksB,OAAL,CAAatD,GAAb,EAAkB6B,IAAlB,EAAwBC,EAAxB,EAA4B,KAAKxO,SAAjC;;AAEA;AACA,QAAI6Q,MAAJ;AACA,QAAIC,MAAJ;AACApE,QAAIW,SAAJ,GAAgB,CAAhB;;AAEA;AACAwD,aAAS,IAAI9a,OAAJ,CAAY2M,OAAO7e,GAAnB,EAAwB+e,OAAO/e,GAA/B,EAAoCgf,OAAOhf,GAA3C,CAAT;AACAitB,aAAS,IAAI/a,OAAJ,CAAY2M,OAAO5e,GAAnB,EAAwB8e,OAAO/e,GAA/B,EAAoCgf,OAAOhf,GAA3C,CAAT;AACA,SAAKmsB,OAAL,CAAatD,GAAb,EAAkBmE,MAAlB,EAA0BC,MAA1B,EAAkC,KAAK9Q,SAAvC;AACA;AACA6Q,aAAS,IAAI9a,OAAJ,CAAY2M,OAAO7e,GAAnB,EAAwB+e,OAAO9e,GAA/B,EAAoC+e,OAAOhf,GAA3C,CAAT;AACAitB,aAAS,IAAI/a,OAAJ,CAAY2M,OAAO5e,GAAnB,EAAwB8e,OAAO9e,GAA/B,EAAoC+e,OAAOhf,GAA3C,CAAT;AACA,SAAKmsB,OAAL,CAAatD,GAAb,EAAkBmE,MAAlB,EAA0BC,MAA1B,EAAkC,KAAK9Q,SAAvC;;AAEA;AACA0M,QAAIW,SAAJ,GAAgB,CAAhB;AACA;AACAkB,WAAO,IAAIxY,OAAJ,CAAY2M,OAAO7e,GAAnB,EAAwB+e,OAAO/e,GAA/B,EAAoCgf,OAAOhf,GAA3C,CAAP;AACA2qB,SAAO,IAAIzY,OAAJ,CAAY2M,OAAO7e,GAAnB,EAAwB+e,OAAO9e,GAA/B,EAAoC+e,OAAOhf,GAA3C,CAAP;AACA,SAAKmsB,OAAL,CAAatD,GAAb,EAAkB6B,IAAlB,EAAwBC,EAAxB,EAA4B,KAAKxO,SAAjC;AACA;AACAuO,WAAO,IAAIxY,OAAJ,CAAY2M,OAAO5e,GAAnB,EAAwB8e,OAAO/e,GAA/B,EAAoCgf,OAAOhf,GAA3C,CAAP;AACA2qB,SAAO,IAAIzY,OAAJ,CAAY2M,OAAO5e,GAAnB,EAAwB8e,OAAO9e,GAA/B,EAAoC+e,OAAOhf,GAA3C,CAAP;AACA,SAAKmsB,OAAL,CAAatD,GAAb,EAAkB6B,IAAlB,EAAwBC,EAAxB,EAA4B,KAAKxO,SAAjC;;AAEA;AACA,QAAIhB,SAAS,KAAKA,MAAlB;AACA,QAAIA,OAAOxZ,MAAP,GAAgB,CAApB,EAAuB;AACrBoS,gBAAU,MAAM,KAAK5T,KAAL,CAAWoT,CAA3B;AACAgZ,cAAU,CAAC1N,OAAO5e,GAAP,GAAa,IAAE4e,OAAO7e,GAAvB,IAA4B,CAAtC;AACAwsB,cAAWK,UAAUvZ,CAAV,GAAc,CAAf,GAAoByL,OAAO/e,GAAP,GAAa+T,OAAjC,GAA0CgL,OAAO9e,GAAP,GAAa8T,OAAjE;AACA8X,aAAU,IAAI3Z,OAAJ,CAAYqa,KAAZ,EAAmBC,KAAnB,EAA0BxN,OAAOhf,GAAjC,CAAV;AACA,WAAK4rB,cAAL,CAAoB/C,GAApB,EAAyBgD,IAAzB,EAA+B1Q,MAA/B,EAAuC2Q,QAAvC;AACD;;AAED;AACA,QAAI1Q,SAAS,KAAKA,MAAlB;AACA,QAAIA,OAAOzZ,MAAP,GAAgB,CAApB,EAAuB;AACrBmS,gBAAU,MAAM,KAAK3T,KAAL,CAAWmT,CAA3B;AACAiZ,cAAWM,UAAUtZ,CAAV,GAAc,CAAf,GAAoBsL,OAAO7e,GAAP,GAAa8T,OAAjC,GAA2C+K,OAAO5e,GAAP,GAAa6T,OAAlE;AACA0Y,cAAU,CAACzN,OAAO9e,GAAP,GAAa,IAAE8e,OAAO/e,GAAvB,IAA4B,CAAtC;AACA6rB,aAAU,IAAI3Z,OAAJ,CAAYqa,KAAZ,EAAmBC,KAAnB,EAA0BxN,OAAOhf,GAAjC,CAAV;;AAEA,WAAKisB,cAAL,CAAoBpD,GAApB,EAAyBgD,IAAzB,EAA+BzQ,MAA/B,EAAuC0Q,QAAvC;AACD;;AAED;AACA,QAAIzQ,SAAS,KAAKA,MAAlB;AACA,QAAIA,OAAO1Z,MAAP,GAAgB,CAApB,EAAuB;AACrBuO,eAAS,EAAT,CADqB,CACP;AACdqc,cAAUM,UAAUvZ,CAAV,GAAc,CAAf,GAAoBuL,OAAO7e,GAA3B,GAAiC6e,OAAO5e,GAAjD;AACAusB,cAAUK,UAAUtZ,CAAV,GAAc,CAAf,GAAoBwL,OAAO/e,GAA3B,GAAiC+e,OAAO9e,GAAjD;AACAwsB,cAAS,CAACzN,OAAO/e,GAAP,GAAa,IAAE+e,OAAOhf,GAAvB,IAA4B,CAArC;AACA6rB,aAAS,IAAI3Z,OAAJ,CAAYqa,KAAZ,EAAmBC,KAAnB,EAA0BC,KAA1B,CAAT;;AAEA,WAAKP,cAAL,CAAoBrD,GAApB,EAAyBgD,IAAzB,EAA+BxQ,MAA/B,EAAuCnL,MAAvC;AACD;AACF,GA3KD;;AA6KA;;;;;;AAMA2B,UAAQgD,SAAR,CAAkB+U,QAAlB,GAA6B,UAASsD,CAAT,EAAYC,CAAZ,EAAeC,CAAf,EAAkB;AAC7C,QAAIC,CAAJ,EAAOC,CAAP,EAAUC,CAAV,EAAaC,CAAb,EAAgBC,EAAhB,EAAoBC,CAApB;;AAEAF,QAAIJ,IAAID,CAAR;AACAM,SAAKrtB,KAAKuK,KAAL,CAAWuiB,IAAE,EAAb,CAAL,CAJ6C,CAIrB;AACxBQ,QAAIF,KAAK,IAAIptB,KAAKutB,GAAL,CAAWT,IAAE,EAAH,GAAS,CAAV,GAAe,CAAxB,CAAT,CAAJ;;AAEA,YAAQO,EAAR;AACE,WAAK,CAAL;AAAQJ,YAAIG,CAAJ,CAAOF,IAAII,CAAJ,CAAOH,IAAI,CAAJ,CAAO;AAC7B,WAAK,CAAL;AAAQF,YAAIK,CAAJ,CAAOJ,IAAIE,CAAJ,CAAOD,IAAI,CAAJ,CAAO;AAC7B,WAAK,CAAL;AAAQF,YAAI,CAAJ,CAAOC,IAAIE,CAAJ,CAAOD,IAAIG,CAAJ,CAAO;AAC7B,WAAK,CAAL;AAAQL,YAAI,CAAJ,CAAOC,IAAII,CAAJ,CAAOH,IAAIC,CAAJ,CAAO;AAC7B,WAAK,CAAL;AAAQH,YAAIK,CAAJ,CAAOJ,IAAI,CAAJ,CAAOC,IAAIC,CAAJ,CAAO;AAC7B,WAAK,CAAL;AAAQH,YAAIG,CAAJ,CAAOF,IAAI,CAAJ,CAAOC,IAAIG,CAAJ,CAAO;;AAE7B;AAASL,YAAI,CAAJ,CAAOC,IAAI,CAAJ,CAAOC,IAAI,CAAJ,CAAO;AARhC;;AAWA,WAAO,SAAS7lB,SAAS2lB,IAAE,GAAX,CAAT,GAA2B,GAA3B,GAAiC3lB,SAAS4lB,IAAE,GAAX,CAAjC,GAAmD,GAAnD,GAAyD5lB,SAAS6lB,IAAE,GAAX,CAAzD,GAA2E,GAAlF;AACD,GAnBD;;AAsBA1b,UAAQgD,SAAR,CAAkB+Y,eAAlB,GAAoC,UAASla,KAAT,EAAgB;AAClD,QAAIA,UAAUnS,SAAd,EAAyB;AACvB,UAAI,KAAKma,eAAT,EAA0B;AACxB,eAAO,IAAI,CAAChI,MAAMoO,KAAN,CAAY7C,CAAjB,GAAqB,KAAKtC,SAAL,CAAeG,WAA3C;AACD,OAFD,MAGK;AACH,eAAO,EAAE,KAAKoE,GAAL,CAASjC,CAAT,GAAa,KAAKI,MAAL,CAAYkC,YAAZ,EAAf,IAA6C,KAAK5E,SAAL,CAAeG,WAAnE;AACD;AACF;;AAED,WAAO,KAAKH,SAAL,CAAeG,WAAtB;AACD,GAXD;;AAcA;AACA;AACA;;;AAGA;;;AAGAjL,UAAQgD,SAAR,CAAkBgZ,UAAlB,GAA+B,UAAShF,GAAT,EAAcnV,KAAd,EAAqBoa,MAArB,EAA6BC,MAA7B,EAAqCnmB,KAArC,EAA4ComB,WAA5C,EAAyD;AACtF,QAAIvsB,CAAJ,EAAOkK,CAAP,EAAUsiB,OAAV;;AAEA;AACA,QAAInY,KAAK,IAAT;AACA,QAAI0J,UAAU9L,MAAMA,KAApB;AACA,QAAImK,OAAO,KAAKmB,MAAL,CAAYhf,GAAvB;AACA,QAAIkE,MAAM,CACR,EAACwP,OAAO,IAAIxB,OAAJ,CAAYsN,QAAQlM,CAAR,GAAYwa,MAAxB,EAAgCtO,QAAQjM,CAAR,GAAYwa,MAA5C,EAAoDvO,QAAQP,CAA5D,CAAR,EADQ,EAER,EAACvL,OAAO,IAAIxB,OAAJ,CAAYsN,QAAQlM,CAAR,GAAYwa,MAAxB,EAAgCtO,QAAQjM,CAAR,GAAYwa,MAA5C,EAAoDvO,QAAQP,CAA5D,CAAR,EAFQ,EAGR,EAACvL,OAAO,IAAIxB,OAAJ,CAAYsN,QAAQlM,CAAR,GAAYwa,MAAxB,EAAgCtO,QAAQjM,CAAR,GAAYwa,MAA5C,EAAoDvO,QAAQP,CAA5D,CAAR,EAHQ,EAIR,EAACvL,OAAO,IAAIxB,OAAJ,CAAYsN,QAAQlM,CAAR,GAAYwa,MAAxB,EAAgCtO,QAAQjM,CAAR,GAAYwa,MAA5C,EAAoDvO,QAAQP,CAA5D,CAAR,EAJQ,CAAV;AAMA,QAAIgD,SAAS,CACX,EAACvO,OAAO,IAAIxB,OAAJ,CAAYsN,QAAQlM,CAAR,GAAYwa,MAAxB,EAAgCtO,QAAQjM,CAAR,GAAYwa,MAA5C,EAAoDlQ,IAApD,CAAR,EADW,EAEX,EAACnK,OAAO,IAAIxB,OAAJ,CAAYsN,QAAQlM,CAAR,GAAYwa,MAAxB,EAAgCtO,QAAQjM,CAAR,GAAYwa,MAA5C,EAAoDlQ,IAApD,CAAR,EAFW,EAGX,EAACnK,OAAO,IAAIxB,OAAJ,CAAYsN,QAAQlM,CAAR,GAAYwa,MAAxB,EAAgCtO,QAAQjM,CAAR,GAAYwa,MAA5C,EAAoDlQ,IAApD,CAAR,EAHW,EAIX,EAACnK,OAAO,IAAIxB,OAAJ,CAAYsN,QAAQlM,CAAR,GAAYwa,MAAxB,EAAgCtO,QAAQjM,CAAR,GAAYwa,MAA5C,EAAoDlQ,IAApD,CAAR,EAJW,CAAb;;AAOA;AACA3Z,QAAIS,OAAJ,CAAY,UAAU3D,GAAV,EAAe;AACzBA,UAAI+gB,MAAJ,GAAajM,GAAGyJ,cAAH,CAAkBve,IAAI0S,KAAtB,CAAb;AACD,KAFD;AAGAuO,WAAOtd,OAAP,CAAe,UAAU3D,GAAV,EAAe;AAC5BA,UAAI+gB,MAAJ,GAAajM,GAAGyJ,cAAH,CAAkBve,IAAI0S,KAAtB,CAAb;AACD,KAFD;;AAIA;AACA,QAAIwa,WAAW,CACb,EAACC,SAASjqB,GAAV,EAAeib,QAAQjN,QAAQkc,GAAR,CAAYnM,OAAO,CAAP,EAAUvO,KAAtB,EAA6BuO,OAAO,CAAP,EAAUvO,KAAvC,CAAvB,EADa,EAEb,EAACya,SAAS,CAACjqB,IAAI,CAAJ,CAAD,EAASA,IAAI,CAAJ,CAAT,EAAiB+d,OAAO,CAAP,CAAjB,EAA4BA,OAAO,CAAP,CAA5B,CAAV,EAAkD9C,QAAQjN,QAAQkc,GAAR,CAAYnM,OAAO,CAAP,EAAUvO,KAAtB,EAA6BuO,OAAO,CAAP,EAAUvO,KAAvC,CAA1D,EAFa,EAGb,EAACya,SAAS,CAACjqB,IAAI,CAAJ,CAAD,EAASA,IAAI,CAAJ,CAAT,EAAiB+d,OAAO,CAAP,CAAjB,EAA4BA,OAAO,CAAP,CAA5B,CAAV,EAAkD9C,QAAQjN,QAAQkc,GAAR,CAAYnM,OAAO,CAAP,EAAUvO,KAAtB,EAA6BuO,OAAO,CAAP,EAAUvO,KAAvC,CAA1D,EAHa,EAIb,EAACya,SAAS,CAACjqB,IAAI,CAAJ,CAAD,EAASA,IAAI,CAAJ,CAAT,EAAiB+d,OAAO,CAAP,CAAjB,EAA4BA,OAAO,CAAP,CAA5B,CAAV,EAAkD9C,QAAQjN,QAAQkc,GAAR,CAAYnM,OAAO,CAAP,EAAUvO,KAAtB,EAA6BuO,OAAO,CAAP,EAAUvO,KAAvC,CAA1D,EAJa,EAKb,EAACya,SAAS,CAACjqB,IAAI,CAAJ,CAAD,EAASA,IAAI,CAAJ,CAAT,EAAiB+d,OAAO,CAAP,CAAjB,EAA4BA,OAAO,CAAP,CAA5B,CAAV,EAAkD9C,QAAQjN,QAAQkc,GAAR,CAAYnM,OAAO,CAAP,EAAUvO,KAAtB,EAA6BuO,OAAO,CAAP,EAAUvO,KAAvC,CAA1D,EALa,CAAf;AAOAA,UAAMwa,QAAN,GAAiBA,QAAjB;;AAEA;AACA,SAAKviB,IAAI,CAAT,EAAYA,IAAIuiB,SAASvsB,MAAzB,EAAiCgK,GAAjC,EAAsC;AACpCsiB,gBAAUC,SAASviB,CAAT,CAAV;AACA,UAAI0iB,cAAc,KAAK3O,0BAAL,CAAgCuO,QAAQ9O,MAAxC,CAAlB;AACA8O,cAAQ/L,IAAR,GAAe,KAAKxG,eAAL,GAAuB2S,YAAY1sB,MAAZ,EAAvB,GAA8C,CAAC0sB,YAAYpP,CAA1E;AACA;AACA;AACA;AACD;;AAED;AACAiP,aAASrW,IAAT,CAAc,UAAUzW,CAAV,EAAaC,CAAb,EAAgB;AAC5B,UAAIitB,OAAOjtB,EAAE6gB,IAAF,GAAS9gB,EAAE8gB,IAAtB;AACA,UAAIoM,IAAJ,EAAU,OAAOA,IAAP;;AAEV;AACA,UAAIltB,EAAE+sB,OAAF,KAAcjqB,GAAlB,EAAuB,OAAO,CAAP;AACvB,UAAI7C,EAAE8sB,OAAF,KAAcjqB,GAAlB,EAAuB,OAAO,CAAC,CAAR;;AAEvB;AACA,aAAO,CAAP;AACD,KAVD;;AAYA;AACA2kB,QAAIW,SAAJ,GAAgB,KAAKoE,eAAL,CAAqBla,KAArB,CAAhB;AACAmV,QAAIgB,WAAJ,GAAkBmE,WAAlB;AACAnF,QAAIsB,SAAJ,GAAgBviB,KAAhB;AACA;AACA,SAAK+D,IAAI,CAAT,EAAYA,IAAIuiB,SAASvsB,MAAzB,EAAiCgK,GAAjC,EAAsC;AACpCsiB,gBAAUC,SAASviB,CAAT,CAAV;AACA,WAAK4iB,QAAL,CAAc1F,GAAd,EAAmBoF,QAAQE,OAA3B;AACD;AACF,GAtED;;AAyEA;;;;;;;AAOAtc,UAAQgD,SAAR,CAAkB0Z,QAAlB,GAA6B,UAAS1F,GAAT,EAAchH,MAAd,EAAsBsI,SAAtB,EAAiCN,WAAjC,EAA8C;AACzE,QAAIhI,OAAOlgB,MAAP,GAAgB,CAApB,EAAuB;AACrB;AACD;;AAED,QAAIwoB,cAAc5oB,SAAlB,EAA6B;AAC3BsnB,UAAIsB,SAAJ,GAAkBA,SAAlB;AACD;AACD,QAAIN,gBAAgBtoB,SAApB,EAA+B;AAC7BsnB,UAAIgB,WAAJ,GAAkBA,WAAlB;AACD;AACDhB,QAAIiB,SAAJ;AACAjB,QAAIkB,MAAJ,CAAWlI,OAAO,CAAP,EAAUE,MAAV,CAAiBzO,CAA5B,EAA+BuO,OAAO,CAAP,EAAUE,MAAV,CAAiBxO,CAAhD;;AAEA,SAAK,IAAI9R,IAAI,CAAb,EAAgBA,IAAIogB,OAAOlgB,MAA3B,EAAmC,EAAEF,CAArC,EAAwC;AACtC,UAAIiS,QAAQmO,OAAOpgB,CAAP,CAAZ;AACAonB,UAAImB,MAAJ,CAAWtW,MAAMqO,MAAN,CAAazO,CAAxB,EAA2BI,MAAMqO,MAAN,CAAaxO,CAAxC;AACD;;AAEDsV,QAAIuB,SAAJ;AACAvB,QAAIjM,IAAJ;AACAiM,QAAIhM,MAAJ,GArByE,CAqB3D;AACf,GAtBD;;AAyBA;;;AAGAhL,UAAQgD,SAAR,CAAkB2Z,WAAlB,GAAgC,UAAS3F,GAAT,EAAcnV,KAAd,EAAqB9L,KAArB,EAA4BomB,WAA5B,EAAyCpa,IAAzC,EAA+C;AAC7E,QAAI6a,SAAS,KAAKC,WAAL,CAAiBhb,KAAjB,EAAwBE,IAAxB,CAAb;;AAEAiV,QAAIW,SAAJ,GAAkB,KAAKoE,eAAL,CAAqBla,KAArB,CAAlB;AACAmV,QAAIgB,WAAJ,GAAkBmE,WAAlB;AACAnF,QAAIsB,SAAJ,GAAkBviB,KAAlB;AACAihB,QAAIiB,SAAJ;AACAjB,QAAI8F,GAAJ,CAAQjb,MAAMqO,MAAN,CAAazO,CAArB,EAAwBI,MAAMqO,MAAN,CAAaxO,CAArC,EAAwCkb,MAAxC,EAAgD,CAAhD,EAAmDruB,KAAKwuB,EAAL,GAAQ,CAA3D,EAA8D,IAA9D;AACA/F,QAAIjM,IAAJ;AACAiM,QAAIhM,MAAJ;AACD,GAVD;;AAaA;;;AAGAhL,UAAQgD,SAAR,CAAkBga,iBAAlB,GAAsC,UAASnb,KAAT,EAAgB;AACpD;AACA,QAAI7J,MAAc,CAAC,IAAI,CAAC6J,MAAMA,KAAN,CAAYuL,CAAZ,GAAgB,KAAKD,MAAL,CAAYhf,GAA7B,IAAoC,KAAKG,KAAL,CAAW8e,CAA/C,GAAoD,KAAKpD,aAA9D,IAA+E,GAAjG;AACA,QAAIjU,QAAc,KAAKgiB,QAAL,CAAc/f,GAAd,EAAmB,CAAnB,EAAsB,CAAtB,CAAlB;AACA,QAAImkB,cAAc,KAAKpE,QAAL,CAAc/f,GAAd,EAAmB,CAAnB,EAAsB,GAAtB,CAAlB;;AAEA,WAAO;AACL+S,YAAQhV,KADH;AAEL0B,cAAQ0kB;AAFH,KAAP;AAID,GAVD;;AAaA;;;;;;;;;AASAnc,UAAQgD,SAAR,CAAkBia,eAAlB,GAAoC,UAASpb,KAAT,EAAgB;AAClD;AACA,QAAI9L,KAAJ,EAAWomB,WAAX;;AAEA,QAAI,OAAOta,MAAMA,KAAN,CAAYpU,KAAnB,KAA6B,QAAjC,EAA2C;AACzCsI,cAAQ8L,MAAMA,KAAN,CAAYpU,KAApB;AACA0uB,oBAActa,MAAMA,KAAN,CAAYpU,KAA1B;AACD,KAHD,MAIK;AACH,UAAIuK,MAAU,CAAC,IAAI,CAAC6J,MAAMA,KAAN,CAAYpU,KAAZ,GAAoB,KAAK4f,UAAL,CAAgBlf,GAArC,IAA4C,KAAKG,KAAL,CAAWb,KAA5D,IAAqE,GAAnF;AACAsI,cAAc,KAAKgiB,QAAL,CAAc/f,GAAd,EAAmB,CAAnB,EAAsB,CAAtB,CAAd;AACAmkB,oBAAc,KAAKpE,QAAL,CAAc/f,GAAd,EAAmB,CAAnB,EAAsB,GAAtB,CAAd;AACD;AACD,WAAO;AACL+S,YAAShV,KADJ;AAEL0B,cAAS0kB;AAFJ,KAAP;AAID,GAjBD;;AAoBA;;;;AAIAnc,UAAQgD,SAAR,CAAkBka,cAAlB,GAAmC,YAAW;AAC5C,WAAO;AACLnS,YAAS,KAAKD,SAAL,CAAeC,IADnB;AAELtT,cAAS,KAAKqT,SAAL,CAAeE;AAFnB,KAAP;AAID,GALD;;AAQA;;;;;;;AAOAhL,UAAQgD,SAAR,CAAkB6Z,WAAlB,GAAgC,UAAShb,KAAT,EAAgBE,IAAhB,EAAsB;AACpD,QAAIA,SAASrS,SAAb,EAAwB;AACtBqS,aAAO,KAAKsV,QAAL,EAAP;AACD;;AAED,QAAIuF,MAAJ;AACA,QAAI,KAAK/S,eAAT,EAA0B;AACxB+S,eAAS7a,OAAO,CAACF,MAAMoO,KAAN,CAAY7C,CAA7B;AACD,KAFD,MAGK;AACHwP,eAAS7a,OAAO,EAAE,KAAKsN,GAAL,CAASjC,CAAT,GAAa,KAAKI,MAAL,CAAYkC,YAAZ,EAAf,CAAhB;AACD;AACD,QAAIkN,SAAS,CAAb,EAAgB;AACdA,eAAS,CAAT;AACD;;AAED,WAAOA,MAAP;AACD,GAjBD;;AAoBA;AACA;AACA;;;AAGA;;;AAGA5c,UAAQgD,SAAR,CAAkB6S,oBAAlB,GAAyC,UAASmB,GAAT,EAAcnV,KAAd,EAAqB;AAC5D,QAAIoa,SAAS,KAAK3Q,SAAL,GAAiB,CAA9B;AACA,QAAI4Q,SAAS,KAAK3Q,SAAL,GAAiB,CAA9B;AACA,QAAI4R,SAAS,KAAKH,iBAAL,CAAuBnb,KAAvB,CAAb;;AAEA,SAAKma,UAAL,CAAgBhF,GAAhB,EAAqBnV,KAArB,EAA4Boa,MAA5B,EAAoCC,MAApC,EAA4CiB,OAAOpS,IAAnD,EAAyDoS,OAAO1lB,MAAhE;AACD,GAND;;AASA;;;AAGAuI,UAAQgD,SAAR,CAAkB8S,yBAAlB,GAA8C,UAASkB,GAAT,EAAcnV,KAAd,EAAqB;AACjE,QAAIoa,SAAS,KAAK3Q,SAAL,GAAiB,CAA9B;AACA,QAAI4Q,SAAS,KAAK3Q,SAAL,GAAiB,CAA9B;AACA,QAAI4R,SAAS,KAAKF,eAAL,CAAqBpb,KAArB,CAAb;;AAEA,SAAKma,UAAL,CAAgBhF,GAAhB,EAAqBnV,KAArB,EAA4Boa,MAA5B,EAAoCC,MAApC,EAA4CiB,OAAOpS,IAAnD,EAAyDoS,OAAO1lB,MAAhE;AACD,GAND;;AASA;;;AAGAuI,UAAQgD,SAAR,CAAkB+S,wBAAlB,GAA6C,UAASiB,GAAT,EAAcnV,KAAd,EAAqB;AAChE;AACA,QAAIub,WAAW,CAACvb,MAAMA,KAAN,CAAYpU,KAAZ,GAAoB,KAAK4f,UAAL,CAAgBlf,GAArC,IAA4C,KAAKkf,UAAL,CAAgBJ,KAAhB,EAA3D;AACA,QAAIgP,SAAY,KAAK3Q,SAAL,GAAiB,CAAlB,IAAwB8R,WAAW,GAAX,GAAiB,GAAzC,CAAf;AACA,QAAIlB,SAAY,KAAK3Q,SAAL,GAAiB,CAAlB,IAAwB6R,WAAW,GAAX,GAAiB,GAAzC,CAAf;;AAEA,QAAID,SAAW,KAAKD,cAAL,EAAf;;AAEA,SAAKlB,UAAL,CAAgBhF,GAAhB,EAAqBnV,KAArB,EAA4Boa,MAA5B,EAAoCC,MAApC,EAA4CiB,OAAOpS,IAAnD,EAAyDoS,OAAO1lB,MAAhE;AACD,GATD;;AAYA;;;AAGAuI,UAAQgD,SAAR,CAAkBgT,oBAAlB,GAAyC,UAASgB,GAAT,EAAcnV,KAAd,EAAqB;AAC5D,QAAIsb,SAAS,KAAKH,iBAAL,CAAuBnb,KAAvB,CAAb;;AAEA,SAAK8a,WAAL,CAAiB3F,GAAjB,EAAsBnV,KAAtB,EAA6Bsb,OAAOpS,IAApC,EAA0CoS,OAAO1lB,MAAjD;AACD,GAJD;;AAOA;;;AAGAuI,UAAQgD,SAAR,CAAkBkT,wBAAlB,GAA6C,UAASc,GAAT,EAAcnV,KAAd,EAAqB;AAChE;AACA,QAAIgX,OAAO,KAAKnL,cAAL,CAAoB7L,MAAMuO,MAA1B,CAAX;AACA4G,QAAIW,SAAJ,GAAgB,CAAhB;AACA,SAAKsB,KAAL,CAAWjC,GAAX,EAAgB6B,IAAhB,EAAsBhX,MAAMqO,MAA5B,EAAoC,KAAK3F,SAAzC;;AAEA,SAAKyL,oBAAL,CAA0BgB,GAA1B,EAA+BnV,KAA/B;AACD,GAPD;;AAUA;;;AAGA7B,UAAQgD,SAAR,CAAkBmT,yBAAlB,GAA8C,UAASa,GAAT,EAAcnV,KAAd,EAAqB;AACjE,QAAIsb,SAAS,KAAKF,eAAL,CAAqBpb,KAArB,CAAb;;AAEA,SAAK8a,WAAL,CAAiB3F,GAAjB,EAAsBnV,KAAtB,EAA6Bsb,OAAOpS,IAApC,EAA0CoS,OAAO1lB,MAAjD;AACD,GAJD;;AAOA;;;AAGAuI,UAAQgD,SAAR,CAAkBoT,wBAAlB,GAA6C,UAASY,GAAT,EAAcnV,KAAd,EAAqB;AAChE,QAAI0V,UAAW,KAAKF,QAAL,EAAf;AACA,QAAI+F,WAAW,CAACvb,MAAMA,KAAN,CAAYpU,KAAZ,GAAoB,KAAK4f,UAAL,CAAgBlf,GAArC,IAA4C,KAAKkf,UAAL,CAAgBJ,KAAhB,EAA3D;AACA,QAAIlL,OAAWwV,UAAQ,CAAR,GAAY,IAAEA,OAAF,GAAY6F,QAAvC;AACA,QAAID,SAAW,KAAKD,cAAL,EAAf;;AAEA,SAAKP,WAAL,CAAiB3F,GAAjB,EAAsBnV,KAAtB,EAA6Bsb,OAAOpS,IAApC,EAA0CoS,OAAO1lB,MAAjD,EAAyDsK,IAAzD;AACD,GAPD;;AAUA;;;AAGA/B,UAAQgD,SAAR,CAAkBqT,wBAAlB,GAA6C,UAASW,GAAT,EAAcnV,KAAd,EAAqB;AAChE,QAAI1P,QAAQ0P,MAAM2R,UAAlB;AACA,QAAInhB,MAAQwP,MAAM4R,QAAlB;AACA,QAAI4J,QAAQxb,MAAM6R,UAAlB;;AAEA,QAAI7R,UAAUnS,SAAV,IAAuByC,UAAUzC,SAAjC,IAA8C2C,QAAQ3C,SAAtD,IAAmE2tB,UAAU3tB,SAAjF,EAA4F;AAC1F;AACD;;AAED,QAAI4tB,iBAAiB,IAArB;AACA,QAAIhF,SAAJ;AACA,QAAIN,WAAJ;AACA,QAAIL,SAAJ;;AAEA,QAAI,KAAK4F,cAAL,IAAuB,KAAKzT,UAAhC,EAA4C;AAC1C;AACA;AACA;AACA;AACA,UAAI0T,QAAQnd,QAAQod,QAAR,CAAiBJ,MAAMpN,KAAvB,EAA8BpO,MAAMoO,KAApC,CAAZ;AACA,UAAIyN,QAAQrd,QAAQod,QAAR,CAAiBprB,IAAI4d,KAArB,EAA4B9d,MAAM8d,KAAlC,CAAZ;AACA,UAAI0N,eAAetd,QAAQud,YAAR,CAAqBJ,KAArB,EAA4BE,KAA5B,CAAnB;AACA,UAAI3sB,MAAM4sB,aAAa7tB,MAAb,EAAV;AACA;;AAEAwtB,uBAAkBK,aAAavQ,CAAb,GAAiB,CAAnC;AACD;;AAED,QAAIkQ,cAAJ,EAAoB;;AAElB;AACA,UAAIO,OAAO,CAAChc,MAAMA,KAAN,CAAYuL,CAAZ,GAAgBjb,MAAM0P,KAAN,CAAYuL,CAA5B,GAAgC/a,IAAIwP,KAAJ,CAAUuL,CAA1C,GAA8CiQ,MAAMxb,KAAN,CAAYuL,CAA3D,IAAgE,CAA3E;AACA,UAAInW,IAAO,CAAC,IAAI,CAAC4mB,OAAO,KAAK1Q,MAAL,CAAYhf,GAApB,IAA2B,KAAKG,KAAL,CAAW8e,CAAtC,GAA2C,KAAKpD,aAArD,IAAsE,GAAjF;AACA,UAAI9S,IAAO,CAAX,CALkB,CAKJ;AACd,UAAIC,CAAJ;;AAEA,UAAI,KAAK2S,UAAT,EAAqB;AACnB3S,YAAI5I,KAAKJ,GAAL,CAAS,IAAKwvB,aAAalc,CAAb,GAAiB1Q,GAAlB,GAAyB,CAAtC,EAAyC,CAAzC,CAAJ,CADmB,CAC+B;AAClDunB,oBAAY,KAAKP,QAAL,CAAc9gB,CAAd,EAAiBC,CAAjB,EAAoBC,CAApB,CAAZ;AACA6gB,sBAAcM,SAAd;AACD,OAJD,MAKM;AACJnhB,YAAI,CAAJ;AACAmhB,oBAAY,KAAKP,QAAL,CAAc9gB,CAAd,EAAiBC,CAAjB,EAAoBC,CAApB,CAAZ;AACA6gB,sBAAc,KAAK1N,SAAnB,CAHI,CAG0B;AAC/B;AACF,KAlBD,MAmBK;AACHgO,kBAAY,MAAZ;AACAN,oBAAc,KAAK1N,SAAnB;AACD;;AAED0M,QAAIW,SAAJ,GAAgB,KAAKoE,eAAL,CAAqBla,KAArB,CAAhB;AACA;;AAEA,QAAImO,SAAS,CAACnO,KAAD,EAAQ1P,KAAR,EAAekrB,KAAf,EAAsBhrB,GAAtB,CAAb;AACA,SAAKqqB,QAAL,CAAc1F,GAAd,EAAmBhH,MAAnB,EAA2BsI,SAA3B,EAAsCN,WAAtC;AACD,GAzDD;;AA4DA;;;AAGAhY,UAAQgD,SAAR,CAAkB8a,aAAlB,GAAkC,UAAS9G,GAAT,EAAc6B,IAAd,EAAoBC,EAApB,EAAwB;AACxD,QAAID,SAASnpB,SAAT,IAAsBopB,OAAOppB,SAAjC,EAA4C;AACzC;AACF;;AAED;AACA,QAAImuB,OAAO,CAAChF,KAAKhX,KAAL,CAAWuL,CAAX,GAAe0L,GAAGjX,KAAH,CAASuL,CAAzB,IAA8B,CAAzC;AACA,QAAInW,IAAO,CAAC,IAAI,CAAC4mB,OAAO,KAAK1Q,MAAL,CAAYhf,GAApB,IAA2B,KAAKG,KAAL,CAAW8e,CAAtC,GAA2C,KAAKpD,aAArD,IAAsE,GAAjF;;AAEAgN,QAAIW,SAAJ,GAAkB,KAAKoE,eAAL,CAAqBlD,IAArB,IAA6B,CAA/C;AACA7B,QAAIgB,WAAJ,GAAkB,KAAKD,QAAL,CAAc9gB,CAAd,EAAiB,CAAjB,EAAoB,CAApB,CAAlB;AACA,SAAKgiB,KAAL,CAAWjC,GAAX,EAAgB6B,KAAK3I,MAArB,EAA6B4I,GAAG5I,MAAhC;AACD,GAZD;;AAeA;;;AAGAlQ,UAAQgD,SAAR,CAAkBsT,qBAAlB,GAA0C,UAASU,GAAT,EAAcnV,KAAd,EAAqB;AAC7D,SAAKic,aAAL,CAAmB9G,GAAnB,EAAwBnV,KAAxB,EAA+BA,MAAM2R,UAArC;AACA,SAAKsK,aAAL,CAAmB9G,GAAnB,EAAwBnV,KAAxB,EAA+BA,MAAM4R,QAArC;AACD,GAHD;;AAMA;;;AAGAzT,UAAQgD,SAAR,CAAkBuT,qBAAlB,GAA0C,UAASS,GAAT,EAAcnV,KAAd,EAAqB;AAC7D,QAAIA,MAAM+R,SAAN,KAAoBlkB,SAAxB,EAAmC;AACjC;AACD;;AAEDsnB,QAAIW,SAAJ,GAAkB,KAAKoE,eAAL,CAAqBla,KAArB,CAAlB;AACAmV,QAAIgB,WAAJ,GAAkB,KAAKlN,SAAL,CAAeE,MAAjC;;AAEA,SAAKiO,KAAL,CAAWjC,GAAX,EAAgBnV,MAAMqO,MAAtB,EAA8BrO,MAAM+R,SAAN,CAAgB1D,MAA9C;AACD,GATD;;AAYA;;;;AAIAlQ,UAAQgD,SAAR,CAAkB4T,gBAAlB,GAAqC,YAAW;AAC9C,QAAII,MAAM,KAAKD,WAAL,EAAV;AACA,QAAInnB,CAAJ;;AAEA,QAAI,KAAK2c,UAAL,KAAoB7c,SAApB,IAAiC,KAAK6c,UAAL,CAAgBzc,MAAhB,IAA0B,CAA/D,EACE,OAL4C,CAKnC;;AAEX,SAAKigB,iBAAL,CAAuB,KAAKxD,UAA5B;;AAEA,SAAK3c,IAAI,CAAT,EAAYA,IAAI,KAAK2c,UAAL,CAAgBzc,MAAhC,EAAwCF,GAAxC,EAA6C;AAC3C,UAAIiS,QAAQ,KAAK0K,UAAL,CAAgB3c,CAAhB,CAAZ;;AAEA;AACA,WAAK4mB,mBAAL,CAAyBuH,IAAzB,CAA8B,IAA9B,EAAoC/G,GAApC,EAAyCnV,KAAzC;AACD;AACF,GAfD;;AAkBA;AACA;AACA;;AAEA;;;;;AAKA7B,UAAQgD,SAAR,CAAkBgb,mBAAlB,GAAwC,UAAS7pB,KAAT,EAAgB;AACtD;AACA,SAAK8pB,WAAL,GAAmBC,UAAU/pB,KAAV,CAAnB;AACA,SAAKgqB,WAAL,GAAmBC,UAAUjqB,KAAV,CAAnB;;AAEA,SAAKkqB,kBAAL,GAA0B,KAAK7Q,MAAL,CAAY8Q,SAAZ,EAA1B;AACD,GAND;;AASA;;;;;AAKAte,UAAQgD,SAAR,CAAkBkR,YAAlB,GAAiC,UAAS/f,KAAT,EAAgB;AAC/CA,YAAQA,SAASC,OAAOD,KAAxB;;AAEA;AACA;AACA,QAAI,KAAKoqB,cAAT,EAAyB;AACvB,WAAKC,UAAL,CAAgBrqB,KAAhB;AACD;;AAED;AACA,SAAKoqB,cAAL,GAAsBpqB,MAAMsqB,KAAN,GAAetqB,MAAMsqB,KAAN,KAAgB,CAA/B,GAAqCtqB,MAAMuqB,MAAN,KAAiB,CAA5E;AACA,QAAI,CAAC,KAAKH,cAAN,IAAwB,CAAC,KAAKI,SAAlC,EAA6C;;AAE7C,SAAKX,mBAAL,CAAyB7pB,KAAzB;;AAEA,SAAKyqB,UAAL,GAAkB,IAAIjwB,IAAJ,CAAS,KAAKiqB,KAAd,CAAlB;AACA,SAAKiG,QAAL,GAAgB,IAAIlwB,IAAJ,CAAS,KAAKoqB,GAAd,CAAhB;AACA,SAAK+F,gBAAL,GAAwB,KAAKtR,MAAL,CAAYiI,cAAZ,EAAxB;;AAEA,SAAK7F,KAAL,CAAWvX,KAAX,CAAiB0mB,MAAjB,GAA0B,MAA1B;;AAEA;AACA;AACA;AACA,QAAI9a,KAAK,IAAT;AACA,SAAK+a,WAAL,GAAmB,UAAU7qB,KAAV,EAAiB;AAAC8P,SAAGgb,YAAH,CAAgB9qB,KAAhB;AAAwB,KAA7D;AACA,SAAK+qB,SAAL,GAAmB,UAAU/qB,KAAV,EAAiB;AAAC8P,SAAGua,UAAH,CAAcrqB,KAAd;AAAsB,KAA3D;AACAtH,SAAK2G,gBAAL,CAAsB4I,QAAtB,EAAgC,WAAhC,EAA6C6H,GAAG+a,WAAhD;AACAnyB,SAAK2G,gBAAL,CAAsB4I,QAAtB,EAAgC,SAAhC,EAA2C6H,GAAGib,SAA9C;AACAryB,SAAKqH,cAAL,CAAoBC,KAApB;AACD,GA9BD;;AAiCA;;;;;AAKA6L,UAAQgD,SAAR,CAAkBic,YAAlB,GAAiC,UAAU9qB,KAAV,EAAiB;AAChD,SAAKgrB,MAAL,GAAc,IAAd;AACAhrB,YAAQA,SAASC,OAAOD,KAAxB;;AAEA;AACA,QAAIirB,QAAQ9J,WAAW4I,UAAU/pB,KAAV,CAAX,IAA+B,KAAK8pB,WAAhD;AACA,QAAIoB,QAAQ/J,WAAW8I,UAAUjqB,KAAV,CAAX,IAA+B,KAAKgqB,WAAhD;;AAEA;AACA,QAAIhqB,SAASA,MAAMmrB,OAAN,KAAkB,IAA/B,EAAqC;AACjC;AACA,UAAIC,SAAS,KAAK3P,KAAL,CAAW3S,WAAX,GAA0B,GAAvC;AACA,UAAIuiB,SAAS,KAAK5P,KAAL,CAAWkF,YAAX,GAA0B,GAAvC;;AAEA,UAAI2K,UAAU,CAAC,KAAKpB,kBAAL,CAAwB5c,CAAxB,IAA6B,CAA9B,IAAqC2d,QAAQG,MAAT,GAAmB,KAAK/R,MAAL,CAAYkS,SAAhC,GAA6C,GAA9F;AACA,UAAIC,UAAU,CAAC,KAAKtB,kBAAL,CAAwB3c,CAAxB,IAA6B,CAA9B,IAAqC2d,QAAQG,MAAT,GAAmB,KAAKhS,MAAL,CAAYkS,SAAhC,GAA6C,GAA9F;;AAEA,WAAKlS,MAAL,CAAYoS,SAAZ,CAAsBH,OAAtB,EAA+BE,OAA/B;AACA,WAAK3B,mBAAL,CAAyB7pB,KAAzB;AACD,KAVH,MAUS;AACL,UAAI0rB,gBAAgB,KAAKf,gBAAL,CAAsB3T,UAAtB,GAAmCiU,QAAQ,GAA/D;AACA,UAAIU,cAAgB,KAAKhB,gBAAL,CAAsB1T,QAAtB,GAAmCiU,QAAQ,GAA/D;;AAEA,UAAIU,YAAY,CAAhB,CAJK,CAIc;AACnB,UAAIC,YAAYzxB,KAAKmgB,GAAL,CAASqR,YAAY,GAAZ,GAAkB,CAAlB,GAAsBxxB,KAAKwuB,EAApC,CAAhB;;AAEA;AACA;AACA,UAAIxuB,KAAKutB,GAAL,CAASvtB,KAAKmgB,GAAL,CAASmR,aAAT,CAAT,IAAoCG,SAAxC,EAAmD;AAC/CH,wBAAgBtxB,KAAK0xB,KAAL,CAAWJ,gBAAgBtxB,KAAKwuB,EAAhC,IAAsCxuB,KAAKwuB,EAA3C,GAAgD,KAAhE;AACH;AACD,UAAIxuB,KAAKutB,GAAL,CAASvtB,KAAKqgB,GAAL,CAASiR,aAAT,CAAT,IAAoCG,SAAxC,EAAmD;AAC/CH,wBAAgB,CAACtxB,KAAK0xB,KAAL,CAAWJ,gBAAgBtxB,KAAKwuB,EAArB,GAA0B,GAArC,IAA4C,GAA7C,IAAoDxuB,KAAKwuB,EAAzD,GAA8D,KAA9E;AACH;;AAED;AACA,UAAIxuB,KAAKutB,GAAL,CAASvtB,KAAKmgB,GAAL,CAASoR,WAAT,CAAT,IAAkCE,SAAtC,EAAiD;AAC7CF,sBAAcvxB,KAAK0xB,KAAL,CAAWH,cAAcvxB,KAAKwuB,EAA9B,IAAoCxuB,KAAKwuB,EAAvD;AACH;AACD,UAAIxuB,KAAKutB,GAAL,CAASvtB,KAAKqgB,GAAL,CAASkR,WAAT,CAAT,IAAkCE,SAAtC,EAAiD;AAC7CF,sBAAc,CAACvxB,KAAK0xB,KAAL,CAAWH,cAAcvxB,KAAKwuB,EAAnB,GAAwB,GAAnC,IAA0C,GAA3C,IAAkDxuB,KAAKwuB,EAArE;AACH;AACD,WAAKvP,MAAL,CAAY0S,cAAZ,CAA2BL,aAA3B,EAA0CC,WAA1C;AACH;;AAED,SAAK9M,MAAL;;AAEA;AACA,QAAImN,aAAa,KAAK5K,iBAAL,EAAjB;AACA,SAAK6K,IAAL,CAAU,sBAAV,EAAkCD,UAAlC;;AAEAtzB,SAAKqH,cAAL,CAAoBC,KAApB;AACD,GApDD;;AAuDA;;;;;AAKA6L,UAAQgD,SAAR,CAAkBwb,UAAlB,GAA+B,UAAUrqB,KAAV,EAAiB;AAC9C,SAAKyb,KAAL,CAAWvX,KAAX,CAAiB0mB,MAAjB,GAA0B,MAA1B;AACA,SAAKR,cAAL,GAAsB,KAAtB;;AAEA;AACA1xB,SAAKmH,mBAAL,CAAyBoI,QAAzB,EAAmC,WAAnC,EAAgD,KAAK4iB,WAArD;AACAnyB,SAAKmH,mBAAL,CAAyBoI,QAAzB,EAAmC,SAAnC,EAAgD,KAAK8iB,SAArD;AACAryB,SAAKqH,cAAL,CAAoBC,KAApB;AACD,GARD;;AAUA;;;AAGA6L,UAAQgD,SAAR,CAAkB0R,QAAlB,GAA6B,UAAUvgB,KAAV,EAAiB;AAC5C,QAAI,CAAC,KAAKksB,gBAAV,EACE;AACF,QAAI,CAAC,KAAKlB,MAAV,EAAkB;AAChB,UAAImB,eAAe,KAAK1Q,KAAL,CAAW5d,qBAAX,EAAnB;AACA,UAAIuuB,SAASrC,UAAU/pB,KAAV,IAAmBmsB,aAAaruB,IAA7C;AACA,UAAIuuB,SAASpC,UAAUjqB,KAAV,IAAmBmsB,aAAajuB,GAA7C;AACA,UAAIouB,YAAY,KAAKC,gBAAL,CAAsBH,MAAtB,EAA8BC,MAA9B,CAAhB;AACA,UAAIC,SAAJ,EACI,KAAKJ,gBAAL,CAAsBI,UAAU5e,KAAV,CAAgBU,IAAtC;AACL,KAPD,MAQK;AAAE;AACL,WAAK4c,MAAL,GAAc,KAAd;AACD;AACDtyB,SAAKqH,cAAL,CAAoBC,KAApB;AACD,GAfD;;AAiBA;;;;AAIA6L,UAAQgD,SAAR,CAAkBwR,UAAlB,GAA+B,UAAUrgB,KAAV,EAAiB;AAC9C,QAAIiT,QAAQ,GAAZ,CAD8C,CAC7B;AACjB,QAAIkZ,eAAe,KAAK1Q,KAAL,CAAW5d,qBAAX,EAAnB;AACA,QAAIuuB,SAASrC,UAAU/pB,KAAV,IAAmBmsB,aAAaruB,IAA7C;AACA,QAAIuuB,SAASpC,UAAUjqB,KAAV,IAAmBmsB,aAAajuB,GAA7C;;AAEA,QAAI,CAAC,KAAKsuB,WAAV,EAAuB;AACrB;AACD;;AAED,QAAI,KAAKC,cAAT,EAAyB;AACvB7Y,mBAAa,KAAK6Y,cAAlB;AACD;;AAED;AACA,QAAI,KAAKrC,cAAT,EAAyB;AACvB,WAAKsC,YAAL;AACA;AACD;;AAED,QAAI,KAAKlW,OAAL,IAAgB,KAAKA,OAAL,CAAa8V,SAAjC,EAA4C;AAC1C;AACA,UAAIA,YAAY,KAAKC,gBAAL,CAAsBH,MAAtB,EAA8BC,MAA9B,CAAhB;AACA,UAAIC,cAAc,KAAK9V,OAAL,CAAa8V,SAA/B,EAA0C;AACxC;AACA,YAAIA,SAAJ,EAAe;AACb,eAAKK,YAAL,CAAkBL,SAAlB;AACD,SAFD,MAGK;AACH,eAAKI,YAAL;AACD;AACF;AACF,KAZD,MAaK;AACH;AACA,UAAI5c,KAAK,IAAT;AACA,WAAK2c,cAAL,GAAsB5Y,WAAW,YAAY;AAC3C/D,WAAG2c,cAAH,GAAoB,IAApB;;AAEA;AACA,YAAIH,YAAYxc,GAAGyc,gBAAH,CAAoBH,MAApB,EAA4BC,MAA5B,CAAhB;AACA,YAAIC,SAAJ,EAAe;AACbxc,aAAG6c,YAAH,CAAgBL,SAAhB;AACD;AACF,OARqB,EAQnBrZ,KARmB,CAAtB;AASD;AACF,GA9CD;;AAgDA;;;AAGApH,UAAQgD,SAAR,CAAkBoR,aAAlB,GAAkC,UAASjgB,KAAT,EAAgB;AAChD,SAAKwqB,SAAL,GAAiB,IAAjB;;AAEA,QAAI1a,KAAK,IAAT;AACA,SAAK8c,WAAL,GAAmB,UAAU5sB,KAAV,EAAiB;AAAC8P,SAAG+c,YAAH,CAAgB7sB,KAAhB;AAAwB,KAA7D;AACA,SAAK8sB,UAAL,GAAmB,UAAU9sB,KAAV,EAAiB;AAAC8P,SAAGid,WAAH,CAAe/sB,KAAf;AAAuB,KAA5D;AACAtH,SAAK2G,gBAAL,CAAsB4I,QAAtB,EAAgC,WAAhC,EAA6C6H,GAAG8c,WAAhD;AACAl0B,SAAK2G,gBAAL,CAAsB4I,QAAtB,EAAgC,UAAhC,EAA4C6H,GAAGgd,UAA/C;;AAEA,SAAK/M,YAAL,CAAkB/f,KAAlB;AACD,GAVD;;AAYA;;;AAGA6L,UAAQgD,SAAR,CAAkBge,YAAlB,GAAiC,UAAS7sB,KAAT,EAAgB;AAC/C,SAAK8qB,YAAL,CAAkB9qB,KAAlB;AACD,GAFD;;AAIA;;;AAGA6L,UAAQgD,SAAR,CAAkBke,WAAlB,GAAgC,UAAS/sB,KAAT,EAAgB;AAC9C,SAAKwqB,SAAL,GAAiB,KAAjB;;AAEA9xB,SAAKmH,mBAAL,CAAyBoI,QAAzB,EAAmC,WAAnC,EAAgD,KAAK2kB,WAArD;AACAl0B,SAAKmH,mBAAL,CAAyBoI,QAAzB,EAAmC,UAAnC,EAAiD,KAAK6kB,UAAtD;;AAEA,SAAKzC,UAAL,CAAgBrqB,KAAhB;AACD,GAPD;;AAUA;;;;;AAKA6L,UAAQgD,SAAR,CAAkBsR,QAAlB,GAA6B,UAASngB,KAAT,EAAgB;AAC3C,QAAI,CAACA,KAAL,EAAY;AACVA,cAAQC,OAAOD,KAAf;;AAEF;AACA,QAAIgtB,QAAQ,CAAZ;AACA,QAAIhtB,MAAMitB,UAAV,EAAsB;AAAE;AACtBD,cAAQhtB,MAAMitB,UAAN,GAAiB,GAAzB;AACD,KAFD,MAEO,IAAIjtB,MAAMktB,MAAV,EAAkB;AAAE;AACzB;AACA;AACAF,cAAQ,CAAChtB,MAAMktB,MAAP,GAAc,CAAtB;AACD;;AAED;AACA;AACA;AACA,QAAIF,KAAJ,EAAW;AACT,UAAIG,YAAY,KAAK9T,MAAL,CAAYkC,YAAZ,EAAhB;AACA,UAAI6R,YAAYD,aAAa,IAAIH,QAAQ,EAAzB,CAAhB;;AAEA,WAAK3T,MAAL,CAAYgU,YAAZ,CAAyBD,SAAzB;AACA,WAAKvO,MAAL;;AAEA,WAAK6N,YAAL;AACD;;AAED;AACA,QAAIV,aAAa,KAAK5K,iBAAL,EAAjB;AACA,SAAK6K,IAAL,CAAU,sBAAV,EAAkCD,UAAlC;;AAEA;AACA;AACA;AACAtzB,SAAKqH,cAAL,CAAoBC,KAApB;AACD,GAnCD;;AAqCA;;;;;;;;;AASA6L,UAAQgD,SAAR,CAAkBye,eAAlB,GAAoC,UAAU5f,KAAV,EAAiB6f,QAAjB,EAA2B;AAC7D,QAAInyB,IAAImyB,SAAS,CAAT,CAAR;AAAA,QACElyB,IAAIkyB,SAAS,CAAT,CADN;AAAA,QAEEhrB,IAAIgrB,SAAS,CAAT,CAFN;;AAIA,aAASC,IAAT,CAAelgB,CAAf,EAAkB;AAChB,aAAOA,IAAI,CAAJ,GAAQ,CAAR,GAAYA,IAAI,CAAJ,GAAQ,CAAC,CAAT,GAAa,CAAhC;AACD;;AAED,QAAImgB,KAAKD,KAAK,CAACnyB,EAAEiS,CAAF,GAAMlS,EAAEkS,CAAT,KAAeI,MAAMH,CAAN,GAAUnS,EAAEmS,CAA3B,IAAgC,CAAClS,EAAEkS,CAAF,GAAMnS,EAAEmS,CAAT,KAAeG,MAAMJ,CAAN,GAAUlS,EAAEkS,CAA3B,CAArC,CAAT;AACA,QAAIogB,KAAKF,KAAK,CAACjrB,EAAE+K,CAAF,GAAMjS,EAAEiS,CAAT,KAAeI,MAAMH,CAAN,GAAUlS,EAAEkS,CAA3B,IAAgC,CAAChL,EAAEgL,CAAF,GAAMlS,EAAEkS,CAAT,KAAeG,MAAMJ,CAAN,GAAUjS,EAAEiS,CAA3B,CAArC,CAAT;AACA,QAAIqgB,KAAKH,KAAK,CAACpyB,EAAEkS,CAAF,GAAM/K,EAAE+K,CAAT,KAAeI,MAAMH,CAAN,GAAUhL,EAAEgL,CAA3B,IAAgC,CAACnS,EAAEmS,CAAF,GAAMhL,EAAEgL,CAAT,KAAeG,MAAMJ,CAAN,GAAU/K,EAAE+K,CAA3B,CAArC,CAAT;;AAEA;AACA,WAAO,CAACmgB,MAAM,CAAN,IAAWC,MAAM,CAAjB,IAAsBD,MAAMC,EAA7B,MACJA,MAAM,CAAN,IAAWC,MAAM,CAAjB,IAAsBD,MAAMC,EADxB,MAEJF,MAAM,CAAN,IAAWE,MAAM,CAAjB,IAAsBF,MAAME,EAFxB,CAAP;AAGD,GAjBD;;AAmBA;;;;;;;;;AASA9hB,UAAQgD,SAAR,CAAkB0d,gBAAlB,GAAqC,UAAUjf,CAAV,EAAaC,CAAb,EAAgB;AACnD,QAAI9R,CAAJ;AAAA,QACEmyB,UAAU,GADZ;AAAA,QACiB;AACftB,gBAAY,IAFd;AAAA,QAGEuB,mBAAmB,IAHrB;AAAA,QAIEC,cAAc,IAJhB;AAAA,QAKE3U,SAAS,IAAIlN,OAAJ,CAAYqB,CAAZ,EAAeC,CAAf,CALX;;AAOA,QAAI,KAAKrJ,KAAL,KAAe2H,QAAQiJ,KAAR,CAAc2I,GAA7B,IACF,KAAKvZ,KAAL,KAAe2H,QAAQiJ,KAAR,CAAcgI,QAD3B,IAEF,KAAK5Y,KAAL,KAAe2H,QAAQiJ,KAAR,CAAciI,OAF/B,EAEwC;AACtC;AACA,WAAKthB,IAAI,KAAK2c,UAAL,CAAgBzc,MAAhB,GAAyB,CAAlC,EAAqCF,KAAK,CAA1C,EAA6CA,GAA7C,EAAkD;AAChD6wB,oBAAY,KAAKlU,UAAL,CAAgB3c,CAAhB,CAAZ;AACA,YAAIysB,WAAYoE,UAAUpE,QAA1B;AACA,YAAIA,QAAJ,EAAc;AACZ,eAAK,IAAInlB,IAAImlB,SAASvsB,MAAT,GAAkB,CAA/B,EAAkCoH,KAAK,CAAvC,EAA0CA,GAA1C,EAA+C;AAC7C;AACA,gBAAIklB,UAAUC,SAASnlB,CAAT,CAAd;AACA,gBAAIolB,UAAUF,QAAQE,OAAtB;AACA,gBAAI4F,YAAY,CAAC5F,QAAQ,CAAR,EAAWpM,MAAZ,EAAoBoM,QAAQ,CAAR,EAAWpM,MAA/B,EAAuCoM,QAAQ,CAAR,EAAWpM,MAAlD,CAAhB;AACA,gBAAIiS,YAAY,CAAC7F,QAAQ,CAAR,EAAWpM,MAAZ,EAAoBoM,QAAQ,CAAR,EAAWpM,MAA/B,EAAuCoM,QAAQ,CAAR,EAAWpM,MAAlD,CAAhB;AACA,gBAAI,KAAKuR,eAAL,CAAqBnU,MAArB,EAA6B4U,SAA7B,KACF,KAAKT,eAAL,CAAqBnU,MAArB,EAA6B6U,SAA7B,CADF,EAC2C;AACzC;AACA,qBAAO1B,SAAP;AACD;AACF;AACF;AACF;AACF,KAtBD,MAuBK;AACH;AACA,WAAK7wB,IAAI,CAAT,EAAYA,IAAI,KAAK2c,UAAL,CAAgBzc,MAAhC,EAAwCF,GAAxC,EAA6C;AAC3C6wB,oBAAY,KAAKlU,UAAL,CAAgB3c,CAAhB,CAAZ;AACA,YAAIiS,QAAQ4e,UAAUvQ,MAAtB;AACA,YAAIrO,KAAJ,EAAW;AACT,cAAIugB,QAAQ7zB,KAAKutB,GAAL,CAASra,IAAII,MAAMJ,CAAnB,CAAZ;AACA,cAAI4gB,QAAQ9zB,KAAKutB,GAAL,CAASpa,IAAIG,MAAMH,CAAnB,CAAZ;AACA,cAAI2O,OAAQ9hB,KAAK+zB,IAAL,CAAUF,QAAQA,KAAR,GAAgBC,QAAQA,KAAlC,CAAZ;;AAEA,cAAI,CAACJ,gBAAgB,IAAhB,IAAwB5R,OAAO4R,WAAhC,KAAgD5R,OAAO0R,OAA3D,EAAoE;AAClEE,0BAAc5R,IAAd;AACA2R,+BAAmBvB,SAAnB;AACD;AACF;AACF;AACF;;AAGD,WAAOuB,gBAAP;AACD,GAnDD;;AAqDA;;;;;AAKAhiB,UAAQgD,SAAR,CAAkB8d,YAAlB,GAAiC,UAAUL,SAAV,EAAqB;AACpD,QAAIte,OAAJ,EAAaogB,IAAb,EAAmBC,GAAnB;;AAEA,QAAI,CAAC,KAAK7X,OAAV,EAAmB;AACjBxI,gBAAU/F,SAASC,aAAT,CAAuB,KAAvB,CAAV;AACA8F,cAAQ9J,KAAR,CAAcoE,QAAd,GAAyB,UAAzB;AACA0F,cAAQ9J,KAAR,CAAc0b,OAAd,GAAwB,MAAxB;AACA5R,cAAQ9J,KAAR,CAAcZ,MAAd,GAAuB,mBAAvB;AACA0K,cAAQ9J,KAAR,CAActC,KAAd,GAAsB,SAAtB;AACAoM,cAAQ9J,KAAR,CAAcb,UAAd,GAA2B,uBAA3B;AACA2K,cAAQ9J,KAAR,CAAcoqB,YAAd,GAA6B,KAA7B;AACAtgB,cAAQ9J,KAAR,CAAcqqB,SAAd,GAA0B,oCAA1B;;AAEAH,aAAOnmB,SAASC,aAAT,CAAuB,KAAvB,CAAP;AACAkmB,WAAKlqB,KAAL,CAAWoE,QAAX,GAAsB,UAAtB;AACA8lB,WAAKlqB,KAAL,CAAWkE,MAAX,GAAoB,MAApB;AACAgmB,WAAKlqB,KAAL,CAAWiE,KAAX,GAAmB,GAAnB;AACAimB,WAAKlqB,KAAL,CAAWsqB,UAAX,GAAwB,mBAAxB;;AAEAH,YAAMpmB,SAASC,aAAT,CAAuB,KAAvB,CAAN;AACAmmB,UAAInqB,KAAJ,CAAUoE,QAAV,GAAqB,UAArB;AACA+lB,UAAInqB,KAAJ,CAAUkE,MAAV,GAAmB,GAAnB;AACAimB,UAAInqB,KAAJ,CAAUiE,KAAV,GAAkB,GAAlB;AACAkmB,UAAInqB,KAAJ,CAAUZ,MAAV,GAAmB,mBAAnB;AACA+qB,UAAInqB,KAAJ,CAAUoqB,YAAV,GAAyB,KAAzB;;AAEA,WAAK9X,OAAL,GAAe;AACb8V,mBAAW,IADE;AAEbmC,aAAK;AACHzgB,mBAASA,OADN;AAEHogB,gBAAMA,IAFH;AAGHC,eAAKA;AAHF;AAFQ,OAAf;AAQD,KA/BD,MAgCK;AACHrgB,gBAAU,KAAKwI,OAAL,CAAaiY,GAAb,CAAiBzgB,OAA3B;AACAogB,aAAQ,KAAK5X,OAAL,CAAaiY,GAAb,CAAiBL,IAAzB;AACAC,YAAQ,KAAK7X,OAAL,CAAaiY,GAAb,CAAiBJ,GAAzB;AACD;;AAED,SAAK3B,YAAL;;AAEA,SAAKlW,OAAL,CAAa8V,SAAb,GAAyBA,SAAzB;AACA,QAAI,OAAO,KAAKE,WAAZ,KAA4B,UAAhC,EAA4C;AAC1Cxe,cAAQ6R,SAAR,GAAoB,KAAK2M,WAAL,CAAiBF,UAAU5e,KAA3B,CAApB;AACD,KAFD,MAGK;AACHM,cAAQ6R,SAAR,GAAoB,YAClB,UADkB,GACL,KAAK1K,MADA,GACS,YADT,GACwBmX,UAAU5e,KAAV,CAAgBJ,CADxC,GAC4C,YAD5C,GAElB,UAFkB,GAEL,KAAK8H,MAFA,GAES,YAFT,GAEwBkX,UAAU5e,KAAV,CAAgBH,CAFxC,GAE4C,YAF5C,GAGlB,UAHkB,GAGL,KAAK8H,MAHA,GAGS,YAHT,GAGwBiX,UAAU5e,KAAV,CAAgBuL,CAHxC,GAG4C,YAH5C,GAIlB,UAJF;AAKD;;AAEDjL,YAAQ9J,KAAR,CAAcpG,IAAd,GAAsB,GAAtB;AACAkQ,YAAQ9J,KAAR,CAAchG,GAAd,GAAsB,GAAtB;AACA,SAAKud,KAAL,CAAWhT,WAAX,CAAuBuF,OAAvB;AACA,SAAKyN,KAAL,CAAWhT,WAAX,CAAuB2lB,IAAvB;AACA,SAAK3S,KAAL,CAAWhT,WAAX,CAAuB4lB,GAAvB;;AAEA;AACA,QAAIK,eAAgB1gB,QAAQpF,WAA5B;AACA,QAAI+lB,gBAAkB3gB,QAAQ4gB,YAA9B;AACA,QAAIC,aAAgBT,KAAKQ,YAAzB;AACA,QAAIE,WAAcT,IAAIzlB,WAAtB;AACA,QAAImmB,YAAgBV,IAAIO,YAAxB;;AAEA,QAAI9wB,OAAOwuB,UAAUvQ,MAAV,CAAiBzO,CAAjB,GAAqBohB,eAAe,CAA/C;AACA5wB,WAAO1D,KAAKJ,GAAL,CAASI,KAAKH,GAAL,CAAS6D,IAAT,EAAe,EAAf,CAAT,EAA6B,KAAK2d,KAAL,CAAW3S,WAAX,GAAyB,EAAzB,GAA8B4lB,YAA3D,CAAP;;AAEAN,SAAKlqB,KAAL,CAAWpG,IAAX,GAAoBwuB,UAAUvQ,MAAV,CAAiBzO,CAAjB,GAAqB,IAAzC;AACA8gB,SAAKlqB,KAAL,CAAWhG,GAAX,GAAqBouB,UAAUvQ,MAAV,CAAiBxO,CAAjB,GAAqBshB,UAAtB,GAAoC,IAAxD;AACA7gB,YAAQ9J,KAAR,CAAcpG,IAAd,GAAsBA,OAAO,IAA7B;AACAkQ,YAAQ9J,KAAR,CAAchG,GAAd,GAAuBouB,UAAUvQ,MAAV,CAAiBxO,CAAjB,GAAqBshB,UAArB,GAAkCF,aAAnC,GAAoD,IAA1E;AACAN,QAAInqB,KAAJ,CAAUpG,IAAV,GAAqBwuB,UAAUvQ,MAAV,CAAiBzO,CAAjB,GAAqBwhB,WAAW,CAAjC,GAAsC,IAA1D;AACAT,QAAInqB,KAAJ,CAAUhG,GAAV,GAAqBouB,UAAUvQ,MAAV,CAAiBxO,CAAjB,GAAqBwhB,YAAY,CAAlC,GAAuC,IAA3D;AACD,GA7ED;;AA+EA;;;;AAIAljB,UAAQgD,SAAR,CAAkB6d,YAAlB,GAAiC,YAAY;AAC3C,QAAI,KAAKlW,OAAT,EAAkB;AAChB,WAAKA,OAAL,CAAa8V,SAAb,GAAyB,IAAzB;;AAEA,WAAK,IAAIrxB,IAAT,IAAiB,KAAKub,OAAL,CAAaiY,GAA9B,EAAmC;AACjC,YAAI,KAAKjY,OAAL,CAAaiY,GAAb,CAAiBvzB,cAAjB,CAAgCD,IAAhC,CAAJ,EAA2C;AACzC,cAAI2C,OAAO,KAAK4Y,OAAL,CAAaiY,GAAb,CAAiBxzB,IAAjB,CAAX;AACA,cAAI2C,QAAQA,KAAK2C,UAAjB,EAA6B;AAC3B3C,iBAAK2C,UAAL,CAAgBzG,WAAhB,CAA4B8D,IAA5B;AACD;AACF;AACF;AACF;AACF,GAbD;;AAeA;;AAGA;;;;;;AAMA,WAASmsB,SAAT,CAAoB/pB,KAApB,EAA2B;AACzB,QAAI,aAAaA,KAAjB,EAAwB,OAAOA,MAAMgvB,OAAb;AACxB,WAAOhvB,MAAMivB,aAAN,CAAoB,CAApB,KAA0BjvB,MAAMivB,aAAN,CAAoB,CAApB,EAAuBD,OAAjD,IAA4D,CAAnE;AACD;;AAED;;;;;;AAMA,WAAS/E,SAAT,CAAoBjqB,KAApB,EAA2B;AACzB,QAAI,aAAaA,KAAjB,EAAwB,OAAOA,MAAMkvB,OAAb;AACxB,WAAOlvB,MAAMivB,aAAN,CAAoB,CAApB,KAA0BjvB,MAAMivB,aAAN,CAAoB,CAApB,EAAuBC,OAAjD,IAA4D,CAAnE;AACD;;AAGD;AACA;AACA;;AAEA;;;;;;;;;;;;;AAaArjB,UAAQgD,SAAR,CAAkBsgB,iBAAlB,GAAsC,UAAS9N,GAAT,EAAc;AAClDxM,aAASsa,iBAAT,CAA2B9N,GAA3B,EAAgC,IAAhC;AACA,SAAKxC,MAAL;AACD,GAHD;;AAMA;;;;;;;;AAQAhT,UAAQgD,SAAR,CAAkBugB,OAAlB,GAA4B,UAASjnB,KAAT,EAAgBC,MAAhB,EAAwB;AACnD,SAAKqY,QAAL,CAActY,KAAd,EAAqBC,MAArB;AACA,SAAKyW,MAAL;AACA,GAHD;;AAKA;AACA;AACA;;;AAGAzV,SAAOvQ,OAAP,GAAiBgT,OAAjB,C;;;;;;;ACv4EA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAW,OAAO;AAClB,cAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAW,OAAO;AAClB,aAAW,SAAS;AACpB,cAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAW,OAAO;AAClB,aAAW,SAAS;AACpB,cAAY;AACZ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAW,OAAO;AAClB,aAAW,SAAS;AACpB,cAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAW,OAAO;AAClB,aAAW,MAAM;AACjB,cAAY;AACZ;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,6CAA2C,SAAS;AACpD;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,aAAW,OAAO;AAClB,cAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAW,OAAO;AAClB,cAAY;AACZ;AACA;;AAEA;AACA;AACA;;;;;;;;;ACnKA;;;;;;AAMA,WAASK,OAAT,CAAiBoB,CAAjB,EAAoBC,CAApB,EAAuB0L,CAAvB,EAA0B;AACxB,SAAK3L,CAAL,GAASA,MAAM/R,SAAN,GAAkB+R,CAAlB,GAAsB,CAA/B;AACA,SAAKC,CAAL,GAASA,MAAMhS,SAAN,GAAkBgS,CAAlB,GAAsB,CAA/B;AACA,SAAK0L,CAAL,GAASA,MAAM1d,SAAN,GAAkB0d,CAAlB,GAAsB,CAA/B;AACD;;AAED;;;;;;AAMA/M,UAAQod,QAAR,GAAmB,UAASluB,CAAT,EAAYC,CAAZ,EAAe;AAChC,QAAIg0B,MAAM,IAAInjB,OAAJ,EAAV;AACAmjB,QAAI/hB,CAAJ,GAAQlS,EAAEkS,CAAF,GAAMjS,EAAEiS,CAAhB;AACA+hB,QAAI9hB,CAAJ,GAAQnS,EAAEmS,CAAF,GAAMlS,EAAEkS,CAAhB;AACA8hB,QAAIpW,CAAJ,GAAQ7d,EAAE6d,CAAF,GAAM5d,EAAE4d,CAAhB;AACA,WAAOoW,GAAP;AACD,GAND;;AAQA;;;;;;AAMAnjB,UAAQyC,GAAR,GAAc,UAASvT,CAAT,EAAYC,CAAZ,EAAe;AAC3B,QAAIi0B,MAAM,IAAIpjB,OAAJ,EAAV;AACAojB,QAAIhiB,CAAJ,GAAQlS,EAAEkS,CAAF,GAAMjS,EAAEiS,CAAhB;AACAgiB,QAAI/hB,CAAJ,GAAQnS,EAAEmS,CAAF,GAAMlS,EAAEkS,CAAhB;AACA+hB,QAAIrW,CAAJ,GAAQ7d,EAAE6d,CAAF,GAAM5d,EAAE4d,CAAhB;AACA,WAAOqW,GAAP;AACD,GAND;;AAQA;;;;;;AAMApjB,UAAQkc,GAAR,GAAc,UAAShtB,CAAT,EAAYC,CAAZ,EAAe;AAC3B,WAAO,IAAI6Q,OAAJ,CACC,CAAC9Q,EAAEkS,CAAF,GAAMjS,EAAEiS,CAAT,IAAc,CADf,EAEC,CAAClS,EAAEmS,CAAF,GAAMlS,EAAEkS,CAAT,IAAc,CAFf,EAGC,CAACnS,EAAE6d,CAAF,GAAM5d,EAAE4d,CAAT,IAAc,CAHf,CAAP;AAKD,GAND;;AAQA;;;;;;;AAOA/M,UAAQud,YAAR,GAAuB,UAASruB,CAAT,EAAYC,CAAZ,EAAe;AACpC,QAAImuB,eAAe,IAAItd,OAAJ,EAAnB;;AAEAsd,iBAAalc,CAAb,GAAiBlS,EAAEmS,CAAF,GAAMlS,EAAE4d,CAAR,GAAY7d,EAAE6d,CAAF,GAAM5d,EAAEkS,CAArC;AACAic,iBAAajc,CAAb,GAAiBnS,EAAE6d,CAAF,GAAM5d,EAAEiS,CAAR,GAAYlS,EAAEkS,CAAF,GAAMjS,EAAE4d,CAArC;AACAuQ,iBAAavQ,CAAb,GAAiB7d,EAAEkS,CAAF,GAAMjS,EAAEkS,CAAR,GAAYnS,EAAEmS,CAAF,GAAMlS,EAAEiS,CAArC;;AAEA,WAAOkc,YAAP;AACD,GARD;;AAWA;;;;AAIAtd,UAAQ2C,SAAR,CAAkBlT,MAAlB,GAA2B,YAAW;AACpC,WAAOvB,KAAK+zB,IAAL,CACC,KAAK7gB,CAAL,GAAS,KAAKA,CAAd,GACA,KAAKC,CAAL,GAAS,KAAKA,CADd,GAEA,KAAK0L,CAAL,GAAS,KAAKA,CAHf,CAAP;AAKD,GAND;;AAQA7P,SAAOvQ,OAAP,GAAiBqT,OAAjB,C;;;;;;;;ACpFA;;;;;AAKA,WAASD,OAAT,CAAkBqB,CAAlB,EAAqBC,CAArB,EAAwB;AACtB,SAAKD,CAAL,GAASA,MAAM/R,SAAN,GAAkB+R,CAAlB,GAAsB,CAA/B;AACA,SAAKC,CAAL,GAASA,MAAMhS,SAAN,GAAkBgS,CAAlB,GAAsB,CAA/B;AACD;;AAEDnE,SAAOvQ,OAAP,GAAiBoT,OAAjB,C;;;;;;;;;;;;;;ACVA,MAAIC,UAAU,mBAAAvT,CAAQ,EAAR,CAAd;;AAEA;;;;;;;;;;AAUA,WAASoT,MAAT,GAAkB;AAChB,SAAKwjB,WAAL,GAAmB,IAAIrjB,OAAJ,EAAnB;AACA,SAAKsjB,WAAL,GAAmB,EAAnB;AACA,SAAKA,WAAL,CAAiBxY,UAAjB,GAA8B,CAA9B;AACA,SAAKwY,WAAL,CAAiBvY,QAAjB,GAA4B,CAA5B;AACA,SAAKsU,SAAL,GAAiB,GAAjB;AACA,SAAKkE,YAAL,GAAoB,IAAIvjB,OAAJ,EAApB;AACA,SAAKwjB,gBAAL,GAAwB,GAAxB;;AAEA,SAAK9V,cAAL,GAAsB,IAAI1N,OAAJ,EAAtB;AACA,SAAK4N,cAAL,GAAuB,IAAI5N,OAAJ,CAAY,MAAI9R,KAAKwuB,EAArB,EAAyB,CAAzB,EAA4B,CAA5B,CAAvB;;AAEA,SAAK+G,0BAAL;AACD;;AAED;;;;;AAKA5jB,SAAO8C,SAAP,CAAiB4c,SAAjB,GAA6B,UAASne,CAAT,EAAYC,CAAZ,EAAe;AAC1C,QAAIoa,MAAMvtB,KAAKutB,GAAf;AAAA,QACI6F,wBADJ;AAAA,QAEIoC,MAAM,KAAKF,gBAFf;AAAA,QAGIpsB,SAAS,KAAKioB,SAAL,GAAiBqE,GAH9B;;AAKA,QAAIjI,IAAIra,CAAJ,IAAShK,MAAb,EAAqB;AACjBgK,UAAIkgB,KAAKlgB,CAAL,IAAUhK,MAAd;AACH;AACD,QAAIqkB,IAAIpa,CAAJ,IAASjK,MAAb,EAAqB;AACjBiK,UAAIigB,KAAKjgB,CAAL,IAAUjK,MAAd;AACH;AACD,SAAKmsB,YAAL,CAAkBniB,CAAlB,GAAsBA,CAAtB;AACA,SAAKmiB,YAAL,CAAkBliB,CAAlB,GAAsBA,CAAtB;AACA,SAAKoiB,0BAAL;AACD,GAfD;;AAiBA;;;;AAIA5jB,SAAO8C,SAAP,CAAiBsb,SAAjB,GAA6B,UAAS7c,CAAT,EAAYC,CAAZ,EAAe;AAC1C,WAAO,KAAKkiB,YAAZ;AACD,GAFD;;AAIA;;;;;;AAMA1jB,SAAO8C,SAAP,CAAiByK,cAAjB,GAAkC,UAAShM,CAAT,EAAYC,CAAZ,EAAe0L,CAAf,EAAkB;AAClD,SAAKsW,WAAL,CAAiBjiB,CAAjB,GAAqBA,CAArB;AACA,SAAKiiB,WAAL,CAAiBhiB,CAAjB,GAAqBA,CAArB;AACA,SAAKgiB,WAAL,CAAiBtW,CAAjB,GAAqBA,CAArB;;AAEA,SAAK0W,0BAAL;AACD,GAND;;AAQA;;;;;;;;AAQA5jB,SAAO8C,SAAP,CAAiBkd,cAAjB,GAAkC,UAAS/U,UAAT,EAAqBC,QAArB,EAA+B;AAC/D,QAAID,eAAezb,SAAnB,EAA8B;AAC5B,WAAKi0B,WAAL,CAAiBxY,UAAjB,GAA8BA,UAA9B;AACD;;AAED,QAAIC,aAAa1b,SAAjB,EAA4B;AAC1B,WAAKi0B,WAAL,CAAiBvY,QAAjB,GAA4BA,QAA5B;AACA,UAAI,KAAKuY,WAAL,CAAiBvY,QAAjB,GAA4B,CAAhC,EAAmC,KAAKuY,WAAL,CAAiBvY,QAAjB,GAA4B,CAA5B;AACnC,UAAI,KAAKuY,WAAL,CAAiBvY,QAAjB,GAA4B,MAAI7c,KAAKwuB,EAAzC,EAA6C,KAAK4G,WAAL,CAAiBvY,QAAjB,GAA4B,MAAI7c,KAAKwuB,EAArC;AAC9C;;AAED,QAAI5R,eAAezb,SAAf,IAA4B0b,aAAa1b,SAA7C,EAAwD;AACtD,WAAKo0B,0BAAL;AACD;AACF,GAdD;;AAgBA;;;;AAIA5jB,SAAO8C,SAAP,CAAiByS,cAAjB,GAAkC,YAAW;AAC3C,QAAIuO,MAAM,EAAV;AACAA,QAAI7Y,UAAJ,GAAiB,KAAKwY,WAAL,CAAiBxY,UAAlC;AACA6Y,QAAI5Y,QAAJ,GAAe,KAAKuY,WAAL,CAAiBvY,QAAhC;;AAEA,WAAO4Y,GAAP;AACD,GAND;;AAQA;;;;AAIA9jB,SAAO8C,SAAP,CAAiBwe,YAAjB,GAAgC,UAAS1xB,MAAT,EAAiB;AAC/C,QAAIA,WAAWJ,SAAf,EACE;;AAEF,SAAKgwB,SAAL,GAAiB5vB,MAAjB;;AAEA;AACA;AACA;AACA,QAAI,KAAK4vB,SAAL,GAAiB,IAArB,EAA2B,KAAKA,SAAL,GAAiB,IAAjB;AAC3B,QAAI,KAAKA,SAAL,GAAiB,GAArB,EAA0B,KAAKA,SAAL,GAAiB,GAAjB;;AAE1B,SAAKE,SAAL,CAAe,KAAKgE,YAAL,CAAkBniB,CAAjC,EAAoC,KAAKmiB,YAAL,CAAkBliB,CAAtD;AACA,SAAKoiB,0BAAL;AACD,GAdD;;AAgBA;;;;AAIA5jB,SAAO8C,SAAP,CAAiB0M,YAAjB,GAAgC,YAAW;AACzC,WAAO,KAAKgQ,SAAZ;AACD,GAFD;;AAIA;;;;AAIAxf,SAAO8C,SAAP,CAAiBgL,iBAAjB,GAAqC,YAAW;AAC9C,WAAO,KAAKD,cAAZ;AACD,GAFD;;AAIA;;;;AAIA7N,SAAO8C,SAAP,CAAiBkL,iBAAjB,GAAqC,YAAW;AAC9C,WAAO,KAAKD,cAAZ;AACD,GAFD;;AAIA;;;;AAIA/N,SAAO8C,SAAP,CAAiB8gB,0BAAjB,GAA8C,YAAW;AACvD;AACA,SAAK/V,cAAL,CAAoBtM,CAApB,GAAwB,KAAKiiB,WAAL,CAAiBjiB,CAAjB,GAAqB,KAAKie,SAAL,GAAiBnxB,KAAKmgB,GAAL,CAAS,KAAKiV,WAAL,CAAiBxY,UAA1B,CAAjB,GAAyD5c,KAAKqgB,GAAL,CAAS,KAAK+U,WAAL,CAAiBvY,QAA1B,CAAtG;AACA,SAAK2C,cAAL,CAAoBrM,CAApB,GAAwB,KAAKgiB,WAAL,CAAiBhiB,CAAjB,GAAqB,KAAKge,SAAL,GAAiBnxB,KAAKqgB,GAAL,CAAS,KAAK+U,WAAL,CAAiBxY,UAA1B,CAAjB,GAAyD5c,KAAKqgB,GAAL,CAAS,KAAK+U,WAAL,CAAiBvY,QAA1B,CAAtG;AACA,SAAK2C,cAAL,CAAoBX,CAApB,GAAwB,KAAKsW,WAAL,CAAiBtW,CAAjB,GAAqB,KAAKsS,SAAL,GAAiBnxB,KAAKmgB,GAAL,CAAS,KAAKiV,WAAL,CAAiBvY,QAA1B,CAA9D;;AAEA;AACA,SAAK6C,cAAL,CAAoBxM,CAApB,GAAwBlT,KAAKwuB,EAAL,GAAQ,CAAR,GAAY,KAAK4G,WAAL,CAAiBvY,QAArD;AACA,SAAK6C,cAAL,CAAoBvM,CAApB,GAAwB,CAAxB;AACA,SAAKuM,cAAL,CAAoBb,CAApB,GAAwB,CAAC,KAAKuW,WAAL,CAAiBxY,UAA1C;;AAEA,QAAI8Y,KAAK,KAAKhW,cAAL,CAAoBxM,CAA7B;AACA,QAAIyiB,KAAK,KAAKjW,cAAL,CAAoBvM,CAA7B;AACA,QAAIyiB,KAAK,KAAKlW,cAAL,CAAoBb,CAA7B;AACA,QAAI6B,KAAK,KAAK2U,YAAL,CAAkBniB,CAA3B;AACA,QAAIyN,KAAK,KAAK0U,YAAL,CAAkBliB,CAA3B;AACA,QAAIgN,MAAMngB,KAAKmgB,GAAf;AAAA,QAAoBE,MAAMrgB,KAAKqgB,GAA/B;;AAEA,SAAKb,cAAL,CAAoBtM,CAApB,GAAwB,KAAKsM,cAAL,CAAoBtM,CAApB,GAAwBwN,KAAKL,IAAIuV,EAAJ,CAA7B,GAAuCjV,KAAK,CAAER,IAAIyV,EAAJ,CAAP,GAAiBvV,IAAIqV,EAAJ,CAAhF;AACA,SAAKlW,cAAL,CAAoBrM,CAApB,GAAwB,KAAKqM,cAAL,CAAoBrM,CAApB,GAAwBuN,KAAKP,IAAIyV,EAAJ,CAA7B,GAAuCjV,KAAKN,IAAIuV,EAAJ,CAAL,GAAevV,IAAIqV,EAAJ,CAA9E;AACA,SAAKlW,cAAL,CAAoBX,CAApB,GAAwB,KAAKW,cAAL,CAAoBX,CAApB,GAAwB8B,KAAKR,IAAIuV,EAAJ,CAArD;AACD,GArBD;;AAuBA1mB,SAAOvQ,OAAP,GAAiBkT,MAAjB,C;;;;;;AClLA,oBAAkB,yD;;;;;;ACAlB;AACA,qD;;;;;;ACDA;AACA;;AAEA,8BAA4B,+BAA8B,E;;;;;;ACH1D;AACA;AACA;AACA,I;;;;;;;;ACHA,MAAIJ,WAAW,mBAAAhT,CAAQ,EAAR,CAAf;;AAEA;;;;;;;AAOA,WAASqT,MAAT,CAAiBoC,IAAjB,EAAuBmO,MAAvB,EAA+B0T,KAA/B,EAAsC;AACpC,SAAK7hB,IAAL,GAAYA,IAAZ;AACA,SAAKmO,MAAL,GAAcA,MAAd;AACA,SAAK0T,KAAL,GAAaA,KAAb,CAHoC,CAGhB;;AAEpB,SAAKxxB,KAAL,GAAalD,SAAb;AACA,SAAKjC,KAAL,GAAaiC,SAAb;;AAEA;AACA,SAAKmX,MAAL,GAAcud,MAAMzT,iBAAN,CAAwBpO,KAAKsC,GAAL,EAAxB,EAAoC,KAAK6L,MAAzC,CAAd;;AAEA;AACA,SAAK7J,MAAL,CAAYb,IAAZ,CAAiB,UAAUzW,CAAV,EAAaC,CAAb,EAAgB;AAC/B,aAAOD,IAAIC,CAAJ,GAAQ,CAAR,GAAYD,IAAIC,CAAJ,GAAQ,CAAC,CAAT,GAAa,CAAhC;AACD,KAFD;;AAIA,QAAI,KAAKqX,MAAL,CAAY/W,MAAZ,GAAqB,CAAzB,EAA4B;AAC1B,WAAK4pB,WAAL,CAAiB,CAAjB;AACD;;AAED;AACA,SAAKnN,UAAL,GAAkB,EAAlB;;AAEA,SAAK8X,MAAL,GAAc,KAAd;AACA,SAAKC,cAAL,GAAsB50B,SAAtB;;AAEA,QAAI00B,MAAMha,gBAAV,EAA4B;AAC1B,WAAKia,MAAL,GAAc,KAAd;AACA,WAAKE,gBAAL;AACD,KAHD,MAIK;AACH,WAAKF,MAAL,GAAc,IAAd;AACD;AACF;;AAGD;;;;AAIAlkB,SAAO6C,SAAP,CAAiBwhB,QAAjB,GAA4B,YAAW;AACrC,WAAO,KAAKH,MAAZ;AACD,GAFD;;AAKA;;;;AAIAlkB,SAAO6C,SAAP,CAAiByhB,iBAAjB,GAAqC,YAAW;AAC9C,QAAI1zB,MAAM,KAAK8V,MAAL,CAAY/W,MAAtB;;AAEA,QAAIF,IAAI,CAAR;AACA,WAAO,KAAK2c,UAAL,CAAgB3c,CAAhB,CAAP,EAA2B;AACzBA;AACD;;AAED,WAAOrB,KAAK0xB,KAAL,CAAWrwB,IAAImB,GAAJ,GAAU,GAArB,CAAP;AACD,GATD;;AAYA;;;;AAIAoP,SAAO6C,SAAP,CAAiB6W,QAAjB,GAA4B,YAAW;AACrC,WAAO,KAAKuK,KAAL,CAAWhb,WAAlB;AACD,GAFD;;AAKA;;;;AAIAjJ,SAAO6C,SAAP,CAAiB0hB,SAAjB,GAA6B,YAAW;AACtC,WAAO,KAAKhU,MAAZ;AACD,GAFD;;AAIA;;;;AAIAvQ,SAAO6C,SAAP,CAAiB8W,gBAAjB,GAAoC,YAAW;AAC7C,QAAI,KAAKlnB,KAAL,KAAelD,SAAnB,EACE,OAAOA,SAAP;;AAEF,WAAO,KAAKmX,MAAL,CAAY,KAAKjU,KAAjB,CAAP;AACD,GALD;;AAOA;;;;AAIAuN,SAAO6C,SAAP,CAAiB2hB,SAAjB,GAA6B,YAAW;AACtC,WAAO,KAAK9d,MAAZ;AACD,GAFD;;AAIA;;;;;AAKA1G,SAAO6C,SAAP,CAAiB4hB,QAAjB,GAA4B,UAAShyB,KAAT,EAAgB;AAC1C,QAAIA,SAAS,KAAKiU,MAAL,CAAY/W,MAAzB,EACE,MAAM,IAAIM,KAAJ,CAAU,oBAAV,CAAN;;AAEF,WAAO,KAAKyW,MAAL,CAAYjU,KAAZ,CAAP;AACD,GALD;;AAQA;;;;;AAKAuN,SAAO6C,SAAP,CAAiBiQ,cAAjB,GAAkC,UAASrgB,KAAT,EAAgB;AAChD,QAAIA,UAAUlD,SAAd,EACEkD,QAAQ,KAAKA,KAAb;;AAEF,QAAIA,UAAUlD,SAAd,EACE,OAAO,EAAP;;AAEF,QAAI6c,UAAJ;AACA,QAAI,KAAKA,UAAL,CAAgB3Z,KAAhB,CAAJ,EAA4B;AAC1B2Z,mBAAa,KAAKA,UAAL,CAAgB3Z,KAAhB,CAAb;AACD,KAFD,MAGK;AACH,UAAImG,IAAI,EAAR;AACAA,QAAE2X,MAAF,GAAW,KAAKA,MAAhB;AACA3X,QAAEtL,KAAF,GAAU,KAAKoZ,MAAL,CAAYjU,KAAZ,CAAV;;AAEA,UAAIiyB,WAAW,IAAI/kB,QAAJ,CAAa,KAAKyC,IAAlB,EAAuB,EAACiB,QAAQ,gBAAU1I,IAAV,EAAgB;AAAC,iBAAQA,KAAK/B,EAAE2X,MAAP,KAAkB3X,EAAEtL,KAA5B;AAAoC,SAA9D,EAAvB,EAAwFoX,GAAxF,EAAf;AACA0H,mBAAa,KAAK6X,KAAL,CAAWnR,cAAX,CAA0B4R,QAA1B,CAAb;;AAEA,WAAKtY,UAAL,CAAgB3Z,KAAhB,IAAyB2Z,UAAzB;AACD;;AAED,WAAOA,UAAP;AACD,GAvBD;;AA2BA;;;AAGApM,SAAO6C,SAAP,CAAiB+P,iBAAjB,GAAqC,UAAShgB,QAAT,EAAmB;AACtD,SAAKuxB,cAAL,GAAsBvxB,QAAtB;AACD,GAFD;;AAKA;;;;;AAKAoN,SAAO6C,SAAP,CAAiB0W,WAAjB,GAA+B,UAAS9mB,KAAT,EAAgB;AAC7C,QAAIA,SAAS,KAAKiU,MAAL,CAAY/W,MAAzB,EACE,MAAM,IAAIM,KAAJ,CAAU,oBAAV,CAAN;;AAEF,SAAKwC,KAAL,GAAaA,KAAb;AACA,SAAKnF,KAAL,GAAa,KAAKoZ,MAAL,CAAYjU,KAAZ,CAAb;AACD,GAND;;AAQA;;;;AAIAuN,SAAO6C,SAAP,CAAiBuhB,gBAAjB,GAAoC,UAAS3xB,KAAT,EAAgB;AAClD,QAAIA,UAAUlD,SAAd,EACEkD,QAAQ,CAAR;;AAEF,QAAIgd,QAAQ,KAAKwU,KAAL,CAAWxU,KAAvB;;AAEA,QAAIhd,QAAQ,KAAKiU,MAAL,CAAY/W,MAAxB,EAAgC;AAC9B,UAAIg1B,iBAAiB,KAAK7R,cAAL,CAAoBrgB,KAApB,CAArB;AACA;;AAEA;AACA,UAAIgd,MAAMmV,QAAN,KAAmBr1B,SAAvB,EAAkC;AAChCkgB,cAAMmV,QAAN,GAAiB3oB,SAASC,aAAT,CAAuB,KAAvB,CAAjB;AACAuT,cAAMmV,QAAN,CAAe1sB,KAAf,CAAqBoE,QAArB,GAAgC,UAAhC;AACAmT,cAAMmV,QAAN,CAAe1sB,KAAf,CAAqBtC,KAArB,GAA6B,MAA7B;AACA6Z,cAAMhT,WAAN,CAAkBgT,MAAMmV,QAAxB;AACD;AACD,UAAIA,WAAW,KAAKN,iBAAL,EAAf;AACA7U,YAAMmV,QAAN,CAAe/Q,SAAf,GAA2B,0BAA0B+Q,QAA1B,GAAqC,GAAhE;AACA;AACAnV,YAAMmV,QAAN,CAAe1sB,KAAf,CAAqB+X,MAArB,GAA8B,KAAK,IAAnC,CAd8B,CAcW;AACzCR,YAAMmV,QAAN,CAAe1sB,KAAf,CAAqBpG,IAArB,GAA4B,KAAK,IAAjC;;AAEA,UAAIgS,KAAK,IAAT;AACA+D,iBAAW,YAAW;AAAC/D,WAAGsgB,gBAAH,CAAoB3xB,QAAM,CAA1B;AAA8B,OAArD,EAAuD,EAAvD;AACA,WAAKyxB,MAAL,GAAc,KAAd;AACD,KApBD,MAqBK;AACH,WAAKA,MAAL,GAAc,IAAd;;AAEA;AACA,UAAIzU,MAAMmV,QAAN,KAAmBr1B,SAAvB,EAAkC;AAChCkgB,cAAM3hB,WAAN,CAAkB2hB,MAAMmV,QAAxB;AACAnV,cAAMmV,QAAN,GAAiBr1B,SAAjB;AACD;;AAED,UAAI,KAAK40B,cAAT,EACE,KAAKA,cAAL;AACH;AACF,GAvCD;;AAyCA/mB,SAAOvQ,OAAP,GAAiBmT,MAAjB,C;;;;;;;;ACzNA,MAAItT,OAAO,mBAAAC,CAAQ,CAAR,CAAX;;AAEA;;;;;;;;;AASA,WAASwT,MAAT,CAAgB6L,SAAhB,EAA2BlS,OAA3B,EAAoC;AAClC,QAAIkS,cAAczc,SAAlB,EAA6B;AAC3B,YAAM,IAAIU,KAAJ,CAAU,8BAAV,CAAN;AACD;AACD,SAAK+b,SAAL,GAAiBA,SAAjB;AACA,SAAK6Y,OAAL,GAAgB/qB,WAAWA,QAAQ+qB,OAAR,IAAmBt1B,SAA/B,GAA4CuK,QAAQ+qB,OAApD,GAA8D,IAA7E;;AAEA,QAAI,KAAKA,OAAT,EAAkB;AAChB,WAAKpV,KAAL,GAAaxT,SAASC,aAAT,CAAuB,KAAvB,CAAb;AACA;AACA,WAAKuT,KAAL,CAAWvX,KAAX,CAAiBiE,KAAjB,GAAyB,MAAzB;AACA,WAAKsT,KAAL,CAAWvX,KAAX,CAAiBoE,QAAjB,GAA4B,UAA5B;AACA,WAAK0P,SAAL,CAAevP,WAAf,CAA2B,KAAKgT,KAAhC;;AAEA,WAAKA,KAAL,CAAWqV,IAAX,GAAkB7oB,SAASC,aAAT,CAAuB,OAAvB,CAAlB;AACA,WAAKuT,KAAL,CAAWqV,IAAX,CAAgBh0B,IAAhB,GAAuB,QAAvB;AACA,WAAK2e,KAAL,CAAWqV,IAAX,CAAgBx3B,KAAhB,GAAwB,MAAxB;AACA,WAAKmiB,KAAL,CAAWhT,WAAX,CAAuB,KAAKgT,KAAL,CAAWqV,IAAlC;;AAEA,WAAKrV,KAAL,CAAWqF,IAAX,GAAkB7Y,SAASC,aAAT,CAAuB,OAAvB,CAAlB;AACA,WAAKuT,KAAL,CAAWqF,IAAX,CAAgBhkB,IAAhB,GAAuB,QAAvB;AACA,WAAK2e,KAAL,CAAWqF,IAAX,CAAgBxnB,KAAhB,GAAwB,MAAxB;AACA,WAAKmiB,KAAL,CAAWhT,WAAX,CAAuB,KAAKgT,KAAL,CAAWqF,IAAlC;;AAEA,WAAKrF,KAAL,CAAWyJ,IAAX,GAAkBjd,SAASC,aAAT,CAAuB,OAAvB,CAAlB;AACA,WAAKuT,KAAL,CAAWyJ,IAAX,CAAgBpoB,IAAhB,GAAuB,QAAvB;AACA,WAAK2e,KAAL,CAAWyJ,IAAX,CAAgB5rB,KAAhB,GAAwB,MAAxB;AACA,WAAKmiB,KAAL,CAAWhT,WAAX,CAAuB,KAAKgT,KAAL,CAAWyJ,IAAlC;;AAEA,WAAKzJ,KAAL,CAAWsV,GAAX,GAAiB9oB,SAASC,aAAT,CAAuB,OAAvB,CAAjB;AACA,WAAKuT,KAAL,CAAWsV,GAAX,CAAej0B,IAAf,GAAsB,QAAtB;AACA,WAAK2e,KAAL,CAAWsV,GAAX,CAAe7sB,KAAf,CAAqBoE,QAArB,GAAgC,UAAhC;AACA,WAAKmT,KAAL,CAAWsV,GAAX,CAAe7sB,KAAf,CAAqBZ,MAArB,GAA8B,eAA9B;AACA,WAAKmY,KAAL,CAAWsV,GAAX,CAAe7sB,KAAf,CAAqBiE,KAArB,GAA6B,OAA7B;AACA,WAAKsT,KAAL,CAAWsV,GAAX,CAAe7sB,KAAf,CAAqBkE,MAArB,GAA8B,KAA9B;AACA,WAAKqT,KAAL,CAAWsV,GAAX,CAAe7sB,KAAf,CAAqBoqB,YAArB,GAAoC,KAApC;AACA,WAAK7S,KAAL,CAAWsV,GAAX,CAAe7sB,KAAf,CAAqB8sB,eAArB,GAAuC,KAAvC;AACA,WAAKvV,KAAL,CAAWsV,GAAX,CAAe7sB,KAAf,CAAqBZ,MAArB,GAA8B,mBAA9B;AACA,WAAKmY,KAAL,CAAWsV,GAAX,CAAe7sB,KAAf,CAAqBwS,eAArB,GAAuC,SAAvC;AACA,WAAK+E,KAAL,CAAWhT,WAAX,CAAuB,KAAKgT,KAAL,CAAWsV,GAAlC;;AAEA,WAAKtV,KAAL,CAAWwV,KAAX,GAAmBhpB,SAASC,aAAT,CAAuB,OAAvB,CAAnB;AACA,WAAKuT,KAAL,CAAWwV,KAAX,CAAiBn0B,IAAjB,GAAwB,QAAxB;AACA,WAAK2e,KAAL,CAAWwV,KAAX,CAAiB/sB,KAAjB,CAAuBqf,MAAvB,GAAgC,KAAhC;AACA,WAAK9H,KAAL,CAAWwV,KAAX,CAAiB33B,KAAjB,GAAyB,GAAzB;AACA,WAAKmiB,KAAL,CAAWwV,KAAX,CAAiB/sB,KAAjB,CAAuBoE,QAAvB,GAAkC,UAAlC;AACA,WAAKmT,KAAL,CAAWwV,KAAX,CAAiB/sB,KAAjB,CAAuBpG,IAAvB,GAA8B,QAA9B;AACA,WAAK2d,KAAL,CAAWhT,WAAX,CAAuB,KAAKgT,KAAL,CAAWwV,KAAlC;;AAEA;AACA,UAAInhB,KAAK,IAAT;AACA,WAAK2L,KAAL,CAAWwV,KAAX,CAAiBnR,WAAjB,GAA+B,UAAU9f,KAAV,EAAiB;AAAC8P,WAAGiQ,YAAH,CAAgB/f,KAAhB;AAAwB,OAAzE;AACA,WAAKyb,KAAL,CAAWqV,IAAX,CAAgBxQ,OAAhB,GAA0B,UAAUtgB,KAAV,EAAiB;AAAC8P,WAAGghB,IAAH,CAAQ9wB,KAAR;AAAgB,OAA5D;AACA,WAAKyb,KAAL,CAAWqF,IAAX,CAAgBR,OAAhB,GAA0B,UAAUtgB,KAAV,EAAiB;AAAC8P,WAAGohB,UAAH,CAAclxB,KAAd;AAAsB,OAAlE;AACA,WAAKyb,KAAL,CAAWyJ,IAAX,CAAgB5E,OAAhB,GAA0B,UAAUtgB,KAAV,EAAiB;AAAC8P,WAAGoV,IAAH,CAAQllB,KAAR;AAAgB,OAA5D;AACD;;AAED,SAAKmxB,gBAAL,GAAwB51B,SAAxB;;AAEA,SAAKmX,MAAL,GAAc,EAAd;AACA,SAAKjU,KAAL,GAAalD,SAAb;;AAEA,SAAK61B,WAAL,GAAmB71B,SAAnB;AACA,SAAK81B,YAAL,GAAoB,IAApB,CA/DkC,CA+DR;AAC1B,SAAKC,QAAL,GAAgB,IAAhB;AACD;;AAED;;;AAGAnlB,SAAO0C,SAAP,CAAiBiiB,IAAjB,GAAwB,YAAW;AACjC,QAAIryB,QAAQ,KAAK6mB,QAAL,EAAZ;AACA,QAAI7mB,QAAQ,CAAZ,EAAe;AACbA;AACA,WAAK8yB,QAAL,CAAc9yB,KAAd;AACD;AACF,GAND;;AAQA;;;AAGA0N,SAAO0C,SAAP,CAAiBqW,IAAjB,GAAwB,YAAW;AACjC,QAAIzmB,QAAQ,KAAK6mB,QAAL,EAAZ;AACA,QAAI7mB,QAAQ,KAAKiU,MAAL,CAAY/W,MAAZ,GAAqB,CAAjC,EAAoC;AAClC8C;AACA,WAAK8yB,QAAL,CAAc9yB,KAAd;AACD;AACF,GAND;;AAQA;;;AAGA0N,SAAO0C,SAAP,CAAiB2iB,QAAjB,GAA4B,YAAW;AACrC,QAAI/M,QAAQ,IAAIjqB,IAAJ,EAAZ;;AAEA,QAAIiE,QAAQ,KAAK6mB,QAAL,EAAZ;AACA,QAAI7mB,QAAQ,KAAKiU,MAAL,CAAY/W,MAAZ,GAAqB,CAAjC,EAAoC;AAClC8C;AACA,WAAK8yB,QAAL,CAAc9yB,KAAd;AACD,KAHD,MAIK,IAAI,KAAK6yB,QAAT,EAAmB;AACtB;AACA7yB,cAAQ,CAAR;AACA,WAAK8yB,QAAL,CAAc9yB,KAAd;AACD;;AAED,QAAImmB,MAAM,IAAIpqB,IAAJ,EAAV;AACA,QAAI8tB,OAAQ1D,MAAMH,KAAlB;;AAEA;AACA;AACA,QAAIgN,WAAWr3B,KAAKH,GAAL,CAAS,KAAKo3B,YAAL,GAAoB/I,IAA7B,EAAmC,CAAnC,CAAf;AACA;;AAEA,QAAIxY,KAAK,IAAT;AACA,SAAKshB,WAAL,GAAmBvd,WAAW,YAAW;AAAC/D,SAAG0hB,QAAH;AAAe,KAAtC,EAAwCC,QAAxC,CAAnB;AACD,GAxBD;;AA0BA;;;AAGAtlB,SAAO0C,SAAP,CAAiBqiB,UAAjB,GAA8B,YAAW;AACvC,QAAI,KAAKE,WAAL,KAAqB71B,SAAzB,EAAoC;AAClC,WAAKulB,IAAL;AACD,KAFD,MAEO;AACL,WAAKE,IAAL;AACD;AACF,GAND;;AAQA;;;AAGA7U,SAAO0C,SAAP,CAAiBiS,IAAjB,GAAwB,YAAW;AACjC;AACA,QAAI,KAAKsQ,WAAT,EAAsB;;AAEtB,SAAKI,QAAL;;AAEA,QAAI,KAAK/V,KAAT,EAAgB;AACd,WAAKA,KAAL,CAAWqF,IAAX,CAAgBxnB,KAAhB,GAAwB,MAAxB;AACD;AACF,GATD;;AAWA;;;AAGA6S,SAAO0C,SAAP,CAAiBmS,IAAjB,GAAwB,YAAW;AACjC0Q,kBAAc,KAAKN,WAAnB;AACA,SAAKA,WAAL,GAAmB71B,SAAnB;;AAEA,QAAI,KAAKkgB,KAAT,EAAgB;AACd,WAAKA,KAAL,CAAWqF,IAAX,CAAgBxnB,KAAhB,GAAwB,MAAxB;AACD;AACF,GAPD;;AASA;;;;AAIA6S,SAAO0C,SAAP,CAAiB2W,mBAAjB,GAAuC,UAAS5mB,QAAT,EAAmB;AACxD,SAAKuyB,gBAAL,GAAwBvyB,QAAxB;AACD,GAFD;;AAIA;;;;AAIAuN,SAAO0C,SAAP,CAAiBuW,eAAjB,GAAmC,UAASqM,QAAT,EAAmB;AACpD,SAAKJ,YAAL,GAAoBI,QAApB;AACD,GAFD;;AAIA;;;;AAIAtlB,SAAO0C,SAAP,CAAiB8iB,eAAjB,GAAmC,UAASF,QAAT,EAAmB;AACpD,WAAO,KAAKJ,YAAZ;AACD,GAFD;;AAIA;;;;;;AAMAllB,SAAO0C,SAAP,CAAiB+iB,WAAjB,GAA+B,UAASC,MAAT,EAAiB;AAC9C,SAAKP,QAAL,GAAgBO,MAAhB;AACD,GAFD;;AAKA;;;AAGA1lB,SAAO0C,SAAP,CAAiBijB,QAAjB,GAA4B,YAAW;AACrC,QAAI,KAAKX,gBAAL,KAA0B51B,SAA9B,EAAyC;AACvC,WAAK41B,gBAAL;AACD;AACF,GAJD;;AAMA;;;AAGAhlB,SAAO0C,SAAP,CAAiBgQ,MAAjB,GAA0B,YAAW;AACnC,QAAI,KAAKpD,KAAT,EAAgB;AACd;AACA,WAAKA,KAAL,CAAWsV,GAAX,CAAe7sB,KAAf,CAAqBhG,GAArB,GAA4B,KAAKud,KAAL,CAAWkF,YAAX,GAAwB,CAAxB,GACxB,KAAKlF,KAAL,CAAWsV,GAAX,CAAenC,YAAf,GAA4B,CADL,GACU,IADrC;AAEA,WAAKnT,KAAL,CAAWsV,GAAX,CAAe7sB,KAAf,CAAqBiE,KAArB,GAA8B,KAAKsT,KAAL,CAAW3S,WAAX,GAC1B,KAAK2S,KAAL,CAAWqV,IAAX,CAAgBhoB,WADU,GAE1B,KAAK2S,KAAL,CAAWqF,IAAX,CAAgBhY,WAFU,GAG1B,KAAK2S,KAAL,CAAWyJ,IAAX,CAAgBpc,WAHU,GAGI,EAHL,GAGY,IAHzC;;AAKA;AACA,UAAIhL,OAAO,KAAKi0B,WAAL,CAAiB,KAAKtzB,KAAtB,CAAX;AACA,WAAKgd,KAAL,CAAWwV,KAAX,CAAiB/sB,KAAjB,CAAuBpG,IAAvB,GAA+BA,IAAD,GAAS,IAAvC;AACD;AACF,GAdD;;AAiBA;;;;AAIAqO,SAAO0C,SAAP,CAAiBsW,SAAjB,GAA6B,UAASzS,MAAT,EAAiB;AAC5C,SAAKA,MAAL,GAAcA,MAAd;;AAEA,QAAI,KAAKA,MAAL,CAAY/W,MAAZ,GAAqB,CAAzB,EACE,KAAK41B,QAAL,CAAc,CAAd,EADF,KAGE,KAAK9yB,KAAL,GAAalD,SAAb;AACH,GAPD;;AASA;;;;AAIA4Q,SAAO0C,SAAP,CAAiB0iB,QAAjB,GAA4B,UAAS9yB,KAAT,EAAgB;AAC1C,QAAIA,QAAQ,KAAKiU,MAAL,CAAY/W,MAAxB,EAAgC;AAC9B,WAAK8C,KAAL,GAAaA,KAAb;;AAEA,WAAKogB,MAAL;AACA,WAAKiT,QAAL;AACD,KALD,MAMK;AACH,YAAM,IAAI71B,KAAJ,CAAU,oBAAV,CAAN;AACD;AACF,GAVD;;AAYA;;;;AAIAkQ,SAAO0C,SAAP,CAAiByW,QAAjB,GAA4B,YAAW;AACrC,WAAO,KAAK7mB,KAAZ;AACD,GAFD;;AAKA;;;;AAIA0N,SAAO0C,SAAP,CAAiB6B,GAAjB,GAAuB,YAAW;AAChC,WAAO,KAAKgC,MAAL,CAAY,KAAKjU,KAAjB,CAAP;AACD,GAFD;;AAKA0N,SAAO0C,SAAP,CAAiBkR,YAAjB,GAAgC,UAAS/f,KAAT,EAAgB;AAC9C;AACA,QAAIoqB,iBAAiBpqB,MAAMsqB,KAAN,GAAetqB,MAAMsqB,KAAN,KAAgB,CAA/B,GAAqCtqB,MAAMuqB,MAAN,KAAiB,CAA3E;AACA,QAAI,CAACH,cAAL,EAAqB;;AAErB,SAAK4H,YAAL,GAAoBhyB,MAAMgvB,OAA1B;AACA,SAAKiD,WAAL,GAAmB9Q,WAAW,KAAK1F,KAAL,CAAWwV,KAAX,CAAiB/sB,KAAjB,CAAuBpG,IAAlC,CAAnB;;AAEA,SAAK2d,KAAL,CAAWvX,KAAX,CAAiB0mB,MAAjB,GAA0B,MAA1B;;AAEA;AACA;AACA;AACA,QAAI9a,KAAK,IAAT;AACA,SAAK+a,WAAL,GAAmB,UAAU7qB,KAAV,EAAiB;AAAC8P,SAAGgb,YAAH,CAAgB9qB,KAAhB;AAAwB,KAA7D;AACA,SAAK+qB,SAAL,GAAmB,UAAU/qB,KAAV,EAAiB;AAAC8P,SAAGua,UAAH,CAAcrqB,KAAd;AAAsB,KAA3D;AACAtH,SAAK2G,gBAAL,CAAsB4I,QAAtB,EAAgC,WAAhC,EAA6C,KAAK4iB,WAAlD;AACAnyB,SAAK2G,gBAAL,CAAsB4I,QAAtB,EAAgC,SAAhC,EAA6C,KAAK8iB,SAAlD;AACAryB,SAAKqH,cAAL,CAAoBC,KAApB;AACD,GAnBD;;AAsBAmM,SAAO0C,SAAP,CAAiBqjB,WAAjB,GAA+B,UAAUp0B,IAAV,EAAgB;AAC7C,QAAIqK,QAAQgZ,WAAW,KAAK1F,KAAL,CAAWsV,GAAX,CAAe7sB,KAAf,CAAqBiE,KAAhC,IACR,KAAKsT,KAAL,CAAWwV,KAAX,CAAiBnoB,WADT,GACuB,EADnC;AAEA,QAAIwE,IAAIxP,OAAO,CAAf;;AAEA,QAAIW,QAAQrE,KAAK0xB,KAAL,CAAWxe,IAAInF,KAAJ,IAAa,KAAKuK,MAAL,CAAY/W,MAAZ,GAAmB,CAAhC,CAAX,CAAZ;AACA,QAAI8C,QAAQ,CAAZ,EAAeA,QAAQ,CAAR;AACf,QAAIA,QAAQ,KAAKiU,MAAL,CAAY/W,MAAZ,GAAmB,CAA/B,EAAkC8C,QAAQ,KAAKiU,MAAL,CAAY/W,MAAZ,GAAmB,CAA3B;;AAElC,WAAO8C,KAAP;AACD,GAVD;;AAYA0N,SAAO0C,SAAP,CAAiBkjB,WAAjB,GAA+B,UAAUtzB,KAAV,EAAiB;AAC9C,QAAI0J,QAAQgZ,WAAW,KAAK1F,KAAL,CAAWsV,GAAX,CAAe7sB,KAAf,CAAqBiE,KAAhC,IACR,KAAKsT,KAAL,CAAWwV,KAAX,CAAiBnoB,WADT,GACuB,EADnC;;AAGA,QAAIwE,IAAI7O,SAAS,KAAKiU,MAAL,CAAY/W,MAAZ,GAAmB,CAA5B,IAAiCwM,KAAzC;AACA,QAAIrK,OAAOwP,IAAI,CAAf;;AAEA,WAAOxP,IAAP;AACD,GARD;;AAYAqO,SAAO0C,SAAP,CAAiBic,YAAjB,GAAgC,UAAU9qB,KAAV,EAAiB;AAC/C,QAAIsoB,OAAOtoB,MAAMgvB,OAAN,GAAgB,KAAKgD,YAAhC;AACA,QAAI1kB,IAAI,KAAK2kB,WAAL,GAAmB3J,IAA3B;;AAEA,QAAI7pB,QAAQ,KAAKyzB,WAAL,CAAiB5kB,CAAjB,CAAZ;;AAEA,SAAKikB,QAAL,CAAc9yB,KAAd;;AAEA/F,SAAKqH,cAAL;AACD,GATD;;AAYAoM,SAAO0C,SAAP,CAAiBwb,UAAjB,GAA8B,UAAUrqB,KAAV,EAAiB;AAC7C,SAAKyb,KAAL,CAAWvX,KAAX,CAAiB0mB,MAAjB,GAA0B,MAA1B;;AAEA;AACAlyB,SAAKmH,mBAAL,CAAyBoI,QAAzB,EAAmC,WAAnC,EAAgD,KAAK4iB,WAArD;AACAnyB,SAAKmH,mBAAL,CAAyBoI,QAAzB,EAAmC,SAAnC,EAA8C,KAAK8iB,SAAnD;;AAEAryB,SAAKqH,cAAL;AACD,GARD;;AAUAqJ,SAAOvQ,OAAP,GAAiBsT,MAAjB,C;;;;;;;;ACzVA;;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,WAASC,UAAT,CAAoBqY,KAApB,EAA2BG,GAA3B,EAAgCJ,IAAhC,EAAsC8B,UAAtC,EAAkD;AAChD;AACA,SAAK6L,MAAL,GAAc,CAAd;AACA,SAAKC,IAAL,GAAY,CAAZ;AACA,SAAKC,KAAL,GAAa,CAAb;AACA,SAAK/L,UAAL,GAAkB,IAAlB;AACA,SAAKgM,SAAL,GAAiB,CAAjB;;AAEA,SAAKC,QAAL,GAAgB,CAAhB;AACA,SAAKC,QAAL,CAAc/N,KAAd,EAAqBG,GAArB,EAA0BJ,IAA1B,EAAgC8B,UAAhC;AACD;;AAGD;;;;;AAKAla,aAAWyC,SAAX,CAAqB4jB,SAArB,GAAiC,UAASnnB,CAAT,EAAY;AAC3C,WAAO,CAAC1Q,MAAMumB,WAAW7V,CAAX,CAAN,CAAD,IAAyBonB,SAASpnB,CAAT,CAAhC;AACD,GAFD;;AAKA;;;;;;;;;AASAc,aAAWyC,SAAX,CAAqB2jB,QAArB,GAAgC,UAAS/N,KAAT,EAAgBG,GAAhB,EAAqBJ,IAArB,EAA2B8B,UAA3B,EAAuC;AACrE,QAAI,CAAC,KAAKmM,SAAL,CAAehO,KAAf,CAAL,EAA4B;AAC1B,YAAM,IAAIxoB,KAAJ,CAAU,gDAAgDwoB,KAA1D,CAAN;AACD;AACD,QAAI,CAAC,KAAKgO,SAAL,CAAe7N,GAAf,CAAL,EAA0B;AACxB,YAAM,IAAI3oB,KAAJ,CAAU,8CAA8CwoB,KAAxD,CAAN;AACD;AACD,QAAI,CAAC,KAAKgO,SAAL,CAAejO,IAAf,CAAL,EAA2B;AACzB,YAAM,IAAIvoB,KAAJ,CAAU,+CAA+CwoB,KAAzD,CAAN;AACD;;AAED,SAAK0N,MAAL,GAAc1N,QAAQA,KAAR,GAAgB,CAA9B;AACA,SAAK2N,IAAL,GAAYxN,MAAMA,GAAN,GAAY,CAAxB;;AAEA,SAAK+N,OAAL,CAAanO,IAAb,EAAmB8B,UAAnB;AACD,GAfD;;AAiBA;;;;;;AAMAla,aAAWyC,SAAX,CAAqB8jB,OAArB,GAA+B,UAASnO,IAAT,EAAe8B,UAAf,EAA2B;AACxD,QAAI9B,SAASjpB,SAAT,IAAsBipB,QAAQ,CAAlC,EACE;;AAEF,QAAI8B,eAAe/qB,SAAnB,EACE,KAAK+qB,UAAL,GAAkBA,UAAlB;;AAEF,QAAI,KAAKA,UAAL,KAAoB,IAAxB,EACE,KAAK+L,KAAL,GAAajmB,WAAWwmB,mBAAX,CAA+BpO,IAA/B,CAAb,CADF,KAGE,KAAK6N,KAAL,GAAa7N,IAAb;AACH,GAXD;;AAaA;;;;;;;AAOApY,aAAWwmB,mBAAX,GAAiC,UAAUpO,IAAV,EAAgB;AAC/C,QAAIqO,QAAQ,SAARA,KAAQ,CAAUvlB,CAAV,EAAa;AAAC,aAAOlT,KAAK04B,GAAL,CAASxlB,CAAT,IAAclT,KAAK24B,IAA1B;AAAgC,KAA1D;;AAEA;AACA,QAAIC,QAAQ54B,KAAK64B,GAAL,CAAS,EAAT,EAAa74B,KAAK0xB,KAAL,CAAW+G,MAAMrO,IAAN,CAAX,CAAb,CAAZ;AAAA,QACI0O,QAAQ,IAAI94B,KAAK64B,GAAL,CAAS,EAAT,EAAa74B,KAAK0xB,KAAL,CAAW+G,MAAMrO,OAAO,CAAb,CAAX,CAAb,CADhB;AAAA,QAEI2O,QAAQ,IAAI/4B,KAAK64B,GAAL,CAAS,EAAT,EAAa74B,KAAK0xB,KAAL,CAAW+G,MAAMrO,OAAO,CAAb,CAAX,CAAb,CAFhB;;AAIA;AACA,QAAI8B,aAAa0M,KAAjB;AACA,QAAI54B,KAAKutB,GAAL,CAASuL,QAAQ1O,IAAjB,KAA0BpqB,KAAKutB,GAAL,CAASrB,aAAa9B,IAAtB,CAA9B,EAA2D8B,aAAa4M,KAAb;AAC3D,QAAI94B,KAAKutB,GAAL,CAASwL,QAAQ3O,IAAjB,KAA0BpqB,KAAKutB,GAAL,CAASrB,aAAa9B,IAAtB,CAA9B,EAA2D8B,aAAa6M,KAAb;;AAE3D;AACA,QAAI7M,cAAc,CAAlB,EAAqB;AACnBA,mBAAa,CAAb;AACD;;AAED,WAAOA,UAAP;AACD,GAnBD;;AAqBA;;;;AAIAla,aAAWyC,SAAX,CAAqBgW,UAArB,GAAkC,YAAY;AAC5C,WAAO1D,WAAW,KAAKoR,QAAL,CAAca,WAAd,CAA0B,KAAKd,SAA/B,CAAX,CAAP;AACD,GAFD;;AAIA;;;;AAIAlmB,aAAWyC,SAAX,CAAqBwkB,OAArB,GAA+B,YAAY;AACzC,WAAO,KAAKhB,KAAZ;AACD,GAFD;;AAIA;;;;;;;;;AASAjmB,aAAWyC,SAAX,CAAqB4V,KAArB,GAA6B,UAAS6O,UAAT,EAAqB;AAChD,QAAIA,eAAe/3B,SAAnB,EAA8B;AAC5B+3B,mBAAa,KAAb;AACD;;AAED,SAAKf,QAAL,GAAgB,KAAKJ,MAAL,GAAc,KAAKA,MAAL,GAAc,KAAKE,KAAjD;;AAEA,QAAIiB,UAAJ,EAAgB;AACd,UAAI,KAAKzO,UAAL,KAAoB,KAAKsN,MAA7B,EAAqC;AACnC,aAAKjN,IAAL;AACD;AACF;AACF,GAZD;;AAeA;;;AAGA9Y,aAAWyC,SAAX,CAAqBqW,IAArB,GAA4B,YAAY;AACtC,SAAKqN,QAAL,IAAiB,KAAKF,KAAtB;AACD,GAFD;;AAIA;;;;AAIAjmB,aAAWyC,SAAX,CAAqB+V,GAArB,GAA2B,YAAY;AACrC,WAAQ,KAAK2N,QAAL,GAAgB,KAAKH,IAA7B;AACD,GAFD;;AAIAhpB,SAAOvQ,OAAP,GAAiBuT,UAAjB,C;;;;;;;;AChLA;;;;;;;;;AASA,WAASwI,KAAT,GAAiB;AACf,SAAK5a,GAAL,GAAWuB,SAAX;AACA,SAAKtB,GAAL,GAAWsB,SAAX;AACD;;AAGD;;;;;;;;AAQAqZ,QAAM/F,SAAN,CAAgB8N,MAAhB,GAAyB,UAASrjB,KAAT,EAAgB;AACvC,QAAIA,UAAUiC,SAAd,EAAyB;;AAEzB,QAAI,KAAKvB,GAAL,KAAauB,SAAb,IAA0B,KAAKvB,GAAL,GAAWV,KAAzC,EAAiD;AAC/C,WAAKU,GAAL,GAAWV,KAAX;AACD;;AAED,QAAI,KAAKW,GAAL,KAAasB,SAAb,IAA0B,KAAKtB,GAAL,GAAWX,KAAzC,EAAgD;AAC9C,WAAKW,GAAL,GAAWX,KAAX;AACD;AACF,GAVD;;AAaA;;;;;AAKAsb,QAAM/F,SAAN,CAAgB0kB,OAAhB,GAA0B,UAASza,KAAT,EAAgB;AACvC,SAAKnK,GAAL,CAASmK,MAAM9e,GAAf;AACA,SAAK2U,GAAL,CAASmK,MAAM7e,GAAf;AACF,GAHD;;AAMA;;;;;;;;;;AAUA2a,QAAM/F,SAAN,CAAgBkP,MAAhB,GAAyB,UAASyV,GAAT,EAAc;AACrC,QAAIA,QAAQj4B,SAAZ,EAAuB;AACrB;AACD;;AAED,QAAIk4B,SAAS,KAAKz5B,GAAL,GAAWw5B,GAAxB;AACA,QAAIE,SAAS,KAAKz5B,GAAL,GAAWu5B,GAAxB;;AAEA;AACA;AACA,QAAIC,SAASC,MAAb,EAAqB;AACnB,YAAM,IAAIz3B,KAAJ,CAAU,4CAAV,CAAN;AACD;;AAED,SAAKjC,GAAL,GAAWy5B,MAAX;AACA,SAAKx5B,GAAL,GAAWy5B,MAAX;AACD,GAhBD;;AAmBA;;;;;AAKA9e,QAAM/F,SAAN,CAAgBiK,KAAhB,GAAwB,YAAW;AACjC,WAAO,KAAK7e,GAAL,GAAW,KAAKD,GAAvB;AACD,GAFD;;AAKA;;;;;AAKA4a,QAAM/F,SAAN,CAAgBsK,MAAhB,GAAyB,YAAW;AACnC,WAAO,CAAC,KAAKnf,GAAL,GAAW,KAAKC,GAAjB,IAAwB,CAA/B;AACA,GAFD;;AAKAmP,SAAOvQ,OAAP,GAAiB+b,KAAjB,C;;;;;;;;;;;;;;AChGA;AACA;AACA;AACA;AACA,MAAI7I,SAAU,mBAAApT,CAAQ,EAAR,CAAd;AACA,MAAIuT,UAAU,mBAAAvT,CAAQ,EAAR,CAAd;;AAGA;AACA,MAAImc,QAAQ;AACV2I,SAAU,CADA;AAEVX,cAAU,CAFA;AAGVC,aAAU,CAHA;AAIVxG,SAAU,CAJA;AAKVuL,aAAU,CALA;AAMV9E,cAAU,CANA;AAOVC,aAAU,CAPA;AAQV8B,UAAU,CARA;AASVS,UAAU,CATA;AAUVR,aAAU;AAVA,GAAZ;;AAcA;AACA,MAAI2U,YAAY;AACd,WAAa7e,MAAMyB,GADL;AAEd,gBAAazB,MAAMgN,OAFL;AAGd,iBAAahN,MAAMkI,QAHL;AAId,gBAAalI,MAAMmI,OAJL;AAKd,YAAanI,MAAM0K,IALL;AAMd,YAAa1K,MAAMiK,IANL;AAOd,eAAajK,MAAMkK,OAPL;AAQd,WAAalK,MAAM2I,GARL;AASd,iBAAa3I,MAAMgI,QATL;AAUd,gBAAahI,MAAMiI;AAVL,GAAhB;;AAcA;;;;;;AAMA,MAAI6W,aAAa,CACf,OADe,EAEf,QAFe,EAGf,aAHe,EAIf,aAJe,EAKf,QALe,EAMf,QANe,EAOf,QAPe,EAQf,aARe,EASf,aATe,EAUf,aAVe,EAWf,UAXe,EAYf,iBAZe,EAaf,YAbe,EAcf,iBAde,EAef,eAfe,EAgBf,cAhBe,EAiBf,uBAjBe,EAkBf,mBAlBe,EAmBf,kBAnBe,EAoBf,oBApBe,EAqBf,WArBe,EAsBf,WAtBe,EAuBf,SAvBe,EAwBf,SAxBe,CAAjB;;AA4BA;;;;;;AAMA,MAAIC,qBAAqB,CACvB,WADuB,EAEvB,WAFuB,EAGvB,UAHuB,EAIvB,UAJuB,EAKvB,MALuB,EAMvB,MANuB,EAOvB,OAPuB,EAQvB,MARuB,EASvB,MATuB,EAUvB,OAVuB,EAWvB,MAXuB,EAYvB,MAZuB,EAavB,OAbuB,CAAzB;;AAiBA;AACA,MAAI7e,WAAWzZ,SAAf;;AAGA;;;;;AAKA,WAASu4B,OAAT,CAAiB94B,GAAjB,EAAsB;AACpB,SAAI,IAAIC,IAAR,IAAgBD,GAAhB,EAAqB;AACnB,UAAIA,IAAIE,cAAJ,CAAmBD,IAAnB,CAAJ,EACE,OAAO,KAAP;AACH;;AAED,WAAO,IAAP;AACD;;AAID;;;;;AAKA,WAAS84B,UAAT,CAAoBC,GAApB,EAAyB;AACvB,QAAIA,QAAQz4B,SAAR,IAAqBy4B,QAAQ,EAA7B,IAAmC,OAAOA,GAAP,IAAc,QAArD,EAA+D;AAC7D,aAAOA,GAAP;AACD;;AAED,WAAOA,IAAI9S,MAAJ,CAAW,CAAX,EAAc+S,WAAd,KAA8BD,IAAI3xB,KAAJ,CAAU,CAAV,CAArC;AACD;;AAGD;;;AAGA,WAAS6xB,eAAT,CAAyBC,MAAzB,EAAiCC,SAAjC,EAA4C;AAC1C,QAAID,WAAW54B,SAAX,IAAwB44B,WAAW,EAAvC,EAA2C;AACzC,aAAOC,SAAP;AACD;;AAED,WAAOD,SAASJ,WAAWK,SAAX,CAAhB;AACD;;AAGD;;;;;;;;;;;;;;AAcA,WAASC,SAAT,CAAmBC,GAAnB,EAAwBC,GAAxB,EAA6BnvB,MAA7B,EAAqC+uB,MAArC,EAA6C;AAC3C,QAAIK,MAAJ;AACA,QAAIC,MAAJ;;AAEA,SAAK,IAAIh5B,CAAT,IAAc2J,MAAd,EAAsB;AACpBovB,eAAUpvB,OAAO3J,CAAP,CAAV;AACAg5B,eAAUP,gBAAgBC,MAAhB,EAAwBK,MAAxB,CAAV;;AAEAD,UAAIE,MAAJ,IAAcH,IAAIE,MAAJ,CAAd;AACD;AACF;;AAGD;;;;;;;;;AASA,WAASE,QAAT,CAAkBJ,GAAlB,EAAuBC,GAAvB,EAA4BnvB,MAA5B,EAAoC+uB,MAApC,EAA4C;AAC1C,QAAIK,MAAJ;AACA,QAAIC,MAAJ;;AAEA,SAAK,IAAIh5B,CAAT,IAAc2J,MAAd,EAAsB;AACpBovB,eAAUpvB,OAAO3J,CAAP,CAAV;AACA,UAAI64B,IAAIE,MAAJ,MAAgBj5B,SAApB,EAA+B;;AAE/Bk5B,eAAUP,gBAAgBC,MAAhB,EAAwBK,MAAxB,CAAV;;AAEAD,UAAIE,MAAJ,IAAcH,IAAIE,MAAJ,CAAd;AACD;AACF;;AAGD;;;;;;;;;AASA,WAASlc,WAAT,CAAqBgc,GAArB,EAA0BC,GAA1B,EAA+B;AAC7B,QAAID,QAAQ/4B,SAAR,IAAqBu4B,QAAQQ,GAAR,CAAzB,EAAuC;AACrC,YAAM,IAAIr4B,KAAJ,CAAU,oBAAV,CAAN;AACD;AACD,QAAIs4B,QAAQh5B,SAAZ,EAAuB;AACrB,YAAM,IAAIU,KAAJ,CAAU,eAAV,CAAN;AACD;;AAED;AACA+Y,eAAWsf,GAAX;;AAEA;AACAD,cAAUC,GAAV,EAAeC,GAAf,EAAoBX,UAApB;AACAS,cAAUC,GAAV,EAAeC,GAAf,EAAoBV,kBAApB,EAAwC,SAAxC;;AAEA;AACAc,uBAAmBL,GAAnB,EAAwBC,GAAxB;;AAEA;AACAA,QAAIhR,MAAJ,GAAa,EAAb,CAnB6B,CAmBK;AAClCgR,QAAInL,cAAJ,GAAqB,KAArB,CApB6B,CAoBK;AAClCmL,QAAI/H,WAAJ,GAAkB,KAAlB;AACA+H,QAAIrI,gBAAJ,GAAuB,IAAvB;AACAqI,QAAIrZ,GAAJ,GAAU,IAAIhP,OAAJ,CAAY,CAAZ,EAAe,CAAf,EAAkB,CAAC,CAAnB,CAAV,CAvB6B,CAuBK;AACnC;;AAGD,WAAS0C,UAAT,CAAoB9I,OAApB,EAA6ByuB,GAA7B,EAAkC;AAChC,QAAIzuB,YAAYvK,SAAhB,EAA2B;AACzB;AACD;AACD,QAAIg5B,QAAQh5B,SAAZ,EAAuB;AACrB,YAAM,IAAIU,KAAJ,CAAU,eAAV,CAAN;AACD;;AAED,QAAI+Y,aAAazZ,SAAb,IAA0Bu4B,QAAQ9e,QAAR,CAA9B,EAAiD;AAC/C,YAAM,IAAI/Y,KAAJ,CAAU,sCAAV,CAAN;AACD;;AAGD;AACAy4B,aAAS5uB,OAAT,EAAkByuB,GAAlB,EAAuBX,UAAvB;AACAc,aAAS5uB,OAAT,EAAkByuB,GAAlB,EAAuBV,kBAAvB,EAA2C,SAA3C;;AAEA;AACAc,uBAAmB7uB,OAAnB,EAA4ByuB,GAA5B;AACD;;AAGD;;;;;AAKA,WAASI,kBAAT,CAA4BL,GAA5B,EAAiCC,GAAjC,EAAsC;AACpC,QAAID,IAAI5d,eAAJ,KAAwBnb,SAA5B,EAAuC;AACrCq5B,yBAAmBN,IAAI5d,eAAvB,EAAwC6d,GAAxC;AACD;;AAEDM,iBAAaP,IAAI3d,SAAjB,EAA4B4d,GAA5B;AACAO,aAASR,IAAIpwB,KAAb,EAAoBqwB,GAApB;AACAQ,kBAAcT,IAAI7d,UAAlB,EAA8B8d,GAA9B;AACApF,sBAAkBmF,IAAIvd,cAAtB,EAAsCwd,GAAtC;;AAEA;AACA;AACA,QAAID,IAAI9d,OAAJ,KAAgBjb,SAApB,EAA+B;AAC7Bg5B,UAAI/H,WAAJ,GAAkB8H,IAAI9d,OAAtB;AACD;AACD,QAAI8d,IAAIhU,OAAJ,IAAe/kB,SAAnB,EAA8B;AAC5Bg5B,UAAIrI,gBAAJ,GAAuBoI,IAAIhU,OAA3B;AACD;AACF;;AAGD;;;;;;AAMA,WAASyU,aAAT,CAAuBte,UAAvB,EAAmC8d,GAAnC,EAAwC;AACtC,QAAI9d,eAAelb,SAAnB,EAA8B;AAC5B;AACA,UAAIy5B,kBAAmBhgB,SAASyB,UAAT,KAAwBlb,SAA/C;;AAEA,UAAIy5B,eAAJ,EAAqB;AACnB;AACA,YAAIC,qBAAqBV,IAAIrwB,KAAJ,KAAc4Q,MAAMkI,QAApB,IACAuX,IAAIrwB,KAAJ,KAAc4Q,MAAMmI,OAD7C;;AAGAsX,YAAI9d,UAAJ,GAAiBwe,kBAAjB;AACD,OAND,MAMO;AACJ;AACF;AACF,KAbD,MAaO;AACLV,UAAI9d,UAAJ,GAAiBA,UAAjB;AACD;AACF;;AAGD;;;;;;AAMA,WAASye,oBAAT,CAA8BC,SAA9B,EAAyC;AACvC,QAAIC,SAASzB,UAAUwB,SAAV,CAAb;;AAEA,QAAIC,WAAW75B,SAAf,EAA0B;AACxB,aAAO,CAAC,CAAR;AACD;;AAED,WAAO65B,MAAP;AACD;;AAGD;;;;;AAKA,WAASC,gBAAT,CAA0BnxB,KAA1B,EAAiC;AAC/B,QAAIoxB,QAAQ,KAAZ;;AAEA,SAAK,IAAIhqB,CAAT,IAAcwJ,KAAd,EAAqB;AACnB,UAAIA,MAAMxJ,CAAN,MAAapH,KAAjB,EAAwB;AACtBoxB,gBAAQ,IAAR;AACA;AACD;AACF;;AAED,WAAOA,KAAP;AACD;;AAGD,WAASR,QAAT,CAAkB5wB,KAAlB,EAAyBqwB,GAAzB,EAA8B;AAC5B,QAAIrwB,UAAU3I,SAAd,EAAyB;AACvB,aADuB,CACb;AACX;;AAED,QAAIg6B,WAAJ;;AAEA,QAAI,OAAOrxB,KAAP,KAAiB,QAArB,EAA+B;AAC7BqxB,oBAAcL,qBAAqBhxB,KAArB,CAAd;;AAEA,UAAIqxB,gBAAgB,CAAC,CAArB,EAAyB;AACvB,cAAM,IAAIt5B,KAAJ,CAAU,aAAaiI,KAAb,GAAqB,eAA/B,CAAN;AACD;AACF,KAND,MAMO;AACL;AACA,UAAI,CAACmxB,iBAAiBnxB,KAAjB,CAAL,EAA8B;AAC5B,cAAM,IAAIjI,KAAJ,CAAU,aAAaiI,KAAb,GAAqB,eAA/B,CAAN;AACD;;AAEDqxB,oBAAcrxB,KAAd;AACD;;AAEDqwB,QAAIrwB,KAAJ,GAAYqxB,WAAZ;AACD;;AAGD;;;;AAIA,WAASX,kBAAT,CAA4Ble,eAA5B,EAA6C6d,GAA7C,EAAkD;AAChD,QAAI3d,OAAO,OAAX;AACA,QAAIC,SAAS,MAAb;AACA,QAAIC,cAAc,CAAlB;;AAEA,QAAI,OAAOJ,eAAP,KAA4B,QAAhC,EAA0C;AACxCE,aAAOF,eAAP;AACAG,eAAS,MAAT;AACAC,oBAAc,CAAd;AACD,KAJD,MAKK,IAAI,QAAOJ,eAAP,0DAAOA,eAAP,OAA4B,QAAhC,EAA0C;AAC7C,UAAIA,gBAAgBE,IAAhB,KAAyBrb,SAA7B,EAA2Cqb,OAAOF,gBAAgBE,IAAvB;AAC3C,UAAIF,gBAAgBG,MAAhB,KAA2Btb,SAA/B,EAA6Csb,SAASH,gBAAgBG,MAAzB;AAC7C,UAAIH,gBAAgBI,WAAhB,KAAgCvb,SAApC,EAA+Cub,cAAcJ,gBAAgBI,WAA9B;AAChD,KAJI,MAKA;AACH,YAAM,IAAI7a,KAAJ,CAAU,qCAAV,CAAN;AACD;;AAEDs4B,QAAI9Y,KAAJ,CAAUvX,KAAV,CAAgBwS,eAAhB,GAAkCE,IAAlC;AACA2d,QAAI9Y,KAAJ,CAAUvX,KAAV,CAAgB8jB,WAAhB,GAA8BnR,MAA9B;AACA0d,QAAI9Y,KAAJ,CAAUvX,KAAV,CAAgBsxB,WAAhB,GAA8B1e,cAAc,IAA5C;AACAyd,QAAI9Y,KAAJ,CAAUvX,KAAV,CAAgBuxB,WAAhB,GAA8B,OAA9B;AACD;;AAGD,WAASZ,YAAT,CAAsBle,SAAtB,EAAiC4d,GAAjC,EAAsC;AACpC,QAAI5d,cAAcpb,SAAlB,EAA6B;AAC3B,aAD2B,CAChB;AACZ;;AAED,QAAIg5B,IAAI5d,SAAJ,KAAkBpb,SAAtB,EAAiC;AAC/Bg5B,UAAI5d,SAAJ,GAAgB,EAAhB;AACD;;AAED,QAAI,OAAOA,SAAP,KAAqB,QAAzB,EAAmC;AACjC4d,UAAI5d,SAAJ,CAAcC,IAAd,GAAuBD,SAAvB;AACA4d,UAAI5d,SAAJ,CAAcE,MAAd,GAAuBF,SAAvB;AACD,KAHD,MAIK;AACH,UAAIA,UAAUC,IAAd,EAAoB;AAClB2d,YAAI5d,SAAJ,CAAcC,IAAd,GAAqBD,UAAUC,IAA/B;AACD;AACD,UAAID,UAAUE,MAAd,EAAsB;AACpB0d,YAAI5d,SAAJ,CAAcE,MAAd,GAAuBF,UAAUE,MAAjC;AACD;AACD,UAAIF,UAAUG,WAAV,KAA0Bvb,SAA9B,EAAyC;AACvCg5B,YAAI5d,SAAJ,CAAcG,WAAd,GAA4BH,UAAUG,WAAtC;AACD;AACF;AACF;;AAGD,WAASqY,iBAAT,CAA2BpY,cAA3B,EAA2Cwd,GAA3C,EAAgD;AAC9C,QAAImB,SAAS3e,cAAb;AACA,QAAI2e,WAAWn6B,SAAf,EAA0B;AACxB;AACD;;AAED,QAAIg5B,IAAIlb,MAAJ,KAAe9d,SAAnB,EAA8B;AAC5Bg5B,UAAIlb,MAAJ,GAAa,IAAItN,MAAJ,EAAb;AACD;;AAEDwoB,QAAIlb,MAAJ,CAAW0S,cAAX,CAA0B2J,OAAO1e,UAAjC,EAA6C0e,OAAOze,QAApD;AACAsd,QAAIlb,MAAJ,CAAWgU,YAAX,CAAwBqI,OAAOxe,QAA/B;AACD;;AAGD9N,SAAOvQ,OAAP,CAAeic,KAAf,GAAmCA,KAAnC;AACA1L,SAAOvQ,OAAP,CAAeyf,WAAf,GAAmCA,WAAnC;AACAlP,SAAOvQ,OAAP,CAAe+V,UAAf,GAAmCA,UAAnC;AACAxF,SAAOvQ,OAAP,CAAes2B,iBAAf,GAAmCA,iBAAnC,C;;;;;;;;ACvbA;AACA;AACA,MAAI,OAAOlvB,MAAP,KAAkB,WAAtB,EAAmC;AACjC,QAAI01B,cAAc,mBAAAh9B,CAAQ,GAAR,CAAlB;AACA,QAAI0T,SAASpM,OAAO,QAAP,KAAoB,mBAAAtH,CAAQ,GAAR,CAAjC;AACAyQ,WAAOvQ,OAAP,GAAiB88B,YAAYtpB,MAAZ,EAAoB;AACnCtM,sBAAgB;AADmB,KAApB,CAAjB;AAGD,GAND,MAOK;AACHqJ,WAAOvQ,OAAP,GAAiB,YAAY;AAC3B,YAAMoD,MAAM,2DAAN,CAAN;AACD,KAFD;AAGD,G;;;;;;ACbD;;AAEA;AACA;AACA;AACA;AACA,KAAG;AACH;AACA;AACA;AACA;AACA,KAAG;AACH;AACA;AACA;AACA,GAAC;AACD,4BAA0B;;AAE1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA4D,qBAAqB;AACjF;AACA,eAAa,eAAe;AAC5B,eAAa,OAAO;AACpB;AACA;AACA;AACA,gBAAc,eAAe;AAC7B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL,iBAAe,kCAAkC;AACjD;;AAEA;AACA;AACA,iBAAe,OAAO;AACtB,iBAAe,SAAS;AACxB,mBAAiB,eAAe;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAAO;;AAEP;AACA;;AAEA;AACA;AACA,iBAAe,OAAO;AACtB,iBAAe,SAAS;AACxB;AACA;AACA,mBAAiB,eAAe;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAW;;AAEX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAO;;AAEP;AACA;;AAEA;AACA;AACA,iBAAe,OAAO;AACtB,iBAAe,MAAM;AACrB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,0BAAwB,uBAAuB;AAC/C;AACA,2CAAyC,kCAAkC;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAC;;;;;;;ACtOD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,aAAW,SAAS;AACpB,aAAW,OAAO;AAClB,aAAW,OAAO;AAClB,eAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAW,QAAQ;AACnB,aAAW,OAAO;AAClB,aAAW,OAAO;AAClB,eAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,OAAO;AAClB,aAAW,SAAS;AACpB,aAAW,OAAO;AAClB;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,SAAS;AACpB,aAAW,OAAO;AAClB,aAAW,OAAO;AAClB,eAAa,SAAS;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAqD,UAAU;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAW,OAAO;AAClB,aAAW,UAAU;AACrB,eAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,6BAA2B,0BAA0B;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAC;AACD;AACA;;AAEA;AACA;AACA;AACA,aAAW,OAAO;AAClB,aAAW,OAAO;AAClB,aAAW,QAAQ;AACnB,eAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAC;;AAED;AACA;AACA;AACA,aAAW,OAAO;AAClB,aAAW,OAAO;AAClB,eAAa,OAAO;AACpB;AACA;AACA;AACA,GAAC;;AAED;AACA;AACA,aAAW,SAAS;AACpB,aAAW,SAAS;AACpB,aAAW,OAAO;AAClB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,SAAS;AACpB,aAAW,OAAO;AAClB,eAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAW,iBAAiB;AAC5B,aAAW,MAAM;AACjB,eAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,EAAE;AACb,aAAW,EAAE;AACb,eAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,YAAY;AACvB,aAAW,OAAO;AAClB,aAAW,SAAS;AACpB;AACA;AACA;AACA;AACA,OAAK;AACL;;AAEA;AACA;AACA,aAAW,YAAY;AACvB,aAAW,OAAO;AAClB,aAAW,SAAS;AACpB;AACA;AACA;AACA;AACA,OAAK;AACL;;AAEA;AACA;AACA;AACA,aAAW,YAAY;AACvB,aAAW,YAAY;AACvB,cAAY,QAAQ;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,OAAO;AAClB,aAAW,OAAO;AAClB,eAAa,QAAQ;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,OAAO;AAClB,eAAa,MAAM;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,MAAM;AACjB,aAAW,OAAO;AAClB,aAAW,OAAO;AAClB,cAAY,eAAe;AAC3B;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,OAAO;AAClB,eAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,MAAM,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK;AAC3C,aAAW,OAAO;AAClB,aAAW,QAAQ;AACnB,eAAa,MAAM,GAAG,KAAK,EAAE,KAAK;AAClC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA,eAAa;AACb;AACA;;AAEA;AACA;;AAEA;AACA;AACA,aAAW,OAAO;AAClB,aAAW,OAAO;AAClB,eAAa,iBAAiB;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,eAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,YAAY;AACvB,eAAa;AACb;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,aAAW,QAAQ;AACnB,aAAW,SAAS;AACpB,eAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,2BAAyB,EAAE;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAW,OAAO;AAClB,eAAa;AACb;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAK;AACL;AACA,OAAK;AACL;AACA,OAAK;AACL;AACA,OAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,QAAQ;AACnB,aAAW,OAAO;AAClB,aAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,aAAW,OAAO;AAClB,aAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAK;AACL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,aAAW,OAAO;AAClB,aAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,OAAO;AAClB,eAAa,OAAO;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,MAAM;AACjB,cAAY,OAAO;AACnB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,OAAO;AAClB,aAAW,OAAO;AAClB,aAAW,OAAO;AAClB,cAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,OAAO;AAClB,aAAW,OAAO;AAClB,cAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,OAAO,KAAK;AACvB,aAAW,OAAO,KAAK;AACvB,aAAW,MAAM;AACjB,cAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,aAAW,OAAO;AAClB,aAAW,OAAO;AAClB,aAAW,MAAM;AACjB,cAAY,OAAO;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,MAAM;AACjB,aAAW,MAAM;AACjB,cAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAW,MAAM;AACjB,aAAW,MAAM;AACjB,cAAY,OAAO;AACnB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,2BAAyB;;AAEzB;AACA;;AAEA;AACA;AACA;AACA,iBAAe,OAAO;AACtB;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA,GAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,iBAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAS;;AAET;AACA;AACA;AACA;AACA;AACA,GAAC;;AAED;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA,GAAC;;AAED;AACA,YAAU;AACV,aAAW,OAAO;AAClB,aAAW,OAAO;AAClB,eAAa,gBAAgB;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA,GAAC;;AAED;AACA,YAAU;AACV,aAAW,OAAO;AAClB,aAAW,OAAO;AAClB,eAAa,gBAAgB;AAC7B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAe,OAAO;AACtB,iBAAe,OAAO;AACtB,iBAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAS;AACT;AACA;;AAEA;AACA,OAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAC;;AAED;AACA;AACA;AACA;AACA,OAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA,2BAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,qBAAmB,6BAA6B;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,iDAA+C;AAC/C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAW,QAAQ;AACnB,aAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA,mBAAiB,OAAO;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA,OAAK;;AAEL;AACA;AACA,iBAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA,iBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,OAAO;AAClB,eAAa;AACb;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAK;AACL;AACA;;AAEA;AACA,+BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,aAAW,OAAO;AAClB;AACA;AACA,8BAA4B,8BAA8B;;AAE1D;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAc;AACd;AACA,kBAAgB;;AAEhB;AACA;AACA,iBAAe,OAAO;AACtB,kBAAgB;AAChB;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA,iBAAe,WAAW;AAC1B,mBAAiB,WAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA,iBAAe,WAAW;AAC1B,mBAAiB,WAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA,iBAAe,WAAW;AAC1B,mBAAiB,WAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA,iBAAe,WAAW;AAC1B,mBAAiB,WAAW;AAC5B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA,mBAAiB;AACjB;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA,iBAAe,WAAW;AAC1B,mBAAiB;AACjB;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA,iBAAe,OAAO;AACtB;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,mCAAiC;;AAEjC,sCAAoC;AACpC;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA;AACA,iBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA,mBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA,iBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA,wCAAsC;;AAEtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA;AACA,iBAAe,OAAO;AACtB,mBAAiB,MAAM;AACvB;AACA,oCAAkC,EAAE;;AAEpC;AACA;AACA;AACA,mBAAiB;AACjB;AACA,kCAAgC,EAAE;;AAElC;AACA;AACA;AACA;AACA;AACA,yBAAuB;AACvB;;AAEA;AACA;AACA,aAAW,MAAM;AACjB,eAAa,OAAO;AACpB;AACA;AACA;AACA;AACA,OAAK;AACL;AACA,OAAK;AACL;AACA,OAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,MAAM;AACjB,eAAa;AACb;AACA;AACA;AACA;AACA,OAAK;AACL;AACA,OAAK;AACL;AACA,OAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,kBAAkB;AAC7B,aAAW,WAAW;AACtB,eAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAkB;AAClB;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA,iBAAe,OAAO;AACtB,mBAAiB,QAAQ;AACzB;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA,iBAAe,OAAO;AACtB,mBAAiB,EAAE;AACnB;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA,eAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,GAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA,OAAK;;AAEL;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA;AACA;AACA,eAAa;AACb,WAAS;AACT;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAS;AACT;AACA;AACA;AACA;AACA,GAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA;AACA,GAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA,OAAK;;AAEL;AACA;AACA;;AAEA;AACA;AACA,WAAS;AACT;AACA,WAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA,OAAK;;AAEL;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,eAAa;AACb;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAiB;AACjB;AACA;AACA;AACA,uBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA,WAAS;AACT;AACA,OAAK;;AAEL;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;AACA,GAAC;;AAED;AACA;AACA,aAAW,YAAY;AACvB,aAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,aAAW;AACX;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAc;AACd;AACA;AACA;;AAEA;AACA,gBAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAc;AACd;AACA;AACA;;AAEA;AACA;AACA,gBAAc;AACd;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAc;AACd;AACA;AACA;AACA,8BAA4B,cAAc;AAC1C,6BAA2B,cAAc;AACzC,6BAA2B,gCAAgC;AAC3D,2BAAyB,gCAAgC;AACzD;AACA,2BAAyB,4BAA4B;AACrD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA,oBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,oBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA,oBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA,oBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAkB;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,aAAW,YAAY;AACvB,aAAW,OAAO;AAClB;AACA;AACA;AACA,8BAA4B,gCAAgC;;AAE5D;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,OAAK;AACL;;AAEA;AACA;AACA;AACA,iBAAe,OAAO;AACtB,mBAAiB;AACjB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA;AACA,iBAAe,QAAQ;AACvB;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA;AACA,iBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAkE;AAClE;AACA,eAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA,iBAAe,kBAAkB;AACjC,mBAAiB;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAuB,wBAAwB;AAC/C;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA,iBAAe,WAAW;AAC1B,mBAAiB;AACjB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,OAAK;;AAEL;AACA;AACA,iBAAe,kBAAkB;AACjC,mBAAiB;AACjB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAK;;AAEL;AACA;AACA,iBAAe,OAAO;AACtB,iBAAe,SAAS;AACxB,mBAAiB,aAAa;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA,OAAK;;AAEL;AACA;AACA,iBAAe,OAAO;AACtB,iBAAe,SAAS;AACxB,mBAAiB,aAAa;AAC9B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAa;AACb;AACA;AACA,WAAS;AACT;AACA,OAAK;;AAEL;AACA;AACA,iBAAe,OAAO;AACtB,iBAAe,OAAO;AACtB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,QAAQ;AACnB,aAAW,QAAQ;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAS;AACT;AACA;AACA,OAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA,aAAW,OAAO;AAClB,aAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAC;;AAED;AACA;AACA,qGAAmG,GAAG;AACtG;;AAEA;AACA;AACA;AACA,OAAK;AACL,GAAC;AACD;AACA,GAAC;AACD;AACA;;AAEA,GAAC;;;;;;;ACllFD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAG;AACH;AACA;AACA;AACA;AACA,KAAG;AACH;AACA;AACA;AACA,GAAC;;AAED;AACA;;AAEA;;AAEA;AACA,oBAAkB,UAAU;AAC5B;AACA;;AAEA;AACA,kBAAgB,UAAU,OAAO,iCAAiC;AAClE;AACA,kBAAgB,SAAS,OAAO,iCAAiC;AACjE;AACA,iBAAe,SAAS,SAAS,iBAAiB;AAClD;AACA,iBAAe,UAAU,SAAS,kBAAkB;AACpD;AACA,iBAAe,SAAS,SAAS,oBAAoB;;AAErD;AACA,uBAAqB;AACrB,uBAAqB;AACrB,uBAAqB;AACrB,uBAAqB;AACrB,uBAAqB;AACrB;AACA,wBAAsB;AACtB,wBAAsB;AACtB,wBAAsB;AACtB,wBAAsB;AACtB;AACA,wBAAsB;AACtB,wBAAsB;AACtB,wBAAsB;AACtB,wBAAsB;AACtB,4BAA0B;AAC1B,4BAA0B;AAC1B,4BAA0B;AAC1B,4BAA0B;AAC1B,4BAA0B;AAC1B,4BAA0B;AAC1B,4BAA0B;AAC1B;AACA,wBAAsB;AACtB,wBAAsB;AACtB,wBAAsB;AACtB,wBAAsB;;;;AAItB,kCAAgC;AAChC,gCAA8B;;AAE9B;AAC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","file":"vis.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"vis\"] = factory();\n\telse\n\t\troot[\"vis\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap eca1787db4da1a54ed82","var util = require('./lib/util');\n\n// Graph3d\nutil.extend(exports, require('./index-graph3d'));\n\n// Timeline & Graph2d\nutil.extend(exports, require('./index-timeline-graph2d'));\n\n// Network\nutil.extend(exports, require('./index-network'));\n\n\n\n// WEBPACK FOOTER //\n// ./index.js","// utility functions\n\n// first check if moment.js is already loaded in the browser window, if so,\n// use this instance. Else, load via commonjs.\n\n\nvar moment = require('./module/moment');\nvar uuid = require('./module/uuid');\n\n/**\n * Test whether given object is a number\n * @param {*} object\n * @return {Boolean} isNumber\n */\nexports.isNumber = function (object) {\n  return (object instanceof Number || typeof object == 'number');\n};\n\n/**\n * Censors object elements containing dom elements\n * @param {*} object\n * @return {Object} object without elements\n */\nexports.elementsCensor = function (object) {\n  if (!object) return;\n  var replacer = function(key, value) {\n    if (value instanceof Element) {\n      return \"DOM Element\";\n    } else {\n      return value;\n    }\n  }\n  return JSON.parse(JSON.stringify(object, replacer))\n}\n\n\n/**\n * Remove everything in the DOM object\n * @param DOMobject\n */\nexports.recursiveDOMDelete = function (DOMobject) {\n  if (DOMobject) {\n    while (DOMobject.hasChildNodes() === true) {\n      exports.recursiveDOMDelete(DOMobject.firstChild);\n      DOMobject.removeChild(DOMobject.firstChild);\n    }\n  }\n};\n\n/**\n * this function gives you a range between 0 and 1 based on the min and max values in the set, the total sum of all values and the current value.\n *\n * @param min\n * @param max\n * @param total\n * @param value\n * @returns {number}\n */\nexports.giveRange = function (min, max, total, value) {\n  if (max == min) {\n    return 0.5;\n  }\n  else {\n    var scale = 1 / (max - min);\n    return Math.max(0, (value - min) * scale);\n  }\n}\n\n/**\n * Test whether given object is a string\n * @param {*} object\n * @return {Boolean} isString\n */\nexports.isString = function (object) {\n  return (object instanceof String || typeof object == 'string');\n};\n\n/**\n * Test whether given object is a Date, or a String containing a Date\n * @param {Date | String} object\n * @return {Boolean} isDate\n */\nexports.isDate = function (object) {\n  if (object instanceof Date) {\n    return true;\n  }\n  else if (exports.isString(object)) {\n    // test whether this string contains a date\n    var match = ASPDateRegex.exec(object);\n    if (match) {\n      return true;\n    }\n    else if (!isNaN(Date.parse(object))) {\n      return true;\n    }\n  }\n\n  return false;\n};\n\n/**\n * Create a semi UUID\n * source: http://stackoverflow.com/a/105074/1262753\n * @return {String} uuid\n */\nexports.randomUUID = function () {\n  return uuid.v4();\n};\n\n/**\n * assign all keys of an object that are not nested objects to a certain value (used for color objects).\n * @param obj\n * @param value\n */\nexports.assignAllKeys = function (obj, value) {\n  for (var prop in obj) {\n    if (obj.hasOwnProperty(prop)) {\n      if (typeof obj[prop] !== 'object') {\n        obj[prop] = value;\n      }\n    }\n  }\n}\n\n\n/**\n * Fill an object with a possibly partially defined other object. Only copies values if the a object has an object requiring values.\n * That means an object is not created on a property if only the b object has it.\n * @param obj\n * @param value\n */\nexports.fillIfDefined = function (a, b, allowDeletion = false) {\n  for (var prop in a) {\n    if (b[prop] !== undefined) {\n      if (typeof b[prop] !== 'object') {\n        if ((b[prop] === undefined || b[prop] === null) && a[prop] !== undefined && allowDeletion === true) {\n          delete a[prop];\n        }\n        else {\n          a[prop] = b[prop];\n        }\n      }\n      else {\n        if (typeof a[prop] === 'object') {\n          exports.fillIfDefined(a[prop], b[prop], allowDeletion);\n        }\n      }\n    }\n  }\n}\n\n\n\n/**\n * Extend object a with the properties of object b or a series of objects\n * Only properties with defined values are copied\n * @param {Object} a\n * @param {... Object} b\n * @return {Object} a\n */\nexports.protoExtend = function (a, b) {\n  for (var i = 1; i < arguments.length; i++) {\n    var other = arguments[i];\n    for (var prop in other) {\n      a[prop] = other[prop];\n    }\n  }\n  return a;\n};\n\n/**\n * Extend object a with the properties of object b or a series of objects\n * Only properties with defined values are copied\n * @param {Object} a\n * @param {... Object} b\n * @return {Object} a\n */\nexports.extend = function (a, b) {\n  for (var i = 1; i < arguments.length; i++) {\n    var other = arguments[i];\n    for (var prop in other) {\n      if (other.hasOwnProperty(prop)) {\n        a[prop] = other[prop];\n      }\n    }\n  }\n  return a;\n};\n\n/**\n * Extend object a with selected properties of object b or a series of objects\n * Only properties with defined values are copied\n * @param {Array.<String>} props\n * @param {Object} a\n * @param {Object} b\n * @return {Object} a\n */\nexports.selectiveExtend = function (props, a, b) {\n  if (!Array.isArray(props)) {\n    throw new Error('Array with property names expected as first argument');\n  }\n\n  for (var i = 2; i < arguments.length; i++) {\n    var other = arguments[i];\n\n    for (var p = 0; p < props.length; p++) {\n      var prop = props[p];\n      if (other.hasOwnProperty(prop)) {\n        a[prop] = other[prop];\n      }\n    }\n  }\n  return a;\n};\n\n/**\n * Extend object a with selected properties of object b or a series of objects\n * Only properties with defined values are copied\n * @param {Array.<String>} props\n * @param {Object} a\n * @param {Object} b\n * @return {Object} a\n */\nexports.selectiveDeepExtend = function (props, a, b, allowDeletion = false) {\n  // TODO: add support for Arrays to deepExtend\n  if (Array.isArray(b)) {\n    throw new TypeError('Arrays are not supported by deepExtend');\n  }\n  for (var i = 2; i < arguments.length; i++) {\n    var other = arguments[i];\n    for (var p = 0; p < props.length; p++) {\n      var prop = props[p];\n      if (other.hasOwnProperty(prop)) {\n        if (b[prop] && b[prop].constructor === Object) {\n          if (a[prop] === undefined) {\n            a[prop] = {};\n          }\n          if (a[prop].constructor === Object) {\n            exports.deepExtend(a[prop], b[prop], false, allowDeletion);\n          }\n          else {\n            if ((b[prop] === null) && a[prop] !== undefined && allowDeletion === true) {\n              delete a[prop];\n            }\n            else {\n              a[prop] = b[prop];\n            }\n          }\n        } else if (Array.isArray(b[prop])) {\n          throw new TypeError('Arrays are not supported by deepExtend');\n        } else {\n          if ((b[prop] === null) && a[prop] !== undefined && allowDeletion === true) {\n            delete a[prop];\n          }\n          else {\n            a[prop] = b[prop];\n          }\n        }\n\n      }\n    }\n  }\n  return a;\n};\n\n/**\n * Extend object a with selected properties of object b or a series of objects\n * Only properties with defined values are copied\n * @param {Array.<String>} props\n * @param {Object} a\n * @param {Object} b\n * @return {Object} a\n */\nexports.selectiveNotDeepExtend = function (props, a, b, allowDeletion = false) {\n  // TODO: add support for Arrays to deepExtend\n  if (Array.isArray(b)) {\n    throw new TypeError('Arrays are not supported by deepExtend');\n  }\n  for (var prop in b) {\n    if (b.hasOwnProperty(prop)) {\n      if (props.indexOf(prop) == -1) {\n        if (b[prop] && b[prop].constructor === Object) {\n          if (a[prop] === undefined) {\n            a[prop] = {};\n          }\n          if (a[prop].constructor === Object) {\n            exports.deepExtend(a[prop], b[prop]);\n          }\n          else {\n            if ((b[prop] === null) && a[prop] !== undefined && allowDeletion === true) {\n              delete a[prop];\n            }\n            else {\n              a[prop] = b[prop];\n            }\n          }\n        } else if (Array.isArray(b[prop])) {\n          a[prop] = [];\n          for (let i = 0; i < b[prop].length; i++) {\n            a[prop].push(b[prop][i]);\n          }\n        } else {\n          if ((b[prop] === null) && a[prop] !== undefined && allowDeletion === true) {\n            delete a[prop];\n          }\n          else {\n            a[prop] = b[prop];\n          }\n        }\n      }\n    }\n  }\n  return a;\n};\n\n/**\n * Deep extend an object a with the properties of object b\n * @param {Object} a\n * @param {Object} b\n * @param [Boolean] protoExtend --> optional parameter. If true, the prototype values will also be extended.\n *                                  (ie. the options objects that inherit from others will also get the inherited options)\n * @param [Boolean] global      --> optional parameter. If true, the values of fields that are null will not deleted\n * @returns {Object}\n */\nexports.deepExtend = function (a, b, protoExtend, allowDeletion) {\n  for (var prop in b) {\n    if (b.hasOwnProperty(prop) || protoExtend === true) {\n      if (b[prop] && b[prop].constructor === Object) {\n        if (a[prop] === undefined) {\n          a[prop] = {};\n        }\n        if (a[prop].constructor === Object) {\n          exports.deepExtend(a[prop], b[prop], protoExtend);\n        }\n        else {\n          if ((b[prop] === null) && a[prop] !== undefined && allowDeletion === true) {\n            delete a[prop];\n          }\n          else {\n            a[prop] = b[prop];\n          }\n        }\n      } else if (Array.isArray(b[prop])) {\n        a[prop] = [];\n        for (let i = 0; i < b[prop].length; i++) {\n          a[prop].push(b[prop][i]);\n        }\n      } else {\n        if ((b[prop] === null) && a[prop] !== undefined && allowDeletion === true) {\n          delete a[prop];\n        }\n        else {\n          a[prop] = b[prop];\n        }\n      }\n    }\n  }\n  return a;\n};\n\n/**\n * Test whether all elements in two arrays are equal.\n * @param {Array} a\n * @param {Array} b\n * @return {boolean} Returns true if both arrays have the same length and same\n *                   elements.\n */\nexports.equalArray = function (a, b) {\n  if (a.length != b.length) return false;\n\n  for (var i = 0, len = a.length; i < len; i++) {\n    if (a[i] != b[i]) return false;\n  }\n\n  return true;\n};\n\n/**\n * Convert an object to another type\n * @param {Boolean | Number | String | Date | Moment | Null | undefined} object\n * @param {String | undefined} type   Name of the type. Available types:\n *                                    'Boolean', 'Number', 'String',\n *                                    'Date', 'Moment', ISODate', 'ASPDate'.\n * @return {*} object\n * @throws Error\n */\nexports.convert = function (object, type) {\n  var match;\n\n  if (object === undefined) {\n    return undefined;\n  }\n  if (object === null) {\n    return null;\n  }\n\n  if (!type) {\n    return object;\n  }\n  if (!(typeof type === 'string') && !(type instanceof String)) {\n    throw new Error('Type must be a string');\n  }\n\n  //noinspection FallthroughInSwitchStatementJS\n  switch (type) {\n    case 'boolean':\n    case 'Boolean':\n      return Boolean(object);\n\n    case 'number':\n    case 'Number':\n      if (exports.isString(object) && !isNaN(Date.parse(object))) {\n        return moment(object).valueOf();\n      } else {\n        return Number(object.valueOf());\n      }\n    case 'string':\n    case 'String':\n      return String(object);\n\n    case 'Date':\n      if (exports.isNumber(object)) {\n        return new Date(object);\n      }\n      if (object instanceof Date) {\n        return new Date(object.valueOf());\n      }\n      else if (moment.isMoment(object)) {\n        return new Date(object.valueOf());\n      }\n      if (exports.isString(object)) {\n        match = ASPDateRegex.exec(object);\n        if (match) {\n          // object is an ASP date\n          return new Date(Number(match[1])); // parse number\n        }\n        else {\n          return moment(new Date(object)).toDate(); // parse string\n        }\n      }\n      else {\n        throw new Error(\n          'Cannot convert object of type ' + exports.getType(object) +\n          ' to type Date');\n      }\n\n    case 'Moment':\n      if (exports.isNumber(object)) {\n        return moment(object);\n      }\n      if (object instanceof Date) {\n        return moment(object.valueOf());\n      }\n      else if (moment.isMoment(object)) {\n        return moment(object);\n      }\n      if (exports.isString(object)) {\n        match = ASPDateRegex.exec(object);\n        if (match) {\n          // object is an ASP date\n          return moment(Number(match[1])); // parse number\n        }\n        else {\n          return moment(object); // parse string\n        }\n      }\n      else {\n        throw new Error(\n          'Cannot convert object of type ' + exports.getType(object) +\n          ' to type Date');\n      }\n\n    case 'ISODate':\n      if (exports.isNumber(object)) {\n        return new Date(object);\n      }\n      else if (object instanceof Date) {\n        return object.toISOString();\n      }\n      else if (moment.isMoment(object)) {\n        return object.toDate().toISOString();\n      }\n      else if (exports.isString(object)) {\n        match = ASPDateRegex.exec(object);\n        if (match) {\n          // object is an ASP date\n          return new Date(Number(match[1])).toISOString(); // parse number\n        }\n        else {\n          return moment(object).format(); // ISO 8601\n        }\n      }\n      else {\n        throw new Error(\n          'Cannot convert object of type ' + exports.getType(object) +\n          ' to type ISODate');\n      }\n\n    case 'ASPDate':\n      if (exports.isNumber(object)) {\n        return '/Date(' + object + ')/';\n      }\n      else if (object instanceof Date) {\n        return '/Date(' + object.valueOf() + ')/';\n      }\n      else if (exports.isString(object)) {\n        match = ASPDateRegex.exec(object);\n        var value;\n        if (match) {\n          // object is an ASP date\n          value = new Date(Number(match[1])).valueOf(); // parse number\n        }\n        else {\n          value = new Date(object).valueOf(); // parse string\n        }\n        return '/Date(' + value + ')/';\n      }\n      else {\n        throw new Error(\n          'Cannot convert object of type ' + exports.getType(object) +\n          ' to type ASPDate');\n      }\n\n    default:\n      throw new Error('Unknown type \"' + type + '\"');\n  }\n};\n\n// parse ASP.Net Date pattern,\n// for example '/Date(1198908717056)/' or '/Date(1198908717056-0700)/'\n// code from http://momentjs.com/\nvar ASPDateRegex = /^\\/?Date\\((\\-?\\d+)/i;\n\n/**\n * Get the type of an object, for example exports.getType([]) returns 'Array'\n * @param {*} object\n * @return {String} type\n */\nexports.getType = function (object) {\n  var type = typeof object;\n\n  if (type == 'object') {\n    if (object === null) {\n      return 'null';\n    }\n    if (object instanceof Boolean) {\n      return 'Boolean';\n    }\n    if (object instanceof Number) {\n      return 'Number';\n    }\n    if (object instanceof String) {\n      return 'String';\n    }\n    if (Array.isArray(object)) {\n      return 'Array';\n    }\n    if (object instanceof Date) {\n      return 'Date';\n    }\n    return 'Object';\n  }\n  else if (type == 'number') {\n    return 'Number';\n  }\n  else if (type == 'boolean') {\n    return 'Boolean';\n  }\n  else if (type == 'string') {\n    return 'String';\n  }\n  else if (type === undefined) {\n    return 'undefined';\n  }\n\n\n  return type;\n};\n\n\n/**\n * Used to extend an array and copy it. This is used to propagate paths recursively.\n *\n * @param arr\n * @param newValue\n * @returns {Array}\n */\nexports.copyAndExtendArray = function (arr, newValue) {\n  let newArr = [];\n  for (let i = 0; i < arr.length; i++) {\n    newArr.push(arr[i]);\n  }\n  newArr.push(newValue);\n  return newArr;\n}\n\n/**\n * Used to extend an array and copy it. This is used to propagate paths recursively.\n *\n * @param arr\n * @param newValue\n * @returns {Array}\n */\nexports.copyArray = function (arr) {\n  let newArr = [];\n  for (let i = 0; i < arr.length; i++) {\n    newArr.push(arr[i]);\n  }\n  return newArr;\n}\n\n/**\n * Retrieve the absolute left value of a DOM element\n * @param {Element} elem        A dom element, for example a div\n * @return {number} left        The absolute left position of this element\n *                              in the browser page.\n */\nexports.getAbsoluteLeft = function (elem) {\n  return elem.getBoundingClientRect().left;\n};\n\nexports.getAbsoluteRight = function (elem) {\n  return elem.getBoundingClientRect().right;\n};\n\n/**\n * Retrieve the absolute top value of a DOM element\n * @param {Element} elem        A dom element, for example a div\n * @return {number} top        The absolute top position of this element\n *                              in the browser page.\n */\nexports.getAbsoluteTop = function (elem) {\n  return elem.getBoundingClientRect().top;\n};\n\n/**\n * add a className to the given elements style\n * @param {Element} elem\n * @param {String} className\n */\nexports.addClassName = function (elem, className) {\n  var classes = elem.className.split(' ');\n  if (classes.indexOf(className) == -1) {\n    classes.push(className); // add the class to the array\n    elem.className = classes.join(' ');\n  }\n};\n\n/**\n * add a className to the given elements style\n * @param {Element} elem\n * @param {String} className\n */\nexports.removeClassName = function (elem, className) {\n  var classes = elem.className.split(' ');\n  var index = classes.indexOf(className);\n  if (index != -1) {\n    classes.splice(index, 1); // remove the class from the array\n    elem.className = classes.join(' ');\n  }\n};\n\n/**\n * For each method for both arrays and objects.\n * In case of an array, the built-in Array.forEach() is applied.\n * In case of an Object, the method loops over all properties of the object.\n * @param {Object | Array} object   An Object or Array\n * @param {function} callback       Callback method, called for each item in\n *                                  the object or array with three parameters:\n *                                  callback(value, index, object)\n */\nexports.forEach = function (object, callback) {\n  var i,\n    len;\n  if (Array.isArray(object)) {\n    // array\n    for (i = 0, len = object.length; i < len; i++) {\n      callback(object[i], i, object);\n    }\n  }\n  else {\n    // object\n    for (i in object) {\n      if (object.hasOwnProperty(i)) {\n        callback(object[i], i, object);\n      }\n    }\n  }\n};\n\n/**\n * Convert an object into an array: all objects properties are put into the\n * array. The resulting array is unordered.\n * @param {Object} object\n * @param {Array} array\n */\nexports.toArray = function (object) {\n  var array = [];\n\n  for (var prop in object) {\n    if (object.hasOwnProperty(prop)) array.push(object[prop]);\n  }\n\n  return array;\n};\n\n/**\n * Update a property in an object\n * @param {Object} object\n * @param {String} key\n * @param {*} value\n * @return {Boolean} changed\n */\nexports.updateProperty = function (object, key, value) {\n  if (object[key] !== value) {\n    object[key] = value;\n    return true;\n  }\n  else {\n    return false;\n  }\n};\n\n/**\n * Throttle the given function to be only executed once per animation frame\n * @param {function} fn\n * @returns {function} Returns the throttled function\n */\nexports.throttle = function (fn) {\n  var scheduled = false;\n\n  return function throttled () {\n    if (!scheduled) {\n      scheduled = true;\n      requestAnimationFrame(function () {\n        scheduled = false;\n        fn();\n      });\n    }\n  }\n};\n\n/**\n * Add and event listener. Works for all browsers\n * @param {Element}     element    An html element\n * @param {string}      action     The action, for example \"click\",\n *                                 without the prefix \"on\"\n * @param {function}    listener   The callback function to be executed\n * @param {boolean}     [useCapture]\n */\nexports.addEventListener = function (element, action, listener, useCapture) {\n  if (element.addEventListener) {\n    if (useCapture === undefined)\n      useCapture = false;\n\n    if (action === \"mousewheel\" && navigator.userAgent.indexOf(\"Firefox\") >= 0) {\n      action = \"DOMMouseScroll\";  // For Firefox\n    }\n\n    element.addEventListener(action, listener, useCapture);\n  } else {\n    element.attachEvent(\"on\" + action, listener);  // IE browsers\n  }\n};\n\n/**\n * Remove an event listener from an element\n * @param {Element}     element         An html dom element\n * @param {string}      action          The name of the event, for example \"mousedown\"\n * @param {function}    listener        The listener function\n * @param {boolean}     [useCapture]\n */\nexports.removeEventListener = function (element, action, listener, useCapture) {\n  if (element.removeEventListener) {\n    // non-IE browsers\n    if (useCapture === undefined)\n      useCapture = false;\n\n    if (action === \"mousewheel\" && navigator.userAgent.indexOf(\"Firefox\") >= 0) {\n      action = \"DOMMouseScroll\";  // For Firefox\n    }\n\n    element.removeEventListener(action, listener, useCapture);\n  } else {\n    // IE browsers\n    element.detachEvent(\"on\" + action, listener);\n  }\n};\n\n/**\n * Cancels the event if it is cancelable, without stopping further propagation of the event.\n */\nexports.preventDefault = function (event) {\n  if (!event)\n    event = window.event;\n\n  if (event.preventDefault) {\n    event.preventDefault();  // non-IE browsers\n  }\n  else {\n    event.returnValue = false;  // IE browsers\n  }\n};\n\n/**\n * Get HTML element which is the target of the event\n * @param {Event} event\n * @return {Element} target element\n */\nexports.getTarget = function (event) {\n  // code from http://www.quirksmode.org/js/events_properties.html\n  if (!event) {\n    event = window.event;\n  }\n\n  var target;\n\n  if (event.target) {\n    target = event.target;\n  }\n  else if (event.srcElement) {\n    target = event.srcElement;\n  }\n\n  if (target.nodeType != undefined && target.nodeType == 3) {\n    // defeat Safari bug\n    target = target.parentNode;\n  }\n\n  return target;\n};\n\n/**\n * Check if given element contains given parent somewhere in the DOM tree\n * @param {Element} element\n * @param {Element} parent\n */\nexports.hasParent = function (element, parent) {\n  var e = element;\n\n  while (e) {\n    if (e === parent) {\n      return true;\n    }\n    e = e.parentNode;\n  }\n\n  return false;\n};\n\nexports.option = {};\n\n/**\n * Convert a value into a boolean\n * @param {Boolean | function | undefined} value\n * @param {Boolean} [defaultValue]\n * @returns {Boolean} bool\n */\nexports.option.asBoolean = function (value, defaultValue) {\n  if (typeof value == 'function') {\n    value = value();\n  }\n\n  if (value != null) {\n    return (value != false);\n  }\n\n  return defaultValue || null;\n};\n\n/**\n * Convert a value into a number\n * @param {Boolean | function | undefined} value\n * @param {Number} [defaultValue]\n * @returns {Number} number\n */\nexports.option.asNumber = function (value, defaultValue) {\n  if (typeof value == 'function') {\n    value = value();\n  }\n\n  if (value != null) {\n    return Number(value) || defaultValue || null;\n  }\n\n  return defaultValue || null;\n};\n\n/**\n * Convert a value into a string\n * @param {String | function | undefined} value\n * @param {String} [defaultValue]\n * @returns {String} str\n */\nexports.option.asString = function (value, defaultValue) {\n  if (typeof value == 'function') {\n    value = value();\n  }\n\n  if (value != null) {\n    return String(value);\n  }\n\n  return defaultValue || null;\n};\n\n/**\n * Convert a size or location into a string with pixels or a percentage\n * @param {String | Number | function | undefined} value\n * @param {String} [defaultValue]\n * @returns {String} size\n */\nexports.option.asSize = function (value, defaultValue) {\n  if (typeof value == 'function') {\n    value = value();\n  }\n\n  if (exports.isString(value)) {\n    return value;\n  }\n  else if (exports.isNumber(value)) {\n    return value + 'px';\n  }\n  else {\n    return defaultValue || null;\n  }\n};\n\n/**\n * Convert a value into a DOM element\n * @param {HTMLElement | function | undefined} value\n * @param {HTMLElement} [defaultValue]\n * @returns {HTMLElement | null} dom\n */\nexports.option.asElement = function (value, defaultValue) {\n  if (typeof value == 'function') {\n    value = value();\n  }\n\n  return value || defaultValue || null;\n};\n\n/**\n * http://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb\n *\n * @param {String} hex\n * @returns {{r: *, g: *, b: *}} | 255 range\n */\nexports.hexToRGB = function (hex) {\n  // Expand shorthand form (e.g. \"03F\") to full form (e.g. \"0033FF\")\n  var shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n  hex = hex.replace(shorthandRegex, function (m, r, g, b) {\n    return r + r + g + g + b + b;\n  });\n  var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n  return result ? {\n    r: parseInt(result[1], 16),\n    g: parseInt(result[2], 16),\n    b: parseInt(result[3], 16)\n  } : null;\n};\n\n/**\n * This function takes color in hex format or rgb() or rgba() format and overrides the opacity. Returns rgba() string.\n * @param color\n * @param opacity\n * @returns {*}\n */\nexports.overrideOpacity = function (color, opacity) {\n  if (color.indexOf(\"rgba\") != -1) {\n    return color;\n  }\n  else if (color.indexOf(\"rgb\") != -1) {\n    var rgb = color.substr(color.indexOf(\"(\") + 1).replace(\")\", \"\").split(\",\");\n    return \"rgba(\" + rgb[0] + \",\" + rgb[1] + \",\" + rgb[2] + \",\" + opacity + \")\"\n  }\n  else {\n    var rgb = exports.hexToRGB(color);\n    if (rgb == null) {\n      return color;\n    }\n    else {\n      return \"rgba(\" + rgb.r + \",\" + rgb.g + \",\" + rgb.b + \",\" + opacity + \")\"\n    }\n  }\n}\n\n/**\n *\n * @param red     0 -- 255\n * @param green   0 -- 255\n * @param blue    0 -- 255\n * @returns {string}\n * @constructor\n */\nexports.RGBToHex = function (red, green, blue) {\n  return \"#\" + ((1 << 24) + (red << 16) + (green << 8) + blue).toString(16).slice(1);\n};\n\n/**\n * Parse a color property into an object with border, background, and\n * highlight colors\n * @param {Object | String} color\n * @return {Object} colorObject\n */\nexports.parseColor = function (color) {\n  var c;\n  if (exports.isString(color) === true) {\n    if (exports.isValidRGB(color) === true) {\n      var rgb = color.substr(4).substr(0, color.length - 5).split(',').map(function (value) { return parseInt(value) });\n      color = exports.RGBToHex(rgb[0], rgb[1], rgb[2]);\n    }\n    if (exports.isValidHex(color) === true) {\n      var hsv = exports.hexToHSV(color);\n      var lighterColorHSV = { h: hsv.h, s: hsv.s * 0.8, v: Math.min(1, hsv.v * 1.02) };\n      var darkerColorHSV = { h: hsv.h, s: Math.min(1, hsv.s * 1.25), v: hsv.v * 0.8 };\n      var darkerColorHex = exports.HSVToHex(darkerColorHSV.h, darkerColorHSV.s, darkerColorHSV.v);\n      var lighterColorHex = exports.HSVToHex(lighterColorHSV.h, lighterColorHSV.s, lighterColorHSV.v);\n      c = {\n        background: color,\n        border: darkerColorHex,\n        highlight: {\n          background: lighterColorHex,\n          border: darkerColorHex\n        },\n        hover: {\n          background: lighterColorHex,\n          border: darkerColorHex\n        }\n      };\n    }\n    else {\n      c = {\n        background: color,\n        border: color,\n        highlight: {\n          background: color,\n          border: color\n        },\n        hover: {\n          background: color,\n          border: color\n        }\n      };\n    }\n  }\n  else {\n    c = {};\n    c.background = color.background || undefined;\n    c.border = color.border || undefined;\n\n    if (exports.isString(color.highlight)) {\n      c.highlight = {\n        border: color.highlight,\n        background: color.highlight\n      }\n    }\n    else {\n      c.highlight = {};\n      c.highlight.background = color.highlight && color.highlight.background || undefined;\n      c.highlight.border = color.highlight && color.highlight.border || undefined;\n    }\n\n    if (exports.isString(color.hover)) {\n      c.hover = {\n        border: color.hover,\n        background: color.hover\n      }\n    }\n    else {\n      c.hover = {};\n      c.hover.background = color.hover && color.hover.background || undefined;\n      c.hover.border = color.hover && color.hover.border || undefined;\n    }\n  }\n\n  return c;\n};\n\n\n\n/**\n * http://www.javascripter.net/faq/rgb2hsv.htm\n *\n * @param red\n * @param green\n * @param blue\n * @returns {*}\n * @constructor\n */\nexports.RGBToHSV = function (red, green, blue) {\n  red = red / 255; green = green / 255; blue = blue / 255;\n  var minRGB = Math.min(red, Math.min(green, blue));\n  var maxRGB = Math.max(red, Math.max(green, blue));\n\n  // Black-gray-white\n  if (minRGB == maxRGB) {\n    return { h: 0, s: 0, v: minRGB };\n  }\n\n  // Colors other than black-gray-white:\n  var d = (red == minRGB) ? green - blue : ((blue == minRGB) ? red - green : blue - red);\n  var h = (red == minRGB) ? 3 : ((blue == minRGB) ? 1 : 5);\n  var hue = 60 * (h - d / (maxRGB - minRGB)) / 360;\n  var saturation = (maxRGB - minRGB) / maxRGB;\n  var value = maxRGB;\n  return { h: hue, s: saturation, v: value };\n};\n\nvar cssUtil = {\n  // split a string with css styles into an object with key/values\n  split: function (cssText) {\n    var styles = {};\n\n    cssText.split(';').forEach(function (style) {\n      if (style.trim() != '') {\n        var parts = style.split(':');\n        var key = parts[0].trim();\n        var value = parts[1].trim();\n        styles[key] = value;\n      }\n    });\n\n    return styles;\n  },\n\n  // build a css text string from an object with key/values\n  join: function (styles) {\n    return Object.keys(styles)\n      .map(function (key) {\n        return key + ': ' + styles[key];\n      })\n      .join('; ');\n  }\n};\n\n/**\n * Append a string with css styles to an element\n * @param {Element} element\n * @param {String} cssText\n */\nexports.addCssText = function (element, cssText) {\n  var currentStyles = cssUtil.split(element.style.cssText);\n  var newStyles = cssUtil.split(cssText);\n  var styles = exports.extend(currentStyles, newStyles);\n\n  element.style.cssText = cssUtil.join(styles);\n};\n\n/**\n * Remove a string with css styles from an element\n * @param {Element} element\n * @param {String} cssText\n */\nexports.removeCssText = function (element, cssText) {\n  var styles = cssUtil.split(element.style.cssText);\n  var removeStyles = cssUtil.split(cssText);\n\n  for (var key in removeStyles) {\n    if (removeStyles.hasOwnProperty(key)) {\n      delete styles[key];\n    }\n  }\n\n  element.style.cssText = cssUtil.join(styles);\n};\n\n/**\n * https://gist.github.com/mjijackson/5311256\n * @param h\n * @param s\n * @param v\n * @returns {{r: number, g: number, b: number}}\n * @constructor\n */\nexports.HSVToRGB = function (h, s, v) {\n  var r, g, b;\n\n  var i = Math.floor(h * 6);\n  var f = h * 6 - i;\n  var p = v * (1 - s);\n  var q = v * (1 - f * s);\n  var t = v * (1 - (1 - f) * s);\n\n  switch (i % 6) {\n    case 0: r = v, g = t, b = p; break;\n    case 1: r = q, g = v, b = p; break;\n    case 2: r = p, g = v, b = t; break;\n    case 3: r = p, g = q, b = v; break;\n    case 4: r = t, g = p, b = v; break;\n    case 5: r = v, g = p, b = q; break;\n  }\n\n  return { r: Math.floor(r * 255), g: Math.floor(g * 255), b: Math.floor(b * 255) };\n};\n\nexports.HSVToHex = function (h, s, v) {\n  var rgb = exports.HSVToRGB(h, s, v);\n  return exports.RGBToHex(rgb.r, rgb.g, rgb.b);\n};\n\nexports.hexToHSV = function (hex) {\n  var rgb = exports.hexToRGB(hex);\n  return exports.RGBToHSV(rgb.r, rgb.g, rgb.b);\n};\n\nexports.isValidHex = function (hex) {\n  var isOk = /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(hex);\n  return isOk;\n};\n\nexports.isValidRGB = function (rgb) {\n  rgb = rgb.replace(\" \", \"\");\n  var isOk = /rgb\\((\\d{1,3}),(\\d{1,3}),(\\d{1,3})\\)/i.test(rgb);\n  return isOk;\n}\nexports.isValidRGBA = function (rgba) {\n  rgba = rgba.replace(\" \", \"\");\n  var isOk = /rgba\\((\\d{1,3}),(\\d{1,3}),(\\d{1,3}),(.{1,3})\\)/i.test(rgba);\n  return isOk;\n}\n\n/**\n * This recursively redirects the prototype of JSON objects to the referenceObject\n * This is used for default options.\n *\n * @param referenceObject\n * @returns {*}\n */\nexports.selectiveBridgeObject = function (fields, referenceObject) {\n  if (typeof referenceObject == \"object\") {\n    var objectTo = Object.create(referenceObject);\n    for (var i = 0; i < fields.length; i++) {\n      if (referenceObject.hasOwnProperty(fields[i])) {\n        if (typeof referenceObject[fields[i]] == \"object\") {\n          objectTo[fields[i]] = exports.bridgeObject(referenceObject[fields[i]]);\n        }\n      }\n    }\n    return objectTo;\n  }\n  else {\n    return null;\n  }\n};\n\n/**\n * This recursively redirects the prototype of JSON objects to the referenceObject\n * This is used for default options.\n *\n * @param referenceObject\n * @returns {*}\n */\nexports.bridgeObject = function (referenceObject) {\n  if (typeof referenceObject == \"object\") {\n    var objectTo = Object.create(referenceObject);\n    for (var i in referenceObject) {\n      if (referenceObject.hasOwnProperty(i)) {\n        if (typeof referenceObject[i] == \"object\") {\n          objectTo[i] = exports.bridgeObject(referenceObject[i]);\n        }\n      }\n    }\n    return objectTo;\n  }\n  else {\n    return null;\n  }\n};\n\n/**\n * This method provides a stable sort implementation, very fast for presorted data\n *\n * @param a the array\n * @param a order comparator\n * @returns {the array}\n */\nexports.insertSort = function (a,compare) {\n  for (var i = 0; i < a.length; i++) {\n    var k = a[i];\n    for (var j = i; j > 0 && compare(k,a[j - 1])<0; j--) {\n      a[j] = a[j - 1];\n    }\n    a[j] = k;\n  }\n  return a;\n}\n\n/**\n * this is used to set the options of subobjects in the options object. A requirement of these subobjects\n * is that they have an 'enabled' element which is optional for the user but mandatory for the program.\n *\n * @param [object] mergeTarget | this is either this.options or the options used for the groups.\n * @param [object] options     | options\n * @param [String] option      | this is the option key in the options argument\n */\nexports.mergeOptions = function (mergeTarget, options, option, allowDeletion = false, globalOptions = {}) {\n  if (options[option] === null) {\n    mergeTarget[option] = Object.create(globalOptions[option]);\n  }\n  else {\n    if (options[option] !== undefined) {\n      if (typeof options[option] === 'boolean') {\n        mergeTarget[option].enabled = options[option];\n      }\n      else {\n        if (options[option].enabled === undefined) {\n          mergeTarget[option].enabled = true;\n        }\n        for (var prop in options[option]) {\n          if (options[option].hasOwnProperty(prop)) {\n            mergeTarget[option][prop] = options[option][prop];\n          }\n        }\n      }\n    }\n  }\n}\n\n\n/**\n * This function does a binary search for a visible item in a sorted list. If we find a visible item, the code that uses\n * this function will then iterate in both directions over this sorted list to find all visible items.\n *\n * @param {Item[]} orderedItems       | Items ordered by start\n * @param {function} comparator       | -1 is lower, 0 is equal, 1 is higher\n * @param {String} field\n * @param {String} field2\n * @returns {number}\n * @private\n */\nexports.binarySearchCustom = function (orderedItems, comparator, field, field2) {\n  var maxIterations = 10000;\n  var iteration = 0;\n  var low = 0;\n  var high = orderedItems.length - 1;\n\n  while (low <= high && iteration < maxIterations) {\n    var middle = Math.floor((low + high) / 2);\n\n    var item = orderedItems[middle];\n    var value = (field2 === undefined) ? item[field] : item[field][field2];\n\n    var searchResult = comparator(value);\n    if (searchResult == 0) { // jihaa, found a visible item!\n      return middle;\n    }\n    else if (searchResult == -1) {  // it is too small --> increase low\n      low = middle + 1;\n    }\n    else {  // it is too big --> decrease high\n      high = middle - 1;\n    }\n\n    iteration++;\n  }\n\n  return -1;\n};\n\n/**\n * This function does a binary search for a specific value in a sorted array. If it does not exist but is in between of\n * two values, we return either the one before or the one after, depending on user input\n * If it is found, we return the index, else -1.\n *\n * @param {Array} orderedItems\n * @param {{start: number, end: number}} target\n * @param {String} field\n * @param {String} sidePreference   'before' or 'after'\n * @param {function} comparator an optional comparator, returning -1,0,1 for <,==,>.\n * @returns {number}\n * @private\n */\nexports.binarySearchValue = function (orderedItems, target, field, sidePreference, comparator) {\n  var maxIterations = 10000;\n  var iteration = 0;\n  var low = 0;\n  var high = orderedItems.length - 1;\n  var prevValue, value, nextValue, middle;\n\n  var comparator = comparator != undefined ? comparator : function (a, b) {\n    return a == b ? 0 : a < b ? -1 : 1\n  };\n\n  while (low <= high && iteration < maxIterations) {\n    // get a new guess\n    middle = Math.floor(0.5 * (high + low));\n    prevValue = orderedItems[Math.max(0, middle - 1)][field];\n    value = orderedItems[middle][field];\n    nextValue = orderedItems[Math.min(orderedItems.length - 1, middle + 1)][field];\n\n    if (comparator(value, target) == 0) { // we found the target\n      return middle;\n    }\n    else if (comparator(prevValue, target) < 0 && comparator(value, target) > 0) {  // target is in between of the previous and the current\n      return sidePreference == 'before' ? Math.max(0, middle - 1) : middle;\n    }\n    else if (comparator(value, target) < 0 && comparator(nextValue, target) > 0) { // target is in between of the current and the next\n      return sidePreference == 'before' ? middle : Math.min(orderedItems.length - 1, middle + 1);\n    }\n    else {  // didnt find the target, we need to change our boundaries.\n      if (comparator(value, target) < 0) { // it is too small --> increase low\n        low = middle + 1;\n      }\n      else {  // it is too big --> decrease high\n        high = middle - 1;\n      }\n    }\n    iteration++;\n  }\n\n  // didnt find anything. Return -1.\n  return -1;\n};\n\n/*\n * Easing Functions - inspired from http://gizma.com/easing/\n * only considering the t value for the range [0, 1] => [0, 1]\n * https://gist.github.com/gre/1650294\n */\nexports.easingFunctions = {\n  // no easing, no acceleration\n  linear: function (t) {\n    return t\n  },\n  // accelerating from zero velocity\n  easeInQuad: function (t) {\n    return t * t\n  },\n  // decelerating to zero velocity\n  easeOutQuad: function (t) {\n    return t * (2 - t)\n  },\n  // acceleration until halfway, then deceleration\n  easeInOutQuad: function (t) {\n    return t < .5 ? 2 * t * t : -1 + (4 - 2 * t) * t\n  },\n  // accelerating from zero velocity\n  easeInCubic: function (t) {\n    return t * t * t\n  },\n  // decelerating to zero velocity\n  easeOutCubic: function (t) {\n    return (--t) * t * t + 1\n  },\n  // acceleration until halfway, then deceleration\n  easeInOutCubic: function (t) {\n    return t < .5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1\n  },\n  // accelerating from zero velocity\n  easeInQuart: function (t) {\n    return t * t * t * t\n  },\n  // decelerating to zero velocity\n  easeOutQuart: function (t) {\n    return 1 - (--t) * t * t * t\n  },\n  // acceleration until halfway, then deceleration\n  easeInOutQuart: function (t) {\n    return t < .5 ? 8 * t * t * t * t : 1 - 8 * (--t) * t * t * t\n  },\n  // accelerating from zero velocity\n  easeInQuint: function (t) {\n    return t * t * t * t * t\n  },\n  // decelerating to zero velocity\n  easeOutQuint: function (t) {\n    return 1 + (--t) * t * t * t * t\n  },\n  // acceleration until halfway, then deceleration\n  easeInOutQuint: function (t) {\n    return t < .5 ? 16 * t * t * t * t * t : 1 + 16 * (--t) * t * t * t * t\n  }\n};\n\nexports.getScrollBarWidth = function () {\n  var inner = document.createElement('p');\n  inner.style.width = \"100%\";\n  inner.style.height = \"200px\";\n\n  var outer = document.createElement('div');\n  outer.style.position = \"absolute\";\n  outer.style.top = \"0px\";\n  outer.style.left = \"0px\";\n  outer.style.visibility = \"hidden\";\n  outer.style.width = \"200px\";\n  outer.style.height = \"150px\";\n  outer.style.overflow = \"hidden\";\n  outer.appendChild (inner);\n\n  document.body.appendChild (outer);\n  var w1 = inner.offsetWidth;\n  outer.style.overflow = 'scroll';\n  var w2 = inner.offsetWidth;\n  if (w1 == w2) w2 = outer.clientWidth;\n\n  document.body.removeChild (outer);\n\n  return (w1 - w2);\n};\n\nexports.topMost = function (pile, accessors) {\n  let candidate;\n  if (!Array.isArray(accessors)) {\n    accessors = [accessors];\n  }\n  for (const member of pile) {\n    if (member) {\n      candidate = member[accessors[0]];\n      for (let i = 1; i < accessors.length; i++){\n        if (candidate) {\n          candidate = candidate[accessors[i]]\n        } else {\n          continue;\n        }\n      }\n      if (typeof candidate != 'undefined') {\n        break;\n      }\n    }\n  }\n  return candidate;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./lib/util.js","module.exports = { \"default\": require(\"core-js/library/fn/get-iterator\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/get-iterator.js\n// module id = 2\n// module chunks = 0","require('../modules/web.dom.iterable');\nrequire('../modules/es6.string.iterator');\nmodule.exports = require('../modules/core.get-iterator');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/fn/get-iterator.js\n// module id = 3\n// module chunks = 0","require('./es6.array.iterator');\nvar global        = require('./_global')\n  , hide          = require('./_hide')\n  , Iterators     = require('./_iterators')\n  , TO_STRING_TAG = require('./_wks')('toStringTag');\n\nfor(var collections = ['NodeList', 'DOMTokenList', 'MediaList', 'StyleSheetList', 'CSSRuleList'], i = 0; i < 5; i++){\n  var NAME       = collections[i]\n    , Collection = global[NAME]\n    , proto      = Collection && Collection.prototype;\n  if(proto && !proto[TO_STRING_TAG])hide(proto, TO_STRING_TAG, NAME);\n  Iterators[NAME] = Iterators.Array;\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/web.dom.iterable.js\n// module id = 4\n// module chunks = 0","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables')\n  , step             = require('./_iter-step')\n  , Iterators        = require('./_iterators')\n  , toIObject        = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function(iterated, kind){\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function(){\n  var O     = this._t\n    , kind  = this._k\n    , index = this._i++;\n  if(!O || index >= O.length){\n    this._t = undefined;\n    return step(1);\n  }\n  if(kind == 'keys'  )return step(0, index);\n  if(kind == 'values')return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es6.array.iterator.js\n// module id = 5\n// module chunks = 0","module.exports = function(){ /* empty */ };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_add-to-unscopables.js\n// module id = 6\n// module chunks = 0","module.exports = function(done, value){\n  return {value: value, done: !!done};\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_iter-step.js\n// module id = 7\n// module chunks = 0","module.exports = {};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_iterators.js\n// module id = 8\n// module chunks = 0","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject')\n  , defined = require('./_defined');\nmodule.exports = function(it){\n  return IObject(defined(it));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_to-iobject.js\n// module id = 9\n// module chunks = 0","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_iobject.js\n// module id = 10\n// module chunks = 0","var toString = {}.toString;\n\nmodule.exports = function(it){\n  return toString.call(it).slice(8, -1);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_cof.js\n// module id = 11\n// module chunks = 0","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function(it){\n  if(it == undefined)throw TypeError(\"Can't call method on  \" + it);\n  return it;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_defined.js\n// module id = 12\n// module chunks = 0","'use strict';\nvar LIBRARY        = require('./_library')\n  , $export        = require('./_export')\n  , redefine       = require('./_redefine')\n  , hide           = require('./_hide')\n  , has            = require('./_has')\n  , Iterators      = require('./_iterators')\n  , $iterCreate    = require('./_iter-create')\n  , setToStringTag = require('./_set-to-string-tag')\n  , getPrototypeOf = require('./_object-gpo')\n  , ITERATOR       = require('./_wks')('iterator')\n  , BUGGY          = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next`\n  , FF_ITERATOR    = '@@iterator'\n  , KEYS           = 'keys'\n  , VALUES         = 'values';\n\nvar returnThis = function(){ return this; };\n\nmodule.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function(kind){\n    if(!BUGGY && kind in proto)return proto[kind];\n    switch(kind){\n      case KEYS: return function keys(){ return new Constructor(this, kind); };\n      case VALUES: return function values(){ return new Constructor(this, kind); };\n    } return function entries(){ return new Constructor(this, kind); };\n  };\n  var TAG        = NAME + ' Iterator'\n    , DEF_VALUES = DEFAULT == VALUES\n    , VALUES_BUG = false\n    , proto      = Base.prototype\n    , $native    = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]\n    , $default   = $native || getMethod(DEFAULT)\n    , $entries   = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined\n    , $anyNative = NAME == 'Array' ? proto.entries || $native : $native\n    , methods, key, IteratorPrototype;\n  // Fix native\n  if($anyNative){\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base));\n    if(IteratorPrototype !== Object.prototype){\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if(!LIBRARY && !has(IteratorPrototype, ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if(DEF_VALUES && $native && $native.name !== VALUES){\n    VALUES_BUG = true;\n    $default = function values(){ return $native.call(this); };\n  }\n  // Define iterator\n  if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG]  = returnThis;\n  if(DEFAULT){\n    methods = {\n      values:  DEF_VALUES ? $default : getMethod(VALUES),\n      keys:    IS_SET     ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if(FORCED)for(key in methods){\n      if(!(key in proto))redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_iter-define.js\n// module id = 13\n// module chunks = 0","module.exports = true;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_library.js\n// module id = 14\n// module chunks = 0","var global    = require('./_global')\n  , core      = require('./_core')\n  , ctx       = require('./_ctx')\n  , hide      = require('./_hide')\n  , PROTOTYPE = 'prototype';\n\nvar $export = function(type, name, source){\n  var IS_FORCED = type & $export.F\n    , IS_GLOBAL = type & $export.G\n    , IS_STATIC = type & $export.S\n    , IS_PROTO  = type & $export.P\n    , IS_BIND   = type & $export.B\n    , IS_WRAP   = type & $export.W\n    , exports   = IS_GLOBAL ? core : core[name] || (core[name] = {})\n    , expProto  = exports[PROTOTYPE]\n    , target    = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]\n    , key, own, out;\n  if(IS_GLOBAL)source = name;\n  for(key in source){\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    if(own && key in exports)continue;\n    // export native or passed\n    out = own ? target[key] : source[key];\n    // prevent global pollution for namespaces\n    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n    // bind timers to global for call from export context\n    : IS_BIND && own ? ctx(out, global)\n    // wrap global constructors for prevent change them in library\n    : IS_WRAP && target[key] == out ? (function(C){\n      var F = function(a, b, c){\n        if(this instanceof C){\n          switch(arguments.length){\n            case 0: return new C;\n            case 1: return new C(a);\n            case 2: return new C(a, b);\n          } return new C(a, b, c);\n        } return C.apply(this, arguments);\n      };\n      F[PROTOTYPE] = C[PROTOTYPE];\n      return F;\n    // make static versions for prototype methods\n    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n    if(IS_PROTO){\n      (exports.virtual || (exports.virtual = {}))[key] = out;\n      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n      if(type & $export.R && expProto && !expProto[key])hide(expProto, key, out);\n    }\n  }\n};\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library` \nmodule.exports = $export;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_export.js\n// module id = 15\n// module chunks = 0","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();\nif(typeof __g == 'number')__g = global; // eslint-disable-line no-undef\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_global.js\n// module id = 16\n// module chunks = 0","var core = module.exports = {version: '2.4.0'};\nif(typeof __e == 'number')__e = core; // eslint-disable-line no-undef\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_core.js\n// module id = 17\n// module chunks = 0","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function(fn, that, length){\n  aFunction(fn);\n  if(that === undefined)return fn;\n  switch(length){\n    case 1: return function(a){\n      return fn.call(that, a);\n    };\n    case 2: return function(a, b){\n      return fn.call(that, a, b);\n    };\n    case 3: return function(a, b, c){\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function(/* ...args */){\n    return fn.apply(that, arguments);\n  };\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_ctx.js\n// module id = 18\n// module chunks = 0","module.exports = function(it){\n  if(typeof it != 'function')throw TypeError(it + ' is not a function!');\n  return it;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_a-function.js\n// module id = 19\n// module chunks = 0","var dP         = require('./_object-dp')\n  , createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function(object, key, value){\n  return dP.f(object, key, createDesc(1, value));\n} : function(object, key, value){\n  object[key] = value;\n  return object;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_hide.js\n// module id = 20\n// module chunks = 0","var anObject       = require('./_an-object')\n  , IE8_DOM_DEFINE = require('./_ie8-dom-define')\n  , toPrimitive    = require('./_to-primitive')\n  , dP             = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes){\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if(IE8_DOM_DEFINE)try {\n    return dP(O, P, Attributes);\n  } catch(e){ /* empty */ }\n  if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!');\n  if('value' in Attributes)O[P] = Attributes.value;\n  return O;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-dp.js\n// module id = 21\n// module chunks = 0","var isObject = require('./_is-object');\nmodule.exports = function(it){\n  if(!isObject(it))throw TypeError(it + ' is not an object!');\n  return it;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_an-object.js\n// module id = 22\n// module chunks = 0","module.exports = function(it){\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_is-object.js\n// module id = 23\n// module chunks = 0","module.exports = !require('./_descriptors') && !require('./_fails')(function(){\n  return Object.defineProperty(require('./_dom-create')('div'), 'a', {get: function(){ return 7; }}).a != 7;\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_ie8-dom-define.js\n// module id = 24\n// module chunks = 0","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function(){\n  return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_descriptors.js\n// module id = 25\n// module chunks = 0","module.exports = function(exec){\n  try {\n    return !!exec();\n  } catch(e){\n    return true;\n  }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_fails.js\n// module id = 26\n// module chunks = 0","var isObject = require('./_is-object')\n  , document = require('./_global').document\n  // in old IE typeof document.createElement is 'object'\n  , is = isObject(document) && isObject(document.createElement);\nmodule.exports = function(it){\n  return is ? document.createElement(it) : {};\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_dom-create.js\n// module id = 27\n// module chunks = 0","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function(it, S){\n  if(!isObject(it))return it;\n  var fn, val;\n  if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;\n  if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val;\n  if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_to-primitive.js\n// module id = 28\n// module chunks = 0","module.exports = function(bitmap, value){\n  return {\n    enumerable  : !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable    : !(bitmap & 4),\n    value       : value\n  };\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_property-desc.js\n// module id = 29\n// module chunks = 0","module.exports = require('./_hide');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_redefine.js\n// module id = 30\n// module chunks = 0","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function(it, key){\n  return hasOwnProperty.call(it, key);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_has.js\n// module id = 31\n// module chunks = 0","'use strict';\nvar create         = require('./_object-create')\n  , descriptor     = require('./_property-desc')\n  , setToStringTag = require('./_set-to-string-tag')\n  , IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function(){ return this; });\n\nmodule.exports = function(Constructor, NAME, next){\n  Constructor.prototype = create(IteratorPrototype, {next: descriptor(1, next)});\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_iter-create.js\n// module id = 32\n// module chunks = 0","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject    = require('./_an-object')\n  , dPs         = require('./_object-dps')\n  , enumBugKeys = require('./_enum-bug-keys')\n  , IE_PROTO    = require('./_shared-key')('IE_PROTO')\n  , Empty       = function(){ /* empty */ }\n  , PROTOTYPE   = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function(){\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = require('./_dom-create')('iframe')\n    , i      = enumBugKeys.length\n    , lt     = '<'\n    , gt     = '>'\n    , iframeDocument;\n  iframe.style.display = 'none';\n  require('./_html').appendChild(iframe);\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n  // createDict = iframe.contentWindow.Object;\n  // html.removeChild(iframe);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while(i--)delete createDict[PROTOTYPE][enumBugKeys[i]];\n  return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties){\n  var result;\n  if(O !== null){\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty;\n    Empty[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : dPs(result, Properties);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-create.js\n// module id = 33\n// module chunks = 0","var dP       = require('./_object-dp')\n  , anObject = require('./_an-object')\n  , getKeys  = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties){\n  anObject(O);\n  var keys   = getKeys(Properties)\n    , length = keys.length\n    , i = 0\n    , P;\n  while(length > i)dP.f(O, P = keys[i++], Properties[P]);\n  return O;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-dps.js\n// module id = 34\n// module chunks = 0","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys       = require('./_object-keys-internal')\n  , enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O){\n  return $keys(O, enumBugKeys);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-keys.js\n// module id = 35\n// module chunks = 0","var has          = require('./_has')\n  , toIObject    = require('./_to-iobject')\n  , arrayIndexOf = require('./_array-includes')(false)\n  , IE_PROTO     = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function(object, names){\n  var O      = toIObject(object)\n    , i      = 0\n    , result = []\n    , key;\n  for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while(names.length > i)if(has(O, key = names[i++])){\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-keys-internal.js\n// module id = 36\n// module chunks = 0","// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = require('./_to-iobject')\n  , toLength  = require('./_to-length')\n  , toIndex   = require('./_to-index');\nmodule.exports = function(IS_INCLUDES){\n  return function($this, el, fromIndex){\n    var O      = toIObject($this)\n      , length = toLength(O.length)\n      , index  = toIndex(fromIndex, length)\n      , value;\n    // Array#includes uses SameValueZero equality algorithm\n    if(IS_INCLUDES && el != el)while(length > index){\n      value = O[index++];\n      if(value != value)return true;\n    // Array#toIndex ignores holes, Array#includes - not\n    } else for(;length > index; index++)if(IS_INCLUDES || index in O){\n      if(O[index] === el)return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_array-includes.js\n// module id = 37\n// module chunks = 0","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer')\n  , min       = Math.min;\nmodule.exports = function(it){\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_to-length.js\n// module id = 38\n// module chunks = 0","// 7.1.4 ToInteger\nvar ceil  = Math.ceil\n  , floor = Math.floor;\nmodule.exports = function(it){\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_to-integer.js\n// module id = 39\n// module chunks = 0","var toInteger = require('./_to-integer')\n  , max       = Math.max\n  , min       = Math.min;\nmodule.exports = function(index, length){\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_to-index.js\n// module id = 40\n// module chunks = 0","var shared = require('./_shared')('keys')\n  , uid    = require('./_uid');\nmodule.exports = function(key){\n  return shared[key] || (shared[key] = uid(key));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_shared-key.js\n// module id = 41\n// module chunks = 0","var global = require('./_global')\n  , SHARED = '__core-js_shared__'\n  , store  = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function(key){\n  return store[key] || (store[key] = {});\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_shared.js\n// module id = 42\n// module chunks = 0","var id = 0\n  , px = Math.random();\nmodule.exports = function(key){\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_uid.js\n// module id = 43\n// module chunks = 0","// IE 8- don't enum bug keys\nmodule.exports = (\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_enum-bug-keys.js\n// module id = 44\n// module chunks = 0","module.exports = require('./_global').document && document.documentElement;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_html.js\n// module id = 45\n// module chunks = 0","var def = require('./_object-dp').f\n  , has = require('./_has')\n  , TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function(it, tag, stat){\n  if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag});\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_set-to-string-tag.js\n// module id = 46\n// module chunks = 0","var store      = require('./_shared')('wks')\n  , uid        = require('./_uid')\n  , Symbol     = require('./_global').Symbol\n  , USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function(name){\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_wks.js\n// module id = 47\n// module chunks = 0","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has         = require('./_has')\n  , toObject    = require('./_to-object')\n  , IE_PROTO    = require('./_shared-key')('IE_PROTO')\n  , ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function(O){\n  O = toObject(O);\n  if(has(O, IE_PROTO))return O[IE_PROTO];\n  if(typeof O.constructor == 'function' && O instanceof O.constructor){\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectProto : null;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-gpo.js\n// module id = 48\n// module chunks = 0","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function(it){\n  return Object(defined(it));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_to-object.js\n// module id = 49\n// module chunks = 0","'use strict';\nvar $at  = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function(iterated){\n  this._t = String(iterated); // target\n  this._i = 0;                // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function(){\n  var O     = this._t\n    , index = this._i\n    , point;\n  if(index >= O.length)return {value: undefined, done: true};\n  point = $at(O, index);\n  this._i += point.length;\n  return {value: point, done: false};\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es6.string.iterator.js\n// module id = 50\n// module chunks = 0","var toInteger = require('./_to-integer')\n  , defined   = require('./_defined');\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function(TO_STRING){\n  return function(that, pos){\n    var s = String(defined(that))\n      , i = toInteger(pos)\n      , l = s.length\n      , a, b;\n    if(i < 0 || i >= l)return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_string-at.js\n// module id = 51\n// module chunks = 0","var anObject = require('./_an-object')\n  , get      = require('./core.get-iterator-method');\nmodule.exports = require('./_core').getIterator = function(it){\n  var iterFn = get(it);\n  if(typeof iterFn != 'function')throw TypeError(it + ' is not iterable!');\n  return anObject(iterFn.call(it));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/core.get-iterator.js\n// module id = 52\n// module chunks = 0","var classof   = require('./_classof')\n  , ITERATOR  = require('./_wks')('iterator')\n  , Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function(it){\n  if(it != undefined)return it[ITERATOR]\n    || it['@@iterator']\n    || Iterators[classof(it)];\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/core.get-iterator-method.js\n// module id = 53\n// module chunks = 0","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof')\n  , TAG = require('./_wks')('toStringTag')\n  // ES3 wrong here\n  , ARG = cof(function(){ return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function(it, key){\n  try {\n    return it[key];\n  } catch(e){ /* empty */ }\n};\n\nmodule.exports = function(it){\n  var O, T, B;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n    // builtinTag case\n    : ARG ? cof(O)\n    // ES3 arguments fallback\n    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_classof.js\n// module id = 54\n// module chunks = 0","module.exports = { \"default\": require(\"core-js/library/fn/object/create\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/object/create.js\n// module id = 55\n// module chunks = 0","require('../../modules/es6.object.create');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function create(P, D){\n  return $Object.create(P, D);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/fn/object/create.js\n// module id = 56\n// module chunks = 0","var $export = require('./_export')\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', {create: require('./_object-create')});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es6.object.create.js\n// module id = 57\n// module chunks = 0","module.exports = { \"default\": require(\"core-js/library/fn/object/keys\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/object/keys.js\n// module id = 58\n// module chunks = 0","require('../../modules/es6.object.keys');\nmodule.exports = require('../../modules/_core').Object.keys;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/fn/object/keys.js\n// module id = 59\n// module chunks = 0","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object')\n  , $keys    = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function(){\n  return function keys(it){\n    return $keys(toObject(it));\n  };\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es6.object.keys.js\n// module id = 60\n// module chunks = 0","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export')\n  , core    = require('./_core')\n  , fails   = require('./_fails');\nmodule.exports = function(KEY, exec){\n  var fn  = (core.Object || {})[KEY] || Object[KEY]\n    , exp = {};\n  exp[KEY] = exec(fn);\n  $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-sap.js\n// module id = 61\n// module chunks = 0","\"use strict\";\n\nexports.__esModule = true;\n\nvar _iterator = require(\"../core-js/symbol/iterator\");\n\nvar _iterator2 = _interopRequireDefault(_iterator);\n\nvar _symbol = require(\"../core-js/symbol\");\n\nvar _symbol2 = _interopRequireDefault(_symbol);\n\nvar _typeof = typeof _symbol2.default === \"function\" && typeof _iterator2.default === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = typeof _symbol2.default === \"function\" && _typeof(_iterator2.default) === \"symbol\" ? function (obj) {\n  return typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n} : function (obj) {\n  return obj && typeof _symbol2.default === \"function\" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? \"symbol\" : typeof obj === \"undefined\" ? \"undefined\" : _typeof(obj);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/helpers/typeof.js\n// module id = 62\n// module chunks = 0","module.exports = { \"default\": require(\"core-js/library/fn/symbol/iterator\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/symbol/iterator.js\n// module id = 63\n// module chunks = 0","require('../../modules/es6.string.iterator');\nrequire('../../modules/web.dom.iterable');\nmodule.exports = require('../../modules/_wks-ext').f('iterator');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/fn/symbol/iterator.js\n// module id = 64\n// module chunks = 0","exports.f = require('./_wks');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_wks-ext.js\n// module id = 65\n// module chunks = 0","module.exports = { \"default\": require(\"core-js/library/fn/symbol\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/symbol.js\n// module id = 66\n// module chunks = 0","require('../../modules/es6.symbol');\nrequire('../../modules/es6.object.to-string');\nrequire('../../modules/es7.symbol.async-iterator');\nrequire('../../modules/es7.symbol.observable');\nmodule.exports = require('../../modules/_core').Symbol;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/fn/symbol/index.js\n// module id = 67\n// module chunks = 0","'use strict';\n// ECMAScript 6 symbols shim\nvar global         = require('./_global')\n  , has            = require('./_has')\n  , DESCRIPTORS    = require('./_descriptors')\n  , $export        = require('./_export')\n  , redefine       = require('./_redefine')\n  , META           = require('./_meta').KEY\n  , $fails         = require('./_fails')\n  , shared         = require('./_shared')\n  , setToStringTag = require('./_set-to-string-tag')\n  , uid            = require('./_uid')\n  , wks            = require('./_wks')\n  , wksExt         = require('./_wks-ext')\n  , wksDefine      = require('./_wks-define')\n  , keyOf          = require('./_keyof')\n  , enumKeys       = require('./_enum-keys')\n  , isArray        = require('./_is-array')\n  , anObject       = require('./_an-object')\n  , toIObject      = require('./_to-iobject')\n  , toPrimitive    = require('./_to-primitive')\n  , createDesc     = require('./_property-desc')\n  , _create        = require('./_object-create')\n  , gOPNExt        = require('./_object-gopn-ext')\n  , $GOPD          = require('./_object-gopd')\n  , $DP            = require('./_object-dp')\n  , $keys          = require('./_object-keys')\n  , gOPD           = $GOPD.f\n  , dP             = $DP.f\n  , gOPN           = gOPNExt.f\n  , $Symbol        = global.Symbol\n  , $JSON          = global.JSON\n  , _stringify     = $JSON && $JSON.stringify\n  , PROTOTYPE      = 'prototype'\n  , HIDDEN         = wks('_hidden')\n  , TO_PRIMITIVE   = wks('toPrimitive')\n  , isEnum         = {}.propertyIsEnumerable\n  , SymbolRegistry = shared('symbol-registry')\n  , AllSymbols     = shared('symbols')\n  , OPSymbols      = shared('op-symbols')\n  , ObjectProto    = Object[PROTOTYPE]\n  , USE_NATIVE     = typeof $Symbol == 'function'\n  , QObject        = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function(){\n  return _create(dP({}, 'a', {\n    get: function(){ return dP(this, 'a', {value: 7}).a; }\n  })).a != 7;\n}) ? function(it, key, D){\n  var protoDesc = gOPD(ObjectProto, key);\n  if(protoDesc)delete ObjectProto[key];\n  dP(it, key, D);\n  if(protoDesc && it !== ObjectProto)dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function(tag){\n  var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n  sym._k = tag;\n  return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function(it){\n  return typeof it == 'symbol';\n} : function(it){\n  return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D){\n  if(it === ObjectProto)$defineProperty(OPSymbols, key, D);\n  anObject(it);\n  key = toPrimitive(key, true);\n  anObject(D);\n  if(has(AllSymbols, key)){\n    if(!D.enumerable){\n      if(!has(it, HIDDEN))dP(it, HIDDEN, createDesc(1, {}));\n      it[HIDDEN][key] = true;\n    } else {\n      if(has(it, HIDDEN) && it[HIDDEN][key])it[HIDDEN][key] = false;\n      D = _create(D, {enumerable: createDesc(0, false)});\n    } return setSymbolDesc(it, key, D);\n  } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P){\n  anObject(it);\n  var keys = enumKeys(P = toIObject(P))\n    , i    = 0\n    , l = keys.length\n    , key;\n  while(l > i)$defineProperty(it, key = keys[i++], P[key]);\n  return it;\n};\nvar $create = function create(it, P){\n  return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key){\n  var E = isEnum.call(this, key = toPrimitive(key, true));\n  if(this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return false;\n  return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key){\n  it  = toIObject(it);\n  key = toPrimitive(key, true);\n  if(it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return;\n  var D = gOPD(it, key);\n  if(D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key]))D.enumerable = true;\n  return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it){\n  var names  = gOPN(toIObject(it))\n    , result = []\n    , i      = 0\n    , key;\n  while(names.length > i){\n    if(!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META)result.push(key);\n  } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it){\n  var IS_OP  = it === ObjectProto\n    , names  = gOPN(IS_OP ? OPSymbols : toIObject(it))\n    , result = []\n    , i      = 0\n    , key;\n  while(names.length > i){\n    if(has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true))result.push(AllSymbols[key]);\n  } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif(!USE_NATIVE){\n  $Symbol = function Symbol(){\n    if(this instanceof $Symbol)throw TypeError('Symbol is not a constructor!');\n    var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n    var $set = function(value){\n      if(this === ObjectProto)$set.call(OPSymbols, value);\n      if(has(this, HIDDEN) && has(this[HIDDEN], tag))this[HIDDEN][tag] = false;\n      setSymbolDesc(this, tag, createDesc(1, value));\n    };\n    if(DESCRIPTORS && setter)setSymbolDesc(ObjectProto, tag, {configurable: true, set: $set});\n    return wrap(tag);\n  };\n  redefine($Symbol[PROTOTYPE], 'toString', function toString(){\n    return this._k;\n  });\n\n  $GOPD.f = $getOwnPropertyDescriptor;\n  $DP.f   = $defineProperty;\n  require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n  require('./_object-pie').f  = $propertyIsEnumerable;\n  require('./_object-gops').f = $getOwnPropertySymbols;\n\n  if(DESCRIPTORS && !require('./_library')){\n    redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n  }\n\n  wksExt.f = function(name){\n    return wrap(wks(name));\n  }\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, {Symbol: $Symbol});\n\nfor(var symbols = (\n  // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n  'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), i = 0; symbols.length > i; )wks(symbols[i++]);\n\nfor(var symbols = $keys(wks.store), i = 0; symbols.length > i; )wksDefine(symbols[i++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n  // 19.4.2.1 Symbol.for(key)\n  'for': function(key){\n    return has(SymbolRegistry, key += '')\n      ? SymbolRegistry[key]\n      : SymbolRegistry[key] = $Symbol(key);\n  },\n  // 19.4.2.5 Symbol.keyFor(sym)\n  keyFor: function keyFor(key){\n    if(isSymbol(key))return keyOf(SymbolRegistry, key);\n    throw TypeError(key + ' is not a symbol!');\n  },\n  useSetter: function(){ setter = true; },\n  useSimple: function(){ setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n  // 19.1.2.2 Object.create(O [, Properties])\n  create: $create,\n  // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n  defineProperty: $defineProperty,\n  // 19.1.2.3 Object.defineProperties(O, Properties)\n  defineProperties: $defineProperties,\n  // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n  getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n  // 19.1.2.7 Object.getOwnPropertyNames(O)\n  getOwnPropertyNames: $getOwnPropertyNames,\n  // 19.1.2.8 Object.getOwnPropertySymbols(O)\n  getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function(){\n  var S = $Symbol();\n  // MS Edge converts symbol values to JSON as {}\n  // WebKit converts symbol values to JSON as null\n  // V8 throws on boxed symbols\n  return _stringify([S]) != '[null]' || _stringify({a: S}) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n  stringify: function stringify(it){\n    if(it === undefined || isSymbol(it))return; // IE8 returns string on undefined\n    var args = [it]\n      , i    = 1\n      , replacer, $replacer;\n    while(arguments.length > i)args.push(arguments[i++]);\n    replacer = args[1];\n    if(typeof replacer == 'function')$replacer = replacer;\n    if($replacer || !isArray(replacer))replacer = function(key, value){\n      if($replacer)value = $replacer.call(this, key, value);\n      if(!isSymbol(value))return value;\n    };\n    args[1] = replacer;\n    return _stringify.apply($JSON, args);\n  }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es6.symbol.js\n// module id = 68\n// module chunks = 0","var META     = require('./_uid')('meta')\n  , isObject = require('./_is-object')\n  , has      = require('./_has')\n  , setDesc  = require('./_object-dp').f\n  , id       = 0;\nvar isExtensible = Object.isExtensible || function(){\n  return true;\n};\nvar FREEZE = !require('./_fails')(function(){\n  return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function(it){\n  setDesc(it, META, {value: {\n    i: 'O' + ++id, // object ID\n    w: {}          // weak collections IDs\n  }});\n};\nvar fastKey = function(it, create){\n  // return primitive with prefix\n  if(!isObject(it))return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n  if(!has(it, META)){\n    // can't set metadata to uncaught frozen object\n    if(!isExtensible(it))return 'F';\n    // not necessary to add metadata\n    if(!create)return 'E';\n    // add missing metadata\n    setMeta(it);\n  // return object ID\n  } return it[META].i;\n};\nvar getWeak = function(it, create){\n  if(!has(it, META)){\n    // can't set metadata to uncaught frozen object\n    if(!isExtensible(it))return true;\n    // not necessary to add metadata\n    if(!create)return false;\n    // add missing metadata\n    setMeta(it);\n  // return hash weak collections IDs\n  } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function(it){\n  if(FREEZE && meta.NEED && isExtensible(it) && !has(it, META))setMeta(it);\n  return it;\n};\nvar meta = module.exports = {\n  KEY:      META,\n  NEED:     false,\n  fastKey:  fastKey,\n  getWeak:  getWeak,\n  onFreeze: onFreeze\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_meta.js\n// module id = 69\n// module chunks = 0","var global         = require('./_global')\n  , core           = require('./_core')\n  , LIBRARY        = require('./_library')\n  , wksExt         = require('./_wks-ext')\n  , defineProperty = require('./_object-dp').f;\nmodule.exports = function(name){\n  var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n  if(name.charAt(0) != '_' && !(name in $Symbol))defineProperty($Symbol, name, {value: wksExt.f(name)});\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_wks-define.js\n// module id = 70\n// module chunks = 0","var getKeys   = require('./_object-keys')\n  , toIObject = require('./_to-iobject');\nmodule.exports = function(object, el){\n  var O      = toIObject(object)\n    , keys   = getKeys(O)\n    , length = keys.length\n    , index  = 0\n    , key;\n  while(length > index)if(O[key = keys[index++]] === el)return key;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_keyof.js\n// module id = 71\n// module chunks = 0","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys')\n  , gOPS    = require('./_object-gops')\n  , pIE     = require('./_object-pie');\nmodule.exports = function(it){\n  var result     = getKeys(it)\n    , getSymbols = gOPS.f;\n  if(getSymbols){\n    var symbols = getSymbols(it)\n      , isEnum  = pIE.f\n      , i       = 0\n      , key;\n    while(symbols.length > i)if(isEnum.call(it, key = symbols[i++]))result.push(key);\n  } return result;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_enum-keys.js\n// module id = 72\n// module chunks = 0","exports.f = Object.getOwnPropertySymbols;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-gops.js\n// module id = 73\n// module chunks = 0","exports.f = {}.propertyIsEnumerable;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-pie.js\n// module id = 74\n// module chunks = 0","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg){\n  return cof(arg) == 'Array';\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_is-array.js\n// module id = 75\n// module chunks = 0","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject')\n  , gOPN      = require('./_object-gopn').f\n  , toString  = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n  ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function(it){\n  try {\n    return gOPN(it);\n  } catch(e){\n    return windowNames.slice();\n  }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it){\n  return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-gopn-ext.js\n// module id = 76\n// module chunks = 0","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys      = require('./_object-keys-internal')\n  , hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O){\n  return $keys(O, hiddenKeys);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-gopn.js\n// module id = 77\n// module chunks = 0","var pIE            = require('./_object-pie')\n  , createDesc     = require('./_property-desc')\n  , toIObject      = require('./_to-iobject')\n  , toPrimitive    = require('./_to-primitive')\n  , has            = require('./_has')\n  , IE8_DOM_DEFINE = require('./_ie8-dom-define')\n  , gOPD           = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P){\n  O = toIObject(O);\n  P = toPrimitive(P, true);\n  if(IE8_DOM_DEFINE)try {\n    return gOPD(O, P);\n  } catch(e){ /* empty */ }\n  if(has(O, P))return createDesc(!pIE.f.call(O, P), O[P]);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_object-gopd.js\n// module id = 78\n// module chunks = 0","require('./_wks-define')('asyncIterator');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es7.symbol.async-iterator.js\n// module id = 80\n// module chunks = 0","require('./_wks-define')('observable');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es7.symbol.observable.js\n// module id = 81\n// module chunks = 0","module.exports = { \"default\": require(\"core-js/library/fn/json/stringify\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/json/stringify.js\n// module id = 82\n// module chunks = 0","var core  = require('../../modules/_core')\n  , $JSON = core.JSON || (core.JSON = {stringify: JSON.stringify});\nmodule.exports = function stringify(it){ // eslint-disable-line no-unused-vars\n  return $JSON.stringify.apply($JSON, arguments);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/fn/json/stringify.js\n// module id = 83\n// module chunks = 0","// first check if moment.js is already loaded in the browser window, if so,\n// use this instance. Else, load via commonjs.\nmodule.exports = (typeof window !== 'undefined') && window['moment'] || require('moment');\n\n\n\n// WEBPACK FOOTER //\n// ./lib/module/moment.js","//! moment.js\n//! version : 2.17.1\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    global.moment = factory()\n}(this, (function () { 'use strict';\n\nvar hookCallback;\n\nfunction hooks () {\n    return hookCallback.apply(null, arguments);\n}\n\n// This is done to register the method called with moment()\n// without creating circular dependencies.\nfunction setHookCallback (callback) {\n    hookCallback = callback;\n}\n\nfunction isArray(input) {\n    return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';\n}\n\nfunction isObject(input) {\n    // IE8 will treat undefined and null as object if it wasn't for\n    // input != null\n    return input != null && Object.prototype.toString.call(input) === '[object Object]';\n}\n\nfunction isObjectEmpty(obj) {\n    var k;\n    for (k in obj) {\n        // even if its not own property I'd still call it non-empty\n        return false;\n    }\n    return true;\n}\n\nfunction isNumber(input) {\n    return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';\n}\n\nfunction isDate(input) {\n    return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';\n}\n\nfunction map(arr, fn) {\n    var res = [], i;\n    for (i = 0; i < arr.length; ++i) {\n        res.push(fn(arr[i], i));\n    }\n    return res;\n}\n\nfunction hasOwnProp(a, b) {\n    return Object.prototype.hasOwnProperty.call(a, b);\n}\n\nfunction extend(a, b) {\n    for (var i in b) {\n        if (hasOwnProp(b, i)) {\n            a[i] = b[i];\n        }\n    }\n\n    if (hasOwnProp(b, 'toString')) {\n        a.toString = b.toString;\n    }\n\n    if (hasOwnProp(b, 'valueOf')) {\n        a.valueOf = b.valueOf;\n    }\n\n    return a;\n}\n\nfunction createUTC (input, format, locale, strict) {\n    return createLocalOrUTC(input, format, locale, strict, true).utc();\n}\n\nfunction defaultParsingFlags() {\n    // We need to deep clone this object.\n    return {\n        empty           : false,\n        unusedTokens    : [],\n        unusedInput     : [],\n        overflow        : -2,\n        charsLeftOver   : 0,\n        nullInput       : false,\n        invalidMonth    : null,\n        invalidFormat   : false,\n        userInvalidated : false,\n        iso             : false,\n        parsedDateParts : [],\n        meridiem        : null\n    };\n}\n\nfunction getParsingFlags(m) {\n    if (m._pf == null) {\n        m._pf = defaultParsingFlags();\n    }\n    return m._pf;\n}\n\nvar some;\nif (Array.prototype.some) {\n    some = Array.prototype.some;\n} else {\n    some = function (fun) {\n        var t = Object(this);\n        var len = t.length >>> 0;\n\n        for (var i = 0; i < len; i++) {\n            if (i in t && fun.call(this, t[i], i, t)) {\n                return true;\n            }\n        }\n\n        return false;\n    };\n}\n\nvar some$1 = some;\n\nfunction isValid(m) {\n    if (m._isValid == null) {\n        var flags = getParsingFlags(m);\n        var parsedParts = some$1.call(flags.parsedDateParts, function (i) {\n            return i != null;\n        });\n        var isNowValid = !isNaN(m._d.getTime()) &&\n            flags.overflow < 0 &&\n            !flags.empty &&\n            !flags.invalidMonth &&\n            !flags.invalidWeekday &&\n            !flags.nullInput &&\n            !flags.invalidFormat &&\n            !flags.userInvalidated &&\n            (!flags.meridiem || (flags.meridiem && parsedParts));\n\n        if (m._strict) {\n            isNowValid = isNowValid &&\n                flags.charsLeftOver === 0 &&\n                flags.unusedTokens.length === 0 &&\n                flags.bigHour === undefined;\n        }\n\n        if (Object.isFrozen == null || !Object.isFrozen(m)) {\n            m._isValid = isNowValid;\n        }\n        else {\n            return isNowValid;\n        }\n    }\n    return m._isValid;\n}\n\nfunction createInvalid (flags) {\n    var m = createUTC(NaN);\n    if (flags != null) {\n        extend(getParsingFlags(m), flags);\n    }\n    else {\n        getParsingFlags(m).userInvalidated = true;\n    }\n\n    return m;\n}\n\nfunction isUndefined(input) {\n    return input === void 0;\n}\n\n// Plugins that add properties should also add the key here (null value),\n// so we can properly clone ourselves.\nvar momentProperties = hooks.momentProperties = [];\n\nfunction copyConfig(to, from) {\n    var i, prop, val;\n\n    if (!isUndefined(from._isAMomentObject)) {\n        to._isAMomentObject = from._isAMomentObject;\n    }\n    if (!isUndefined(from._i)) {\n        to._i = from._i;\n    }\n    if (!isUndefined(from._f)) {\n        to._f = from._f;\n    }\n    if (!isUndefined(from._l)) {\n        to._l = from._l;\n    }\n    if (!isUndefined(from._strict)) {\n        to._strict = from._strict;\n    }\n    if (!isUndefined(from._tzm)) {\n        to._tzm = from._tzm;\n    }\n    if (!isUndefined(from._isUTC)) {\n        to._isUTC = from._isUTC;\n    }\n    if (!isUndefined(from._offset)) {\n        to._offset = from._offset;\n    }\n    if (!isUndefined(from._pf)) {\n        to._pf = getParsingFlags(from);\n    }\n    if (!isUndefined(from._locale)) {\n        to._locale = from._locale;\n    }\n\n    if (momentProperties.length > 0) {\n        for (i in momentProperties) {\n            prop = momentProperties[i];\n            val = from[prop];\n            if (!isUndefined(val)) {\n                to[prop] = val;\n            }\n        }\n    }\n\n    return to;\n}\n\nvar updateInProgress = false;\n\n// Moment prototype object\nfunction Moment(config) {\n    copyConfig(this, config);\n    this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n    if (!this.isValid()) {\n        this._d = new Date(NaN);\n    }\n    // Prevent infinite loop in case updateOffset creates new moment\n    // objects.\n    if (updateInProgress === false) {\n        updateInProgress = true;\n        hooks.updateOffset(this);\n        updateInProgress = false;\n    }\n}\n\nfunction isMoment (obj) {\n    return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);\n}\n\nfunction absFloor (number) {\n    if (number < 0) {\n        // -0 -> 0\n        return Math.ceil(number) || 0;\n    } else {\n        return Math.floor(number);\n    }\n}\n\nfunction toInt(argumentForCoercion) {\n    var coercedNumber = +argumentForCoercion,\n        value = 0;\n\n    if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n        value = absFloor(coercedNumber);\n    }\n\n    return value;\n}\n\n// compare two arrays, return the number of differences\nfunction compareArrays(array1, array2, dontConvert) {\n    var len = Math.min(array1.length, array2.length),\n        lengthDiff = Math.abs(array1.length - array2.length),\n        diffs = 0,\n        i;\n    for (i = 0; i < len; i++) {\n        if ((dontConvert && array1[i] !== array2[i]) ||\n            (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {\n            diffs++;\n        }\n    }\n    return diffs + lengthDiff;\n}\n\nfunction warn(msg) {\n    if (hooks.suppressDeprecationWarnings === false &&\n            (typeof console !==  'undefined') && console.warn) {\n        console.warn('Deprecation warning: ' + msg);\n    }\n}\n\nfunction deprecate(msg, fn) {\n    var firstTime = true;\n\n    return extend(function () {\n        if (hooks.deprecationHandler != null) {\n            hooks.deprecationHandler(null, msg);\n        }\n        if (firstTime) {\n            var args = [];\n            var arg;\n            for (var i = 0; i < arguments.length; i++) {\n                arg = '';\n                if (typeof arguments[i] === 'object') {\n                    arg += '\\n[' + i + '] ';\n                    for (var key in arguments[0]) {\n                        arg += key + ': ' + arguments[0][key] + ', ';\n                    }\n                    arg = arg.slice(0, -2); // Remove trailing comma and space\n                } else {\n                    arg = arguments[i];\n                }\n                args.push(arg);\n            }\n            warn(msg + '\\nArguments: ' + Array.prototype.slice.call(args).join('') + '\\n' + (new Error()).stack);\n            firstTime = false;\n        }\n        return fn.apply(this, arguments);\n    }, fn);\n}\n\nvar deprecations = {};\n\nfunction deprecateSimple(name, msg) {\n    if (hooks.deprecationHandler != null) {\n        hooks.deprecationHandler(name, msg);\n    }\n    if (!deprecations[name]) {\n        warn(msg);\n        deprecations[name] = true;\n    }\n}\n\nhooks.suppressDeprecationWarnings = false;\nhooks.deprecationHandler = null;\n\nfunction isFunction(input) {\n    return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n}\n\nfunction set (config) {\n    var prop, i;\n    for (i in config) {\n        prop = config[i];\n        if (isFunction(prop)) {\n            this[i] = prop;\n        } else {\n            this['_' + i] = prop;\n        }\n    }\n    this._config = config;\n    // Lenient ordinal parsing accepts just a number in addition to\n    // number + (possibly) stuff coming from _ordinalParseLenient.\n    this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + (/\\d{1,2}/).source);\n}\n\nfunction mergeConfigs(parentConfig, childConfig) {\n    var res = extend({}, parentConfig), prop;\n    for (prop in childConfig) {\n        if (hasOwnProp(childConfig, prop)) {\n            if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n                res[prop] = {};\n                extend(res[prop], parentConfig[prop]);\n                extend(res[prop], childConfig[prop]);\n            } else if (childConfig[prop] != null) {\n                res[prop] = childConfig[prop];\n            } else {\n                delete res[prop];\n            }\n        }\n    }\n    for (prop in parentConfig) {\n        if (hasOwnProp(parentConfig, prop) &&\n                !hasOwnProp(childConfig, prop) &&\n                isObject(parentConfig[prop])) {\n            // make sure changes to properties don't modify parent config\n            res[prop] = extend({}, res[prop]);\n        }\n    }\n    return res;\n}\n\nfunction Locale(config) {\n    if (config != null) {\n        this.set(config);\n    }\n}\n\nvar keys;\n\nif (Object.keys) {\n    keys = Object.keys;\n} else {\n    keys = function (obj) {\n        var i, res = [];\n        for (i in obj) {\n            if (hasOwnProp(obj, i)) {\n                res.push(i);\n            }\n        }\n        return res;\n    };\n}\n\nvar keys$1 = keys;\n\nvar defaultCalendar = {\n    sameDay : '[Today at] LT',\n    nextDay : '[Tomorrow at] LT',\n    nextWeek : 'dddd [at] LT',\n    lastDay : '[Yesterday at] LT',\n    lastWeek : '[Last] dddd [at] LT',\n    sameElse : 'L'\n};\n\nfunction calendar (key, mom, now) {\n    var output = this._calendar[key] || this._calendar['sameElse'];\n    return isFunction(output) ? output.call(mom, now) : output;\n}\n\nvar defaultLongDateFormat = {\n    LTS  : 'h:mm:ss A',\n    LT   : 'h:mm A',\n    L    : 'MM/DD/YYYY',\n    LL   : 'MMMM D, YYYY',\n    LLL  : 'MMMM D, YYYY h:mm A',\n    LLLL : 'dddd, MMMM D, YYYY h:mm A'\n};\n\nfunction longDateFormat (key) {\n    var format = this._longDateFormat[key],\n        formatUpper = this._longDateFormat[key.toUpperCase()];\n\n    if (format || !formatUpper) {\n        return format;\n    }\n\n    this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {\n        return val.slice(1);\n    });\n\n    return this._longDateFormat[key];\n}\n\nvar defaultInvalidDate = 'Invalid date';\n\nfunction invalidDate () {\n    return this._invalidDate;\n}\n\nvar defaultOrdinal = '%d';\nvar defaultOrdinalParse = /\\d{1,2}/;\n\nfunction ordinal (number) {\n    return this._ordinal.replace('%d', number);\n}\n\nvar defaultRelativeTime = {\n    future : 'in %s',\n    past   : '%s ago',\n    s  : 'a few seconds',\n    m  : 'a minute',\n    mm : '%d minutes',\n    h  : 'an hour',\n    hh : '%d hours',\n    d  : 'a day',\n    dd : '%d days',\n    M  : 'a month',\n    MM : '%d months',\n    y  : 'a year',\n    yy : '%d years'\n};\n\nfunction relativeTime (number, withoutSuffix, string, isFuture) {\n    var output = this._relativeTime[string];\n    return (isFunction(output)) ?\n        output(number, withoutSuffix, string, isFuture) :\n        output.replace(/%d/i, number);\n}\n\nfunction pastFuture (diff, output) {\n    var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n    return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n}\n\nvar aliases = {};\n\nfunction addUnitAlias (unit, shorthand) {\n    var lowerCase = unit.toLowerCase();\n    aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n}\n\nfunction normalizeUnits(units) {\n    return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;\n}\n\nfunction normalizeObjectUnits(inputObject) {\n    var normalizedInput = {},\n        normalizedProp,\n        prop;\n\n    for (prop in inputObject) {\n        if (hasOwnProp(inputObject, prop)) {\n            normalizedProp = normalizeUnits(prop);\n            if (normalizedProp) {\n                normalizedInput[normalizedProp] = inputObject[prop];\n            }\n        }\n    }\n\n    return normalizedInput;\n}\n\nvar priorities = {};\n\nfunction addUnitPriority(unit, priority) {\n    priorities[unit] = priority;\n}\n\nfunction getPrioritizedUnits(unitsObj) {\n    var units = [];\n    for (var u in unitsObj) {\n        units.push({unit: u, priority: priorities[u]});\n    }\n    units.sort(function (a, b) {\n        return a.priority - b.priority;\n    });\n    return units;\n}\n\nfunction makeGetSet (unit, keepTime) {\n    return function (value) {\n        if (value != null) {\n            set$1(this, unit, value);\n            hooks.updateOffset(this, keepTime);\n            return this;\n        } else {\n            return get(this, unit);\n        }\n    };\n}\n\nfunction get (mom, unit) {\n    return mom.isValid() ?\n        mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;\n}\n\nfunction set$1 (mom, unit, value) {\n    if (mom.isValid()) {\n        mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n    }\n}\n\n// MOMENTS\n\nfunction stringGet (units) {\n    units = normalizeUnits(units);\n    if (isFunction(this[units])) {\n        return this[units]();\n    }\n    return this;\n}\n\n\nfunction stringSet (units, value) {\n    if (typeof units === 'object') {\n        units = normalizeObjectUnits(units);\n        var prioritized = getPrioritizedUnits(units);\n        for (var i = 0; i < prioritized.length; i++) {\n            this[prioritized[i].unit](units[prioritized[i].unit]);\n        }\n    } else {\n        units = normalizeUnits(units);\n        if (isFunction(this[units])) {\n            return this[units](value);\n        }\n    }\n    return this;\n}\n\nfunction zeroFill(number, targetLength, forceSign) {\n    var absNumber = '' + Math.abs(number),\n        zerosToFill = targetLength - absNumber.length,\n        sign = number >= 0;\n    return (sign ? (forceSign ? '+' : '') : '-') +\n        Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;\n}\n\nvar formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;\n\nvar localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g;\n\nvar formatFunctions = {};\n\nvar formatTokenFunctions = {};\n\n// token:    'M'\n// padded:   ['MM', 2]\n// ordinal:  'Mo'\n// callback: function () { this.month() + 1 }\nfunction addFormatToken (token, padded, ordinal, callback) {\n    var func = callback;\n    if (typeof callback === 'string') {\n        func = function () {\n            return this[callback]();\n        };\n    }\n    if (token) {\n        formatTokenFunctions[token] = func;\n    }\n    if (padded) {\n        formatTokenFunctions[padded[0]] = function () {\n            return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n        };\n    }\n    if (ordinal) {\n        formatTokenFunctions[ordinal] = function () {\n            return this.localeData().ordinal(func.apply(this, arguments), token);\n        };\n    }\n}\n\nfunction removeFormattingTokens(input) {\n    if (input.match(/\\[[\\s\\S]/)) {\n        return input.replace(/^\\[|\\]$/g, '');\n    }\n    return input.replace(/\\\\/g, '');\n}\n\nfunction makeFormatFunction(format) {\n    var array = format.match(formattingTokens), i, length;\n\n    for (i = 0, length = array.length; i < length; i++) {\n        if (formatTokenFunctions[array[i]]) {\n            array[i] = formatTokenFunctions[array[i]];\n        } else {\n            array[i] = removeFormattingTokens(array[i]);\n        }\n    }\n\n    return function (mom) {\n        var output = '', i;\n        for (i = 0; i < length; i++) {\n            output += array[i] instanceof Function ? array[i].call(mom, format) : array[i];\n        }\n        return output;\n    };\n}\n\n// format date using native date object\nfunction formatMoment(m, format) {\n    if (!m.isValid()) {\n        return m.localeData().invalidDate();\n    }\n\n    format = expandFormat(format, m.localeData());\n    formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);\n\n    return formatFunctions[format](m);\n}\n\nfunction expandFormat(format, locale) {\n    var i = 5;\n\n    function replaceLongDateFormatTokens(input) {\n        return locale.longDateFormat(input) || input;\n    }\n\n    localFormattingTokens.lastIndex = 0;\n    while (i >= 0 && localFormattingTokens.test(format)) {\n        format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);\n        localFormattingTokens.lastIndex = 0;\n        i -= 1;\n    }\n\n    return format;\n}\n\nvar match1         = /\\d/;            //       0 - 9\nvar match2         = /\\d\\d/;          //      00 - 99\nvar match3         = /\\d{3}/;         //     000 - 999\nvar match4         = /\\d{4}/;         //    0000 - 9999\nvar match6         = /[+-]?\\d{6}/;    // -999999 - 999999\nvar match1to2      = /\\d\\d?/;         //       0 - 99\nvar match3to4      = /\\d\\d\\d\\d?/;     //     999 - 9999\nvar match5to6      = /\\d\\d\\d\\d\\d\\d?/; //   99999 - 999999\nvar match1to3      = /\\d{1,3}/;       //       0 - 999\nvar match1to4      = /\\d{1,4}/;       //       0 - 9999\nvar match1to6      = /[+-]?\\d{1,6}/;  // -999999 - 999999\n\nvar matchUnsigned  = /\\d+/;           //       0 - inf\nvar matchSigned    = /[+-]?\\d+/;      //    -inf - inf\n\nvar matchOffset    = /Z|[+-]\\d\\d:?\\d\\d/gi; // +00:00 -00:00 +0000 -0000 or Z\nvar matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n\nvar matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/; // 123456789 123456789.123\n\n// any word (or two) characters or numbers including two/three word month in arabic.\n// includes scottish gaelic two word and hyphenated months\nvar matchWord = /[0-9]*['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]+|[\\u0600-\\u06FF\\/]+(\\s*?[\\u0600-\\u06FF]+){1,2}/i;\n\n\nvar regexes = {};\n\nfunction addRegexToken (token, regex, strictRegex) {\n    regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {\n        return (isStrict && strictRegex) ? strictRegex : regex;\n    };\n}\n\nfunction getParseRegexForToken (token, config) {\n    if (!hasOwnProp(regexes, token)) {\n        return new RegExp(unescapeFormat(token));\n    }\n\n    return regexes[token](config._strict, config._locale);\n}\n\n// Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\nfunction unescapeFormat(s) {\n    return regexEscape(s.replace('\\\\', '').replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (matched, p1, p2, p3, p4) {\n        return p1 || p2 || p3 || p4;\n    }));\n}\n\nfunction regexEscape(s) {\n    return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n}\n\nvar tokens = {};\n\nfunction addParseToken (token, callback) {\n    var i, func = callback;\n    if (typeof token === 'string') {\n        token = [token];\n    }\n    if (isNumber(callback)) {\n        func = function (input, array) {\n            array[callback] = toInt(input);\n        };\n    }\n    for (i = 0; i < token.length; i++) {\n        tokens[token[i]] = func;\n    }\n}\n\nfunction addWeekParseToken (token, callback) {\n    addParseToken(token, function (input, array, config, token) {\n        config._w = config._w || {};\n        callback(input, config._w, config, token);\n    });\n}\n\nfunction addTimeToArrayFromToken(token, input, config) {\n    if (input != null && hasOwnProp(tokens, token)) {\n        tokens[token](input, config._a, config, token);\n    }\n}\n\nvar YEAR = 0;\nvar MONTH = 1;\nvar DATE = 2;\nvar HOUR = 3;\nvar MINUTE = 4;\nvar SECOND = 5;\nvar MILLISECOND = 6;\nvar WEEK = 7;\nvar WEEKDAY = 8;\n\nvar indexOf;\n\nif (Array.prototype.indexOf) {\n    indexOf = Array.prototype.indexOf;\n} else {\n    indexOf = function (o) {\n        // I know\n        var i;\n        for (i = 0; i < this.length; ++i) {\n            if (this[i] === o) {\n                return i;\n            }\n        }\n        return -1;\n    };\n}\n\nvar indexOf$1 = indexOf;\n\nfunction daysInMonth(year, month) {\n    return new Date(Date.UTC(year, month + 1, 0)).getUTCDate();\n}\n\n// FORMATTING\n\naddFormatToken('M', ['MM', 2], 'Mo', function () {\n    return this.month() + 1;\n});\n\naddFormatToken('MMM', 0, 0, function (format) {\n    return this.localeData().monthsShort(this, format);\n});\n\naddFormatToken('MMMM', 0, 0, function (format) {\n    return this.localeData().months(this, format);\n});\n\n// ALIASES\n\naddUnitAlias('month', 'M');\n\n// PRIORITY\n\naddUnitPriority('month', 8);\n\n// PARSING\n\naddRegexToken('M',    match1to2);\naddRegexToken('MM',   match1to2, match2);\naddRegexToken('MMM',  function (isStrict, locale) {\n    return locale.monthsShortRegex(isStrict);\n});\naddRegexToken('MMMM', function (isStrict, locale) {\n    return locale.monthsRegex(isStrict);\n});\n\naddParseToken(['M', 'MM'], function (input, array) {\n    array[MONTH] = toInt(input) - 1;\n});\n\naddParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n    var month = config._locale.monthsParse(input, token, config._strict);\n    // if we didn't find a month name, mark the date as invalid.\n    if (month != null) {\n        array[MONTH] = month;\n    } else {\n        getParsingFlags(config).invalidMonth = input;\n    }\n});\n\n// LOCALES\n\nvar MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/;\nvar defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');\nfunction localeMonths (m, format) {\n    if (!m) {\n        return this._months;\n    }\n    return isArray(this._months) ? this._months[m.month()] :\n        this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];\n}\n\nvar defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');\nfunction localeMonthsShort (m, format) {\n    if (!m) {\n        return this._monthsShort;\n    }\n    return isArray(this._monthsShort) ? this._monthsShort[m.month()] :\n        this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];\n}\n\nfunction handleStrictParse(monthName, format, strict) {\n    var i, ii, mom, llc = monthName.toLocaleLowerCase();\n    if (!this._monthsParse) {\n        // this is not used\n        this._monthsParse = [];\n        this._longMonthsParse = [];\n        this._shortMonthsParse = [];\n        for (i = 0; i < 12; ++i) {\n            mom = createUTC([2000, i]);\n            this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();\n            this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n        }\n    }\n\n    if (strict) {\n        if (format === 'MMM') {\n            ii = indexOf$1.call(this._shortMonthsParse, llc);\n            return ii !== -1 ? ii : null;\n        } else {\n            ii = indexOf$1.call(this._longMonthsParse, llc);\n            return ii !== -1 ? ii : null;\n        }\n    } else {\n        if (format === 'MMM') {\n            ii = indexOf$1.call(this._shortMonthsParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf$1.call(this._longMonthsParse, llc);\n            return ii !== -1 ? ii : null;\n        } else {\n            ii = indexOf$1.call(this._longMonthsParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf$1.call(this._shortMonthsParse, llc);\n            return ii !== -1 ? ii : null;\n        }\n    }\n}\n\nfunction localeMonthsParse (monthName, format, strict) {\n    var i, mom, regex;\n\n    if (this._monthsParseExact) {\n        return handleStrictParse.call(this, monthName, format, strict);\n    }\n\n    if (!this._monthsParse) {\n        this._monthsParse = [];\n        this._longMonthsParse = [];\n        this._shortMonthsParse = [];\n    }\n\n    // TODO: add sorting\n    // Sorting makes sure if one month (or abbr) is a prefix of another\n    // see sorting in computeMonthsParse\n    for (i = 0; i < 12; i++) {\n        // make the regex if we don't have it already\n        mom = createUTC([2000, i]);\n        if (strict && !this._longMonthsParse[i]) {\n            this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');\n            this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');\n        }\n        if (!strict && !this._monthsParse[i]) {\n            regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n            this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n        }\n        // test the regex\n        if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {\n            return i;\n        } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {\n            return i;\n        } else if (!strict && this._monthsParse[i].test(monthName)) {\n            return i;\n        }\n    }\n}\n\n// MOMENTS\n\nfunction setMonth (mom, value) {\n    var dayOfMonth;\n\n    if (!mom.isValid()) {\n        // No op\n        return mom;\n    }\n\n    if (typeof value === 'string') {\n        if (/^\\d+$/.test(value)) {\n            value = toInt(value);\n        } else {\n            value = mom.localeData().monthsParse(value);\n            // TODO: Another silent failure?\n            if (!isNumber(value)) {\n                return mom;\n            }\n        }\n    }\n\n    dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n    mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n    return mom;\n}\n\nfunction getSetMonth (value) {\n    if (value != null) {\n        setMonth(this, value);\n        hooks.updateOffset(this, true);\n        return this;\n    } else {\n        return get(this, 'Month');\n    }\n}\n\nfunction getDaysInMonth () {\n    return daysInMonth(this.year(), this.month());\n}\n\nvar defaultMonthsShortRegex = matchWord;\nfunction monthsShortRegex (isStrict) {\n    if (this._monthsParseExact) {\n        if (!hasOwnProp(this, '_monthsRegex')) {\n            computeMonthsParse.call(this);\n        }\n        if (isStrict) {\n            return this._monthsShortStrictRegex;\n        } else {\n            return this._monthsShortRegex;\n        }\n    } else {\n        if (!hasOwnProp(this, '_monthsShortRegex')) {\n            this._monthsShortRegex = defaultMonthsShortRegex;\n        }\n        return this._monthsShortStrictRegex && isStrict ?\n            this._monthsShortStrictRegex : this._monthsShortRegex;\n    }\n}\n\nvar defaultMonthsRegex = matchWord;\nfunction monthsRegex (isStrict) {\n    if (this._monthsParseExact) {\n        if (!hasOwnProp(this, '_monthsRegex')) {\n            computeMonthsParse.call(this);\n        }\n        if (isStrict) {\n            return this._monthsStrictRegex;\n        } else {\n            return this._monthsRegex;\n        }\n    } else {\n        if (!hasOwnProp(this, '_monthsRegex')) {\n            this._monthsRegex = defaultMonthsRegex;\n        }\n        return this._monthsStrictRegex && isStrict ?\n            this._monthsStrictRegex : this._monthsRegex;\n    }\n}\n\nfunction computeMonthsParse () {\n    function cmpLenRev(a, b) {\n        return b.length - a.length;\n    }\n\n    var shortPieces = [], longPieces = [], mixedPieces = [],\n        i, mom;\n    for (i = 0; i < 12; i++) {\n        // make the regex if we don't have it already\n        mom = createUTC([2000, i]);\n        shortPieces.push(this.monthsShort(mom, ''));\n        longPieces.push(this.months(mom, ''));\n        mixedPieces.push(this.months(mom, ''));\n        mixedPieces.push(this.monthsShort(mom, ''));\n    }\n    // Sorting makes sure if one month (or abbr) is a prefix of another it\n    // will match the longer piece.\n    shortPieces.sort(cmpLenRev);\n    longPieces.sort(cmpLenRev);\n    mixedPieces.sort(cmpLenRev);\n    for (i = 0; i < 12; i++) {\n        shortPieces[i] = regexEscape(shortPieces[i]);\n        longPieces[i] = regexEscape(longPieces[i]);\n    }\n    for (i = 0; i < 24; i++) {\n        mixedPieces[i] = regexEscape(mixedPieces[i]);\n    }\n\n    this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n    this._monthsShortRegex = this._monthsRegex;\n    this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n    this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n}\n\n// FORMATTING\n\naddFormatToken('Y', 0, 0, function () {\n    var y = this.year();\n    return y <= 9999 ? '' + y : '+' + y;\n});\n\naddFormatToken(0, ['YY', 2], 0, function () {\n    return this.year() % 100;\n});\n\naddFormatToken(0, ['YYYY',   4],       0, 'year');\naddFormatToken(0, ['YYYYY',  5],       0, 'year');\naddFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n// ALIASES\n\naddUnitAlias('year', 'y');\n\n// PRIORITIES\n\naddUnitPriority('year', 1);\n\n// PARSING\n\naddRegexToken('Y',      matchSigned);\naddRegexToken('YY',     match1to2, match2);\naddRegexToken('YYYY',   match1to4, match4);\naddRegexToken('YYYYY',  match1to6, match6);\naddRegexToken('YYYYYY', match1to6, match6);\n\naddParseToken(['YYYYY', 'YYYYYY'], YEAR);\naddParseToken('YYYY', function (input, array) {\n    array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n});\naddParseToken('YY', function (input, array) {\n    array[YEAR] = hooks.parseTwoDigitYear(input);\n});\naddParseToken('Y', function (input, array) {\n    array[YEAR] = parseInt(input, 10);\n});\n\n// HELPERS\n\nfunction daysInYear(year) {\n    return isLeapYear(year) ? 366 : 365;\n}\n\nfunction isLeapYear(year) {\n    return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n}\n\n// HOOKS\n\nhooks.parseTwoDigitYear = function (input) {\n    return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n};\n\n// MOMENTS\n\nvar getSetYear = makeGetSet('FullYear', true);\n\nfunction getIsLeapYear () {\n    return isLeapYear(this.year());\n}\n\nfunction createDate (y, m, d, h, M, s, ms) {\n    //can't just apply() to create a date:\n    //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply\n    var date = new Date(y, m, d, h, M, s, ms);\n\n    //the date constructor remaps years 0-99 to 1900-1999\n    if (y < 100 && y >= 0 && isFinite(date.getFullYear())) {\n        date.setFullYear(y);\n    }\n    return date;\n}\n\nfunction createUTCDate (y) {\n    var date = new Date(Date.UTC.apply(null, arguments));\n\n    //the Date.UTC function remaps years 0-99 to 1900-1999\n    if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) {\n        date.setUTCFullYear(y);\n    }\n    return date;\n}\n\n// start-of-first-week - start-of-year\nfunction firstWeekOffset(year, dow, doy) {\n    var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n        fwd = 7 + dow - doy,\n        // first-week day local weekday -- which local weekday is fwd\n        fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n    return -fwdlw + fwd - 1;\n}\n\n//http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\nfunction dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n    var localWeekday = (7 + weekday - dow) % 7,\n        weekOffset = firstWeekOffset(year, dow, doy),\n        dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n        resYear, resDayOfYear;\n\n    if (dayOfYear <= 0) {\n        resYear = year - 1;\n        resDayOfYear = daysInYear(resYear) + dayOfYear;\n    } else if (dayOfYear > daysInYear(year)) {\n        resYear = year + 1;\n        resDayOfYear = dayOfYear - daysInYear(year);\n    } else {\n        resYear = year;\n        resDayOfYear = dayOfYear;\n    }\n\n    return {\n        year: resYear,\n        dayOfYear: resDayOfYear\n    };\n}\n\nfunction weekOfYear(mom, dow, doy) {\n    var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n        week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n        resWeek, resYear;\n\n    if (week < 1) {\n        resYear = mom.year() - 1;\n        resWeek = week + weeksInYear(resYear, dow, doy);\n    } else if (week > weeksInYear(mom.year(), dow, doy)) {\n        resWeek = week - weeksInYear(mom.year(), dow, doy);\n        resYear = mom.year() + 1;\n    } else {\n        resYear = mom.year();\n        resWeek = week;\n    }\n\n    return {\n        week: resWeek,\n        year: resYear\n    };\n}\n\nfunction weeksInYear(year, dow, doy) {\n    var weekOffset = firstWeekOffset(year, dow, doy),\n        weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n    return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n}\n\n// FORMATTING\n\naddFormatToken('w', ['ww', 2], 'wo', 'week');\naddFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n// ALIASES\n\naddUnitAlias('week', 'w');\naddUnitAlias('isoWeek', 'W');\n\n// PRIORITIES\n\naddUnitPriority('week', 5);\naddUnitPriority('isoWeek', 5);\n\n// PARSING\n\naddRegexToken('w',  match1to2);\naddRegexToken('ww', match1to2, match2);\naddRegexToken('W',  match1to2);\naddRegexToken('WW', match1to2, match2);\n\naddWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {\n    week[token.substr(0, 1)] = toInt(input);\n});\n\n// HELPERS\n\n// LOCALES\n\nfunction localeWeek (mom) {\n    return weekOfYear(mom, this._week.dow, this._week.doy).week;\n}\n\nvar defaultLocaleWeek = {\n    dow : 0, // Sunday is the first day of the week.\n    doy : 6  // The week that contains Jan 1st is the first week of the year.\n};\n\nfunction localeFirstDayOfWeek () {\n    return this._week.dow;\n}\n\nfunction localeFirstDayOfYear () {\n    return this._week.doy;\n}\n\n// MOMENTS\n\nfunction getSetWeek (input) {\n    var week = this.localeData().week(this);\n    return input == null ? week : this.add((input - week) * 7, 'd');\n}\n\nfunction getSetISOWeek (input) {\n    var week = weekOfYear(this, 1, 4).week;\n    return input == null ? week : this.add((input - week) * 7, 'd');\n}\n\n// FORMATTING\n\naddFormatToken('d', 0, 'do', 'day');\n\naddFormatToken('dd', 0, 0, function (format) {\n    return this.localeData().weekdaysMin(this, format);\n});\n\naddFormatToken('ddd', 0, 0, function (format) {\n    return this.localeData().weekdaysShort(this, format);\n});\n\naddFormatToken('dddd', 0, 0, function (format) {\n    return this.localeData().weekdays(this, format);\n});\n\naddFormatToken('e', 0, 0, 'weekday');\naddFormatToken('E', 0, 0, 'isoWeekday');\n\n// ALIASES\n\naddUnitAlias('day', 'd');\naddUnitAlias('weekday', 'e');\naddUnitAlias('isoWeekday', 'E');\n\n// PRIORITY\naddUnitPriority('day', 11);\naddUnitPriority('weekday', 11);\naddUnitPriority('isoWeekday', 11);\n\n// PARSING\n\naddRegexToken('d',    match1to2);\naddRegexToken('e',    match1to2);\naddRegexToken('E',    match1to2);\naddRegexToken('dd',   function (isStrict, locale) {\n    return locale.weekdaysMinRegex(isStrict);\n});\naddRegexToken('ddd',   function (isStrict, locale) {\n    return locale.weekdaysShortRegex(isStrict);\n});\naddRegexToken('dddd',   function (isStrict, locale) {\n    return locale.weekdaysRegex(isStrict);\n});\n\naddWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n    var weekday = config._locale.weekdaysParse(input, token, config._strict);\n    // if we didn't get a weekday name, mark the date as invalid\n    if (weekday != null) {\n        week.d = weekday;\n    } else {\n        getParsingFlags(config).invalidWeekday = input;\n    }\n});\n\naddWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n    week[token] = toInt(input);\n});\n\n// HELPERS\n\nfunction parseWeekday(input, locale) {\n    if (typeof input !== 'string') {\n        return input;\n    }\n\n    if (!isNaN(input)) {\n        return parseInt(input, 10);\n    }\n\n    input = locale.weekdaysParse(input);\n    if (typeof input === 'number') {\n        return input;\n    }\n\n    return null;\n}\n\nfunction parseIsoWeekday(input, locale) {\n    if (typeof input === 'string') {\n        return locale.weekdaysParse(input) % 7 || 7;\n    }\n    return isNaN(input) ? null : input;\n}\n\n// LOCALES\n\nvar defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');\nfunction localeWeekdays (m, format) {\n    if (!m) {\n        return this._weekdays;\n    }\n    return isArray(this._weekdays) ? this._weekdays[m.day()] :\n        this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()];\n}\n\nvar defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');\nfunction localeWeekdaysShort (m) {\n    return (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort;\n}\n\nvar defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');\nfunction localeWeekdaysMin (m) {\n    return (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin;\n}\n\nfunction handleStrictParse$1(weekdayName, format, strict) {\n    var i, ii, mom, llc = weekdayName.toLocaleLowerCase();\n    if (!this._weekdaysParse) {\n        this._weekdaysParse = [];\n        this._shortWeekdaysParse = [];\n        this._minWeekdaysParse = [];\n\n        for (i = 0; i < 7; ++i) {\n            mom = createUTC([2000, 1]).day(i);\n            this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();\n            this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();\n            this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n        }\n    }\n\n    if (strict) {\n        if (format === 'dddd') {\n            ii = indexOf$1.call(this._weekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n        } else if (format === 'ddd') {\n            ii = indexOf$1.call(this._shortWeekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n        } else {\n            ii = indexOf$1.call(this._minWeekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n        }\n    } else {\n        if (format === 'dddd') {\n            ii = indexOf$1.call(this._weekdaysParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf$1.call(this._shortWeekdaysParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf$1.call(this._minWeekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n        } else if (format === 'ddd') {\n            ii = indexOf$1.call(this._shortWeekdaysParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf$1.call(this._weekdaysParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf$1.call(this._minWeekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n        } else {\n            ii = indexOf$1.call(this._minWeekdaysParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf$1.call(this._weekdaysParse, llc);\n            if (ii !== -1) {\n                return ii;\n            }\n            ii = indexOf$1.call(this._shortWeekdaysParse, llc);\n            return ii !== -1 ? ii : null;\n        }\n    }\n}\n\nfunction localeWeekdaysParse (weekdayName, format, strict) {\n    var i, mom, regex;\n\n    if (this._weekdaysParseExact) {\n        return handleStrictParse$1.call(this, weekdayName, format, strict);\n    }\n\n    if (!this._weekdaysParse) {\n        this._weekdaysParse = [];\n        this._minWeekdaysParse = [];\n        this._shortWeekdaysParse = [];\n        this._fullWeekdaysParse = [];\n    }\n\n    for (i = 0; i < 7; i++) {\n        // make the regex if we don't have it already\n\n        mom = createUTC([2000, 1]).day(i);\n        if (strict && !this._fullWeekdaysParse[i]) {\n            this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\\.?') + '$', 'i');\n            this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$', 'i');\n            this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$', 'i');\n        }\n        if (!this._weekdaysParse[i]) {\n            regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');\n            this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n        }\n        // test the regex\n        if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {\n            return i;\n        } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {\n            return i;\n        } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {\n            return i;\n        } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n            return i;\n        }\n    }\n}\n\n// MOMENTS\n\nfunction getSetDayOfWeek (input) {\n    if (!this.isValid()) {\n        return input != null ? this : NaN;\n    }\n    var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n    if (input != null) {\n        input = parseWeekday(input, this.localeData());\n        return this.add(input - day, 'd');\n    } else {\n        return day;\n    }\n}\n\nfunction getSetLocaleDayOfWeek (input) {\n    if (!this.isValid()) {\n        return input != null ? this : NaN;\n    }\n    var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n    return input == null ? weekday : this.add(input - weekday, 'd');\n}\n\nfunction getSetISODayOfWeek (input) {\n    if (!this.isValid()) {\n        return input != null ? this : NaN;\n    }\n\n    // behaves the same as moment#day except\n    // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n    // as a setter, sunday should belong to the previous week.\n\n    if (input != null) {\n        var weekday = parseIsoWeekday(input, this.localeData());\n        return this.day(this.day() % 7 ? weekday : weekday - 7);\n    } else {\n        return this.day() || 7;\n    }\n}\n\nvar defaultWeekdaysRegex = matchWord;\nfunction weekdaysRegex (isStrict) {\n    if (this._weekdaysParseExact) {\n        if (!hasOwnProp(this, '_weekdaysRegex')) {\n            computeWeekdaysParse.call(this);\n        }\n        if (isStrict) {\n            return this._weekdaysStrictRegex;\n        } else {\n            return this._weekdaysRegex;\n        }\n    } else {\n        if (!hasOwnProp(this, '_weekdaysRegex')) {\n            this._weekdaysRegex = defaultWeekdaysRegex;\n        }\n        return this._weekdaysStrictRegex && isStrict ?\n            this._weekdaysStrictRegex : this._weekdaysRegex;\n    }\n}\n\nvar defaultWeekdaysShortRegex = matchWord;\nfunction weekdaysShortRegex (isStrict) {\n    if (this._weekdaysParseExact) {\n        if (!hasOwnProp(this, '_weekdaysRegex')) {\n            computeWeekdaysParse.call(this);\n        }\n        if (isStrict) {\n            return this._weekdaysShortStrictRegex;\n        } else {\n            return this._weekdaysShortRegex;\n        }\n    } else {\n        if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n            this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n        }\n        return this._weekdaysShortStrictRegex && isStrict ?\n            this._weekdaysShortStrictRegex : this._weekdaysShortRegex;\n    }\n}\n\nvar defaultWeekdaysMinRegex = matchWord;\nfunction weekdaysMinRegex (isStrict) {\n    if (this._weekdaysParseExact) {\n        if (!hasOwnProp(this, '_weekdaysRegex')) {\n            computeWeekdaysParse.call(this);\n        }\n        if (isStrict) {\n            return this._weekdaysMinStrictRegex;\n        } else {\n            return this._weekdaysMinRegex;\n        }\n    } else {\n        if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n            this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n        }\n        return this._weekdaysMinStrictRegex && isStrict ?\n            this._weekdaysMinStrictRegex : this._weekdaysMinRegex;\n    }\n}\n\n\nfunction computeWeekdaysParse () {\n    function cmpLenRev(a, b) {\n        return b.length - a.length;\n    }\n\n    var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],\n        i, mom, minp, shortp, longp;\n    for (i = 0; i < 7; i++) {\n        // make the regex if we don't have it already\n        mom = createUTC([2000, 1]).day(i);\n        minp = this.weekdaysMin(mom, '');\n        shortp = this.weekdaysShort(mom, '');\n        longp = this.weekdays(mom, '');\n        minPieces.push(minp);\n        shortPieces.push(shortp);\n        longPieces.push(longp);\n        mixedPieces.push(minp);\n        mixedPieces.push(shortp);\n        mixedPieces.push(longp);\n    }\n    // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n    // will match the longer piece.\n    minPieces.sort(cmpLenRev);\n    shortPieces.sort(cmpLenRev);\n    longPieces.sort(cmpLenRev);\n    mixedPieces.sort(cmpLenRev);\n    for (i = 0; i < 7; i++) {\n        shortPieces[i] = regexEscape(shortPieces[i]);\n        longPieces[i] = regexEscape(longPieces[i]);\n        mixedPieces[i] = regexEscape(mixedPieces[i]);\n    }\n\n    this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n    this._weekdaysShortRegex = this._weekdaysRegex;\n    this._weekdaysMinRegex = this._weekdaysRegex;\n\n    this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n    this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n    this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');\n}\n\n// FORMATTING\n\nfunction hFormat() {\n    return this.hours() % 12 || 12;\n}\n\nfunction kFormat() {\n    return this.hours() || 24;\n}\n\naddFormatToken('H', ['HH', 2], 0, 'hour');\naddFormatToken('h', ['hh', 2], 0, hFormat);\naddFormatToken('k', ['kk', 2], 0, kFormat);\n\naddFormatToken('hmm', 0, 0, function () {\n    return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n});\n\naddFormatToken('hmmss', 0, 0, function () {\n    return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +\n        zeroFill(this.seconds(), 2);\n});\n\naddFormatToken('Hmm', 0, 0, function () {\n    return '' + this.hours() + zeroFill(this.minutes(), 2);\n});\n\naddFormatToken('Hmmss', 0, 0, function () {\n    return '' + this.hours() + zeroFill(this.minutes(), 2) +\n        zeroFill(this.seconds(), 2);\n});\n\nfunction meridiem (token, lowercase) {\n    addFormatToken(token, 0, 0, function () {\n        return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);\n    });\n}\n\nmeridiem('a', true);\nmeridiem('A', false);\n\n// ALIASES\n\naddUnitAlias('hour', 'h');\n\n// PRIORITY\naddUnitPriority('hour', 13);\n\n// PARSING\n\nfunction matchMeridiem (isStrict, locale) {\n    return locale._meridiemParse;\n}\n\naddRegexToken('a',  matchMeridiem);\naddRegexToken('A',  matchMeridiem);\naddRegexToken('H',  match1to2);\naddRegexToken('h',  match1to2);\naddRegexToken('HH', match1to2, match2);\naddRegexToken('hh', match1to2, match2);\n\naddRegexToken('hmm', match3to4);\naddRegexToken('hmmss', match5to6);\naddRegexToken('Hmm', match3to4);\naddRegexToken('Hmmss', match5to6);\n\naddParseToken(['H', 'HH'], HOUR);\naddParseToken(['a', 'A'], function (input, array, config) {\n    config._isPm = config._locale.isPM(input);\n    config._meridiem = input;\n});\naddParseToken(['h', 'hh'], function (input, array, config) {\n    array[HOUR] = toInt(input);\n    getParsingFlags(config).bigHour = true;\n});\naddParseToken('hmm', function (input, array, config) {\n    var pos = input.length - 2;\n    array[HOUR] = toInt(input.substr(0, pos));\n    array[MINUTE] = toInt(input.substr(pos));\n    getParsingFlags(config).bigHour = true;\n});\naddParseToken('hmmss', function (input, array, config) {\n    var pos1 = input.length - 4;\n    var pos2 = input.length - 2;\n    array[HOUR] = toInt(input.substr(0, pos1));\n    array[MINUTE] = toInt(input.substr(pos1, 2));\n    array[SECOND] = toInt(input.substr(pos2));\n    getParsingFlags(config).bigHour = true;\n});\naddParseToken('Hmm', function (input, array, config) {\n    var pos = input.length - 2;\n    array[HOUR] = toInt(input.substr(0, pos));\n    array[MINUTE] = toInt(input.substr(pos));\n});\naddParseToken('Hmmss', function (input, array, config) {\n    var pos1 = input.length - 4;\n    var pos2 = input.length - 2;\n    array[HOUR] = toInt(input.substr(0, pos1));\n    array[MINUTE] = toInt(input.substr(pos1, 2));\n    array[SECOND] = toInt(input.substr(pos2));\n});\n\n// LOCALES\n\nfunction localeIsPM (input) {\n    // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n    // Using charAt should be more compatible.\n    return ((input + '').toLowerCase().charAt(0) === 'p');\n}\n\nvar defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i;\nfunction localeMeridiem (hours, minutes, isLower) {\n    if (hours > 11) {\n        return isLower ? 'pm' : 'PM';\n    } else {\n        return isLower ? 'am' : 'AM';\n    }\n}\n\n\n// MOMENTS\n\n// Setting the hour should keep the time, because the user explicitly\n// specified which hour he wants. So trying to maintain the same hour (in\n// a new timezone) makes sense. Adding/subtracting hours does not follow\n// this rule.\nvar getSetHour = makeGetSet('Hours', true);\n\n// months\n// week\n// weekdays\n// meridiem\nvar baseConfig = {\n    calendar: defaultCalendar,\n    longDateFormat: defaultLongDateFormat,\n    invalidDate: defaultInvalidDate,\n    ordinal: defaultOrdinal,\n    ordinalParse: defaultOrdinalParse,\n    relativeTime: defaultRelativeTime,\n\n    months: defaultLocaleMonths,\n    monthsShort: defaultLocaleMonthsShort,\n\n    week: defaultLocaleWeek,\n\n    weekdays: defaultLocaleWeekdays,\n    weekdaysMin: defaultLocaleWeekdaysMin,\n    weekdaysShort: defaultLocaleWeekdaysShort,\n\n    meridiemParse: defaultLocaleMeridiemParse\n};\n\n// internal storage for locale config files\nvar locales = {};\nvar localeFamilies = {};\nvar globalLocale;\n\nfunction normalizeLocale(key) {\n    return key ? key.toLowerCase().replace('_', '-') : key;\n}\n\n// pick the locale from the array\n// try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n// substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\nfunction chooseLocale(names) {\n    var i = 0, j, next, locale, split;\n\n    while (i < names.length) {\n        split = normalizeLocale(names[i]).split('-');\n        j = split.length;\n        next = normalizeLocale(names[i + 1]);\n        next = next ? next.split('-') : null;\n        while (j > 0) {\n            locale = loadLocale(split.slice(0, j).join('-'));\n            if (locale) {\n                return locale;\n            }\n            if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {\n                //the next array item is better than a shallower substring of this one\n                break;\n            }\n            j--;\n        }\n        i++;\n    }\n    return null;\n}\n\nfunction loadLocale(name) {\n    var oldLocale = null;\n    // TODO: Find a better way to register and load all the locales in Node\n    if (!locales[name] && (typeof module !== 'undefined') &&\n            module && module.exports) {\n        try {\n            oldLocale = globalLocale._abbr;\n            require('./locale/' + name);\n            // because defineLocale currently also sets the global locale, we\n            // want to undo that for lazy loaded locales\n            getSetGlobalLocale(oldLocale);\n        } catch (e) { }\n    }\n    return locales[name];\n}\n\n// This function will load locale and then set the global locale.  If\n// no arguments are passed in, it will simply return the current global\n// locale key.\nfunction getSetGlobalLocale (key, values) {\n    var data;\n    if (key) {\n        if (isUndefined(values)) {\n            data = getLocale(key);\n        }\n        else {\n            data = defineLocale(key, values);\n        }\n\n        if (data) {\n            // moment.duration._locale = moment._locale = data;\n            globalLocale = data;\n        }\n    }\n\n    return globalLocale._abbr;\n}\n\nfunction defineLocale (name, config) {\n    if (config !== null) {\n        var parentConfig = baseConfig;\n        config.abbr = name;\n        if (locales[name] != null) {\n            deprecateSimple('defineLocaleOverride',\n                    'use moment.updateLocale(localeName, config) to change ' +\n                    'an existing locale. moment.defineLocale(localeName, ' +\n                    'config) should only be used for creating a new locale ' +\n                    'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');\n            parentConfig = locales[name]._config;\n        } else if (config.parentLocale != null) {\n            if (locales[config.parentLocale] != null) {\n                parentConfig = locales[config.parentLocale]._config;\n            } else {\n                if (!localeFamilies[config.parentLocale]) {\n                    localeFamilies[config.parentLocale] = [];\n                }\n                localeFamilies[config.parentLocale].push({\n                    name: name,\n                    config: config\n                });\n                return null;\n            }\n        }\n        locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n        if (localeFamilies[name]) {\n            localeFamilies[name].forEach(function (x) {\n                defineLocale(x.name, x.config);\n            });\n        }\n\n        // backwards compat for now: also set the locale\n        // make sure we set the locale AFTER all child locales have been\n        // created, so we won't end up with the child locale set.\n        getSetGlobalLocale(name);\n\n\n        return locales[name];\n    } else {\n        // useful for testing\n        delete locales[name];\n        return null;\n    }\n}\n\nfunction updateLocale(name, config) {\n    if (config != null) {\n        var locale, parentConfig = baseConfig;\n        // MERGE\n        if (locales[name] != null) {\n            parentConfig = locales[name]._config;\n        }\n        config = mergeConfigs(parentConfig, config);\n        locale = new Locale(config);\n        locale.parentLocale = locales[name];\n        locales[name] = locale;\n\n        // backwards compat for now: also set the locale\n        getSetGlobalLocale(name);\n    } else {\n        // pass null for config to unupdate, useful for tests\n        if (locales[name] != null) {\n            if (locales[name].parentLocale != null) {\n                locales[name] = locales[name].parentLocale;\n            } else if (locales[name] != null) {\n                delete locales[name];\n            }\n        }\n    }\n    return locales[name];\n}\n\n// returns locale data\nfunction getLocale (key) {\n    var locale;\n\n    if (key && key._locale && key._locale._abbr) {\n        key = key._locale._abbr;\n    }\n\n    if (!key) {\n        return globalLocale;\n    }\n\n    if (!isArray(key)) {\n        //short-circuit everything else\n        locale = loadLocale(key);\n        if (locale) {\n            return locale;\n        }\n        key = [key];\n    }\n\n    return chooseLocale(key);\n}\n\nfunction listLocales() {\n    return keys$1(locales);\n}\n\nfunction checkOverflow (m) {\n    var overflow;\n    var a = m._a;\n\n    if (a && getParsingFlags(m).overflow === -2) {\n        overflow =\n            a[MONTH]       < 0 || a[MONTH]       > 11  ? MONTH :\n            a[DATE]        < 1 || a[DATE]        > daysInMonth(a[YEAR], a[MONTH]) ? DATE :\n            a[HOUR]        < 0 || a[HOUR]        > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :\n            a[MINUTE]      < 0 || a[MINUTE]      > 59  ? MINUTE :\n            a[SECOND]      < 0 || a[SECOND]      > 59  ? SECOND :\n            a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :\n            -1;\n\n        if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {\n            overflow = DATE;\n        }\n        if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n            overflow = WEEK;\n        }\n        if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n            overflow = WEEKDAY;\n        }\n\n        getParsingFlags(m).overflow = overflow;\n    }\n\n    return m;\n}\n\n// iso 8601 regex\n// 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\nvar extendedIsoRegex = /^\\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)?)?$/;\nvar basicIsoRegex = /^\\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)?)?$/;\n\nvar tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/;\n\nvar isoDates = [\n    ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n    ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n    ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n    ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n    ['YYYY-DDD', /\\d{4}-\\d{3}/],\n    ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n    ['YYYYYYMMDD', /[+-]\\d{10}/],\n    ['YYYYMMDD', /\\d{8}/],\n    // YYYYMM is NOT allowed by the standard\n    ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n    ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n    ['YYYYDDD', /\\d{7}/]\n];\n\n// iso time formats and regexes\nvar isoTimes = [\n    ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n    ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n    ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n    ['HH:mm', /\\d\\d:\\d\\d/],\n    ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n    ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n    ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n    ['HHmm', /\\d\\d\\d\\d/],\n    ['HH', /\\d\\d/]\n];\n\nvar aspNetJsonRegex = /^\\/?Date\\((\\-?\\d+)/i;\n\n// date from iso format\nfunction configFromISO(config) {\n    var i, l,\n        string = config._i,\n        match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n        allowTime, dateFormat, timeFormat, tzFormat;\n\n    if (match) {\n        getParsingFlags(config).iso = true;\n\n        for (i = 0, l = isoDates.length; i < l; i++) {\n            if (isoDates[i][1].exec(match[1])) {\n                dateFormat = isoDates[i][0];\n                allowTime = isoDates[i][2] !== false;\n                break;\n            }\n        }\n        if (dateFormat == null) {\n            config._isValid = false;\n            return;\n        }\n        if (match[3]) {\n            for (i = 0, l = isoTimes.length; i < l; i++) {\n                if (isoTimes[i][1].exec(match[3])) {\n                    // match[2] should be 'T' or space\n                    timeFormat = (match[2] || ' ') + isoTimes[i][0];\n                    break;\n                }\n            }\n            if (timeFormat == null) {\n                config._isValid = false;\n                return;\n            }\n        }\n        if (!allowTime && timeFormat != null) {\n            config._isValid = false;\n            return;\n        }\n        if (match[4]) {\n            if (tzRegex.exec(match[4])) {\n                tzFormat = 'Z';\n            } else {\n                config._isValid = false;\n                return;\n            }\n        }\n        config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n        configFromStringAndFormat(config);\n    } else {\n        config._isValid = false;\n    }\n}\n\n// date from iso format or fallback\nfunction configFromString(config) {\n    var matched = aspNetJsonRegex.exec(config._i);\n\n    if (matched !== null) {\n        config._d = new Date(+matched[1]);\n        return;\n    }\n\n    configFromISO(config);\n    if (config._isValid === false) {\n        delete config._isValid;\n        hooks.createFromInputFallback(config);\n    }\n}\n\nhooks.createFromInputFallback = deprecate(\n    'value provided is not in a recognized ISO format. moment construction falls back to js Date(), ' +\n    'which is not reliable across all browsers and versions. Non ISO date formats are ' +\n    'discouraged and will be removed in an upcoming major release. Please refer to ' +\n    'http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n    function (config) {\n        config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n    }\n);\n\n// Pick the first defined of two or three arguments.\nfunction defaults(a, b, c) {\n    if (a != null) {\n        return a;\n    }\n    if (b != null) {\n        return b;\n    }\n    return c;\n}\n\nfunction currentDateArray(config) {\n    // hooks is actually the exported moment object\n    var nowValue = new Date(hooks.now());\n    if (config._useUTC) {\n        return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];\n    }\n    return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n}\n\n// convert an array to a date.\n// the array should mirror the parameters below\n// note: all values past the year are optional and will default to the lowest possible value.\n// [year, month, day , hour, minute, second, millisecond]\nfunction configFromArray (config) {\n    var i, date, input = [], currentDate, yearToUse;\n\n    if (config._d) {\n        return;\n    }\n\n    currentDate = currentDateArray(config);\n\n    //compute day of the year from weeks and weekdays\n    if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n        dayOfYearFromWeekInfo(config);\n    }\n\n    //if the day of the year is set, figure out what it is\n    if (config._dayOfYear) {\n        yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n        if (config._dayOfYear > daysInYear(yearToUse)) {\n            getParsingFlags(config)._overflowDayOfYear = true;\n        }\n\n        date = createUTCDate(yearToUse, 0, config._dayOfYear);\n        config._a[MONTH] = date.getUTCMonth();\n        config._a[DATE] = date.getUTCDate();\n    }\n\n    // Default to current date.\n    // * if no year, month, day of month are given, default to today\n    // * if day of month is given, default month and year\n    // * if month is given, default only year\n    // * if year is given, don't default anything\n    for (i = 0; i < 3 && config._a[i] == null; ++i) {\n        config._a[i] = input[i] = currentDate[i];\n    }\n\n    // Zero out whatever was not defaulted, including time\n    for (; i < 7; i++) {\n        config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];\n    }\n\n    // Check for 24:00:00.000\n    if (config._a[HOUR] === 24 &&\n            config._a[MINUTE] === 0 &&\n            config._a[SECOND] === 0 &&\n            config._a[MILLISECOND] === 0) {\n        config._nextDay = true;\n        config._a[HOUR] = 0;\n    }\n\n    config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);\n    // Apply timezone offset from input. The actual utcOffset can be changed\n    // with parseZone.\n    if (config._tzm != null) {\n        config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n    }\n\n    if (config._nextDay) {\n        config._a[HOUR] = 24;\n    }\n}\n\nfunction dayOfYearFromWeekInfo(config) {\n    var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;\n\n    w = config._w;\n    if (w.GG != null || w.W != null || w.E != null) {\n        dow = 1;\n        doy = 4;\n\n        // TODO: We need to take the current isoWeekYear, but that depends on\n        // how we interpret now (local, utc, fixed offset). So create\n        // a now version of current config (take local/utc/offset flags, and\n        // create now).\n        weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);\n        week = defaults(w.W, 1);\n        weekday = defaults(w.E, 1);\n        if (weekday < 1 || weekday > 7) {\n            weekdayOverflow = true;\n        }\n    } else {\n        dow = config._locale._week.dow;\n        doy = config._locale._week.doy;\n\n        var curWeek = weekOfYear(createLocal(), dow, doy);\n\n        weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n        // Default to current week.\n        week = defaults(w.w, curWeek.week);\n\n        if (w.d != null) {\n            // weekday -- low day numbers are considered next week\n            weekday = w.d;\n            if (weekday < 0 || weekday > 6) {\n                weekdayOverflow = true;\n            }\n        } else if (w.e != null) {\n            // local weekday -- counting starts from begining of week\n            weekday = w.e + dow;\n            if (w.e < 0 || w.e > 6) {\n                weekdayOverflow = true;\n            }\n        } else {\n            // default to begining of week\n            weekday = dow;\n        }\n    }\n    if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n        getParsingFlags(config)._overflowWeeks = true;\n    } else if (weekdayOverflow != null) {\n        getParsingFlags(config)._overflowWeekday = true;\n    } else {\n        temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n        config._a[YEAR] = temp.year;\n        config._dayOfYear = temp.dayOfYear;\n    }\n}\n\n// constant that refers to the ISO standard\nhooks.ISO_8601 = function () {};\n\n// date from string and format string\nfunction configFromStringAndFormat(config) {\n    // TODO: Move this to another part of the creation flow to prevent circular deps\n    if (config._f === hooks.ISO_8601) {\n        configFromISO(config);\n        return;\n    }\n\n    config._a = [];\n    getParsingFlags(config).empty = true;\n\n    // This array is used to make a Date, either with `new Date` or `Date.UTC`\n    var string = '' + config._i,\n        i, parsedInput, tokens, token, skipped,\n        stringLength = string.length,\n        totalParsedInputLength = 0;\n\n    tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\n    for (i = 0; i < tokens.length; i++) {\n        token = tokens[i];\n        parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];\n        // console.log('token', token, 'parsedInput', parsedInput,\n        //         'regex', getParseRegexForToken(token, config));\n        if (parsedInput) {\n            skipped = string.substr(0, string.indexOf(parsedInput));\n            if (skipped.length > 0) {\n                getParsingFlags(config).unusedInput.push(skipped);\n            }\n            string = string.slice(string.indexOf(parsedInput) + parsedInput.length);\n            totalParsedInputLength += parsedInput.length;\n        }\n        // don't parse if it's not a known token\n        if (formatTokenFunctions[token]) {\n            if (parsedInput) {\n                getParsingFlags(config).empty = false;\n            }\n            else {\n                getParsingFlags(config).unusedTokens.push(token);\n            }\n            addTimeToArrayFromToken(token, parsedInput, config);\n        }\n        else if (config._strict && !parsedInput) {\n            getParsingFlags(config).unusedTokens.push(token);\n        }\n    }\n\n    // add remaining unparsed input length to the string\n    getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;\n    if (string.length > 0) {\n        getParsingFlags(config).unusedInput.push(string);\n    }\n\n    // clear _12h flag if hour is <= 12\n    if (config._a[HOUR] <= 12 &&\n        getParsingFlags(config).bigHour === true &&\n        config._a[HOUR] > 0) {\n        getParsingFlags(config).bigHour = undefined;\n    }\n\n    getParsingFlags(config).parsedDateParts = config._a.slice(0);\n    getParsingFlags(config).meridiem = config._meridiem;\n    // handle meridiem\n    config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);\n\n    configFromArray(config);\n    checkOverflow(config);\n}\n\n\nfunction meridiemFixWrap (locale, hour, meridiem) {\n    var isPm;\n\n    if (meridiem == null) {\n        // nothing to do\n        return hour;\n    }\n    if (locale.meridiemHour != null) {\n        return locale.meridiemHour(hour, meridiem);\n    } else if (locale.isPM != null) {\n        // Fallback\n        isPm = locale.isPM(meridiem);\n        if (isPm && hour < 12) {\n            hour += 12;\n        }\n        if (!isPm && hour === 12) {\n            hour = 0;\n        }\n        return hour;\n    } else {\n        // this is not supposed to happen\n        return hour;\n    }\n}\n\n// date from string and array of format strings\nfunction configFromStringAndArray(config) {\n    var tempConfig,\n        bestMoment,\n\n        scoreToBeat,\n        i,\n        currentScore;\n\n    if (config._f.length === 0) {\n        getParsingFlags(config).invalidFormat = true;\n        config._d = new Date(NaN);\n        return;\n    }\n\n    for (i = 0; i < config._f.length; i++) {\n        currentScore = 0;\n        tempConfig = copyConfig({}, config);\n        if (config._useUTC != null) {\n            tempConfig._useUTC = config._useUTC;\n        }\n        tempConfig._f = config._f[i];\n        configFromStringAndFormat(tempConfig);\n\n        if (!isValid(tempConfig)) {\n            continue;\n        }\n\n        // if there is any input that was not parsed add a penalty for that format\n        currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n        //or tokens\n        currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n        getParsingFlags(tempConfig).score = currentScore;\n\n        if (scoreToBeat == null || currentScore < scoreToBeat) {\n            scoreToBeat = currentScore;\n            bestMoment = tempConfig;\n        }\n    }\n\n    extend(config, bestMoment || tempConfig);\n}\n\nfunction configFromObject(config) {\n    if (config._d) {\n        return;\n    }\n\n    var i = normalizeObjectUnits(config._i);\n    config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {\n        return obj && parseInt(obj, 10);\n    });\n\n    configFromArray(config);\n}\n\nfunction createFromConfig (config) {\n    var res = new Moment(checkOverflow(prepareConfig(config)));\n    if (res._nextDay) {\n        // Adding is smart enough around DST\n        res.add(1, 'd');\n        res._nextDay = undefined;\n    }\n\n    return res;\n}\n\nfunction prepareConfig (config) {\n    var input = config._i,\n        format = config._f;\n\n    config._locale = config._locale || getLocale(config._l);\n\n    if (input === null || (format === undefined && input === '')) {\n        return createInvalid({nullInput: true});\n    }\n\n    if (typeof input === 'string') {\n        config._i = input = config._locale.preparse(input);\n    }\n\n    if (isMoment(input)) {\n        return new Moment(checkOverflow(input));\n    } else if (isDate(input)) {\n        config._d = input;\n    } else if (isArray(format)) {\n        configFromStringAndArray(config);\n    } else if (format) {\n        configFromStringAndFormat(config);\n    }  else {\n        configFromInput(config);\n    }\n\n    if (!isValid(config)) {\n        config._d = null;\n    }\n\n    return config;\n}\n\nfunction configFromInput(config) {\n    var input = config._i;\n    if (input === undefined) {\n        config._d = new Date(hooks.now());\n    } else if (isDate(input)) {\n        config._d = new Date(input.valueOf());\n    } else if (typeof input === 'string') {\n        configFromString(config);\n    } else if (isArray(input)) {\n        config._a = map(input.slice(0), function (obj) {\n            return parseInt(obj, 10);\n        });\n        configFromArray(config);\n    } else if (typeof(input) === 'object') {\n        configFromObject(config);\n    } else if (isNumber(input)) {\n        // from milliseconds\n        config._d = new Date(input);\n    } else {\n        hooks.createFromInputFallback(config);\n    }\n}\n\nfunction createLocalOrUTC (input, format, locale, strict, isUTC) {\n    var c = {};\n\n    if (locale === true || locale === false) {\n        strict = locale;\n        locale = undefined;\n    }\n\n    if ((isObject(input) && isObjectEmpty(input)) ||\n            (isArray(input) && input.length === 0)) {\n        input = undefined;\n    }\n    // object construction must be done this way.\n    // https://github.com/moment/moment/issues/1423\n    c._isAMomentObject = true;\n    c._useUTC = c._isUTC = isUTC;\n    c._l = locale;\n    c._i = input;\n    c._f = format;\n    c._strict = strict;\n\n    return createFromConfig(c);\n}\n\nfunction createLocal (input, format, locale, strict) {\n    return createLocalOrUTC(input, format, locale, strict, false);\n}\n\nvar prototypeMin = deprecate(\n    'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n    function () {\n        var other = createLocal.apply(null, arguments);\n        if (this.isValid() && other.isValid()) {\n            return other < this ? this : other;\n        } else {\n            return createInvalid();\n        }\n    }\n);\n\nvar prototypeMax = deprecate(\n    'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n    function () {\n        var other = createLocal.apply(null, arguments);\n        if (this.isValid() && other.isValid()) {\n            return other > this ? this : other;\n        } else {\n            return createInvalid();\n        }\n    }\n);\n\n// Pick a moment m from moments so that m[fn](other) is true for all\n// other. This relies on the function fn to be transitive.\n//\n// moments should either be an array of moment objects or an array, whose\n// first element is an array of moment objects.\nfunction pickBy(fn, moments) {\n    var res, i;\n    if (moments.length === 1 && isArray(moments[0])) {\n        moments = moments[0];\n    }\n    if (!moments.length) {\n        return createLocal();\n    }\n    res = moments[0];\n    for (i = 1; i < moments.length; ++i) {\n        if (!moments[i].isValid() || moments[i][fn](res)) {\n            res = moments[i];\n        }\n    }\n    return res;\n}\n\n// TODO: Use [].sort instead?\nfunction min () {\n    var args = [].slice.call(arguments, 0);\n\n    return pickBy('isBefore', args);\n}\n\nfunction max () {\n    var args = [].slice.call(arguments, 0);\n\n    return pickBy('isAfter', args);\n}\n\nvar now = function () {\n    return Date.now ? Date.now() : +(new Date());\n};\n\nfunction Duration (duration) {\n    var normalizedInput = normalizeObjectUnits(duration),\n        years = normalizedInput.year || 0,\n        quarters = normalizedInput.quarter || 0,\n        months = normalizedInput.month || 0,\n        weeks = normalizedInput.week || 0,\n        days = normalizedInput.day || 0,\n        hours = normalizedInput.hour || 0,\n        minutes = normalizedInput.minute || 0,\n        seconds = normalizedInput.second || 0,\n        milliseconds = normalizedInput.millisecond || 0;\n\n    // representation for dateAddRemove\n    this._milliseconds = +milliseconds +\n        seconds * 1e3 + // 1000\n        minutes * 6e4 + // 1000 * 60\n        hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n    // Because of dateAddRemove treats 24 hours as different from a\n    // day when working around DST, we need to store them separately\n    this._days = +days +\n        weeks * 7;\n    // It is impossible translate months into days without knowing\n    // which months you are are talking about, so we have to store\n    // it separately.\n    this._months = +months +\n        quarters * 3 +\n        years * 12;\n\n    this._data = {};\n\n    this._locale = getLocale();\n\n    this._bubble();\n}\n\nfunction isDuration (obj) {\n    return obj instanceof Duration;\n}\n\nfunction absRound (number) {\n    if (number < 0) {\n        return Math.round(-1 * number) * -1;\n    } else {\n        return Math.round(number);\n    }\n}\n\n// FORMATTING\n\nfunction offset (token, separator) {\n    addFormatToken(token, 0, 0, function () {\n        var offset = this.utcOffset();\n        var sign = '+';\n        if (offset < 0) {\n            offset = -offset;\n            sign = '-';\n        }\n        return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);\n    });\n}\n\noffset('Z', ':');\noffset('ZZ', '');\n\n// PARSING\n\naddRegexToken('Z',  matchShortOffset);\naddRegexToken('ZZ', matchShortOffset);\naddParseToken(['Z', 'ZZ'], function (input, array, config) {\n    config._useUTC = true;\n    config._tzm = offsetFromString(matchShortOffset, input);\n});\n\n// HELPERS\n\n// timezone chunker\n// '+10:00' > ['10',  '00']\n// '-1530'  > ['-15', '30']\nvar chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\nfunction offsetFromString(matcher, string) {\n    var matches = (string || '').match(matcher);\n\n    if (matches === null) {\n        return null;\n    }\n\n    var chunk   = matches[matches.length - 1] || [];\n    var parts   = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n    var minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n    return minutes === 0 ?\n      0 :\n      parts[0] === '+' ? minutes : -minutes;\n}\n\n// Return a moment from input, that is local/utc/zone equivalent to model.\nfunction cloneWithOffset(input, model) {\n    var res, diff;\n    if (model._isUTC) {\n        res = model.clone();\n        diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();\n        // Use low-level api, because this fn is low-level api.\n        res._d.setTime(res._d.valueOf() + diff);\n        hooks.updateOffset(res, false);\n        return res;\n    } else {\n        return createLocal(input).local();\n    }\n}\n\nfunction getDateOffset (m) {\n    // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n    // https://github.com/moment/moment/pull/1871\n    return -Math.round(m._d.getTimezoneOffset() / 15) * 15;\n}\n\n// HOOKS\n\n// This function will be called whenever a moment is mutated.\n// It is intended to keep the offset in sync with the timezone.\nhooks.updateOffset = function () {};\n\n// MOMENTS\n\n// keepLocalTime = true means only change the timezone, without\n// affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n// 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n// +0200, so we adjust the time as needed, to be valid.\n//\n// Keeping the time actually adds/subtracts (one hour)\n// from the actual represented time. That is why we call updateOffset\n// a second time. In case it wants us to change the offset again\n// _changeInProgress == true case, then we have to adjust, because\n// there is no such time in the given timezone.\nfunction getSetOffset (input, keepLocalTime) {\n    var offset = this._offset || 0,\n        localAdjust;\n    if (!this.isValid()) {\n        return input != null ? this : NaN;\n    }\n    if (input != null) {\n        if (typeof input === 'string') {\n            input = offsetFromString(matchShortOffset, input);\n            if (input === null) {\n                return this;\n            }\n        } else if (Math.abs(input) < 16) {\n            input = input * 60;\n        }\n        if (!this._isUTC && keepLocalTime) {\n            localAdjust = getDateOffset(this);\n        }\n        this._offset = input;\n        this._isUTC = true;\n        if (localAdjust != null) {\n            this.add(localAdjust, 'm');\n        }\n        if (offset !== input) {\n            if (!keepLocalTime || this._changeInProgress) {\n                addSubtract(this, createDuration(input - offset, 'm'), 1, false);\n            } else if (!this._changeInProgress) {\n                this._changeInProgress = true;\n                hooks.updateOffset(this, true);\n                this._changeInProgress = null;\n            }\n        }\n        return this;\n    } else {\n        return this._isUTC ? offset : getDateOffset(this);\n    }\n}\n\nfunction getSetZone (input, keepLocalTime) {\n    if (input != null) {\n        if (typeof input !== 'string') {\n            input = -input;\n        }\n\n        this.utcOffset(input, keepLocalTime);\n\n        return this;\n    } else {\n        return -this.utcOffset();\n    }\n}\n\nfunction setOffsetToUTC (keepLocalTime) {\n    return this.utcOffset(0, keepLocalTime);\n}\n\nfunction setOffsetToLocal (keepLocalTime) {\n    if (this._isUTC) {\n        this.utcOffset(0, keepLocalTime);\n        this._isUTC = false;\n\n        if (keepLocalTime) {\n            this.subtract(getDateOffset(this), 'm');\n        }\n    }\n    return this;\n}\n\nfunction setOffsetToParsedOffset () {\n    if (this._tzm != null) {\n        this.utcOffset(this._tzm);\n    } else if (typeof this._i === 'string') {\n        var tZone = offsetFromString(matchOffset, this._i);\n        if (tZone != null) {\n            this.utcOffset(tZone);\n        }\n        else {\n            this.utcOffset(0, true);\n        }\n    }\n    return this;\n}\n\nfunction hasAlignedHourOffset (input) {\n    if (!this.isValid()) {\n        return false;\n    }\n    input = input ? createLocal(input).utcOffset() : 0;\n\n    return (this.utcOffset() - input) % 60 === 0;\n}\n\nfunction isDaylightSavingTime () {\n    return (\n        this.utcOffset() > this.clone().month(0).utcOffset() ||\n        this.utcOffset() > this.clone().month(5).utcOffset()\n    );\n}\n\nfunction isDaylightSavingTimeShifted () {\n    if (!isUndefined(this._isDSTShifted)) {\n        return this._isDSTShifted;\n    }\n\n    var c = {};\n\n    copyConfig(c, this);\n    c = prepareConfig(c);\n\n    if (c._a) {\n        var other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n        this._isDSTShifted = this.isValid() &&\n            compareArrays(c._a, other.toArray()) > 0;\n    } else {\n        this._isDSTShifted = false;\n    }\n\n    return this._isDSTShifted;\n}\n\nfunction isLocal () {\n    return this.isValid() ? !this._isUTC : false;\n}\n\nfunction isUtcOffset () {\n    return this.isValid() ? this._isUTC : false;\n}\n\nfunction isUtc () {\n    return this.isValid() ? this._isUTC && this._offset === 0 : false;\n}\n\n// ASP.NET json date format regex\nvar aspNetRegex = /^(\\-)?(?:(\\d*)[. ])?(\\d+)\\:(\\d+)(?:\\:(\\d+)(\\.\\d*)?)?$/;\n\n// from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n// somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n// and further modified to allow for strings containing both week and day\nvar isoRegex = /^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;\n\nfunction createDuration (input, key) {\n    var duration = input,\n        // matching against regexp is expensive, do it on demand\n        match = null,\n        sign,\n        ret,\n        diffRes;\n\n    if (isDuration(input)) {\n        duration = {\n            ms : input._milliseconds,\n            d  : input._days,\n            M  : input._months\n        };\n    } else if (isNumber(input)) {\n        duration = {};\n        if (key) {\n            duration[key] = input;\n        } else {\n            duration.milliseconds = input;\n        }\n    } else if (!!(match = aspNetRegex.exec(input))) {\n        sign = (match[1] === '-') ? -1 : 1;\n        duration = {\n            y  : 0,\n            d  : toInt(match[DATE])                         * sign,\n            h  : toInt(match[HOUR])                         * sign,\n            m  : toInt(match[MINUTE])                       * sign,\n            s  : toInt(match[SECOND])                       * sign,\n            ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match\n        };\n    } else if (!!(match = isoRegex.exec(input))) {\n        sign = (match[1] === '-') ? -1 : 1;\n        duration = {\n            y : parseIso(match[2], sign),\n            M : parseIso(match[3], sign),\n            w : parseIso(match[4], sign),\n            d : parseIso(match[5], sign),\n            h : parseIso(match[6], sign),\n            m : parseIso(match[7], sign),\n            s : parseIso(match[8], sign)\n        };\n    } else if (duration == null) {// checks for null or undefined\n        duration = {};\n    } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {\n        diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));\n\n        duration = {};\n        duration.ms = diffRes.milliseconds;\n        duration.M = diffRes.months;\n    }\n\n    ret = new Duration(duration);\n\n    if (isDuration(input) && hasOwnProp(input, '_locale')) {\n        ret._locale = input._locale;\n    }\n\n    return ret;\n}\n\ncreateDuration.fn = Duration.prototype;\n\nfunction parseIso (inp, sign) {\n    // We'd normally use ~~inp for this, but unfortunately it also\n    // converts floats to ints.\n    // inp may be undefined, so careful calling replace on it.\n    var res = inp && parseFloat(inp.replace(',', '.'));\n    // apply sign while we're at it\n    return (isNaN(res) ? 0 : res) * sign;\n}\n\nfunction positiveMomentsDifference(base, other) {\n    var res = {milliseconds: 0, months: 0};\n\n    res.months = other.month() - base.month() +\n        (other.year() - base.year()) * 12;\n    if (base.clone().add(res.months, 'M').isAfter(other)) {\n        --res.months;\n    }\n\n    res.milliseconds = +other - +(base.clone().add(res.months, 'M'));\n\n    return res;\n}\n\nfunction momentsDifference(base, other) {\n    var res;\n    if (!(base.isValid() && other.isValid())) {\n        return {milliseconds: 0, months: 0};\n    }\n\n    other = cloneWithOffset(other, base);\n    if (base.isBefore(other)) {\n        res = positiveMomentsDifference(base, other);\n    } else {\n        res = positiveMomentsDifference(other, base);\n        res.milliseconds = -res.milliseconds;\n        res.months = -res.months;\n    }\n\n    return res;\n}\n\n// TODO: remove 'name' arg after deprecation is removed\nfunction createAdder(direction, name) {\n    return function (val, period) {\n        var dur, tmp;\n        //invert the arguments, but complain about it\n        if (period !== null && !isNaN(+period)) {\n            deprecateSimple(name, 'moment().' + name  + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +\n            'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');\n            tmp = val; val = period; period = tmp;\n        }\n\n        val = typeof val === 'string' ? +val : val;\n        dur = createDuration(val, period);\n        addSubtract(this, dur, direction);\n        return this;\n    };\n}\n\nfunction addSubtract (mom, duration, isAdding, updateOffset) {\n    var milliseconds = duration._milliseconds,\n        days = absRound(duration._days),\n        months = absRound(duration._months);\n\n    if (!mom.isValid()) {\n        // No op\n        return;\n    }\n\n    updateOffset = updateOffset == null ? true : updateOffset;\n\n    if (milliseconds) {\n        mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n    }\n    if (days) {\n        set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n    }\n    if (months) {\n        setMonth(mom, get(mom, 'Month') + months * isAdding);\n    }\n    if (updateOffset) {\n        hooks.updateOffset(mom, days || months);\n    }\n}\n\nvar add      = createAdder(1, 'add');\nvar subtract = createAdder(-1, 'subtract');\n\nfunction getCalendarFormat(myMoment, now) {\n    var diff = myMoment.diff(now, 'days', true);\n    return diff < -6 ? 'sameElse' :\n            diff < -1 ? 'lastWeek' :\n            diff < 0 ? 'lastDay' :\n            diff < 1 ? 'sameDay' :\n            diff < 2 ? 'nextDay' :\n            diff < 7 ? 'nextWeek' : 'sameElse';\n}\n\nfunction calendar$1 (time, formats) {\n    // We want to compare the start of today, vs this.\n    // Getting start-of-today depends on whether we're local/utc/offset or not.\n    var now = time || createLocal(),\n        sod = cloneWithOffset(now, this).startOf('day'),\n        format = hooks.calendarFormat(this, sod) || 'sameElse';\n\n    var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);\n\n    return this.format(output || this.localeData().calendar(format, this, createLocal(now)));\n}\n\nfunction clone () {\n    return new Moment(this);\n}\n\nfunction isAfter (input, units) {\n    var localInput = isMoment(input) ? input : createLocal(input);\n    if (!(this.isValid() && localInput.isValid())) {\n        return false;\n    }\n    units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');\n    if (units === 'millisecond') {\n        return this.valueOf() > localInput.valueOf();\n    } else {\n        return localInput.valueOf() < this.clone().startOf(units).valueOf();\n    }\n}\n\nfunction isBefore (input, units) {\n    var localInput = isMoment(input) ? input : createLocal(input);\n    if (!(this.isValid() && localInput.isValid())) {\n        return false;\n    }\n    units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');\n    if (units === 'millisecond') {\n        return this.valueOf() < localInput.valueOf();\n    } else {\n        return this.clone().endOf(units).valueOf() < localInput.valueOf();\n    }\n}\n\nfunction isBetween (from, to, units, inclusivity) {\n    inclusivity = inclusivity || '()';\n    return (inclusivity[0] === '(' ? this.isAfter(from, units) : !this.isBefore(from, units)) &&\n        (inclusivity[1] === ')' ? this.isBefore(to, units) : !this.isAfter(to, units));\n}\n\nfunction isSame (input, units) {\n    var localInput = isMoment(input) ? input : createLocal(input),\n        inputMs;\n    if (!(this.isValid() && localInput.isValid())) {\n        return false;\n    }\n    units = normalizeUnits(units || 'millisecond');\n    if (units === 'millisecond') {\n        return this.valueOf() === localInput.valueOf();\n    } else {\n        inputMs = localInput.valueOf();\n        return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();\n    }\n}\n\nfunction isSameOrAfter (input, units) {\n    return this.isSame(input, units) || this.isAfter(input,units);\n}\n\nfunction isSameOrBefore (input, units) {\n    return this.isSame(input, units) || this.isBefore(input,units);\n}\n\nfunction diff (input, units, asFloat) {\n    var that,\n        zoneDelta,\n        delta, output;\n\n    if (!this.isValid()) {\n        return NaN;\n    }\n\n    that = cloneWithOffset(input, this);\n\n    if (!that.isValid()) {\n        return NaN;\n    }\n\n    zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n    units = normalizeUnits(units);\n\n    if (units === 'year' || units === 'month' || units === 'quarter') {\n        output = monthDiff(this, that);\n        if (units === 'quarter') {\n            output = output / 3;\n        } else if (units === 'year') {\n            output = output / 12;\n        }\n    } else {\n        delta = this - that;\n        output = units === 'second' ? delta / 1e3 : // 1000\n            units === 'minute' ? delta / 6e4 : // 1000 * 60\n            units === 'hour' ? delta / 36e5 : // 1000 * 60 * 60\n            units === 'day' ? (delta - zoneDelta) / 864e5 : // 1000 * 60 * 60 * 24, negate dst\n            units === 'week' ? (delta - zoneDelta) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst\n            delta;\n    }\n    return asFloat ? output : absFloor(output);\n}\n\nfunction monthDiff (a, b) {\n    // difference in months\n    var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),\n        // b is in (anchor - 1 month, anchor + 1 month)\n        anchor = a.clone().add(wholeMonthDiff, 'months'),\n        anchor2, adjust;\n\n    if (b - anchor < 0) {\n        anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n        // linear across the month\n        adjust = (b - anchor) / (anchor - anchor2);\n    } else {\n        anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n        // linear across the month\n        adjust = (b - anchor) / (anchor2 - anchor);\n    }\n\n    //check for negative zero, return zero if negative zero\n    return -(wholeMonthDiff + adjust) || 0;\n}\n\nhooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\nhooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\nfunction toString () {\n    return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n}\n\nfunction toISOString () {\n    var m = this.clone().utc();\n    if (0 < m.year() && m.year() <= 9999) {\n        if (isFunction(Date.prototype.toISOString)) {\n            // native implementation is ~50x faster, use it when we can\n            return this.toDate().toISOString();\n        } else {\n            return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]');\n        }\n    } else {\n        return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]');\n    }\n}\n\n/**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\nfunction inspect () {\n    if (!this.isValid()) {\n        return 'moment.invalid(/* ' + this._i + ' */)';\n    }\n    var func = 'moment';\n    var zone = '';\n    if (!this.isLocal()) {\n        func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n        zone = 'Z';\n    }\n    var prefix = '[' + func + '(\"]';\n    var year = (0 < this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY';\n    var datetime = '-MM-DD[T]HH:mm:ss.SSS';\n    var suffix = zone + '[\")]';\n\n    return this.format(prefix + year + datetime + suffix);\n}\n\nfunction format (inputString) {\n    if (!inputString) {\n        inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;\n    }\n    var output = formatMoment(this, inputString);\n    return this.localeData().postformat(output);\n}\n\nfunction from (time, withoutSuffix) {\n    if (this.isValid() &&\n            ((isMoment(time) && time.isValid()) ||\n             createLocal(time).isValid())) {\n        return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);\n    } else {\n        return this.localeData().invalidDate();\n    }\n}\n\nfunction fromNow (withoutSuffix) {\n    return this.from(createLocal(), withoutSuffix);\n}\n\nfunction to (time, withoutSuffix) {\n    if (this.isValid() &&\n            ((isMoment(time) && time.isValid()) ||\n             createLocal(time).isValid())) {\n        return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);\n    } else {\n        return this.localeData().invalidDate();\n    }\n}\n\nfunction toNow (withoutSuffix) {\n    return this.to(createLocal(), withoutSuffix);\n}\n\n// If passed a locale key, it will set the locale for this\n// instance.  Otherwise, it will return the locale configuration\n// variables for this instance.\nfunction locale (key) {\n    var newLocaleData;\n\n    if (key === undefined) {\n        return this._locale._abbr;\n    } else {\n        newLocaleData = getLocale(key);\n        if (newLocaleData != null) {\n            this._locale = newLocaleData;\n        }\n        return this;\n    }\n}\n\nvar lang = deprecate(\n    'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n    function (key) {\n        if (key === undefined) {\n            return this.localeData();\n        } else {\n            return this.locale(key);\n        }\n    }\n);\n\nfunction localeData () {\n    return this._locale;\n}\n\nfunction startOf (units) {\n    units = normalizeUnits(units);\n    // the following switch intentionally omits break keywords\n    // to utilize falling through the cases.\n    switch (units) {\n        case 'year':\n            this.month(0);\n            /* falls through */\n        case 'quarter':\n        case 'month':\n            this.date(1);\n            /* falls through */\n        case 'week':\n        case 'isoWeek':\n        case 'day':\n        case 'date':\n            this.hours(0);\n            /* falls through */\n        case 'hour':\n            this.minutes(0);\n            /* falls through */\n        case 'minute':\n            this.seconds(0);\n            /* falls through */\n        case 'second':\n            this.milliseconds(0);\n    }\n\n    // weeks are a special case\n    if (units === 'week') {\n        this.weekday(0);\n    }\n    if (units === 'isoWeek') {\n        this.isoWeekday(1);\n    }\n\n    // quarters are also special\n    if (units === 'quarter') {\n        this.month(Math.floor(this.month() / 3) * 3);\n    }\n\n    return this;\n}\n\nfunction endOf (units) {\n    units = normalizeUnits(units);\n    if (units === undefined || units === 'millisecond') {\n        return this;\n    }\n\n    // 'date' is an alias for 'day', so it should be considered as such.\n    if (units === 'date') {\n        units = 'day';\n    }\n\n    return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms');\n}\n\nfunction valueOf () {\n    return this._d.valueOf() - ((this._offset || 0) * 60000);\n}\n\nfunction unix () {\n    return Math.floor(this.valueOf() / 1000);\n}\n\nfunction toDate () {\n    return new Date(this.valueOf());\n}\n\nfunction toArray () {\n    var m = this;\n    return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];\n}\n\nfunction toObject () {\n    var m = this;\n    return {\n        years: m.year(),\n        months: m.month(),\n        date: m.date(),\n        hours: m.hours(),\n        minutes: m.minutes(),\n        seconds: m.seconds(),\n        milliseconds: m.milliseconds()\n    };\n}\n\nfunction toJSON () {\n    // new Date(NaN).toJSON() === null\n    return this.isValid() ? this.toISOString() : null;\n}\n\nfunction isValid$1 () {\n    return isValid(this);\n}\n\nfunction parsingFlags () {\n    return extend({}, getParsingFlags(this));\n}\n\nfunction invalidAt () {\n    return getParsingFlags(this).overflow;\n}\n\nfunction creationData() {\n    return {\n        input: this._i,\n        format: this._f,\n        locale: this._locale,\n        isUTC: this._isUTC,\n        strict: this._strict\n    };\n}\n\n// FORMATTING\n\naddFormatToken(0, ['gg', 2], 0, function () {\n    return this.weekYear() % 100;\n});\n\naddFormatToken(0, ['GG', 2], 0, function () {\n    return this.isoWeekYear() % 100;\n});\n\nfunction addWeekYearFormatToken (token, getter) {\n    addFormatToken(0, [token, token.length], 0, getter);\n}\n\naddWeekYearFormatToken('gggg',     'weekYear');\naddWeekYearFormatToken('ggggg',    'weekYear');\naddWeekYearFormatToken('GGGG',  'isoWeekYear');\naddWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n// ALIASES\n\naddUnitAlias('weekYear', 'gg');\naddUnitAlias('isoWeekYear', 'GG');\n\n// PRIORITY\n\naddUnitPriority('weekYear', 1);\naddUnitPriority('isoWeekYear', 1);\n\n\n// PARSING\n\naddRegexToken('G',      matchSigned);\naddRegexToken('g',      matchSigned);\naddRegexToken('GG',     match1to2, match2);\naddRegexToken('gg',     match1to2, match2);\naddRegexToken('GGGG',   match1to4, match4);\naddRegexToken('gggg',   match1to4, match4);\naddRegexToken('GGGGG',  match1to6, match6);\naddRegexToken('ggggg',  match1to6, match6);\n\naddWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {\n    week[token.substr(0, 2)] = toInt(input);\n});\n\naddWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n    week[token] = hooks.parseTwoDigitYear(input);\n});\n\n// MOMENTS\n\nfunction getSetWeekYear (input) {\n    return getSetWeekYearHelper.call(this,\n            input,\n            this.week(),\n            this.weekday(),\n            this.localeData()._week.dow,\n            this.localeData()._week.doy);\n}\n\nfunction getSetISOWeekYear (input) {\n    return getSetWeekYearHelper.call(this,\n            input, this.isoWeek(), this.isoWeekday(), 1, 4);\n}\n\nfunction getISOWeeksInYear () {\n    return weeksInYear(this.year(), 1, 4);\n}\n\nfunction getWeeksInYear () {\n    var weekInfo = this.localeData()._week;\n    return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n}\n\nfunction getSetWeekYearHelper(input, week, weekday, dow, doy) {\n    var weeksTarget;\n    if (input == null) {\n        return weekOfYear(this, dow, doy).year;\n    } else {\n        weeksTarget = weeksInYear(input, dow, doy);\n        if (week > weeksTarget) {\n            week = weeksTarget;\n        }\n        return setWeekAll.call(this, input, week, weekday, dow, doy);\n    }\n}\n\nfunction setWeekAll(weekYear, week, weekday, dow, doy) {\n    var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n        date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n    this.year(date.getUTCFullYear());\n    this.month(date.getUTCMonth());\n    this.date(date.getUTCDate());\n    return this;\n}\n\n// FORMATTING\n\naddFormatToken('Q', 0, 'Qo', 'quarter');\n\n// ALIASES\n\naddUnitAlias('quarter', 'Q');\n\n// PRIORITY\n\naddUnitPriority('quarter', 7);\n\n// PARSING\n\naddRegexToken('Q', match1);\naddParseToken('Q', function (input, array) {\n    array[MONTH] = (toInt(input) - 1) * 3;\n});\n\n// MOMENTS\n\nfunction getSetQuarter (input) {\n    return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);\n}\n\n// FORMATTING\n\naddFormatToken('D', ['DD', 2], 'Do', 'date');\n\n// ALIASES\n\naddUnitAlias('date', 'D');\n\n// PRIOROITY\naddUnitPriority('date', 9);\n\n// PARSING\n\naddRegexToken('D',  match1to2);\naddRegexToken('DD', match1to2, match2);\naddRegexToken('Do', function (isStrict, locale) {\n    return isStrict ? locale._ordinalParse : locale._ordinalParseLenient;\n});\n\naddParseToken(['D', 'DD'], DATE);\naddParseToken('Do', function (input, array) {\n    array[DATE] = toInt(input.match(match1to2)[0], 10);\n});\n\n// MOMENTS\n\nvar getSetDayOfMonth = makeGetSet('Date', true);\n\n// FORMATTING\n\naddFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n// ALIASES\n\naddUnitAlias('dayOfYear', 'DDD');\n\n// PRIORITY\naddUnitPriority('dayOfYear', 4);\n\n// PARSING\n\naddRegexToken('DDD',  match1to3);\naddRegexToken('DDDD', match3);\naddParseToken(['DDD', 'DDDD'], function (input, array, config) {\n    config._dayOfYear = toInt(input);\n});\n\n// HELPERS\n\n// MOMENTS\n\nfunction getSetDayOfYear (input) {\n    var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;\n    return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');\n}\n\n// FORMATTING\n\naddFormatToken('m', ['mm', 2], 0, 'minute');\n\n// ALIASES\n\naddUnitAlias('minute', 'm');\n\n// PRIORITY\n\naddUnitPriority('minute', 14);\n\n// PARSING\n\naddRegexToken('m',  match1to2);\naddRegexToken('mm', match1to2, match2);\naddParseToken(['m', 'mm'], MINUTE);\n\n// MOMENTS\n\nvar getSetMinute = makeGetSet('Minutes', false);\n\n// FORMATTING\n\naddFormatToken('s', ['ss', 2], 0, 'second');\n\n// ALIASES\n\naddUnitAlias('second', 's');\n\n// PRIORITY\n\naddUnitPriority('second', 15);\n\n// PARSING\n\naddRegexToken('s',  match1to2);\naddRegexToken('ss', match1to2, match2);\naddParseToken(['s', 'ss'], SECOND);\n\n// MOMENTS\n\nvar getSetSecond = makeGetSet('Seconds', false);\n\n// FORMATTING\n\naddFormatToken('S', 0, 0, function () {\n    return ~~(this.millisecond() / 100);\n});\n\naddFormatToken(0, ['SS', 2], 0, function () {\n    return ~~(this.millisecond() / 10);\n});\n\naddFormatToken(0, ['SSS', 3], 0, 'millisecond');\naddFormatToken(0, ['SSSS', 4], 0, function () {\n    return this.millisecond() * 10;\n});\naddFormatToken(0, ['SSSSS', 5], 0, function () {\n    return this.millisecond() * 100;\n});\naddFormatToken(0, ['SSSSSS', 6], 0, function () {\n    return this.millisecond() * 1000;\n});\naddFormatToken(0, ['SSSSSSS', 7], 0, function () {\n    return this.millisecond() * 10000;\n});\naddFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n    return this.millisecond() * 100000;\n});\naddFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n    return this.millisecond() * 1000000;\n});\n\n\n// ALIASES\n\naddUnitAlias('millisecond', 'ms');\n\n// PRIORITY\n\naddUnitPriority('millisecond', 16);\n\n// PARSING\n\naddRegexToken('S',    match1to3, match1);\naddRegexToken('SS',   match1to3, match2);\naddRegexToken('SSS',  match1to3, match3);\n\nvar token;\nfor (token = 'SSSS'; token.length <= 9; token += 'S') {\n    addRegexToken(token, matchUnsigned);\n}\n\nfunction parseMs(input, array) {\n    array[MILLISECOND] = toInt(('0.' + input) * 1000);\n}\n\nfor (token = 'S'; token.length <= 9; token += 'S') {\n    addParseToken(token, parseMs);\n}\n// MOMENTS\n\nvar getSetMillisecond = makeGetSet('Milliseconds', false);\n\n// FORMATTING\n\naddFormatToken('z',  0, 0, 'zoneAbbr');\naddFormatToken('zz', 0, 0, 'zoneName');\n\n// MOMENTS\n\nfunction getZoneAbbr () {\n    return this._isUTC ? 'UTC' : '';\n}\n\nfunction getZoneName () {\n    return this._isUTC ? 'Coordinated Universal Time' : '';\n}\n\nvar proto = Moment.prototype;\n\nproto.add               = add;\nproto.calendar          = calendar$1;\nproto.clone             = clone;\nproto.diff              = diff;\nproto.endOf             = endOf;\nproto.format            = format;\nproto.from              = from;\nproto.fromNow           = fromNow;\nproto.to                = to;\nproto.toNow             = toNow;\nproto.get               = stringGet;\nproto.invalidAt         = invalidAt;\nproto.isAfter           = isAfter;\nproto.isBefore          = isBefore;\nproto.isBetween         = isBetween;\nproto.isSame            = isSame;\nproto.isSameOrAfter     = isSameOrAfter;\nproto.isSameOrBefore    = isSameOrBefore;\nproto.isValid           = isValid$1;\nproto.lang              = lang;\nproto.locale            = locale;\nproto.localeData        = localeData;\nproto.max               = prototypeMax;\nproto.min               = prototypeMin;\nproto.parsingFlags      = parsingFlags;\nproto.set               = stringSet;\nproto.startOf           = startOf;\nproto.subtract          = subtract;\nproto.toArray           = toArray;\nproto.toObject          = toObject;\nproto.toDate            = toDate;\nproto.toISOString       = toISOString;\nproto.inspect           = inspect;\nproto.toJSON            = toJSON;\nproto.toString          = toString;\nproto.unix              = unix;\nproto.valueOf           = valueOf;\nproto.creationData      = creationData;\n\n// Year\nproto.year       = getSetYear;\nproto.isLeapYear = getIsLeapYear;\n\n// Week Year\nproto.weekYear    = getSetWeekYear;\nproto.isoWeekYear = getSetISOWeekYear;\n\n// Quarter\nproto.quarter = proto.quarters = getSetQuarter;\n\n// Month\nproto.month       = getSetMonth;\nproto.daysInMonth = getDaysInMonth;\n\n// Week\nproto.week           = proto.weeks        = getSetWeek;\nproto.isoWeek        = proto.isoWeeks     = getSetISOWeek;\nproto.weeksInYear    = getWeeksInYear;\nproto.isoWeeksInYear = getISOWeeksInYear;\n\n// Day\nproto.date       = getSetDayOfMonth;\nproto.day        = proto.days             = getSetDayOfWeek;\nproto.weekday    = getSetLocaleDayOfWeek;\nproto.isoWeekday = getSetISODayOfWeek;\nproto.dayOfYear  = getSetDayOfYear;\n\n// Hour\nproto.hour = proto.hours = getSetHour;\n\n// Minute\nproto.minute = proto.minutes = getSetMinute;\n\n// Second\nproto.second = proto.seconds = getSetSecond;\n\n// Millisecond\nproto.millisecond = proto.milliseconds = getSetMillisecond;\n\n// Offset\nproto.utcOffset            = getSetOffset;\nproto.utc                  = setOffsetToUTC;\nproto.local                = setOffsetToLocal;\nproto.parseZone            = setOffsetToParsedOffset;\nproto.hasAlignedHourOffset = hasAlignedHourOffset;\nproto.isDST                = isDaylightSavingTime;\nproto.isLocal              = isLocal;\nproto.isUtcOffset          = isUtcOffset;\nproto.isUtc                = isUtc;\nproto.isUTC                = isUtc;\n\n// Timezone\nproto.zoneAbbr = getZoneAbbr;\nproto.zoneName = getZoneName;\n\n// Deprecations\nproto.dates  = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);\nproto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);\nproto.years  = deprecate('years accessor is deprecated. Use year instead', getSetYear);\nproto.zone   = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);\nproto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);\n\nfunction createUnix (input) {\n    return createLocal(input * 1000);\n}\n\nfunction createInZone () {\n    return createLocal.apply(null, arguments).parseZone();\n}\n\nfunction preParsePostFormat (string) {\n    return string;\n}\n\nvar proto$1 = Locale.prototype;\n\nproto$1.calendar        = calendar;\nproto$1.longDateFormat  = longDateFormat;\nproto$1.invalidDate     = invalidDate;\nproto$1.ordinal         = ordinal;\nproto$1.preparse        = preParsePostFormat;\nproto$1.postformat      = preParsePostFormat;\nproto$1.relativeTime    = relativeTime;\nproto$1.pastFuture      = pastFuture;\nproto$1.set             = set;\n\n// Month\nproto$1.months            =        localeMonths;\nproto$1.monthsShort       =        localeMonthsShort;\nproto$1.monthsParse       =        localeMonthsParse;\nproto$1.monthsRegex       = monthsRegex;\nproto$1.monthsShortRegex  = monthsShortRegex;\n\n// Week\nproto$1.week = localeWeek;\nproto$1.firstDayOfYear = localeFirstDayOfYear;\nproto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n// Day of Week\nproto$1.weekdays       =        localeWeekdays;\nproto$1.weekdaysMin    =        localeWeekdaysMin;\nproto$1.weekdaysShort  =        localeWeekdaysShort;\nproto$1.weekdaysParse  =        localeWeekdaysParse;\n\nproto$1.weekdaysRegex       =        weekdaysRegex;\nproto$1.weekdaysShortRegex  =        weekdaysShortRegex;\nproto$1.weekdaysMinRegex    =        weekdaysMinRegex;\n\n// Hours\nproto$1.isPM = localeIsPM;\nproto$1.meridiem = localeMeridiem;\n\nfunction get$1 (format, index, field, setter) {\n    var locale = getLocale();\n    var utc = createUTC().set(setter, index);\n    return locale[field](utc, format);\n}\n\nfunction listMonthsImpl (format, index, field) {\n    if (isNumber(format)) {\n        index = format;\n        format = undefined;\n    }\n\n    format = format || '';\n\n    if (index != null) {\n        return get$1(format, index, field, 'month');\n    }\n\n    var i;\n    var out = [];\n    for (i = 0; i < 12; i++) {\n        out[i] = get$1(format, i, field, 'month');\n    }\n    return out;\n}\n\n// ()\n// (5)\n// (fmt, 5)\n// (fmt)\n// (true)\n// (true, 5)\n// (true, fmt, 5)\n// (true, fmt)\nfunction listWeekdaysImpl (localeSorted, format, index, field) {\n    if (typeof localeSorted === 'boolean') {\n        if (isNumber(format)) {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n    } else {\n        format = localeSorted;\n        index = format;\n        localeSorted = false;\n\n        if (isNumber(format)) {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n    }\n\n    var locale = getLocale(),\n        shift = localeSorted ? locale._week.dow : 0;\n\n    if (index != null) {\n        return get$1(format, (index + shift) % 7, field, 'day');\n    }\n\n    var i;\n    var out = [];\n    for (i = 0; i < 7; i++) {\n        out[i] = get$1(format, (i + shift) % 7, field, 'day');\n    }\n    return out;\n}\n\nfunction listMonths (format, index) {\n    return listMonthsImpl(format, index, 'months');\n}\n\nfunction listMonthsShort (format, index) {\n    return listMonthsImpl(format, index, 'monthsShort');\n}\n\nfunction listWeekdays (localeSorted, format, index) {\n    return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n}\n\nfunction listWeekdaysShort (localeSorted, format, index) {\n    return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n}\n\nfunction listWeekdaysMin (localeSorted, format, index) {\n    return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n}\n\ngetSetGlobalLocale('en', {\n    ordinalParse: /\\d{1,2}(th|st|nd|rd)/,\n    ordinal : function (number) {\n        var b = number % 10,\n            output = (toInt(number % 100 / 10) === 1) ? 'th' :\n            (b === 1) ? 'st' :\n            (b === 2) ? 'nd' :\n            (b === 3) ? 'rd' : 'th';\n        return number + output;\n    }\n});\n\n// Side effect imports\nhooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);\nhooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);\n\nvar mathAbs = Math.abs;\n\nfunction abs () {\n    var data           = this._data;\n\n    this._milliseconds = mathAbs(this._milliseconds);\n    this._days         = mathAbs(this._days);\n    this._months       = mathAbs(this._months);\n\n    data.milliseconds  = mathAbs(data.milliseconds);\n    data.seconds       = mathAbs(data.seconds);\n    data.minutes       = mathAbs(data.minutes);\n    data.hours         = mathAbs(data.hours);\n    data.months        = mathAbs(data.months);\n    data.years         = mathAbs(data.years);\n\n    return this;\n}\n\nfunction addSubtract$1 (duration, input, value, direction) {\n    var other = createDuration(input, value);\n\n    duration._milliseconds += direction * other._milliseconds;\n    duration._days         += direction * other._days;\n    duration._months       += direction * other._months;\n\n    return duration._bubble();\n}\n\n// supports only 2.0-style add(1, 's') or add(duration)\nfunction add$1 (input, value) {\n    return addSubtract$1(this, input, value, 1);\n}\n\n// supports only 2.0-style subtract(1, 's') or subtract(duration)\nfunction subtract$1 (input, value) {\n    return addSubtract$1(this, input, value, -1);\n}\n\nfunction absCeil (number) {\n    if (number < 0) {\n        return Math.floor(number);\n    } else {\n        return Math.ceil(number);\n    }\n}\n\nfunction bubble () {\n    var milliseconds = this._milliseconds;\n    var days         = this._days;\n    var months       = this._months;\n    var data         = this._data;\n    var seconds, minutes, hours, years, monthsFromDays;\n\n    // if we have a mix of positive and negative values, bubble down first\n    // check: https://github.com/moment/moment/issues/2166\n    if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||\n            (milliseconds <= 0 && days <= 0 && months <= 0))) {\n        milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n        days = 0;\n        months = 0;\n    }\n\n    // The following code bubbles up values, see the tests for\n    // examples of what that means.\n    data.milliseconds = milliseconds % 1000;\n\n    seconds           = absFloor(milliseconds / 1000);\n    data.seconds      = seconds % 60;\n\n    minutes           = absFloor(seconds / 60);\n    data.minutes      = minutes % 60;\n\n    hours             = absFloor(minutes / 60);\n    data.hours        = hours % 24;\n\n    days += absFloor(hours / 24);\n\n    // convert days to months\n    monthsFromDays = absFloor(daysToMonths(days));\n    months += monthsFromDays;\n    days -= absCeil(monthsToDays(monthsFromDays));\n\n    // 12 months -> 1 year\n    years = absFloor(months / 12);\n    months %= 12;\n\n    data.days   = days;\n    data.months = months;\n    data.years  = years;\n\n    return this;\n}\n\nfunction daysToMonths (days) {\n    // 400 years have 146097 days (taking into account leap year rules)\n    // 400 years have 12 months === 4800\n    return days * 4800 / 146097;\n}\n\nfunction monthsToDays (months) {\n    // the reverse of daysToMonths\n    return months * 146097 / 4800;\n}\n\nfunction as (units) {\n    var days;\n    var months;\n    var milliseconds = this._milliseconds;\n\n    units = normalizeUnits(units);\n\n    if (units === 'month' || units === 'year') {\n        days   = this._days   + milliseconds / 864e5;\n        months = this._months + daysToMonths(days);\n        return units === 'month' ? months : months / 12;\n    } else {\n        // handle milliseconds separately because of floating point math errors (issue #1867)\n        days = this._days + Math.round(monthsToDays(this._months));\n        switch (units) {\n            case 'week'   : return days / 7     + milliseconds / 6048e5;\n            case 'day'    : return days         + milliseconds / 864e5;\n            case 'hour'   : return days * 24    + milliseconds / 36e5;\n            case 'minute' : return days * 1440  + milliseconds / 6e4;\n            case 'second' : return days * 86400 + milliseconds / 1000;\n            // Math.floor prevents floating point math errors here\n            case 'millisecond': return Math.floor(days * 864e5) + milliseconds;\n            default: throw new Error('Unknown unit ' + units);\n        }\n    }\n}\n\n// TODO: Use this.as('ms')?\nfunction valueOf$1 () {\n    return (\n        this._milliseconds +\n        this._days * 864e5 +\n        (this._months % 12) * 2592e6 +\n        toInt(this._months / 12) * 31536e6\n    );\n}\n\nfunction makeAs (alias) {\n    return function () {\n        return this.as(alias);\n    };\n}\n\nvar asMilliseconds = makeAs('ms');\nvar asSeconds      = makeAs('s');\nvar asMinutes      = makeAs('m');\nvar asHours        = makeAs('h');\nvar asDays         = makeAs('d');\nvar asWeeks        = makeAs('w');\nvar asMonths       = makeAs('M');\nvar asYears        = makeAs('y');\n\nfunction get$2 (units) {\n    units = normalizeUnits(units);\n    return this[units + 's']();\n}\n\nfunction makeGetter(name) {\n    return function () {\n        return this._data[name];\n    };\n}\n\nvar milliseconds = makeGetter('milliseconds');\nvar seconds      = makeGetter('seconds');\nvar minutes      = makeGetter('minutes');\nvar hours        = makeGetter('hours');\nvar days         = makeGetter('days');\nvar months       = makeGetter('months');\nvar years        = makeGetter('years');\n\nfunction weeks () {\n    return absFloor(this.days() / 7);\n}\n\nvar round = Math.round;\nvar thresholds = {\n    s: 45,  // seconds to minute\n    m: 45,  // minutes to hour\n    h: 22,  // hours to day\n    d: 26,  // days to month\n    M: 11   // months to year\n};\n\n// helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\nfunction substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n    return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n}\n\nfunction relativeTime$1 (posNegDuration, withoutSuffix, locale) {\n    var duration = createDuration(posNegDuration).abs();\n    var seconds  = round(duration.as('s'));\n    var minutes  = round(duration.as('m'));\n    var hours    = round(duration.as('h'));\n    var days     = round(duration.as('d'));\n    var months   = round(duration.as('M'));\n    var years    = round(duration.as('y'));\n\n    var a = seconds < thresholds.s && ['s', seconds]  ||\n            minutes <= 1           && ['m']           ||\n            minutes < thresholds.m && ['mm', minutes] ||\n            hours   <= 1           && ['h']           ||\n            hours   < thresholds.h && ['hh', hours]   ||\n            days    <= 1           && ['d']           ||\n            days    < thresholds.d && ['dd', days]    ||\n            months  <= 1           && ['M']           ||\n            months  < thresholds.M && ['MM', months]  ||\n            years   <= 1           && ['y']           || ['yy', years];\n\n    a[2] = withoutSuffix;\n    a[3] = +posNegDuration > 0;\n    a[4] = locale;\n    return substituteTimeAgo.apply(null, a);\n}\n\n// This function allows you to set the rounding function for relative time strings\nfunction getSetRelativeTimeRounding (roundingFunction) {\n    if (roundingFunction === undefined) {\n        return round;\n    }\n    if (typeof(roundingFunction) === 'function') {\n        round = roundingFunction;\n        return true;\n    }\n    return false;\n}\n\n// This function allows you to set a threshold for relative time strings\nfunction getSetRelativeTimeThreshold (threshold, limit) {\n    if (thresholds[threshold] === undefined) {\n        return false;\n    }\n    if (limit === undefined) {\n        return thresholds[threshold];\n    }\n    thresholds[threshold] = limit;\n    return true;\n}\n\nfunction humanize (withSuffix) {\n    var locale = this.localeData();\n    var output = relativeTime$1(this, !withSuffix, locale);\n\n    if (withSuffix) {\n        output = locale.pastFuture(+this, output);\n    }\n\n    return locale.postformat(output);\n}\n\nvar abs$1 = Math.abs;\n\nfunction toISOString$1() {\n    // for ISO strings we do not use the normal bubbling rules:\n    //  * milliseconds bubble up until they become hours\n    //  * days do not bubble at all\n    //  * months bubble up until they become years\n    // This is because there is no context-free conversion between hours and days\n    // (think of clock changes)\n    // and also not between days and months (28-31 days per month)\n    var seconds = abs$1(this._milliseconds) / 1000;\n    var days         = abs$1(this._days);\n    var months       = abs$1(this._months);\n    var minutes, hours, years;\n\n    // 3600 seconds -> 60 minutes -> 1 hour\n    minutes           = absFloor(seconds / 60);\n    hours             = absFloor(minutes / 60);\n    seconds %= 60;\n    minutes %= 60;\n\n    // 12 months -> 1 year\n    years  = absFloor(months / 12);\n    months %= 12;\n\n\n    // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n    var Y = years;\n    var M = months;\n    var D = days;\n    var h = hours;\n    var m = minutes;\n    var s = seconds;\n    var total = this.asSeconds();\n\n    if (!total) {\n        // this is the same as C#'s (Noda) and python (isodate)...\n        // but not other JS (goog.date)\n        return 'P0D';\n    }\n\n    return (total < 0 ? '-' : '') +\n        'P' +\n        (Y ? Y + 'Y' : '') +\n        (M ? M + 'M' : '') +\n        (D ? D + 'D' : '') +\n        ((h || m || s) ? 'T' : '') +\n        (h ? h + 'H' : '') +\n        (m ? m + 'M' : '') +\n        (s ? s + 'S' : '');\n}\n\nvar proto$2 = Duration.prototype;\n\nproto$2.abs            = abs;\nproto$2.add            = add$1;\nproto$2.subtract       = subtract$1;\nproto$2.as             = as;\nproto$2.asMilliseconds = asMilliseconds;\nproto$2.asSeconds      = asSeconds;\nproto$2.asMinutes      = asMinutes;\nproto$2.asHours        = asHours;\nproto$2.asDays         = asDays;\nproto$2.asWeeks        = asWeeks;\nproto$2.asMonths       = asMonths;\nproto$2.asYears        = asYears;\nproto$2.valueOf        = valueOf$1;\nproto$2._bubble        = bubble;\nproto$2.get            = get$2;\nproto$2.milliseconds   = milliseconds;\nproto$2.seconds        = seconds;\nproto$2.minutes        = minutes;\nproto$2.hours          = hours;\nproto$2.days           = days;\nproto$2.weeks          = weeks;\nproto$2.months         = months;\nproto$2.years          = years;\nproto$2.humanize       = humanize;\nproto$2.toISOString    = toISOString$1;\nproto$2.toString       = toISOString$1;\nproto$2.toJSON         = toISOString$1;\nproto$2.locale         = locale;\nproto$2.localeData     = localeData;\n\n// Deprecations\nproto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);\nproto$2.lang = lang;\n\n// Side effect imports\n\n// FORMATTING\n\naddFormatToken('X', 0, 0, 'unix');\naddFormatToken('x', 0, 0, 'valueOf');\n\n// PARSING\n\naddRegexToken('x', matchSigned);\naddRegexToken('X', matchTimestamp);\naddParseToken('X', function (input, array, config) {\n    config._d = new Date(parseFloat(input, 10) * 1000);\n});\naddParseToken('x', function (input, array, config) {\n    config._d = new Date(toInt(input));\n});\n\n// Side effect imports\n\n\nhooks.version = '2.17.1';\n\nsetHookCallback(createLocal);\n\nhooks.fn                    = proto;\nhooks.min                   = min;\nhooks.max                   = max;\nhooks.now                   = now;\nhooks.utc                   = createUTC;\nhooks.unix                  = createUnix;\nhooks.months                = listMonths;\nhooks.isDate                = isDate;\nhooks.locale                = getSetGlobalLocale;\nhooks.invalid               = createInvalid;\nhooks.duration              = createDuration;\nhooks.isMoment              = isMoment;\nhooks.weekdays              = listWeekdays;\nhooks.parseZone             = createInZone;\nhooks.localeData            = getLocale;\nhooks.isDuration            = isDuration;\nhooks.monthsShort           = listMonthsShort;\nhooks.weekdaysMin           = listWeekdaysMin;\nhooks.defineLocale          = defineLocale;\nhooks.updateLocale          = updateLocale;\nhooks.locales               = listLocales;\nhooks.weekdaysShort         = listWeekdaysShort;\nhooks.normalizeUnits        = normalizeUnits;\nhooks.relativeTimeRounding = getSetRelativeTimeRounding;\nhooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\nhooks.calendarFormat        = getCalendarFormat;\nhooks.prototype             = proto;\n\nreturn hooks;\n\n})));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/moment/moment.js\n// module id = 85\n// module chunks = 0","module.exports = function(module) {\r\n\tif(!module.webpackPolyfill) {\r\n\t\tmodule.deprecate = function() {};\r\n\t\tmodule.paths = [];\r\n\t\t// module.parent = undefined by default\r\n\t\tmodule.children = [];\r\n\t\tmodule.webpackPolyfill = 1;\r\n\t}\r\n\treturn module;\r\n}\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/module.js\n// module id = 86\n// module chunks = 0","function webpackContext(req) {\n\tthrow new Error(\"Cannot find module '\" + req + \"'.\");\n}\nwebpackContext.keys = function() { return []; };\nwebpackContext.resolve = webpackContext;\nmodule.exports = webpackContext;\nwebpackContext.id = 87;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/moment/locale ^\\.\\/$^$\n// module id = 87\n// module chunks = 0","var _rng;\n\nvar globalVar = typeof window !== 'undefined'\n    ? window\n    : typeof global !== 'undefined' ? global : null;\n\nif (globalVar && globalVar.crypto && crypto.getRandomValues) {\n  // WHATWG crypto-based RNG - http://wiki.whatwg.org/wiki/Crypto\n  // Moderately fast, high quality\n  var _rnds8 = new Uint8Array(16);\n  _rng = function whatwgRNG() {\n    crypto.getRandomValues(_rnds8);\n    return _rnds8;\n  };\n}\n\nif (!_rng) {\n  // Math.random()-based (RNG)\n  //\n  // If all else fails, use Math.random().  It's fast, but is of unspecified\n  // quality.\n  var _rnds = new Array(16);\n  _rng = function () {\n    for (var i = 0, r; i < 16; i++) {\n      if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n      _rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n    }\n\n    return _rnds;\n  };\n}\n\n//     uuid.js\n//\n//     Copyright (c) 2010-2012 Robert Kieffer\n//     MIT License - http://opensource.org/licenses/mit-license.php\n\n// Unique ID creation requires a high quality random # generator.  We feature\n// detect to determine the best RNG source, normalizing to a function that\n// returns 128-bits of randomness, since that's what's usually required\n\n//var _rng = require('./rng');\n\n// Maps for number <-> hex string conversion\nvar _byteToHex = [];\nvar _hexToByte = {};\nfor (var i = 0; i < 256; i++) {\n  _byteToHex[i] = (i + 0x100).toString(16).substr(1);\n  _hexToByte[_byteToHex[i]] = i;\n}\n\n// **`parse()` - Parse a UUID into it's component bytes**\nfunction parse(s, buf, offset) {\n  var i = (buf && offset) || 0, ii = 0;\n\n  buf = buf || [];\n  s.toLowerCase().replace(/[0-9a-f]{2}/g, function (oct) {\n    if (ii < 16) { // Don't overflow!\n      buf[i + ii++] = _hexToByte[oct];\n    }\n  });\n\n  // Zero out remaining bytes if string was short\n  while (ii < 16) {\n    buf[i + ii++] = 0;\n  }\n\n  return buf;\n}\n\n// **`unparse()` - Convert UUID byte array (ala parse()) into a string**\nfunction unparse(buf, offset) {\n  var i = offset || 0, bth = _byteToHex;\n  return bth[buf[i++]] + bth[buf[i++]] +\n      bth[buf[i++]] + bth[buf[i++]] + '-' +\n      bth[buf[i++]] + bth[buf[i++]] + '-' +\n      bth[buf[i++]] + bth[buf[i++]] + '-' +\n      bth[buf[i++]] + bth[buf[i++]] + '-' +\n      bth[buf[i++]] + bth[buf[i++]] +\n      bth[buf[i++]] + bth[buf[i++]] +\n      bth[buf[i++]] + bth[buf[i++]];\n}\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\n// random #'s we need to init node and clockseq\nvar _seedBytes = _rng();\n\n// Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\nvar _nodeId = [\n  _seedBytes[0] | 0x01,\n  _seedBytes[1], _seedBytes[2], _seedBytes[3], _seedBytes[4], _seedBytes[5]\n];\n\n// Per 4.2.2, randomize (14 bit) clockseq\nvar _clockseq = (_seedBytes[6] << 8 | _seedBytes[7]) & 0x3fff;\n\n// Previous uuid creation time\nvar _lastMSecs = 0, _lastNSecs = 0;\n\n// See https://github.com/broofa/node-uuid for API details\nfunction v1(options, buf, offset) {\n  var i = buf && offset || 0;\n  var b = buf || [];\n\n  options = options || {};\n\n  var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;\n\n  // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n  // (1582-10-15 00:00).  JSNumbers aren't precise enough for this, so\n  // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n  // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n  var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();\n\n  // Per 4.2.1.2, use count of uuid's generated during the current clock\n  // cycle to simulate higher resolution clock\n  var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;\n\n  // Time since last uuid creation (in msecs)\n  var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs) / 10000;\n\n  // Per 4.2.1.2, Bump clockseq on clock regression\n  if (dt < 0 && options.clockseq === undefined) {\n    clockseq = clockseq + 1 & 0x3fff;\n  }\n\n  // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n  // time interval\n  if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n    nsecs = 0;\n  }\n\n  // Per 4.2.1.2 Throw error if too many uuids are requested\n  if (nsecs >= 10000) {\n    throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n  }\n\n  _lastMSecs = msecs;\n  _lastNSecs = nsecs;\n  _clockseq = clockseq;\n\n  // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n  msecs += 12219292800000;\n\n  // `time_low`\n  var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n  b[i++] = tl >>> 24 & 0xff;\n  b[i++] = tl >>> 16 & 0xff;\n  b[i++] = tl >>> 8 & 0xff;\n  b[i++] = tl & 0xff;\n\n  // `time_mid`\n  var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;\n  b[i++] = tmh >>> 8 & 0xff;\n  b[i++] = tmh & 0xff;\n\n  // `time_high_and_version`\n  b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n  b[i++] = tmh >>> 16 & 0xff;\n\n  // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n  b[i++] = clockseq >>> 8 | 0x80;\n\n  // `clock_seq_low`\n  b[i++] = clockseq & 0xff;\n\n  // `node`\n  var node = options.node || _nodeId;\n  for (var n = 0; n < 6; n++) {\n    b[i + n] = node[n];\n  }\n\n  return buf ? buf : unparse(b);\n}\n\n// **`v4()` - Generate random UUID**\n\n// See https://github.com/broofa/node-uuid for API details\nfunction v4(options, buf, offset) {\n  // Deprecated - 'format' argument, as supported in v1.2\n  var i = buf && offset || 0;\n\n  if (typeof(options) == 'string') {\n    buf = options == 'binary' ? new Array(16) : null;\n    options = null;\n  }\n  options = options || {};\n\n  var rnds = options.random || (options.rng || _rng)();\n\n  // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n  rnds[6] = (rnds[6] & 0x0f) | 0x40;\n  rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n  // Copy bytes to buffer, if provided\n  if (buf) {\n    for (var ii = 0; ii < 16; ii++) {\n      buf[i + ii] = rnds[ii];\n    }\n  }\n\n  return buf || unparse(rnds);\n}\n\n// Export public API\nvar uuid = v4;\nuuid.v1 = v1;\nuuid.v4 = v4;\nuuid.parse = parse;\nuuid.unparse = unparse;\n\nmodule.exports = uuid;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/module/uuid.js","// utils\nexports.util = require('./lib/util');\nexports.DOMutil = require('./lib/DOMutil');\n\n// data\nexports.DataSet = require('./lib/DataSet');\nexports.DataView = require('./lib/DataView');\nexports.Queue = require('./lib/Queue');\n\n// Graph3d\nexports.Graph3d = require('./lib/graph3d/Graph3d');\nexports.graph3d = {\n  Camera: require('./lib/graph3d/Camera'),\n  Filter: require('./lib/graph3d/Filter'),\n  Point2d: require('./lib/graph3d/Point2d'),\n  Point3d: require('./lib/graph3d/Point3d'),\n  Slider: require('./lib/graph3d/Slider'),\n  StepNumber: require('./lib/graph3d/StepNumber')\n};\n\n// bundled external libraries\nexports.moment = require('./lib/module/moment');\nexports.Hammer = require('./lib/module/hammer');\nexports.keycharm = require('keycharm');\n\n\n\n// WEBPACK FOOTER //\n// ./index-graph3d.js","// DOM utility methods\n\n/**\n * this prepares the JSON container for allocating SVG elements\n * @param JSONcontainer\n * @private\n */\nexports.prepareElements = function(JSONcontainer) {\n  // cleanup the redundant svgElements;\n  for (var elementType in JSONcontainer) {\n    if (JSONcontainer.hasOwnProperty(elementType)) {\n      JSONcontainer[elementType].redundant = JSONcontainer[elementType].used;\n      JSONcontainer[elementType].used = [];\n    }\n  }\n};\n\n/**\n * this cleans up all the unused SVG elements. By asking for the parentNode, we only need to supply the JSON container from\n * which to remove the redundant elements.\n *\n * @param JSONcontainer\n * @private\n */\nexports.cleanupElements = function(JSONcontainer) {\n  // cleanup the redundant svgElements;\n  for (var elementType in JSONcontainer) {\n    if (JSONcontainer.hasOwnProperty(elementType)) {\n      if (JSONcontainer[elementType].redundant) {\n        for (var i = 0; i < JSONcontainer[elementType].redundant.length; i++) {\n          JSONcontainer[elementType].redundant[i].parentNode.removeChild(JSONcontainer[elementType].redundant[i]);\n        }\n        JSONcontainer[elementType].redundant = [];\n      }\n    }\n  }\n};\n\n/**\n * Ensures that all elements are removed first up so they can be recreated cleanly\n * @param JSONcontainer\n */\nexports.resetElements = function(JSONcontainer) {\n  exports.prepareElements(JSONcontainer);\n  exports.cleanupElements(JSONcontainer);\n  exports.prepareElements(JSONcontainer);\n}\n\n/**\n * Allocate or generate an SVG element if needed. Store a reference to it in the JSON container and draw it in the svgContainer\n * the JSON container and the SVG container have to be supplied so other svg containers (like the legend) can use this.\n *\n * @param elementType\n * @param JSONcontainer\n * @param svgContainer\n * @returns {*}\n * @private\n */\nexports.getSVGElement = function (elementType, JSONcontainer, svgContainer) {\n  var element;\n  // allocate SVG element, if it doesnt yet exist, create one.\n  if (JSONcontainer.hasOwnProperty(elementType)) { // this element has been created before\n    // check if there is an redundant element\n    if (JSONcontainer[elementType].redundant.length > 0) {\n      element = JSONcontainer[elementType].redundant[0];\n      JSONcontainer[elementType].redundant.shift();\n    }\n    else {\n      // create a new element and add it to the SVG\n      element = document.createElementNS('http://www.w3.org/2000/svg', elementType);\n      svgContainer.appendChild(element);\n    }\n  }\n  else {\n    // create a new element and add it to the SVG, also create a new object in the svgElements to keep track of it.\n    element = document.createElementNS('http://www.w3.org/2000/svg', elementType);\n    JSONcontainer[elementType] = {used: [], redundant: []};\n    svgContainer.appendChild(element);\n  }\n  JSONcontainer[elementType].used.push(element);\n  return element;\n};\n\n\n/**\n * Allocate or generate an SVG element if needed. Store a reference to it in the JSON container and draw it in the svgContainer\n * the JSON container and the SVG container have to be supplied so other svg containers (like the legend) can use this.\n *\n * @param elementType\n * @param JSONcontainer\n * @param DOMContainer\n * @returns {*}\n * @private\n */\nexports.getDOMElement = function (elementType, JSONcontainer, DOMContainer, insertBefore) {\n  var element;\n  // allocate DOM element, if it doesnt yet exist, create one.\n  if (JSONcontainer.hasOwnProperty(elementType)) { // this element has been created before\n    // check if there is an redundant element\n    if (JSONcontainer[elementType].redundant.length > 0) {\n      element = JSONcontainer[elementType].redundant[0];\n      JSONcontainer[elementType].redundant.shift();\n    }\n    else {\n      // create a new element and add it to the SVG\n      element = document.createElement(elementType);\n      if (insertBefore !== undefined) {\n        DOMContainer.insertBefore(element, insertBefore);\n      }\n      else {\n        DOMContainer.appendChild(element);\n      }\n    }\n  }\n  else {\n    // create a new element and add it to the SVG, also create a new object in the svgElements to keep track of it.\n    element = document.createElement(elementType);\n    JSONcontainer[elementType] = {used: [], redundant: []};\n    if (insertBefore !== undefined) {\n      DOMContainer.insertBefore(element, insertBefore);\n    }\n    else {\n      DOMContainer.appendChild(element);\n    }\n  }\n  JSONcontainer[elementType].used.push(element);\n  return element;\n};\n\n\n\n\n/**\n * Draw a point object. This is a separate function because it can also be called by the legend.\n * The reason the JSONcontainer and the target SVG svgContainer have to be supplied is so the legend can use these functions\n * as well.\n *\n * @param x\n * @param y\n * @param groupTemplate: A template containing the necessary information to draw the datapoint e.g., {style: 'circle', size: 5, className: 'className' }\n * @param JSONcontainer\n * @param svgContainer\n * @param labelObj\n * @returns {*}\n */\nexports.drawPoint = function(x, y, groupTemplate, JSONcontainer, svgContainer, labelObj) {\n  var point;\n  if (groupTemplate.style == 'circle') {\n    point = exports.getSVGElement('circle', JSONcontainer, svgContainer);\n    point.setAttributeNS(null, \"cx\", x);\n    point.setAttributeNS(null, \"cy\", y);\n    point.setAttributeNS(null, \"r\", 0.5 * groupTemplate.size);\n  }\n  else {\n    point = exports.getSVGElement('rect', JSONcontainer, svgContainer);\n    point.setAttributeNS(null, \"x\", x - 0.5 * groupTemplate.size);\n    point.setAttributeNS(null, \"y\", y - 0.5 * groupTemplate.size);\n    point.setAttributeNS(null, \"width\", groupTemplate.size);\n    point.setAttributeNS(null, \"height\", groupTemplate.size);\n  }\n\n  if (groupTemplate.styles !== undefined) {\n    point.setAttributeNS(null, \"style\", groupTemplate.styles);\n  }\n  point.setAttributeNS(null, \"class\", groupTemplate.className + \" vis-point\");\n  //handle label\n\n\n  if (labelObj) {\n    var label = exports.getSVGElement('text', JSONcontainer, svgContainer);\n    if (labelObj.xOffset) {\n      x = x + labelObj.xOffset;\n    }\n\n    if (labelObj.yOffset) {\n      y = y + labelObj.yOffset;\n    }\n    if (labelObj.content) {\n      label.textContent = labelObj.content;\n    }\n\n    if (labelObj.className) {\n      label.setAttributeNS(null, \"class\", labelObj.className  + \" vis-label\");\n    }\n    label.setAttributeNS(null, \"x\", x);\n    label.setAttributeNS(null, \"y\", y);\n  }\n\n  return point;\n};\n\n/**\n * draw a bar SVG element centered on the X coordinate\n *\n * @param x\n * @param y\n * @param className\n */\nexports.drawBar = function (x, y, width, height, className, JSONcontainer, svgContainer, style) {\n  if (height != 0) {\n    if (height < 0) {\n      height *= -1;\n      y -= height;\n    }\n    var rect = exports.getSVGElement('rect',JSONcontainer, svgContainer);\n    rect.setAttributeNS(null, \"x\", x - 0.5 * width);\n    rect.setAttributeNS(null, \"y\", y);\n    rect.setAttributeNS(null, \"width\", width);\n    rect.setAttributeNS(null, \"height\", height);\n    rect.setAttributeNS(null, \"class\", className);\n    if (style) {\n      rect.setAttributeNS(null, \"style\", style);\n    }\n  }\n};\n\n\n// WEBPACK FOOTER //\n// ./lib/DOMutil.js","var util = require('./util');\nvar Queue = require('./Queue');\n\n/**\n * DataSet\n *\n * Usage:\n *     var dataSet = new DataSet({\n *         fieldId: '_id',\n *         type: {\n *             // ...\n *         }\n *     });\n *\n *     dataSet.add(item);\n *     dataSet.add(data);\n *     dataSet.update(item);\n *     dataSet.update(data);\n *     dataSet.remove(id);\n *     dataSet.remove(ids);\n *     var data = dataSet.get();\n *     var data = dataSet.get(id);\n *     var data = dataSet.get(ids);\n *     var data = dataSet.get(ids, options, data);\n *     dataSet.clear();\n *\n * A data set can:\n * - add/remove/update data\n * - gives triggers upon changes in the data\n * - can  import/export data in various data formats\n *\n * @param {Array} [data]    Optional array with initial data\n * @param {Object} [options]   Available options:\n *                             {String} fieldId Field name of the id in the\n *                                              items, 'id' by default.\n *                             {Object.<String, String} type\n *                                              A map with field names as key,\n *                                              and the field type as value.\n *                             {Object} queue   Queue changes to the DataSet,\n *                                              flush them all at once.\n *                                              Queue options:\n *                                              - {number} delay  Delay in ms, null by default\n *                                              - {number} max    Maximum number of entries in the queue, Infinity by default\n * @constructor DataSet\n */\n// TODO: add a DataSet constructor DataSet(data, options)\nfunction DataSet (data, options) {\n  // correctly read optional arguments\n  if (data && !Array.isArray(data)) {\n    options = data;\n    data = null;\n  }\n\n  this._options = options || {};\n  this._data = {};                                 // map with data indexed by id\n  this.length = 0;                                 // number of items in the DataSet\n  this._fieldId = this._options.fieldId || 'id';   // name of the field containing id\n  this._type = {};                                 // internal field types (NOTE: this can differ from this._options.type)\n\n  // all variants of a Date are internally stored as Date, so we can convert\n  // from everything to everything (also from ISODate to Number for example)\n  if (this._options.type) {\n    var fields = Object.keys(this._options.type);\n    for (var i = 0, len = fields.length; i < len; i++) {\n      var field = fields[i];\n      var value = this._options.type[field];\n      if (value == 'Date' || value == 'ISODate' || value == 'ASPDate') {\n        this._type[field] = 'Date';\n      }\n      else {\n        this._type[field] = value;\n      }\n    }\n  }\n\n  // TODO: deprecated since version 1.1.1 (or 2.0.0?)\n  if (this._options.convert) {\n    throw new Error('Option \"convert\" is deprecated. Use \"type\" instead.');\n  }\n\n  this._subscribers = {};  // event subscribers\n\n  // add initial data when provided\n  if (data) {\n    this.add(data);\n  }\n\n  this.setOptions(options);\n}\n\n/**\n * @param {Object} [options]   Available options:\n *                             {Object} queue   Queue changes to the DataSet,\n *                                              flush them all at once.\n *                                              Queue options:\n *                                              - {number} delay  Delay in ms, null by default\n *                                              - {number} max    Maximum number of entries in the queue, Infinity by default\n * @param options\n */\nDataSet.prototype.setOptions = function(options) {\n  if (options && options.queue !== undefined) {\n    if (options.queue === false) {\n      // delete queue if loaded\n      if (this._queue) {\n        this._queue.destroy();\n        delete this._queue;\n      }\n    }\n    else {\n      // create queue and update its options\n      if (!this._queue) {\n        this._queue = Queue.extend(this, {\n          replace: ['add', 'update', 'remove']\n        });\n      }\n\n      if (typeof options.queue === 'object') {\n        this._queue.setOptions(options.queue);\n      }\n    }\n  }\n};\n\n/**\n * Subscribe to an event, add an event listener\n * @param {String} event        Event name. Available events: 'put', 'update',\n *                              'remove'\n * @param {function} callback   Callback method. Called with three parameters:\n *                                  {String} event\n *                                  {Object | null} params\n *                                  {String | Number} senderId\n */\nDataSet.prototype.on = function(event, callback) {\n  var subscribers = this._subscribers[event];\n  if (!subscribers) {\n    subscribers = [];\n    this._subscribers[event] = subscribers;\n  }\n\n  subscribers.push({\n    callback: callback\n  });\n};\n\n// TODO: remove this deprecated function some day (replaced with `on` since version 0.5, deprecated since v4.0)\nDataSet.prototype.subscribe = function () {\n  throw new Error('DataSet.subscribe is deprecated. Use DataSet.on instead.');\n};\n\n/**\n * Unsubscribe from an event, remove an event listener\n * @param {String} event\n * @param {function} callback\n */\nDataSet.prototype.off = function(event, callback) {\n  var subscribers = this._subscribers[event];\n  if (subscribers) {\n    this._subscribers[event] = subscribers.filter(listener => listener.callback != callback);\n  }\n};\n\n// TODO: remove this deprecated function some day (replaced with `on` since version 0.5, deprecated since v4.0)\nDataSet.prototype.unsubscribe = function () {\n  throw new Error('DataSet.unsubscribe is deprecated. Use DataSet.off instead.');\n};\n\n/**\n * Trigger an event\n * @param {String} event\n * @param {Object | null} params\n * @param {String} [senderId]       Optional id of the sender.\n * @private\n */\nDataSet.prototype._trigger = function (event, params, senderId) {\n  if (event == '*') {\n    throw new Error('Cannot trigger event *');\n  }\n\n  var subscribers = [];\n  if (event in this._subscribers) {\n    subscribers = subscribers.concat(this._subscribers[event]);\n  }\n  if ('*' in this._subscribers) {\n    subscribers = subscribers.concat(this._subscribers['*']);\n  }\n\n  for (var i = 0, len = subscribers.length; i < len; i++) {\n    var subscriber = subscribers[i];\n    if (subscriber.callback) {\n      subscriber.callback(event, params, senderId || null);\n    }\n  }\n};\n\n/**\n * Add data.\n * Adding an item will fail when there already is an item with the same id.\n * @param {Object | Array} data\n * @param {String} [senderId] Optional sender id\n * @return {Array} addedIds      Array with the ids of the added items\n */\nDataSet.prototype.add = function (data, senderId) {\n  var addedIds = [],\n      id,\n      me = this;\n\n  if (Array.isArray(data)) {\n    // Array\n    for (var i = 0, len = data.length; i < len; i++) {\n      id = me._addItem(data[i]);\n      addedIds.push(id);\n    }\n  }\n  else if (data instanceof Object) {\n    // Single item\n    id = me._addItem(data);\n    addedIds.push(id);\n  }\n  else {\n    throw new Error('Unknown dataType');\n  }\n\n  if (addedIds.length) {\n    this._trigger('add', {items: addedIds}, senderId);\n  }\n\n  return addedIds;\n};\n\n/**\n * Update existing items. When an item does not exist, it will be created\n * @param {Object | Array} data\n * @param {String} [senderId] Optional sender id\n * @return {Array} updatedIds     The ids of the added or updated items\n */\nDataSet.prototype.update = function (data, senderId) {\n  var addedIds = [];\n  var updatedIds = [];\n  var oldData = [];\n  var updatedData = [];\n  var me = this;\n  var fieldId = me._fieldId;\n\n  var addOrUpdate = function (item) {\n    var id = item[fieldId];\n    if (me._data[id]) {\n      var oldItem = util.extend({}, me._data[id]);\n      // update item\n      id = me._updateItem(item);\n      updatedIds.push(id);\n      updatedData.push(item);\n      oldData.push(oldItem);\n    }\n    else {\n      // add new item\n      id = me._addItem(item);\n      addedIds.push(id);\n    }\n  };\n\n  if (Array.isArray(data)) {\n    // Array\n    for (var i = 0, len = data.length; i < len; i++) {\n      if (data[i] instanceof Object){\n        addOrUpdate(data[i]);\n      } else {\n        console.warn('Ignoring input item, which is not an object at index ' + i);\n      }\n    }\n  }\n  else if (data instanceof Object) {\n    // Single item\n    addOrUpdate(data);\n  }\n  else {\n    throw new Error('Unknown dataType');\n  }\n\n  if (addedIds.length) {\n    this._trigger('add', {items: addedIds}, senderId);\n  }\n  if (updatedIds.length) {\n    var props = { items: updatedIds, oldData: oldData, data: updatedData };\n    // TODO: remove deprecated property 'data' some day\n    //Object.defineProperty(props, 'data', {\n    //  'get': (function() {\n    //    console.warn('Property data is deprecated. Use DataSet.get(ids) to retrieve the new data, use the oldData property on this object to get the old data');\n    //    return updatedData;\n    //  }).bind(this)\n    //});\n    this._trigger('update', props, senderId);\n  }\n\n  return addedIds.concat(updatedIds);\n};\n\n/**\n * Get a data item or multiple items.\n *\n * Usage:\n *\n *     get()\n *     get(options: Object)\n *\n *     get(id: Number | String)\n *     get(id: Number | String, options: Object)\n *\n *     get(ids: Number[] | String[])\n *     get(ids: Number[] | String[], options: Object)\n *\n * Where:\n *\n * {Number | String} id         The id of an item\n * {Number[] | String{}} ids    An array with ids of items\n * {Object} options             An Object with options. Available options:\n * {String} [returnType]        Type of data to be returned.\n *                              Can be 'Array' (default) or 'Object'.\n * {Object.<String, String>} [type]\n * {String[]} [fields]          field names to be returned\n * {function} [filter]          filter items\n * {String | function} [order]  Order the items by a field name or custom sort function.\n * @throws Error\n */\nDataSet.prototype.get = function (args) {\n  var me = this;\n\n  // parse the arguments\n  var id, ids, options;\n  var firstType = util.getType(arguments[0]);\n  if (firstType == 'String' || firstType == 'Number') {\n    // get(id [, options])\n    id = arguments[0];\n    options = arguments[1];\n  }\n  else if (firstType == 'Array') {\n    // get(ids [, options])\n    ids = arguments[0];\n    options = arguments[1];\n  }\n  else {\n    // get([, options])\n    options = arguments[0];\n  }\n\n  // determine the return type\n  var returnType;\n  if (options && options.returnType) {\n    var allowedValues = ['Array', 'Object'];\n    returnType = allowedValues.indexOf(options.returnType) == -1 ? 'Array' : options.returnType;\n  }\n  else {\n    returnType = 'Array';\n  }\n\n  // build options\n  var type = options && options.type || this._options.type;\n  var filter = options && options.filter;\n  var items = [], item, itemIds, itemId, i, len;\n\n  // convert items\n  if (id != undefined) {\n    // return a single item\n    item = me._getItem(id, type);\n    if (item && filter && !filter(item)) {\n      item = null;\n    }\n  }\n  else if (ids != undefined) {\n    // return a subset of items\n    for (i = 0, len = ids.length; i < len; i++) {\n      item = me._getItem(ids[i], type);\n      if (!filter || filter(item)) {\n        items.push(item);\n      }\n    }\n  }\n  else {\n    // return all items\n    itemIds = Object.keys(this._data);\n    for (i = 0, len = itemIds.length; i < len; i++) {\n      itemId = itemIds[i];\n      item = me._getItem(itemId, type);\n      if (!filter || filter(item)) {\n        items.push(item);\n      }\n    }\n  }\n\n  // order the results\n  if (options && options.order && id == undefined) {\n    this._sort(items, options.order);\n  }\n\n  // filter fields of the items\n  if (options && options.fields) {\n    var fields = options.fields;\n    if (id != undefined) {\n      item = this._filterFields(item, fields);\n    }\n    else {\n      for (i = 0, len = items.length; i < len; i++) {\n        items[i] = this._filterFields(items[i], fields);\n      }\n    }\n  }\n\n  // return the results\n  if (returnType == 'Object') {\n    var result = {},\n        resultant;\n    for (i = 0, len = items.length; i < len; i++) {\n      resultant = items[i];\n      result[resultant.id] = resultant;\n    }\n    return result;\n  }\n  else {\n    if (id != undefined) {\n      // a single item\n      return item;\n    }\n    else {\n      // just return our array\n      return items;\n    }\n  }\n};\n\n/**\n * Get ids of all items or from a filtered set of items.\n * @param {Object} [options]    An Object with options. Available options:\n *                              {function} [filter] filter items\n *                              {String | function} [order] Order the items by\n *                                  a field name or custom sort function.\n * @return {Array} ids\n */\nDataSet.prototype.getIds = function (options) {\n  var data = this._data,\n      filter = options && options.filter,\n      order = options && options.order,\n      type = options && options.type || this._options.type,\n      itemIds = Object.keys(data),\n      i,\n      len,\n      id,\n      item,\n      items,\n      ids = [];\n\n  if (filter) {\n    // get filtered items\n    if (order) {\n      // create ordered list\n      items = [];\n      for (i = 0, len = itemIds.length; i < len; i++) {\n        id = itemIds[i];\n        item = this._getItem(id, type);\n        if (filter(item)) {\n          items.push(item);\n        }\n      }\n\n      this._sort(items, order);\n\n      for (i = 0, len = items.length; i < len; i++) {\n        ids.push(items[i][this._fieldId]);\n      }\n    }\n    else {\n      // create unordered list\n      for (i = 0, len = itemIds.length; i < len; i++) {\n        id = itemIds[i];\n        item = this._getItem(id, type);\n        if (filter(item)) {\n          ids.push(item[this._fieldId]);\n        }\n      }\n    }\n  }\n  else {\n    // get all items\n    if (order) {\n      // create an ordered list\n      items = [];\n      for (i = 0, len = itemIds.length; i < len; i++) {\n        id = itemIds[i];\n        items.push(data[id]);\n      }\n\n      this._sort(items, order);\n\n      for (i = 0, len = items.length; i < len; i++) {\n        ids.push(items[i][this._fieldId]);\n      }\n    }\n    else {\n      // create unordered list\n      for (i = 0, len = itemIds.length; i < len; i++) {\n        id = itemIds[i];\n        item = data[id];\n        ids.push(item[this._fieldId]);\n      }\n    }\n  }\n\n  return ids;\n};\n\n/**\n * Returns the DataSet itself. Is overwritten for example by the DataView,\n * which returns the DataSet it is connected to instead.\n */\nDataSet.prototype.getDataSet = function () {\n  return this;\n};\n\n/**\n * Execute a callback function for every item in the dataset.\n * @param {function} callback\n * @param {Object} [options]    Available options:\n *                              {Object.<String, String>} [type]\n *                              {String[]} [fields] filter fields\n *                              {function} [filter] filter items\n *                              {String | function} [order] Order the items by\n *                                  a field name or custom sort function.\n */\nDataSet.prototype.forEach = function (callback, options) {\n  var filter = options && options.filter,\n      type = options && options.type || this._options.type,\n      data = this._data,\n      itemIds = Object.keys(data),\n      i,\n      len,\n      item,\n      id;\n\n  if (options && options.order) {\n    // execute forEach on ordered list\n    var items = this.get(options);\n\n    for (i = 0, len = items.length; i < len; i++) {\n      item = items[i];\n      id = item[this._fieldId];\n      callback(item, id);\n    }\n  }\n  else {\n    // unordered\n    for (i = 0, len = itemIds.length; i < len; i++) {\n      id = itemIds[i];\n      item = this._getItem(id, type);\n      if (!filter || filter(item)) {\n        callback(item, id);\n      }\n    }\n  }\n};\n\n/**\n * Map every item in the dataset.\n * @param {function} callback\n * @param {Object} [options]    Available options:\n *                              {Object.<String, String>} [type]\n *                              {String[]} [fields] filter fields\n *                              {function} [filter] filter items\n *                              {String | function} [order] Order the items by\n *                                  a field name or custom sort function.\n * @return {Object[]} mappedItems\n */\nDataSet.prototype.map = function (callback, options) {\n  var filter = options && options.filter,\n      type = options && options.type || this._options.type,\n      mappedItems = [],\n      data = this._data,\n      itemIds = Object.keys(data),\n      i,\n      len,\n      id,\n      item;\n\n  // convert and filter items\n  for (i = 0, len = itemIds.length; i < len; i++) {\n    id = itemIds[i];\n    item = this._getItem(id, type);\n    if (!filter || filter(item)) {\n      mappedItems.push(callback(item, id));\n    }\n  }\n\n  // order items\n  if (options && options.order) {\n    this._sort(mappedItems, options.order);\n  }\n\n  return mappedItems;\n};\n\n/**\n * Filter the fields of an item\n * @param {Object | null} item\n * @param {String[]} fields     Field names\n * @return {Object | null} filteredItem or null if no item is provided\n * @private\n */\nDataSet.prototype._filterFields = function (item, fields) {\n  if (!item) { // item is null\n    return item;\n  }\n\n  var filteredItem = {},\n      itemFields = Object.keys(item),\n      len = itemFields.length,\n      i,\n      field;\n\n  if(Array.isArray(fields)){\n    for (i = 0; i < len; i++) {\n      field = itemFields[i];\n      if (fields.indexOf(field) != -1) {\n        filteredItem[field] = item[field];\n      }\n    }\n  }else{\n    for (i = 0; i < len; i++) {\n      field = itemFields[i];\n      if (fields.hasOwnProperty(field)) {\n        filteredItem[fields[field]] = item[field];\n      }\n    }\n  }\n\n  return filteredItem;\n};\n\n/**\n * Sort the provided array with items\n * @param {Object[]} items\n * @param {String | function} order      A field name or custom sort function.\n * @private\n */\nDataSet.prototype._sort = function (items, order) {\n  if (util.isString(order)) {\n    // order by provided field name\n    var name = order; // field name\n    items.sort(function (a, b) {\n      var av = a[name];\n      var bv = b[name];\n      return (av > bv) ? 1 : ((av < bv) ? -1 : 0);\n    });\n  }\n  else if (typeof order === 'function') {\n    // order by sort function\n    items.sort(order);\n  }\n  // TODO: extend order by an Object {field:String, direction:String}\n  //       where direction can be 'asc' or 'desc'\n  else {\n    throw new TypeError('Order must be a function or a string');\n  }\n};\n\n/**\n * Remove an object by pointer or by id\n * @param {String | Number | Object | Array} id Object or id, or an array with\n *                                              objects or ids to be removed\n * @param {String} [senderId] Optional sender id\n * @return {Array} removedIds\n */\nDataSet.prototype.remove = function (id, senderId) {\n  var removedIds = [],\n      removedItems = [],\n      ids = [],\n      i, len, itemId, item;\n\n  // force everything to be an array for simplicity\n  ids = Array.isArray(id) ? id : [id];\n\n  for (i = 0, len = ids.length; i < len; i++) {\n    item = this._remove(ids[i]);\n    if (item) {\n      itemId = item[this._fieldId];\n      if (itemId != undefined) {\n        removedIds.push(itemId);\n        removedItems.push(item);\n      }\n    }\n  }\n\n  if (removedIds.length) {\n    this._trigger('remove', {items: removedIds, oldData: removedItems}, senderId);\n  }\n\n  return removedIds;\n};\n\n/**\n * Remove an item by its id\n * @param {Number | String | Object} id   id or item\n * @returns {Number | String | null} id\n * @private\n */\nDataSet.prototype._remove = function (id) {\n  var item,\n      ident;\n\n  // confirm the id to use based on the args type\n  if (util.isNumber(id) || util.isString(id)) {\n    ident = id;\n  }\n  else if (id instanceof Object) {\n    ident = id[this._fieldId]; // look for the identifier field using _fieldId\n  }\n\n  // do the remove if the item is found\n  if (ident !== undefined && this._data[ident]) {\n    item = this._data[ident];\n    delete this._data[ident];\n    this.length--;\n    return item;\n  }\n  return null;\n};\n\n/**\n * Clear the data\n * @param {String} [senderId] Optional sender id\n * @return {Array} removedIds    The ids of all removed items\n */\nDataSet.prototype.clear = function (senderId) {\n  var i, len;\n  var ids = Object.keys(this._data);\n  var items = [];\n\n  for (i = 0, len = ids.length; i < len; i++) {\n    items.push(this._data[ids[i]]);\n  }\n\n  this._data = {};\n  this.length = 0;\n\n  this._trigger('remove', {items: ids, oldData: items}, senderId);\n\n  return ids;\n};\n\n/**\n * Find the item with maximum value of a specified field\n * @param {String} field\n * @return {Object | null} item  Item containing max value, or null if no items\n */\nDataSet.prototype.max = function (field) {\n  var data = this._data,\n      itemIds = Object.keys(data),\n      max = null,\n      maxField = null,\n      i,\n      len;\n\n  for (i = 0, len = itemIds.length; i < len; i++) {\n    var id = itemIds[i];\n    var item = data[id];\n    var itemField = item[field];\n    if (itemField != null && (!max || itemField > maxField)) {\n      max = item;\n      maxField = itemField;\n    }\n  }\n\n  return max;\n};\n\n/**\n * Find the item with minimum value of a specified field\n * @param {String} field\n * @return {Object | null} item  Item containing max value, or null if no items\n */\nDataSet.prototype.min = function (field) {\n  var data = this._data,\n      itemIds = Object.keys(data),\n      min = null,\n      minField = null,\n      i,\n      len;\n\n  for (i = 0, len = itemIds.length; i < len; i++) {\n    var id = itemIds[i];\n    var item = data[id];\n    var itemField = item[field];\n    if (itemField != null && (!min || itemField < minField)) {\n      min = item;\n      minField = itemField;\n    }\n  }\n\n  return min;\n};\n\n/**\n * Find all distinct values of a specified field\n * @param {String} field\n * @return {Array} values  Array containing all distinct values. If data items\n *                         do not contain the specified field are ignored.\n *                         The returned array is unordered.\n */\nDataSet.prototype.distinct = function (field) {\n  var data = this._data;\n  var itemIds = Object.keys(data);\n  var values = [];\n  var fieldType = this._options.type && this._options.type[field] || null;\n  var count = 0;\n  var i,\n      j,\n      len;\n\n  for (i = 0, len = itemIds.length; i < len; i++) {\n    var id = itemIds[i];\n    var item = data[id];\n    var value = item[field];\n    var exists = false;\n    for (j = 0; j < count; j++) {\n      if (values[j] == value) {\n        exists = true;\n        break;\n      }\n    }\n    if (!exists && (value !== undefined)) {\n      values[count] = value;\n      count++;\n    }\n  }\n\n  if (fieldType) {\n    for (i = 0, len = values.length; i < len; i++) {\n      values[i] = util.convert(values[i], fieldType);\n    }\n  }\n\n  return values;\n};\n\n/**\n * Add a single item. Will fail when an item with the same id already exists.\n * @param {Object} item\n * @return {String} id\n * @private\n */\nDataSet.prototype._addItem = function (item) {\n  var id = item[this._fieldId];\n\n  if (id != undefined) {\n    // check whether this id is already taken\n    if (this._data[id]) {\n      // item already exists\n      throw new Error('Cannot add item: item with id ' + id + ' already exists');\n    }\n  }\n  else {\n    // generate an id\n    id = util.randomUUID();\n    item[this._fieldId] = id;\n  }\n\n  var d = {},\n      fields = Object.keys(item),\n      i,\n      len;\n  for (i = 0, len = fields.length; i < len; i++) {\n    var field = fields[i];\n    var fieldType = this._type[field];  // type may be undefined\n    d[field] = util.convert(item[field], fieldType);\n  }\n  this._data[id] = d;\n  this.length++;\n\n  return id;\n};\n\n/**\n * Get an item. Fields can be converted to a specific type\n * @param {String} id\n * @param {Object.<String, String>} [types]  field types to convert\n * @return {Object | null} item\n * @private\n */\nDataSet.prototype._getItem = function (id, types) {\n  var field, value, i, len;\n\n  // get the item from the dataset\n  var raw = this._data[id];\n  if (!raw) {\n    return null;\n  }\n\n  // convert the items field types\n  var converted = {},\n      fields = Object.keys(raw);\n\n  if (types) {\n    for (i = 0, len = fields.length; i < len; i++) {\n      field = fields[i];\n      value = raw[field];\n      converted[field] = util.convert(value, types[field]);\n    }\n  }\n  else {\n    // no field types specified, no converting needed\n    for (i = 0, len = fields.length; i < len; i++) {\n      field = fields[i];\n      value = raw[field];\n      converted[field] = value;\n    }\n  }\n\n  if (!converted[this._fieldId]) {\n    converted[this._fieldId] = raw.id;\n  }\n\n  return converted;\n};\n\n/**\n * Update a single item: merge with existing item.\n * Will fail when the item has no id, or when there does not exist an item\n * with the same id.\n * @param {Object} item\n * @return {String} id\n * @private\n */\nDataSet.prototype._updateItem = function (item) {\n  var id = item[this._fieldId];\n  if (id == undefined) {\n    throw new Error('Cannot update item: item has no id (item: ' + JSON.stringify(item) + ')');\n  }\n  var d = this._data[id];\n  if (!d) {\n    // item doesn't exist\n    throw new Error('Cannot update item: no item with id ' + id + ' found');\n  }\n\n  // merge with current item\n  var fields = Object.keys(item);\n  for (var i = 0, len = fields.length; i < len; i++) {\n    var field = fields[i];\n    var fieldType = this._type[field];  // type may be undefined\n    d[field] = util.convert(item[field], fieldType);\n  }\n\n  return id;\n};\n\nmodule.exports = DataSet;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/DataSet.js","/**\n * A queue\n * @param {Object} options\n *            Available options:\n *            - delay: number    When provided, the queue will be flushed\n *                               automatically after an inactivity of this delay\n *                               in milliseconds.\n *                               Default value is null.\n *            - max: number      When the queue exceeds the given maximum number\n *                               of entries, the queue is flushed automatically.\n *                               Default value of max is Infinity.\n * @constructor\n */\nfunction Queue(options) {\n  // options\n  this.delay = null;\n  this.max = Infinity;\n\n  // properties\n  this._queue = [];\n  this._timeout = null;\n  this._extended = null;\n\n  this.setOptions(options);\n}\n\n/**\n * Update the configuration of the queue\n * @param {Object} options\n *            Available options:\n *            - delay: number    When provided, the queue will be flushed\n *                               automatically after an inactivity of this delay\n *                               in milliseconds.\n *                               Default value is null.\n *            - max: number      When the queue exceeds the given maximum number\n *                               of entries, the queue is flushed automatically.\n *                               Default value of max is Infinity.\n * @param options\n */\nQueue.prototype.setOptions = function (options) {\n  if (options && typeof options.delay !== 'undefined') {\n    this.delay = options.delay;\n  }\n  if (options && typeof options.max !== 'undefined') {\n    this.max = options.max;\n  }\n\n  this._flushIfNeeded();\n};\n\n/**\n * Extend an object with queuing functionality.\n * The object will be extended with a function flush, and the methods provided\n * in options.replace will be replaced with queued ones.\n * @param {Object} object\n * @param {Object} options\n *            Available options:\n *            - replace: Array.<string>\n *                               A list with method names of the methods\n *                               on the object to be replaced with queued ones.\n *            - delay: number    When provided, the queue will be flushed\n *                               automatically after an inactivity of this delay\n *                               in milliseconds.\n *                               Default value is null.\n *            - max: number      When the queue exceeds the given maximum number\n *                               of entries, the queue is flushed automatically.\n *                               Default value of max is Infinity.\n * @return {Queue} Returns the created queue\n */\nQueue.extend = function (object, options) {\n  var queue = new Queue(options);\n\n  if (object.flush !== undefined) {\n    throw new Error('Target object already has a property flush');\n  }\n  object.flush = function () {\n    queue.flush();\n  };\n\n  var methods = [{\n    name: 'flush',\n    original: undefined\n  }];\n\n  if (options && options.replace) {\n    for (var i = 0; i < options.replace.length; i++) {\n      var name = options.replace[i];\n      methods.push({\n        name: name,\n        original: object[name]\n      });\n      queue.replace(object, name);\n    }\n  }\n\n  queue._extended = {\n    object: object,\n    methods: methods\n  };\n\n  return queue;\n};\n\n/**\n * Destroy the queue. The queue will first flush all queued actions, and in\n * case it has extended an object, will restore the original object.\n */\nQueue.prototype.destroy = function () {\n  this.flush();\n\n  if (this._extended) {\n    var object = this._extended.object;\n    var methods = this._extended.methods;\n    for (var i = 0; i < methods.length; i++) {\n      var method = methods[i];\n      if (method.original) {\n        object[method.name] = method.original;\n      }\n      else {\n        delete object[method.name];\n      }\n    }\n    this._extended = null;\n  }\n};\n\n/**\n * Replace a method on an object with a queued version\n * @param {Object} object   Object having the method\n * @param {string} method   The method name\n */\nQueue.prototype.replace = function(object, method) {\n  var me = this;\n  var original = object[method];\n  if (!original) {\n    throw new Error('Method ' + method + ' undefined');\n  }\n\n  object[method] = function () {\n    // create an Array with the arguments\n    var args = [];\n    for (var i = 0; i < arguments.length; i++) {\n      args[i] = arguments[i];\n    }\n\n    // add this call to the queue\n    me.queue({\n      args: args,\n      fn: original,\n      context: this\n    });\n  };\n};\n\n/**\n * Queue a call\n * @param {function | {fn: function, args: Array} | {fn: function, args: Array, context: Object}} entry\n */\nQueue.prototype.queue = function(entry) {\n  if (typeof entry === 'function') {\n    this._queue.push({fn: entry});\n  }\n  else {\n    this._queue.push(entry);\n  }\n\n  this._flushIfNeeded();\n};\n\n/**\n * Check whether the queue needs to be flushed\n * @private\n */\nQueue.prototype._flushIfNeeded = function () {\n  // flush when the maximum is exceeded.\n  if (this._queue.length > this.max) {\n    this.flush();\n  }\n\n  // flush after a period of inactivity when a delay is configured\n  clearTimeout(this._timeout);\n  if (this.queue.length > 0 && typeof this.delay === 'number') {\n    var me = this;\n    this._timeout = setTimeout(function () {\n      me.flush();\n    }, this.delay);\n  }\n};\n\n/**\n * Flush all queued calls\n */\nQueue.prototype.flush = function () {\n  while (this._queue.length > 0) {\n    var entry = this._queue.shift();\n    entry.fn.apply(entry.context || entry.fn, entry.args || []);\n  }\n};\n\nmodule.exports = Queue;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/Queue.js","var util = require('./util');\nvar DataSet = require('./DataSet');\n\n/**\n * DataView\n *\n * a dataview offers a filtered view on a dataset or an other dataview.\n *\n * @param {DataSet | DataView} data\n * @param {Object} [options]   Available options: see method get\n *\n * @constructor DataView\n */\nfunction DataView (data, options) {\n  this._data = null;\n  this._ids = {}; // ids of the items currently in memory (just contains a boolean true)\n  this.length = 0; // number of items in the DataView\n  this._options = options || {};\n  this._fieldId = 'id'; // name of the field containing id\n  this._subscribers = {}; // event subscribers\n\n  var me = this;\n  this.listener = function () {\n    me._onEvent.apply(me, arguments);\n  };\n\n  this.setData(data);\n}\n\n// TODO: implement a function .config() to dynamically update things like configured filter\n// and trigger changes accordingly\n\n/**\n * Set a data source for the view\n * @param {DataSet | DataView} data\n */\nDataView.prototype.setData = function (data) {\n  var ids, id, i, len, items;\n\n  if (this._data) {\n    // unsubscribe from current dataset\n    if (this._data.off) {\n      this._data.off('*', this.listener);\n    }\n\n    // trigger a remove of all items in memory\n    ids = this._data.getIds({filter: this._options && this._options.filter});\n    items = [];\n\n    for (i = 0, len = ids.length; i < len; i++) {\n      items.push(this._data._data[ids[i]]);\n    }\n\n    this._ids = {};\n    this.length = 0;\n    this._trigger('remove', {items: ids, oldData: items});\n  }\n\n  this._data = data;\n\n  if (this._data) {\n    // update fieldId\n    this._fieldId = this._options.fieldId ||\n        (this._data && this._data.options && this._data.options.fieldId) ||\n        'id';\n\n    // trigger an add of all added items\n    ids = this._data.getIds({filter: this._options && this._options.filter});\n    for (i = 0, len = ids.length; i < len; i++) {\n      id = ids[i];\n      this._ids[id] = true;\n    }\n    this.length = ids.length;\n    this._trigger('add', {items: ids});\n\n    // subscribe to new dataset\n    if (this._data.on) {\n      this._data.on('*', this.listener);\n    }\n  }\n};\n\n/**\n * Refresh the DataView. Useful when the DataView has a filter function\n * containing a variable parameter.\n */\nDataView.prototype.refresh = function () {\n  var id, i, len;\n  var ids = this._data.getIds({filter: this._options && this._options.filter}),\n      oldIds = Object.keys(this._ids),\n      newIds = {},\n      addedIds = [],\n      removedIds = [],\n      removedItems = [];\n\n  // check for additions\n  for (i = 0, len = ids.length; i < len; i++) {\n    id = ids[i];\n    newIds[id] = true;\n    if (!this._ids[id]) {\n      addedIds.push(id);\n      this._ids[id] = true;\n    }\n  }\n\n  // check for removals\n  for (i = 0, len = oldIds.length; i < len; i++) {\n    id = oldIds[i];\n    if (!newIds[id]) {\n      removedIds.push(id);\n      removedItems.push(this._data._data[id]);\n      delete this._ids[id];\n    }\n  }\n\n  this.length += addedIds.length - removedIds.length;\n\n  // trigger events\n  if (addedIds.length) {\n    this._trigger('add', {items: addedIds});\n  }\n  if (removedIds.length) {\n    this._trigger('remove', {items: removedIds, oldData: removedItems});\n  }\n};\n\n/**\n * Get data from the data view\n *\n * Usage:\n *\n *     get()\n *     get(options: Object)\n *     get(options: Object, data: Array | DataTable)\n *\n *     get(id: Number)\n *     get(id: Number, options: Object)\n *     get(id: Number, options: Object, data: Array | DataTable)\n *\n *     get(ids: Number[])\n *     get(ids: Number[], options: Object)\n *     get(ids: Number[], options: Object, data: Array | DataTable)\n *\n * Where:\n *\n * {Number | String} id         The id of an item\n * {Number[] | String{}} ids    An array with ids of items\n * {Object} options             An Object with options. Available options:\n *                              {String} [type] Type of data to be returned. Can\n *                                              be 'DataTable' or 'Array' (default)\n *                              {Object.<String, String>} [convert]\n *                              {String[]} [fields] field names to be returned\n *                              {function} [filter] filter items\n *                              {String | function} [order] Order the items by\n *                                  a field name or custom sort function.\n * {Array | DataTable} [data]   If provided, items will be appended to this\n *                              array or table. Required in case of Google\n *                              DataTable.\n * @param args\n */\nDataView.prototype.get = function (args) {\n  var me = this;\n\n  // parse the arguments\n  var ids, options, data;\n  var firstType = util.getType(arguments[0]);\n  if (firstType == 'String' || firstType == 'Number' || firstType == 'Array') {\n    // get(id(s) [, options] [, data])\n    ids = arguments[0];  // can be a single id or an array with ids\n    options = arguments[1];\n    data = arguments[2];\n  }\n  else {\n    // get([, options] [, data])\n    options = arguments[0];\n    data = arguments[1];\n  }\n\n  // extend the options with the default options and provided options\n  var viewOptions = util.extend({}, this._options, options);\n\n  // create a combined filter method when needed\n  if (this._options.filter && options && options.filter) {\n    viewOptions.filter = function (item) {\n      return me._options.filter(item) && options.filter(item);\n    }\n  }\n\n  // build up the call to the linked data set\n  var getArguments = [];\n  if (ids != undefined) {\n    getArguments.push(ids);\n  }\n  getArguments.push(viewOptions);\n  getArguments.push(data);\n\n  return this._data && this._data.get.apply(this._data, getArguments);\n};\n\n/**\n * Get ids of all items or from a filtered set of items.\n * @param {Object} [options]    An Object with options. Available options:\n *                              {function} [filter] filter items\n *                              {String | function} [order] Order the items by\n *                                  a field name or custom sort function.\n * @return {Array} ids\n */\nDataView.prototype.getIds = function (options) {\n  var ids;\n\n  if (this._data) {\n    var defaultFilter = this._options.filter;\n    var filter;\n\n    if (options && options.filter) {\n      if (defaultFilter) {\n        filter = function (item) {\n          return defaultFilter(item) && options.filter(item);\n        }\n      }\n      else {\n        filter = options.filter;\n      }\n    }\n    else {\n      filter = defaultFilter;\n    }\n\n    ids = this._data.getIds({\n      filter: filter,\n      order: options && options.order\n    });\n  }\n  else {\n    ids = [];\n  }\n\n  return ids;\n};\n\n/**\n * Map every item in the dataset.\n * @param {function} callback\n * @param {Object} [options]    Available options:\n *                              {Object.<String, String>} [type]\n *                              {String[]} [fields] filter fields\n *                              {function} [filter] filter items\n *                              {String | function} [order] Order the items by\n *                                  a field name or custom sort function.\n * @return {Object[]} mappedItems\n */\nDataView.prototype.map = function (callback,options) {\n  var mappedItems = [];\n  if (this._data) {\n    var defaultFilter = this._options.filter;\n    var filter;\n\n    if (options && options.filter) {\n      if (defaultFilter) {\n        filter = function (item) {\n          return defaultFilter(item) && options.filter(item);\n        }\n      }\n      else {\n        filter = options.filter;\n      }\n    }\n    else {\n      filter = defaultFilter;\n    }\n\n    mappedItems = this._data.map(callback,{\n      filter: filter,\n      order: options && options.order\n    });\n  }\n  else {\n    mappedItems = [];\n  }\n\n  return mappedItems;\n};\n\n/**\n * Get the DataSet to which this DataView is connected. In case there is a chain\n * of multiple DataViews, the root DataSet of this chain is returned.\n * @return {DataSet} dataSet\n */\nDataView.prototype.getDataSet = function () {\n  var dataSet = this;\n  while (dataSet instanceof DataView) {\n    dataSet = dataSet._data;\n  }\n  return dataSet || null;\n};\n\n/**\n * Event listener. Will propagate all events from the connected data set to\n * the subscribers of the DataView, but will filter the items and only trigger\n * when there are changes in the filtered data set.\n * @param {String} event\n * @param {Object | null} params\n * @param {String} senderId\n * @private\n */\nDataView.prototype._onEvent = function (event, params, senderId) {\n  var i, len, id, item;\n  var ids = params && params.items;\n  var addedIds = [],\n      updatedIds = [],\n      removedIds = [],\n      oldItems = [],\n      updatedItems = [],\n      removedItems = [];\n\n  if (ids && this._data) {\n    switch (event) {\n      case 'add':\n        // filter the ids of the added items\n        for (i = 0, len = ids.length; i < len; i++) {\n          id = ids[i];\n          item = this.get(id);\n          if (item) {\n            this._ids[id] = true;\n            addedIds.push(id);\n          }\n        }\n\n        break;\n\n      case 'update':\n        // determine the event from the views viewpoint: an updated\n        // item can be added, updated, or removed from this view.\n        for (i = 0, len = ids.length; i < len; i++) {\n          id = ids[i];\n          item = this.get(id);\n\n          if (item) {\n            if (this._ids[id]) {\n              updatedIds.push(id);\n              updatedItems.push(params.data[i]);\n              oldItems.push(params.oldData[i]);\n            }\n            else {\n              this._ids[id] = true;\n              addedIds.push(id);\n            }\n          }\n          else {\n            if (this._ids[id]) {\n              delete this._ids[id];\n              removedIds.push(id);\n              removedItems.push(params.oldData[i]);\n            }\n            else {\n              // nothing interesting for me :-(\n            }\n          }\n        }\n\n        break;\n\n      case 'remove':\n        // filter the ids of the removed items\n        for (i = 0, len = ids.length; i < len; i++) {\n          id = ids[i];\n          if (this._ids[id]) {\n            delete this._ids[id];\n            removedIds.push(id);\n            removedItems.push(params.oldData[i]);\n          }\n        }\n\n        break;\n    }\n\n    this.length += addedIds.length - removedIds.length;\n\n    if (addedIds.length) {\n      this._trigger('add', {items: addedIds}, senderId);\n    }\n    if (updatedIds.length) {\n      this._trigger('update', {items: updatedIds, oldData: oldItems, data: updatedItems}, senderId);\n    }\n    if (removedIds.length) {\n      this._trigger('remove', {items: removedIds, oldData: removedItems}, senderId);\n    }\n  }\n};\n\n// copy subscription functionality from DataSet\nDataView.prototype.on = DataSet.prototype.on;\nDataView.prototype.off = DataSet.prototype.off;\nDataView.prototype._trigger = DataSet.prototype._trigger;\n\n// TODO: make these functions deprecated (replaced with `on` and `off` since version 0.5)\nDataView.prototype.subscribe = DataView.prototype.on;\nDataView.prototype.unsubscribe = DataView.prototype.off;\n\nmodule.exports = DataView;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/DataView.js","var Emitter = require('emitter-component'); var DataSet = require('../DataSet');\nvar DataView = require('../DataView');\nvar util = require('../util');\nvar Point3d = require('./Point3d');\nvar Point2d = require('./Point2d');\nvar Camera = require('./Camera');\nvar Filter = require('./Filter');\nvar Slider = require('./Slider');\nvar StepNumber = require('./StepNumber');\nvar Range = require('./Range');\nvar Settings = require('./Settings');\n\n\n/// enumerate the available styles\nGraph3d.STYLE = Settings.STYLE; \n\n\n/**\n * Following label is used in the settings to describe values which should be\n * determined by the code while running, from the current data and graph style.\n * \n * Using 'undefined' directly achieves the same thing, but this is more\n * descriptive by describing the intent.\n */\nvar autoByDefault = undefined;\n\n\n/**\n * Default values for option settings.\n *\n * These are the values used when a Graph3d instance is initialized without\n * custom settings.\n *\n * If a field is not in this list, a default value of 'autoByDefault' is assumed,\n * which is just an alias for 'undefined'.\n */\nvar DEFAULTS = {\n  width            : '400px',\n  height           : '400px',\n  filterLabel      : 'time',\n  legendLabel      : 'value',\n  xLabel           : 'x',\n  yLabel           : 'y',\n  zLabel           : 'z',\n  xValueLabel      : function(v) { return v; },\n  yValueLabel      : function(v) { return v; },\n  zValueLabel      : function(v) { return v; },\n  showGrid         : true,\n  showPerspective  : true,\n  showShadow       : false,\n  keepAspectRatio  : true,\n  verticalRatio    : 0.5,    // 0.1 to 1.0, where 1.0 results in a 'cube'\n  dotSizeRatio     : 0.02,   // size of the dots as a fraction of the graph width\n\n  showAnimationControls: autoByDefault,\n  animationInterval    : 1000, // milliseconds\n  animationPreload     : false,\n  animationAutoStart   : autoByDefault,\n\n  axisColor        : '#4D4D4D',\n  gridColor        : '#D3D3D3',\n  xCenter          : '55%',\n  yCenter          : '50%',\n\n  style            : Graph3d.STYLE.DOT,\n  tooltip          : false,\n  showLegend       : autoByDefault, // determined by graph style\n  backgroundColor  : autoByDefault,\n\n  dataColor        : {\n    fill       : '#7DC1FF',\n    stroke     : '#3267D2',\n    strokeWidth: 1 // px\n  },\n\n  cameraPosition   : {\n     horizontal: 1.0,\n     vertical  : 0.5,\n     distance  : 1.7\n  },\n\n  xBarWidth : autoByDefault,\n  yBarWidth : autoByDefault,\n  valueMin  : autoByDefault,\n  valueMax  : autoByDefault,\n  xMin      : autoByDefault,\n  xMax      : autoByDefault,\n  xStep     : autoByDefault,\n  yMin      : autoByDefault,\n  yMax      : autoByDefault,\n  yStep     : autoByDefault,\n  zMin      : autoByDefault,\n  zMax      : autoByDefault,\n  zStep     : autoByDefault\n};\n\n\n// -----------------------------------------------------------------------------\n// Class Graph3d\n// -----------------------------------------------------------------------------\n\n\n/**\n * @constructor Graph3d\n * Graph3d displays data in 3d.\n *\n * Graph3d is developed in javascript as a Google Visualization Chart.\n *\n * @param {Element} container   The DOM element in which the Graph3d will\n *                              be created. Normally a div element.\n * @param {DataSet | DataView | Array} [data]\n * @param {Object} [options]\n */\nfunction Graph3d(container, data, options) {\n  if (!(this instanceof Graph3d)) {\n    throw new SyntaxError('Constructor must be called with the new operator');\n  }\n\n  // create variables and set default values\n  this.containerElement = container;\n\n  this.dataTable = null;  // The original data table\n  this.dataPoints = null; // The table with point objects\n\n  // create a frame and canvas\n  this.create();\n\n  Settings.setDefaults(DEFAULTS, this);\n\n  // the column indexes\n  this.colX = undefined;\n  this.colY = undefined;\n  this.colZ = undefined;\n  this.colValue = undefined;\n  this.colFilter = undefined;\n\n  // TODO: customize axis range\n\n  // apply options (also when undefined)\n  this.setOptions(options);\n\n  // apply data\n  if (data) {\n    this.setData(data);\n  }\n}\n\n// Extend Graph3d with an Emitter mixin\nEmitter(Graph3d.prototype);\n\n/**\n * Calculate the scaling values, dependent on the range in x, y, and z direction\n */\nGraph3d.prototype._setScale = function() {\n  this.scale = new Point3d(\n    1 / this.xRange.range(),\n    1 / this.yRange.range(),\n    1 / this.zRange.range()\n  );\n\n  // keep aspect ration between x and y scale if desired\n  if (this.keepAspectRatio) {\n    if (this.scale.x < this.scale.y) {\n      //noinspection JSSuspiciousNameCombination\n      this.scale.y = this.scale.x;\n    }\n    else {\n      //noinspection JSSuspiciousNameCombination\n      this.scale.x = this.scale.y;\n    }\n  }\n\n  // scale the vertical axis\n  this.scale.z *= this.verticalRatio;\n  // TODO: can this be automated? verticalRatio?\n\n  // determine scale for (optional) value\n  if (this.valueRange !== undefined) {\n    this.scale.value = 1 / this.valueRange.range();\n  }\n\n  // position the camera arm\n  var xCenter = this.xRange.center() * this.scale.x;\n  var yCenter = this.yRange.center() * this.scale.y;\n  var zCenter = this.zRange.center() * this.scale.z;\n  this.camera.setArmLocation(xCenter, yCenter, zCenter);\n};\n\n\n/**\n * Convert a 3D location to a 2D location on screen\n * Source: ttp://en.wikipedia.org/wiki/3D_projection\n *\n * @param   {Point3d} point3d  A 3D point with parameters x, y, z\n * @returns {Point2d} point2d  A 2D point with parameters x, y\n */\nGraph3d.prototype._convert3Dto2D = function(point3d) {\n  var translation = this._convertPointToTranslation(point3d);\n  return this._convertTranslationToScreen(translation);\n};\n\n/**\n * Convert a 3D location its translation seen from the camera\n * Source: http://en.wikipedia.org/wiki/3D_projection\n *\n * @param   {Point3d} point3d     A 3D point with parameters x, y, z\n * @returns {Point3d} translation A 3D point with parameters x, y, z This is\n *                                the translation of the point, seen from the\n *                                camera.\n */\nGraph3d.prototype._convertPointToTranslation = function(point3d) {\n  var cameraLocation = this.camera.getCameraLocation(),\n    cameraRotation = this.camera.getCameraRotation(),\n    ax = point3d.x * this.scale.x,\n    ay = point3d.y * this.scale.y,\n    az = point3d.z * this.scale.z,\n\n    cx = cameraLocation.x,\n    cy = cameraLocation.y,\n    cz = cameraLocation.z,\n\n  // calculate angles\n    sinTx = Math.sin(cameraRotation.x),\n    cosTx = Math.cos(cameraRotation.x),\n    sinTy = Math.sin(cameraRotation.y),\n    cosTy = Math.cos(cameraRotation.y),\n    sinTz = Math.sin(cameraRotation.z),\n    cosTz = Math.cos(cameraRotation.z),\n\n  // calculate translation\n    dx = cosTy * (sinTz * (ay - cy) + cosTz * (ax - cx)) - sinTy * (az - cz),\n    dy = sinTx * (cosTy * (az - cz) + sinTy * (sinTz * (ay - cy) + cosTz * (ax - cx))) + cosTx * (cosTz * (ay - cy) - sinTz * (ax-cx)),\n    dz = cosTx * (cosTy * (az - cz) + sinTy * (sinTz * (ay - cy) + cosTz * (ax - cx))) - sinTx * (cosTz * (ay - cy) - sinTz * (ax-cx));\n\n  return new Point3d(dx, dy, dz);\n};\n\n/**\n * Convert a translation point to a point on the screen\n *\n * @param   {Point3d} translation A 3D point with parameters x, y, z This is\n *                                the translation of the point, seen from the\n *                                camera.\n * @returns {Point2d} point2d     A 2D point with parameters x, y\n */\nGraph3d.prototype._convertTranslationToScreen = function(translation) {\n  var ex = this.eye.x,\n    ey = this.eye.y,\n    ez = this.eye.z,\n    dx = translation.x,\n    dy = translation.y,\n    dz = translation.z;\n\n  // calculate position on screen from translation\n  var bx;\n  var by;\n  if (this.showPerspective) {\n    bx = (dx - ex) * (ez / dz);\n    by = (dy - ey) * (ez / dz);\n  }\n  else {\n    bx = dx * -(ez / this.camera.getArmLength());\n    by = dy * -(ez / this.camera.getArmLength());\n  }\n\n  // shift and scale the point to the center of the screen\n  // use the width of the graph to scale both horizontally and vertically.\n  return new Point2d(\n    this.currentXCenter + bx * this.frame.canvas.clientWidth,\n    this.currentYCenter - by * this.frame.canvas.clientWidth);\n};\n\n\n/**\n * Calculate the translations and screen positions of all points\n */\nGraph3d.prototype._calcTranslations = function(points, sort) {\n  if (sort === undefined) {\n    sort = true;\n  }\n\n  for (var i = 0; i < points.length; i++) {\n    var point    = points[i];\n    point.trans  = this._convertPointToTranslation(point.point);\n    point.screen = this._convertTranslationToScreen(point.trans);\n\n    // calculate the translation of the point at the bottom (needed for sorting)\n    var transBottom = this._convertPointToTranslation(point.bottom);\n    point.dist = this.showPerspective ? transBottom.length() : -transBottom.z;\n  }\n\n  if (!sort) {\n    return;\n  }\n\n  // sort the points on depth of their (x,y) position (not on z)\n  var sortDepth = function (a, b) {\n    return b.dist - a.dist;\n  };\n  points.sort(sortDepth);\n};\n\n\nGraph3d.prototype.getNumberOfRows = function(data) {\n  return data.length;\n}\n\n\nGraph3d.prototype.getNumberOfColumns = function(data) {\n  var counter = 0;\n  for (var column in data[0]) {\n    if (data[0].hasOwnProperty(column)) {\n      counter++;\n    }\n  }\n  return counter;\n}\n\n\nGraph3d.prototype.getDistinctValues = function(data, column) {\n  var distinctValues = [];\n  for (var i = 0; i < data.length; i++) {\n    if (distinctValues.indexOf(data[i][column]) == -1) {\n      distinctValues.push(data[i][column]);\n    }\n  }\n  return distinctValues;\n}\n\n\n/**\n * Get the absolute min/max values for the passed data column.\n *\n * @returns {Range} A Range instance with min/max members properly set.\n */\nGraph3d.prototype.getColumnRange = function(data,column) {\n  var range  = new Range();\n\n  // Adjust the range so that it covers all values in the passed data elements.\n  for (var i = 0; i < data.length; i++) {\n    var item = data[i][column];\n    range.adjust(item);\n  }\n\n  return range;\n};\n\n\n/**\n * Check if the state is consistent for the use of the value field.\n *\n * Throws if a problem is detected.\n */\nGraph3d.prototype._checkValueField = function (data) {\n\n  var hasValueField = this.style === Graph3d.STYLE.BARCOLOR\n                   || this.style === Graph3d.STYLE.BARSIZE\n                   || this.style === Graph3d.STYLE.DOTCOLOR\n                   || this.style === Graph3d.STYLE.DOTSIZE;\n\n  if (!hasValueField) {\n    return;   // No need to check further\n  }\n\n  // Following field must be present for the current graph style\n  if (this.colValue === undefined) {\n    throw new Error('Expected data to have '\n      + ' field \\'style\\' '\n      + ' for graph style \\'' + this.style + '\\''\n    );\n  }\n\n  // The data must also contain this field.\n  // Note that only first data element is checked.\n  if (data[0][this.colValue] === undefined) {\n    throw new Error('Expected data to have '\n      + ' field \\'' + this.colValue + '\\' '\n      + ' for graph style \\'' + this.style + '\\''\n    );\n  }\n};\n\n\n/**\n * Set default values for range\n *\n * The default values override the range values, if defined.\n *\n * Because it's possible that only defaultMin or defaultMax is set, it's better\n * to pass in a range already set with the min/max set from the data. Otherwise,\n * it's quite hard to process the min/max properly.\n */\nGraph3d.prototype._setRangeDefaults = function (range, defaultMin, defaultMax) {\n  if (defaultMin !== undefined) {\n    range.min = defaultMin;\n  }\n\n  if (defaultMax !== undefined) {\n    range.max = defaultMax;\n  }\n\n  // This is the original way that the default min/max values were adjusted.\n  // TODO: Perhaps it's better if an error is thrown if the values do not agree.\n  //       But this will change the behaviour.\n  if (range.max <= range.min) range.max = range.min + 1;\n};\n\n\n/**\n * Initialize the data from the data table. Calculate minimum and maximum values\n * and column index values\n * @param {Array | DataSet | DataView} rawData The data containing the items for\n *                                             the Graph.\n * @param {Number}                     style   Style Number\n */\nGraph3d.prototype._dataInitialize = function (rawData, style) {\n  var me = this;\n\n  // unsubscribe from the dataTable\n  if (this.dataSet) {\n    this.dataSet.off('*', this._onChange);\n  }\n\n  if (rawData === undefined)\n    return;\n\n  if (Array.isArray(rawData)) {\n    rawData = new DataSet(rawData);\n  }\n\n  var data;\n  if (rawData instanceof DataSet || rawData instanceof DataView) {\n    data = rawData.get();\n  }\n  else {\n    throw new Error('Array, DataSet, or DataView expected');\n  }\n\n  if (data.length == 0)\n    return;\n\n  this.dataSet = rawData;\n  this.dataTable = data;\n\n  // subscribe to changes in the dataset\n  this._onChange = function () {\n    me.setData(me.dataSet);\n  };\n  this.dataSet.on('*', this._onChange);\n\n  // determine the location of x,y,z,value,filter columns\n  this.colX = 'x';\n  this.colY = 'y';\n  this.colZ = 'z';\n\n\n  var withBars = this.style == Graph3d.STYLE.BAR ||\n    this.style == Graph3d.STYLE.BARCOLOR ||\n    this.style == Graph3d.STYLE.BARSIZE;\n\n  // determine barWidth from data\n  if (withBars) {\n    if (this.defaultXBarWidth !== undefined) {\n      this.xBarWidth = this.defaultXBarWidth;\n    }\n    else {\n      var dataX = this.getDistinctValues(data,this.colX);\n      this.xBarWidth = (dataX[1] - dataX[0]) || 1;\n    }\n\n    if (this.defaultYBarWidth !== undefined) {\n      this.yBarWidth = this.defaultYBarWidth;\n    }\n    else {\n      var dataY = this.getDistinctValues(data,this.colY);\n      this.yBarWidth = (dataY[1] - dataY[0]) || 1;\n    }\n  }\n\n  // calculate minimums and maximums\n  var NUMSTEPS = 5;\n\n  var xRange = this.getColumnRange(data, this.colX);\n  if (withBars) {\n    xRange.expand(this.xBarWidth / 2);\n  }\n  this._setRangeDefaults(xRange, this.defaultXMin, this.defaultXMax);\n  this.xRange = xRange;\n  this.xStep = (this.defaultXStep !== undefined) ? this.defaultXStep : xRange.range()/NUMSTEPS;\n\n  var yRange = this.getColumnRange(data, this.colY);\n  if (withBars) {\n    yRange.expand(this.yBarWidth / 2);\n  }\n  this._setRangeDefaults(yRange, this.defaultYMin, this.defaultYMax);\n  this.yRange = yRange;\n  this.yStep = (this.defaultYStep !== undefined) ? this.defaultYStep : yRange.range()/NUMSTEPS;\n\n  var zRange = this.getColumnRange(data, this.colZ);\n  this._setRangeDefaults(zRange, this.defaultZMin, this.defaultZMax);\n  this.zRange = zRange;\n  this.zStep = (this.defaultZStep !== undefined) ? this.defaultZStep : zRange.range()/NUMSTEPS;\n\n  if (data[0].hasOwnProperty('style')) {\n    this.colValue = 'style';\n    var valueRange = this.getColumnRange(data,this.colValue);\n    this._setRangeDefaults(valueRange, this.defaultValueMin, this.defaultValueMax);\n    this.valueRange = valueRange;\n  }\n\n\n  // check if a filter column is provided\n  // Needs to be started after zRange is defined\n  if (data[0].hasOwnProperty('filter')) {\n    // Only set this field if it's actually present\n    this.colFilter = 'filter';\n\n    if (this.dataFilter === undefined) {\n      this.dataFilter = new Filter(rawData, this.colFilter, this);\n      this.dataFilter.setOnLoadCallback(function() {me.redraw();});\n    }\n  }\n\n  \n  // set the scale dependent on the ranges.\n  this._setScale();\n};\n\n\n\n/**\n * Filter the data based on the current filter\n *\n * @param   {Array} data\n * @returns {Array} dataPoints Array with point objects which can be drawn on\n *                             screen\n */\nGraph3d.prototype._getDataPoints = function (data) {\n  // TODO: store the created matrix dataPoints in the filters instead of\n  //       reloading each time.\n  var x, y, i, z, obj, point;\n\n  var dataPoints = [];\n\n  if (this.style === Graph3d.STYLE.GRID ||\n    this.style === Graph3d.STYLE.SURFACE) {\n    // copy all values from the google data table to a matrix\n    // the provided values are supposed to form a grid of (x,y) positions\n\n    // create two lists with all present x and y values\n    var dataX = [];\n    var dataY = [];\n    for (i = 0; i < this.getNumberOfRows(data); i++) {\n      x = data[i][this.colX] || 0;\n      y = data[i][this.colY] || 0;\n\n      if (dataX.indexOf(x) === -1) {\n        dataX.push(x);\n      }\n      if (dataY.indexOf(y) === -1) {\n        dataY.push(y);\n      }\n    }\n\n    var sortNumber = function (a, b) {\n      return a - b;\n    };\n    dataX.sort(sortNumber);\n    dataY.sort(sortNumber);\n\n    // create a grid, a 2d matrix, with all values.\n    var dataMatrix = [];   // temporary data matrix\n    for (i = 0; i < data.length; i++) {\n      x = data[i][this.colX] || 0;\n      y = data[i][this.colY] || 0;\n      z = data[i][this.colZ] || 0;\n\n      // TODO: implement Array().indexOf() for Internet Explorer\n      var xIndex = dataX.indexOf(x);\n      var yIndex = dataY.indexOf(y);\n\n      if (dataMatrix[xIndex] === undefined) {\n        dataMatrix[xIndex] = [];\n      }\n\n      var point3d = new Point3d();\n      point3d.x = x;\n      point3d.y = y;\n      point3d.z = z;\n      point3d.data = data[i];\n\n      obj = {};\n      obj.point = point3d;\n      obj.trans = undefined;\n      obj.screen = undefined;\n      obj.bottom = new Point3d(x, y, this.zRange.min);\n\n      dataMatrix[xIndex][yIndex] = obj;\n\n      dataPoints.push(obj);\n    }\n\n    // fill in the pointers to the neighbors.\n    for (x = 0; x < dataMatrix.length; x++) {\n      for (y = 0; y < dataMatrix[x].length; y++) {\n        if (dataMatrix[x][y]) {\n          dataMatrix[x][y].pointRight = (x < dataMatrix.length-1) ? dataMatrix[x+1][y] : undefined;\n          dataMatrix[x][y].pointTop   = (y < dataMatrix[x].length-1) ? dataMatrix[x][y+1] : undefined;\n          dataMatrix[x][y].pointCross =\n            (x < dataMatrix.length-1 && y < dataMatrix[x].length-1) ?\n              dataMatrix[x+1][y+1] :\n              undefined;\n        }\n      }\n    }\n  }\n  else {  // 'dot', 'dot-line', etc.\n    this._checkValueField(data);\n\n    // copy all values from the google data table to a list with Point3d objects\n    for (i = 0; i < data.length; i++) {\n      point = new Point3d();\n      point.x = data[i][this.colX] || 0;\n      point.y = data[i][this.colY] || 0;\n      point.z = data[i][this.colZ] || 0;\n      point.data = data[i];\n\n      if (this.colValue !== undefined) {\n        point.value = data[i][this.colValue] || 0;\n      }\n\n      obj = {};\n      obj.point = point;\n      obj.bottom = new Point3d(point.x, point.y, this.zRange.min);\n      obj.trans = undefined;\n      obj.screen = undefined;\n\n      if (this.style === Graph3d.STYLE.LINE) {\n        if (i > 0) {\n          // Add next point for line drawing\n          dataPoints[i - 1].pointNext = obj;\n        }\n      }\n\n      dataPoints.push(obj);\n    }\n  }\n\n  return dataPoints;\n};\n\n/**\n * Create the main frame for the Graph3d.\n *\n * This function is executed once when a Graph3d object is created. The frame\n * contains a canvas, and this canvas contains all objects like the axis and\n * nodes.\n */\nGraph3d.prototype.create = function () {\n  // remove all elements from the container element.\n  while (this.containerElement.hasChildNodes()) {\n    this.containerElement.removeChild(this.containerElement.firstChild);\n  }\n\n  this.frame = document.createElement('div');\n  this.frame.style.position = 'relative';\n  this.frame.style.overflow = 'hidden';\n\n  // create the graph canvas (HTML canvas element)\n  this.frame.canvas = document.createElement( 'canvas' );\n  this.frame.canvas.style.position = 'relative';\n  this.frame.appendChild(this.frame.canvas);\n  //if (!this.frame.canvas.getContext) {\n  {\n    var noCanvas = document.createElement( 'DIV' );\n    noCanvas.style.color = 'red';\n    noCanvas.style.fontWeight =  'bold' ;\n    noCanvas.style.padding =  '10px';\n    noCanvas.innerHTML =  'Error: your browser does not support HTML canvas';\n    this.frame.canvas.appendChild(noCanvas);\n  }\n\n  this.frame.filter = document.createElement( 'div' );\n  this.frame.filter.style.position = 'absolute';\n  this.frame.filter.style.bottom = '0px';\n  this.frame.filter.style.left = '0px';\n  this.frame.filter.style.width = '100%';\n  this.frame.appendChild(this.frame.filter);\n\n  // add event listeners to handle moving and zooming the contents\n  var me = this;\n  var onmousedown = function (event) {me._onMouseDown(event);};\n  var ontouchstart = function (event) {me._onTouchStart(event);};\n  var onmousewheel = function (event) {me._onWheel(event);};\n  var ontooltip = function (event) {me._onTooltip(event);};\n  var onclick = function(event) {me._onClick(event);};\n  // TODO: these events are never cleaned up... can give a 'memory leakage'\n\n  util.addEventListener(this.frame.canvas, 'keydown', onkeydown);\n  util.addEventListener(this.frame.canvas, 'mousedown', onmousedown);\n  util.addEventListener(this.frame.canvas, 'touchstart', ontouchstart);\n  util.addEventListener(this.frame.canvas, 'mousewheel', onmousewheel);\n  util.addEventListener(this.frame.canvas, 'mousemove', ontooltip);\n  util.addEventListener(this.frame.canvas, 'click', onclick);\n\n  // add the new graph to the container element\n  this.containerElement.appendChild(this.frame);\n};\n\n\n/**\n * Set a new size for the graph\n */\nGraph3d.prototype._setSize = function(width, height) {\n  this.frame.style.width = width;\n  this.frame.style.height = height;\n\n  this._resizeCanvas();\n};\n\n\n/**\n * Resize the canvas to the current size of the frame\n */\nGraph3d.prototype._resizeCanvas = function() {\n  this.frame.canvas.style.width = '100%';\n  this.frame.canvas.style.height = '100%';\n\n  this.frame.canvas.width = this.frame.canvas.clientWidth;\n  this.frame.canvas.height = this.frame.canvas.clientHeight;\n\n  // adjust with for margin\n  this.frame.filter.style.width = (this.frame.canvas.clientWidth - 2 * 10) + 'px';\n};\n\n/**\n * Start animation\n */\nGraph3d.prototype.animationStart = function() {\n  if (!this.frame.filter || !this.frame.filter.slider)\n    throw new Error('No animation available');\n\n  this.frame.filter.slider.play();\n};\n\n\n/**\n * Stop animation\n */\nGraph3d.prototype.animationStop = function() {\n  if (!this.frame.filter || !this.frame.filter.slider) return;\n\n  this.frame.filter.slider.stop();\n};\n\n\n/**\n * Resize the center position based on the current values in this.xCenter\n * and this.yCenter (which are strings with a percentage or a value\n * in pixels). The center positions are the variables this.currentXCenter\n * and this.currentYCenter\n */\nGraph3d.prototype._resizeCenter = function() {\n  // calculate the horizontal center position\n  if (this.xCenter.charAt(this.xCenter.length-1) === '%') {\n    this.currentXCenter =\n      parseFloat(this.xCenter) / 100 *\n        this.frame.canvas.clientWidth;\n  }\n  else {\n    this.currentXCenter = parseFloat(this.xCenter); // supposed to be in px\n  }\n\n  // calculate the vertical center position\n  if (this.yCenter.charAt(this.yCenter.length-1) === '%') {\n    this.currentYCenter =\n      parseFloat(this.yCenter) / 100 *\n        (this.frame.canvas.clientHeight - this.frame.filter.clientHeight);\n  }\n  else {\n    this.currentYCenter = parseFloat(this.yCenter); // supposed to be in px\n  }\n};\n\n\n\n/**\n * Retrieve the current camera rotation\n *\n * @returns {object} An object with parameters horizontal, vertical, and\n *                   distance\n */\nGraph3d.prototype.getCameraPosition = function() {\n  var pos = this.camera.getArmRotation();\n  pos.distance = this.camera.getArmLength();\n  return pos;\n};\n\n/**\n * Load data into the 3D Graph\n */\nGraph3d.prototype._readData = function(data) {\n  // read the data\n  this._dataInitialize(data, this.style);\n\n\n  if (this.dataFilter) {\n    // apply filtering\n    this.dataPoints = this.dataFilter._getDataPoints();\n  }\n  else {\n    // no filtering. load all data\n    this.dataPoints = this._getDataPoints(this.dataTable);\n  }\n\n  // draw the filter\n  this._redrawFilter();\n};\n\n/**\n * Replace the dataset of the Graph3d\n *\n * @param {Array | DataSet | DataView} data\n */\nGraph3d.prototype.setData = function (data) {\n  this._readData(data);\n  this.redraw();\n\n  // start animation when option is true\n  if (this.animationAutoStart && this.dataFilter) {\n    this.animationStart();\n  }\n};\n\n/**\n * Update the options. Options will be merged with current options\n *\n * @param {Object} options\n */\nGraph3d.prototype.setOptions = function (options) {\n  var cameraPosition = undefined;\n\n  this.animationStop();\n\n  Settings.setOptions(options, this);\n\n  this.setPointDrawingMethod();\n  this._setSize(this.width, this.height);\n\n  // re-load the data\n  if (this.dataTable) {\n    this.setData(this.dataTable);\n  }\n\n  // start animation when option is true\n  if (this.animationAutoStart && this.dataFilter) {\n    this.animationStart();\n  }\n};\n\n\n/**\n * Determine which point drawing method to use for the current graph style.\n */\nGraph3d.prototype.setPointDrawingMethod = function() {\n  var method = undefined;\n\n  switch (this.style) {\n    case Graph3d.STYLE.BAR:\n      method = Graph3d.prototype._redrawBarGraphPoint;\n      break;\n    case Graph3d.STYLE.BARCOLOR:\n      method = Graph3d.prototype._redrawBarColorGraphPoint;\n      break;\n    case Graph3d.STYLE.BARSIZE:\n      method = Graph3d.prototype._redrawBarSizeGraphPoint;\n      break;\n    case Graph3d.STYLE.DOT:\n      method = Graph3d.prototype._redrawDotGraphPoint;\n      break;\n    case Graph3d.STYLE.DOTLINE:\n      method = Graph3d.prototype._redrawDotLineGraphPoint;\n      break;\n    case Graph3d.STYLE.DOTCOLOR:\n      method = Graph3d.prototype._redrawDotColorGraphPoint;\n      break;\n    case Graph3d.STYLE.DOTSIZE:\n      method = Graph3d.prototype._redrawDotSizeGraphPoint;\n      break;\n    case Graph3d.STYLE.SURFACE:\n      method = Graph3d.prototype._redrawSurfaceGraphPoint;\n      break;\n    case Graph3d.STYLE.GRID:\n      method = Graph3d.prototype._redrawGridGraphPoint;\n      break;\n    case Graph3d.STYLE.LINE:\n      method = Graph3d.prototype._redrawLineGraphPoint;\n      break;\n    default:\n      throw new Error('Can not determine point drawing method '\n                    + 'for graph style \\'' + this.style + '\\'');\n      break;\n  }\n\n  this._pointDrawingMethod = method;\n};\n\n\n/**\n * Redraw the Graph.\n */\nGraph3d.prototype.redraw = function() {\n  if (this.dataPoints === undefined) {\n    throw new Error('Graph data not initialized');\n  }\n\n  this._resizeCanvas();\n  this._resizeCenter();\n  this._redrawSlider();\n  this._redrawClear();\n  this._redrawAxis();\n\n  this._redrawDataGraph();\n\n  this._redrawInfo();\n  this._redrawLegend();\n};\n\n\n/**\n * Get drawing context without exposing canvas\n */\nGraph3d.prototype._getContext = function() {\n  var canvas = this.frame.canvas;\n  var ctx = canvas.getContext('2d');\n\n  ctx.lineJoin = 'round';\n  ctx.lineCap  = 'round';\n\n  return ctx;\n};\n\n\n/**\n * Clear the canvas before redrawing\n */\nGraph3d.prototype._redrawClear = function() {\n  var canvas = this.frame.canvas;\n  var ctx = canvas.getContext('2d');\n\n  ctx.clearRect(0, 0, canvas.width, canvas.height);\n};\n\n\nGraph3d.prototype._dotSize = function() {\n  return this.frame.clientWidth * this.dotSizeRatio;\n};\n\n\n/**\n * Get legend width\n */\nGraph3d.prototype._getLegendWidth = function() {\n  var width;\n\n  if (this.style === Graph3d.STYLE.DOTSIZE) {\n    var dotSize = this._dotSize();\n    width =  dotSize / 2 + dotSize * 2;\n  } else if (this.style === Graph3d.STYLE.BARSIZE) {\n    width = this.xBarWidth ;\n  } else {\n    width = 20;\n  }\n  return width;\n}\n\n\n/**\n * Redraw the legend based on size, dot color, or surface height\n */\nGraph3d.prototype._redrawLegend = function() {\n\n  //Return without drawing anything, if no legend is specified\n  if (this.showLegend !== true) {\n    return;\n  }\n\n  // Do not draw legend when graph style does not support\n  if (this.style === Graph3d.STYLE.LINE\n   || this.style === Graph3d.STYLE.BARSIZE //TODO add legend support for BARSIZE\n  ){\n    return;\n  }\n\n  // Legend types - size and color. Determine if size legend.\n  var isSizeLegend = (this.style === Graph3d.STYLE.BARSIZE\n                   || this.style === Graph3d.STYLE.DOTSIZE) ;\n\n  // Legend is either tracking z values or style values. This flag if false means use z values.\n  var isValueLegend = (this.style === Graph3d.STYLE.DOTSIZE\n                  || this.style === Graph3d.STYLE.DOTCOLOR\n                  || this.style === Graph3d.STYLE.BARCOLOR);\n\n  var height = Math.max(this.frame.clientHeight * 0.25, 100);\n  var top    = this.margin;\n  var width  = this._getLegendWidth() ; // px - overwritten by size legend\n  var right  = this.frame.clientWidth - this.margin;\n  var left   = right - width;\n  var bottom = top + height;\n\n  var ctx = this._getContext();\n  ctx.lineWidth = 1;\n  ctx.font = '14px arial'; // TODO: put in options\n\n  if (isSizeLegend === false) {\n    // draw the color bar\n    var ymin = 0;\n    var ymax = height; // Todo: make height customizable\n    var y;\n\n    for (y = ymin; y < ymax; y++) {\n      var f = (y - ymin) / (ymax - ymin);\n      var hue = f * 240;\n      var color = this._hsv2rgb(hue, 1, 1);\n\n      ctx.strokeStyle = color;\n      ctx.beginPath();\n      ctx.moveTo(left, top + y);\n      ctx.lineTo(right, top + y);\n      ctx.stroke();\n    }\n    ctx.strokeStyle =  this.axisColor;\n    ctx.strokeRect(left, top, width, height);\n\n  } else {\n\n    // draw the size legend box\n    var  widthMin;\n    if (this.style === Graph3d.STYLE.DOTSIZE) {\n      var dotSize = this._dotSize();\n      widthMin = dotSize / 2; // px\n    } else if (this.style === Graph3d.STYLE.BARSIZE) {\n      //widthMin = this.xBarWidth * 0.2 this is wrong - barwidth measures in terms of xvalues\n    }\n    ctx.strokeStyle =  this.axisColor;\n    ctx.fillStyle =  this.dataColor.fill;\n    ctx.beginPath();\n    ctx.moveTo(left, top);\n    ctx.lineTo(right, top);\n    ctx.lineTo(right - width + widthMin, bottom);\n    ctx.lineTo(left, bottom);\n    ctx.closePath();\n    ctx.fill();\n    ctx.stroke();\n  }\n\n  // print value text along the legend edge\n  var gridLineLen = 5; // px\n\n  var legendMin = isValueLegend ? this.valueRange.min :  this.zRange.min;\n  var legendMax = isValueLegend ? this.valueRange.max :  this.zRange.max;\n  var step = new StepNumber(legendMin, legendMax, (legendMax-legendMin)/5, true);\n  step.start(true);\n\n  var y;\n  var from;\n  var to;\n  while (!step.end()) {\n    y = bottom - (step.getCurrent() - legendMin) / (legendMax - legendMin) * height;\n    from  = new Point2d(left - gridLineLen, y);\n    to    = new Point2d(left, y);\n    this._line(ctx, from, to);\n\n    ctx.textAlign = 'right';\n    ctx.textBaseline = 'middle';\n    ctx.fillStyle = this.axisColor;\n    ctx.fillText(step.getCurrent(), left - 2 * gridLineLen, y);\n\n    step.next();\n  }\n\n  ctx.textAlign = 'right';\n  ctx.textBaseline = 'top';\n  var label = this.legendLabel;\n  ctx.fillText(label, right, bottom + this.margin);\n};\n\n/**\n * Redraw the filter\n */\nGraph3d.prototype._redrawFilter = function() {\n  this.frame.filter.innerHTML = '';\n\n  if (this.dataFilter) {\n    var options = {\n      'visible': this.showAnimationControls\n    };\n    var slider = new Slider(this.frame.filter, options);\n    this.frame.filter.slider = slider;\n\n    // TODO: css here is not nice here...\n    this.frame.filter.style.padding = '10px';\n    //this.frame.filter.style.backgroundColor = '#EFEFEF';\n\n    slider.setValues(this.dataFilter.values);\n    slider.setPlayInterval(this.animationInterval);\n\n    // create an event handler\n    var me = this;\n    var onchange = function () {\n      var index = slider.getIndex();\n\n      me.dataFilter.selectValue(index);\n      me.dataPoints = me.dataFilter._getDataPoints();\n\n      me.redraw();\n    };\n    slider.setOnChangeCallback(onchange);\n  }\n  else {\n    this.frame.filter.slider = undefined;\n  }\n};\n\n/**\n * Redraw the slider\n */\nGraph3d.prototype._redrawSlider = function() {\n  if ( this.frame.filter.slider !== undefined) {\n    this.frame.filter.slider.redraw();\n  }\n};\n\n\n/**\n * Redraw common information\n */\nGraph3d.prototype._redrawInfo = function() {\n  if (this.dataFilter) {\n    var ctx = this._getContext();\n\n    ctx.font = '14px arial'; // TODO: put in options\n    ctx.lineStyle = 'gray';\n    ctx.fillStyle = 'gray';\n    ctx.textAlign = 'left';\n    ctx.textBaseline = 'top';\n\n    var x = this.margin;\n    var y = this.margin;\n    ctx.fillText(this.dataFilter.getLabel() + ': ' + this.dataFilter.getSelectedValue(), x, y);\n  }\n};\n\n\n/**\n * Draw a line between 2d points 'from' and 'to'.\n *\n * If stroke style specified, set that as well.\n */\nGraph3d.prototype._line = function(ctx, from, to, strokeStyle) {\n  if (strokeStyle !== undefined) {\n    ctx.strokeStyle = strokeStyle;\n  }\n\n  ctx.beginPath();\n  ctx.moveTo(from.x, from.y);\n  ctx.lineTo(to.x  , to.y  );\n  ctx.stroke();\n}\n\n\nGraph3d.prototype.drawAxisLabelX = function(ctx, point3d, text, armAngle, yMargin) {\n  if (yMargin === undefined) {\n    yMargin = 0;\n  }\n\n  var point2d = this._convert3Dto2D(point3d);\n\n  if (Math.cos(armAngle * 2) > 0) {\n    ctx.textAlign = 'center';\n    ctx.textBaseline = 'top';\n    point2d.y += yMargin;\n  }\n  else if (Math.sin(armAngle * 2) < 0){\n    ctx.textAlign = 'right';\n    ctx.textBaseline = 'middle';\n  }\n  else {\n    ctx.textAlign = 'left';\n    ctx.textBaseline = 'middle';\n  }\n\n  ctx.fillStyle = this.axisColor;\n  ctx.fillText(text, point2d.x, point2d.y);\n}\n\n\nGraph3d.prototype.drawAxisLabelY = function(ctx, point3d, text, armAngle, yMargin) {\n  if (yMargin === undefined) {\n    yMargin = 0;\n  }\n\n  var point2d = this._convert3Dto2D(point3d);\n\n  if (Math.cos(armAngle * 2) < 0) {\n    ctx.textAlign = 'center';\n    ctx.textBaseline = 'top';\n    point2d.y += yMargin;\n  }\n  else if (Math.sin(armAngle * 2) > 0){\n    ctx.textAlign = 'right';\n    ctx.textBaseline = 'middle';\n  }\n  else {\n    ctx.textAlign = 'left';\n    ctx.textBaseline = 'middle';\n  }\n\n  ctx.fillStyle = this.axisColor;\n  ctx.fillText(text, point2d.x, point2d.y);\n}\n\n\nGraph3d.prototype.drawAxisLabelZ = function(ctx, point3d, text, offset) {\n  if (offset === undefined) {\n    offset = 0;\n  }\n\n  var point2d = this._convert3Dto2D(point3d);\n  ctx.textAlign = 'right';\n  ctx.textBaseline = 'middle';\n  ctx.fillStyle = this.axisColor;\n  ctx.fillText(text, point2d.x - offset, point2d.y);\n};\n\n\n/**\n\n\n/**\n * Draw a line between 2d points 'from' and 'to'.\n *\n * If stroke style specified, set that as well.\n */\nGraph3d.prototype._line3d = function(ctx, from, to, strokeStyle) {\n  var from2d = this._convert3Dto2D(from);\n  var to2d   = this._convert3Dto2D(to);\n\n  this._line(ctx, from2d, to2d, strokeStyle);\n}\n\n\n/**\n * Redraw the axis\n */\nGraph3d.prototype._redrawAxis = function() {\n  var ctx = this._getContext(),\n    from, to, step, prettyStep,\n    text, xText, yText, zText,\n    offset, xOffset, yOffset;\n\n  // TODO: get the actual rendered style of the containerElement\n  //ctx.font = this.containerElement.style.font;\n  ctx.font = 24 / this.camera.getArmLength() + 'px arial';\n\n  // calculate the length for the short grid lines\n  var gridLenX   = 0.025 / this.scale.x;\n  var gridLenY   = 0.025 / this.scale.y;\n  var textMargin = 5 / this.camera.getArmLength(); // px\n  var armAngle   = this.camera.getArmRotation().horizontal;\n  var armVector  = new Point2d(Math.cos(armAngle), Math.sin(armAngle));\n\n  var xRange = this.xRange;\n  var yRange = this.yRange;\n  var zRange = this.zRange;\n\n  // draw x-grid lines\n  ctx.lineWidth = 1;\n  prettyStep = (this.defaultXStep === undefined);\n  step = new StepNumber(xRange.min, xRange.max, this.xStep, prettyStep);\n  step.start(true);\n\n  while (!step.end()) {\n    var x = step.getCurrent();\n\n    if (this.showGrid) {\n      from = new Point3d(x, yRange.min, zRange.min);\n      to   = new Point3d(x, yRange.max, zRange.min);\n      this._line3d(ctx, from, to, this.gridColor);\n    }\n    else {\n      from = new Point3d(x, yRange.min, zRange.min);\n      to   = new Point3d(x, yRange.min+gridLenX, zRange.min);\n      this._line3d(ctx, from, to, this.axisColor);\n\n      from = new Point3d(x, yRange.max, zRange.min);\n      to   = new Point3d(x, yRange.max-gridLenX, zRange.min);\n      this._line3d(ctx, from, to, this.axisColor);\n    }\n\n    yText       = (armVector.x > 0) ? yRange.min : yRange.max;\n    var point3d = new Point3d(x, yText, zRange.min);\n    var msg     = '  ' + this.xValueLabel(x) + '  ';\n    this.drawAxisLabelX(ctx, point3d, msg, armAngle, textMargin);\n\n    step.next();\n  }\n\n  // draw y-grid lines\n  ctx.lineWidth = 1;\n  prettyStep = (this.defaultYStep === undefined);\n  step = new StepNumber(yRange.min, yRange.max, this.yStep, prettyStep);\n  step.start(true);\n\n  while (!step.end()) {\n    var y = step.getCurrent();\n\n    if (this.showGrid) {\n      from = new Point3d(xRange.min, y, zRange.min);\n      to   = new Point3d(xRange.max, y, zRange.min);\n      this._line3d(ctx, from, to, this.gridColor);\n    }\n    else {\n      from = new Point3d(xRange.min, y, zRange.min);\n      to   = new Point3d(xRange.min+gridLenY, y, zRange.min);\n      this._line3d(ctx, from, to, this.axisColor);\n\n      from = new Point3d(xRange.max, y, zRange.min);\n      to   = new Point3d(xRange.max-gridLenY, y, zRange.min);\n      this._line3d(ctx, from, to, this.axisColor);\n    }\n\n    xText   = (armVector.y > 0) ? xRange.min : xRange.max;\n    point3d = new Point3d(xText, y, zRange.min);\n    var msg = '  ' + this.yValueLabel(y) + '  ';\n    this.drawAxisLabelY(ctx, point3d, msg, armAngle, textMargin);\n\n    step.next();\n  }\n\n  // draw z-grid lines and axis\n  ctx.lineWidth = 1;\n  prettyStep = (this.defaultZStep === undefined);\n  step = new StepNumber(zRange.min, zRange.max, this.zStep, prettyStep);\n  step.start(true);\n\n  xText = (armVector.x > 0) ? xRange.min : xRange.max;\n  yText = (armVector.y < 0) ? yRange.min : yRange.max;\n\n  while (!step.end()) {\n    var z = step.getCurrent();\n\n    // TODO: make z-grid lines really 3d?\n    var from3d = new Point3d(xText, yText, z);\n    var from2d = this._convert3Dto2D(from3d);\n    to = new Point2d(from2d.x - textMargin, from2d.y);\n    this._line(ctx, from2d, to, this.axisColor);\n\n    var msg = this.zValueLabel(z) + ' ';\n    this.drawAxisLabelZ(ctx, from3d, msg, 5);\n\n    step.next();\n  }\n\n  ctx.lineWidth = 1;\n  from = new Point3d(xText, yText, zRange.min);\n  to   = new Point3d(xText, yText, zRange.max);\n  this._line3d(ctx, from, to, this.axisColor);\n\n  // draw x-axis\n  var xMin2d;\n  var xMax2d;\n  ctx.lineWidth = 1;\n\n  // line at yMin\n  xMin2d = new Point3d(xRange.min, yRange.min, zRange.min);\n  xMax2d = new Point3d(xRange.max, yRange.min, zRange.min);\n  this._line3d(ctx, xMin2d, xMax2d, this.axisColor);\n  // line at ymax\n  xMin2d = new Point3d(xRange.min, yRange.max, zRange.min);\n  xMax2d = new Point3d(xRange.max, yRange.max, zRange.min);\n  this._line3d(ctx, xMin2d, xMax2d, this.axisColor);\n\n  // draw y-axis\n  ctx.lineWidth = 1;\n  // line at xMin\n  from = new Point3d(xRange.min, yRange.min, zRange.min);\n  to   = new Point3d(xRange.min, yRange.max, zRange.min);\n  this._line3d(ctx, from, to, this.axisColor);\n  // line at xMax\n  from = new Point3d(xRange.max, yRange.min, zRange.min);\n  to   = new Point3d(xRange.max, yRange.max, zRange.min);\n  this._line3d(ctx, from, to, this.axisColor);\n\n  // draw x-label\n  var xLabel = this.xLabel;\n  if (xLabel.length > 0) {\n    yOffset = 0.1 / this.scale.y;\n    xText   = (xRange.max + 3*xRange.min)/4;\n    yText   = (armVector.x > 0) ? yRange.min - yOffset: yRange.max + yOffset;\n    text    = new Point3d(xText, yText, zRange.min);\n    this.drawAxisLabelX(ctx, text, xLabel, armAngle);\n  }\n\n  // draw y-label\n  var yLabel = this.yLabel;\n  if (yLabel.length > 0) {\n    xOffset = 0.1 / this.scale.x;\n    xText   = (armVector.y > 0) ? xRange.min - xOffset : xRange.max + xOffset;\n    yText   = (yRange.max + 3*yRange.min)/4;\n    text    = new Point3d(xText, yText, zRange.min);\n\n    this.drawAxisLabelY(ctx, text, yLabel, armAngle);\n  }\n\n  // draw z-label\n  var zLabel = this.zLabel;\n  if (zLabel.length > 0) {\n    offset = 30;  // pixels.  // TODO: relate to the max width of the values on the z axis?\n    xText  = (armVector.x > 0) ? xRange.min : xRange.max;\n    yText  = (armVector.y < 0) ? yRange.min : yRange.max;\n    zText  = (zRange.max + 3*zRange.min)/4;\n    text   = new Point3d(xText, yText, zText);\n\n    this.drawAxisLabelZ(ctx, text, zLabel, offset);\n  }\n};\n\n/**\n * Calculate the color based on the given value.\n * @param {Number} H   Hue, a value be between 0 and 360\n * @param {Number} S   Saturation, a value between 0 and 1\n * @param {Number} V   Value, a value between 0 and 1\n */\nGraph3d.prototype._hsv2rgb = function(H, S, V) {\n  var R, G, B, C, Hi, X;\n\n  C = V * S;\n  Hi = Math.floor(H/60);  // hi = 0,1,2,3,4,5\n  X = C * (1 - Math.abs(((H/60) % 2) - 1));\n\n  switch (Hi) {\n    case 0: R = C; G = X; B = 0; break;\n    case 1: R = X; G = C; B = 0; break;\n    case 2: R = 0; G = C; B = X; break;\n    case 3: R = 0; G = X; B = C; break;\n    case 4: R = X; G = 0; B = C; break;\n    case 5: R = C; G = 0; B = X; break;\n\n    default: R = 0; G = 0; B = 0; break;\n  }\n\n  return 'RGB(' + parseInt(R*255) + ',' + parseInt(G*255) + ',' + parseInt(B*255) + ')';\n};\n\n\nGraph3d.prototype._getStrokeWidth = function(point) {\n  if (point !== undefined) {\n    if (this.showPerspective) {\n      return 1 / -point.trans.z * this.dataColor.strokeWidth;\n    }\n    else {\n      return -(this.eye.z / this.camera.getArmLength()) * this.dataColor.strokeWidth;\n    }\n  }\n\n  return this.dataColor.strokeWidth;\n};\n\n\n// -----------------------------------------------------------------------------\n// Drawing primitives for the graphs\n// -----------------------------------------------------------------------------\n\n\n/**\n * Draw a bar element in the view with the given properties.\n */\nGraph3d.prototype._redrawBar = function(ctx, point, xWidth, yWidth, color, borderColor) {\n  var i, j, surface;\n\n  // calculate all corner points\n  var me = this;\n  var point3d = point.point;\n  var zMin = this.zRange.min;\n  var top = [\n    {point: new Point3d(point3d.x - xWidth, point3d.y - yWidth, point3d.z)},\n    {point: new Point3d(point3d.x + xWidth, point3d.y - yWidth, point3d.z)},\n    {point: new Point3d(point3d.x + xWidth, point3d.y + yWidth, point3d.z)},\n    {point: new Point3d(point3d.x - xWidth, point3d.y + yWidth, point3d.z)}\n  ];\n  var bottom = [\n    {point: new Point3d(point3d.x - xWidth, point3d.y - yWidth, zMin)},\n    {point: new Point3d(point3d.x + xWidth, point3d.y - yWidth, zMin)},\n    {point: new Point3d(point3d.x + xWidth, point3d.y + yWidth, zMin)},\n    {point: new Point3d(point3d.x - xWidth, point3d.y + yWidth, zMin)}\n  ];\n\n  // calculate screen location of the points\n  top.forEach(function (obj) {\n    obj.screen = me._convert3Dto2D(obj.point);\n  });\n  bottom.forEach(function (obj) {\n    obj.screen = me._convert3Dto2D(obj.point);\n  });\n\n  // create five sides, calculate both corner points and center points\n  var surfaces = [\n    {corners: top, center: Point3d.avg(bottom[0].point, bottom[2].point)},\n    {corners: [top[0], top[1], bottom[1], bottom[0]], center: Point3d.avg(bottom[1].point, bottom[0].point)},\n    {corners: [top[1], top[2], bottom[2], bottom[1]], center: Point3d.avg(bottom[2].point, bottom[1].point)},\n    {corners: [top[2], top[3], bottom[3], bottom[2]], center: Point3d.avg(bottom[3].point, bottom[2].point)},\n    {corners: [top[3], top[0], bottom[0], bottom[3]], center: Point3d.avg(bottom[0].point, bottom[3].point)}\n  ];\n  point.surfaces = surfaces;\n\n  // calculate the distance of each of the surface centers to the camera\n  for (j = 0; j < surfaces.length; j++) {\n    surface = surfaces[j];\n    var transCenter = this._convertPointToTranslation(surface.center);\n    surface.dist = this.showPerspective ? transCenter.length() : -transCenter.z;\n    // TODO: this dept calculation doesn't work 100% of the cases due to perspective,\n    //     but the current solution is fast/simple and works in 99.9% of all cases\n    //     the issue is visible in example 14, with graph.setCameraPosition({horizontal: 2.97, vertical: 0.5, distance: 0.9})\n  }\n\n  // order the surfaces by their (translated) depth\n  surfaces.sort(function (a, b) {\n    var diff = b.dist - a.dist;\n    if (diff) return diff;\n\n    // if equal depth, sort the top surface last\n    if (a.corners === top) return 1;\n    if (b.corners === top) return -1;\n\n    // both are equal\n    return 0;\n  });\n\n  // draw the ordered surfaces\n  ctx.lineWidth = this._getStrokeWidth(point);\n  ctx.strokeStyle = borderColor;\n  ctx.fillStyle = color;\n  // NOTE: we start at j=2 instead of j=0 as we don't need to draw the two surfaces at the backside\n  for (j = 2; j < surfaces.length; j++) {\n    surface = surfaces[j];\n    this._polygon(ctx, surface.corners);\n  }\n};\n\n\n/**\n * Draw a polygon using the passed points and fill it with the passed style and stroke.\n *\n * @param points      an array of points.\n * @param fillStyle   optional; the fill style to set\n * @param strokeStyle optional; the stroke style to set\n */\nGraph3d.prototype._polygon = function(ctx, points, fillStyle, strokeStyle) {\n  if (points.length < 2) {\n    return;\n  }\n\n  if (fillStyle !== undefined) {\n    ctx.fillStyle   = fillStyle;\n  }\n  if (strokeStyle !== undefined) {\n    ctx.strokeStyle = strokeStyle;\n  }\n  ctx.beginPath();\n  ctx.moveTo(points[0].screen.x, points[0].screen.y);\n\n  for (var i = 1; i < points.length; ++i) {\n    var point = points[i];\n    ctx.lineTo(point.screen.x, point.screen.y);\n  }\n\n  ctx.closePath();\n  ctx.fill();\n  ctx.stroke(); // TODO: only draw stroke when strokeWidth > 0\n};\n\n\n/**\n * @param size optional; if not specified use value from 'this._dotSize()`\n */\nGraph3d.prototype._drawCircle = function(ctx, point, color, borderColor, size) {\n  var radius = this._calcRadius(point, size);\n\n  ctx.lineWidth   = this._getStrokeWidth(point);\n  ctx.strokeStyle = borderColor;\n  ctx.fillStyle   = color;\n  ctx.beginPath();\n  ctx.arc(point.screen.x, point.screen.y, radius, 0, Math.PI*2, true);\n  ctx.fill();\n  ctx.stroke();\n};\n\n\n/**\n * Determine the colors for the 'regular' graph styles.\n */\nGraph3d.prototype._getColorsRegular = function(point) {\n  // calculate Hue from the current value. At zMin the hue is 240, at zMax the hue is 0\n  var hue         = (1 - (point.point.z - this.zRange.min) * this.scale.z  / this.verticalRatio) * 240;\n  var color       = this._hsv2rgb(hue, 1, 1);\n  var borderColor = this._hsv2rgb(hue, 1, 0.8);\n\n  return {\n    fill  : color,\n    border: borderColor\n  };\n};\n\n\n/**\n * Get the colors for the 'color' graph styles.\n * These styles are currently: 'bar-color' and 'dot-color'\n * Color may be set as a string representation of HTML color, like #ff00ff,\n * or calculated from a number, for example, distance from this point\n * The first option is useful when we have some pre-given legend, to which we have to adjust ourselves\n * The second option is useful when we are interested in automatically setting the color, from some value,\n * using some color scale\n */\nGraph3d.prototype._getColorsColor = function(point) {\n  // calculate the color based on the value\n  var color, borderColor;\n\n  if (typeof point.point.value === \"string\") {\n    color = point.point.value;\n    borderColor = point.point.value;\n  }\n  else {\n    var hue     = (1 - (point.point.value - this.valueRange.min) * this.scale.value) * 240;\n    color       = this._hsv2rgb(hue, 1, 1);\n    borderColor = this._hsv2rgb(hue, 1, 0.8);\n  }\n  return {\n    fill   : color,\n    border : borderColor\n  };\n};\n\n\n/**\n * Get the colors for the 'size' graph styles.\n * These styles are currently: 'bar-size' and 'dot-size'\n */\nGraph3d.prototype._getColorsSize = function() {\n  return {\n    fill   : this.dataColor.fill,\n    border : this.dataColor.stroke\n  };\n};\n\n\n/**\n * Determine the size of a point on-screen, as determined by the\n * distance to the camera.\n *\n * @param size the size that needs to be translated to screen coordinates.\n *             optional; if not passed, use the default point size.\n */\nGraph3d.prototype._calcRadius = function(point, size) {\n  if (size === undefined) {\n    size = this._dotSize();\n  }\n\n  var radius;\n  if (this.showPerspective) {\n    radius = size / -point.trans.z;\n  }\n  else {\n    radius = size * -(this.eye.z / this.camera.getArmLength());\n  }\n  if (radius < 0) {\n    radius = 0;\n  }\n\n  return radius;\n};\n\n\n// -----------------------------------------------------------------------------\n// Methods for drawing points per graph style.\n// -----------------------------------------------------------------------------\n\n\n/**\n * Draw single datapoint for graph style 'bar'.\n */\nGraph3d.prototype._redrawBarGraphPoint = function(ctx, point) {\n  var xWidth = this.xBarWidth / 2;\n  var yWidth = this.yBarWidth / 2;\n  var colors = this._getColorsRegular(point);\n\n  this._redrawBar(ctx, point, xWidth, yWidth, colors.fill, colors.border);\n};\n\n\n/**\n * Draw single datapoint for graph style 'bar-color'.\n */\nGraph3d.prototype._redrawBarColorGraphPoint = function(ctx, point) {\n  var xWidth = this.xBarWidth / 2;\n  var yWidth = this.yBarWidth / 2;\n  var colors = this._getColorsColor(point);\n\n  this._redrawBar(ctx, point, xWidth, yWidth, colors.fill, colors.border);\n};\n\n\n/**\n * Draw single datapoint for graph style 'bar-size'.\n */\nGraph3d.prototype._redrawBarSizeGraphPoint = function(ctx, point) {\n  // calculate size for the bar\n  var fraction = (point.point.value - this.valueRange.min) / this.valueRange.range();\n  var xWidth   = (this.xBarWidth / 2) * (fraction * 0.8 + 0.2);\n  var yWidth   = (this.yBarWidth / 2) * (fraction * 0.8 + 0.2);\n\n  var colors   = this._getColorsSize();\n\n  this._redrawBar(ctx, point, xWidth, yWidth, colors.fill, colors.border);\n};\n\n\n/**\n * Draw single datapoint for graph style 'dot'.\n */\nGraph3d.prototype._redrawDotGraphPoint = function(ctx, point) {\n  var colors = this._getColorsRegular(point);\n\n  this._drawCircle(ctx, point, colors.fill, colors.border);\n};\n\n\n/**\n * Draw single datapoint for graph style 'dot-line'.\n */\nGraph3d.prototype._redrawDotLineGraphPoint = function(ctx, point) {\n  // draw a vertical line from the XY-plane to the graph value\n  var from = this._convert3Dto2D(point.bottom);\n  ctx.lineWidth = 1;\n  this._line(ctx, from, point.screen, this.gridColor);\n\n  this._redrawDotGraphPoint(ctx, point);\n};\n\n\n/**\n * Draw single datapoint for graph style 'dot-color'.\n */\nGraph3d.prototype._redrawDotColorGraphPoint = function(ctx, point) {\n  var colors = this._getColorsColor(point);\n\n  this._drawCircle(ctx, point, colors.fill, colors.border);\n};\n\n\n/**\n * Draw single datapoint for graph style 'dot-size'.\n */\nGraph3d.prototype._redrawDotSizeGraphPoint = function(ctx, point) {\n  var dotSize  = this._dotSize();\n  var fraction = (point.point.value - this.valueRange.min) / this.valueRange.range();\n  var size     = dotSize/2 + 2*dotSize * fraction;\n  var colors   = this._getColorsSize();\n\n  this._drawCircle(ctx, point, colors.fill, colors.border, size);\n};\n\n\n/**\n * Draw single datapoint for graph style 'surface'.\n */\nGraph3d.prototype._redrawSurfaceGraphPoint = function(ctx, point) {\n  var right = point.pointRight;\n  var top   = point.pointTop;\n  var cross = point.pointCross;\n\n  if (point === undefined || right === undefined || top === undefined || cross === undefined) {\n    return;\n  }\n\n  var topSideVisible = true;\n  var fillStyle;\n  var strokeStyle;\n  var lineWidth;\n\n  if (this.showGrayBottom || this.showShadow) {\n    // calculate the cross product of the two vectors from center\n    // to left and right, in order to know whether we are looking at the\n    // bottom or at the top side. We can also use the cross product\n    // for calculating light intensity\n    var aDiff = Point3d.subtract(cross.trans, point.trans);\n    var bDiff = Point3d.subtract(top.trans, right.trans);\n    var crossproduct = Point3d.crossProduct(aDiff, bDiff);\n    var len = crossproduct.length();\n    // FIXME: there is a bug with determining the surface side (shadow or colored)\n\n    topSideVisible = (crossproduct.z > 0);\n  }\n\n  if (topSideVisible) {\n\n    // calculate Hue from the current value. At zMin the hue is 240, at zMax the hue is 0\n    var zAvg = (point.point.z + right.point.z + top.point.z + cross.point.z) / 4;\n    var h    = (1 - (zAvg - this.zRange.min) * this.scale.z  / this.verticalRatio) * 240;\n    var s    = 1; // saturation\n    var v;\n\n    if (this.showShadow) {\n      v = Math.min(1 + (crossproduct.x / len) / 2, 1);  // value. TODO: scale\n      fillStyle = this._hsv2rgb(h, s, v);\n      strokeStyle = fillStyle;\n    }\n    else  {\n      v = 1;\n      fillStyle = this._hsv2rgb(h, s, v);\n      strokeStyle = this.axisColor; // TODO: should be customizable\n    }\n  }\n  else {\n    fillStyle = 'gray';\n    strokeStyle = this.axisColor;\n  }\n\n  ctx.lineWidth = this._getStrokeWidth(point);\n  // TODO: only draw stroke when strokeWidth > 0\n\n  var points = [point, right, cross, top];\n  this._polygon(ctx, points, fillStyle, strokeStyle);\n};\n\n\n/**\n * Helper method for _redrawGridGraphPoint()\n */\nGraph3d.prototype._drawGridLine = function(ctx, from, to) {\n  if (from === undefined || to === undefined) {\n     return;\n  }\n\n  // calculate Hue from the current value. At zMin the hue is 240, at zMax the hue is 0\n  var zAvg = (from.point.z + to.point.z) / 2;\n  var h    = (1 - (zAvg - this.zRange.min) * this.scale.z  / this.verticalRatio) * 240;\n\n  ctx.lineWidth   = this._getStrokeWidth(from) * 2;\n  ctx.strokeStyle = this._hsv2rgb(h, 1, 1);\n  this._line(ctx, from.screen, to.screen);\n};\n\n\n/**\n * Draw single datapoint for graph style 'Grid'.\n */\nGraph3d.prototype._redrawGridGraphPoint = function(ctx, point) {\n  this._drawGridLine(ctx, point, point.pointRight);\n  this._drawGridLine(ctx, point, point.pointTop);\n};\n\n\n/**\n * Draw single datapoint for graph style 'line'.\n */\nGraph3d.prototype._redrawLineGraphPoint = function(ctx, point) {\n  if (point.pointNext === undefined) {\n    return;\n  }\n\n  ctx.lineWidth   = this._getStrokeWidth(point);\n  ctx.strokeStyle = this.dataColor.stroke;\n\n  this._line(ctx, point.screen, point.pointNext.screen);\n};\n\n\n/**\n * Draw all datapoints for currently selected graph style.\n *\n */\nGraph3d.prototype._redrawDataGraph = function() {\n  var ctx = this._getContext();\n  var i;\n\n  if (this.dataPoints === undefined || this.dataPoints.length <= 0)\n    return;  // TODO: throw exception?\n\n  this._calcTranslations(this.dataPoints);\n\n  for (i = 0; i < this.dataPoints.length; i++) {\n    var point = this.dataPoints[i];\n\n    // Using call() ensures that the correct context is used\n    this._pointDrawingMethod.call(this, ctx, point);\n  }\n};\n\n\n// -----------------------------------------------------------------------------\n// End methods for drawing points per graph style.\n// -----------------------------------------------------------------------------\n\n/**\n * Store startX, startY and startOffset for mouse operations\n *\n * @param {Event}     event     The event that occurred\n */\nGraph3d.prototype._storeMousePosition = function(event) {\n  // get mouse position (different code for IE and all other browsers)\n  this.startMouseX = getMouseX(event);\n  this.startMouseY = getMouseY(event);\n\n  this._startCameraOffset = this.camera.getOffset();\n};\n\n\n/**\n * Start a moving operation inside the provided parent element\n * @param {Event}     event     The event that occurred (required for\n *                  retrieving the  mouse position)\n */\nGraph3d.prototype._onMouseDown = function(event) {\n  event = event || window.event;\n\n  // check if mouse is still down (may be up when focus is lost for example\n  // in an iframe)\n  if (this.leftButtonDown) {\n    this._onMouseUp(event);\n  }\n\n  // only react on left mouse button down\n  this.leftButtonDown = event.which ? (event.which === 1) : (event.button === 1);\n  if (!this.leftButtonDown && !this.touchDown) return;\n\n  this._storeMousePosition(event);\n\n  this.startStart = new Date(this.start);\n  this.startEnd = new Date(this.end);\n  this.startArmRotation = this.camera.getArmRotation();\n\n  this.frame.style.cursor = 'move';\n\n  // add event listeners to handle moving the contents\n  // we store the function onmousemove and onmouseup in the graph, so we can\n  // remove the eventlisteners lateron in the function mouseUp()\n  var me = this;\n  this.onmousemove = function (event) {me._onMouseMove(event);};\n  this.onmouseup   = function (event) {me._onMouseUp(event);};\n  util.addEventListener(document, 'mousemove', me.onmousemove);\n  util.addEventListener(document, 'mouseup', me.onmouseup);\n  util.preventDefault(event);\n};\n\n\n/**\n * Perform moving operating.\n * This function activated from within the funcion Graph.mouseDown().\n * @param {Event}   event  Well, eehh, the event\n */\nGraph3d.prototype._onMouseMove = function (event) {\n  this.moving = true;\n  event = event || window.event;\n\n  // calculate change in mouse position\n  var diffX = parseFloat(getMouseX(event)) - this.startMouseX;\n  var diffY = parseFloat(getMouseY(event)) - this.startMouseY;\n\n  // move with ctrl or rotate by other\n  if (event && event.ctrlKey === true) {\n      // calculate change in mouse position\n      var scaleX = this.frame.clientWidth  * 0.5;\n      var scaleY = this.frame.clientHeight * 0.5;\n\n      var offXNew = (this._startCameraOffset.x || 0) - ((diffX / scaleX) * this.camera.armLength) * 0.8;\n      var offYNew = (this._startCameraOffset.y || 0) + ((diffY / scaleY) * this.camera.armLength) * 0.8;\n\n      this.camera.setOffset(offXNew, offYNew);\n      this._storeMousePosition(event);\n    } else {\n      var horizontalNew = this.startArmRotation.horizontal + diffX / 200;\n      var verticalNew   = this.startArmRotation.vertical   + diffY / 200;\n\n      var snapAngle = 4; // degrees\n      var snapValue = Math.sin(snapAngle / 360 * 2 * Math.PI);\n\n      // snap horizontally to nice angles at 0pi, 0.5pi, 1pi, 1.5pi, etc...\n      // the -0.001 is to take care that the vertical axis is always drawn at the left front corner\n      if (Math.abs(Math.sin(horizontalNew)) < snapValue) {\n          horizontalNew = Math.round(horizontalNew / Math.PI) * Math.PI - 0.001;\n      }\n      if (Math.abs(Math.cos(horizontalNew)) < snapValue) {\n          horizontalNew = (Math.round(horizontalNew / Math.PI - 0.5) + 0.5) * Math.PI - 0.001;\n      }\n\n      // snap vertically to nice angles\n      if (Math.abs(Math.sin(verticalNew)) < snapValue) {\n          verticalNew = Math.round(verticalNew / Math.PI) * Math.PI;\n      }\n      if (Math.abs(Math.cos(verticalNew)) < snapValue) {\n          verticalNew = (Math.round(verticalNew / Math.PI - 0.5) + 0.5) * Math.PI;\n      }\n      this.camera.setArmRotation(horizontalNew, verticalNew);\n  }\n\n  this.redraw();\n\n  // fire a cameraPositionChange event\n  var parameters = this.getCameraPosition();\n  this.emit('cameraPositionChange', parameters);\n\n  util.preventDefault(event);\n};\n\n\n/**\n * Stop moving operating.\n * This function activated from within the funcion Graph.mouseDown().\n * @param {event}  event   The event\n */\nGraph3d.prototype._onMouseUp = function (event) {\n  this.frame.style.cursor = 'auto';\n  this.leftButtonDown = false;\n\n  // remove event listeners here\n  util.removeEventListener(document, 'mousemove', this.onmousemove);\n  util.removeEventListener(document, 'mouseup',   this.onmouseup);\n  util.preventDefault(event);\n};\n\n/**\n * @param {event}  event   The event\n */\nGraph3d.prototype._onClick = function (event) {\n  if (!this.onclick_callback)\n    return;\n  if (!this.moving) {\n    var boundingRect = this.frame.getBoundingClientRect();\n    var mouseX = getMouseX(event) - boundingRect.left;\n    var mouseY = getMouseY(event) - boundingRect.top;\n    var dataPoint = this._dataPointFromXY(mouseX, mouseY);\n    if (dataPoint)\n        this.onclick_callback(dataPoint.point.data);\n  }\n  else { // disable onclick callback, if it came immediately after rotate/pan\n    this.moving = false;\n  }\n  util.preventDefault(event);\n};\n\n/**\n * After having moved the mouse, a tooltip should pop up when the mouse is resting on a data point\n * @param {Event}  event   A mouse move event\n */\nGraph3d.prototype._onTooltip = function (event) {\n  var delay = 300; // ms\n  var boundingRect = this.frame.getBoundingClientRect();\n  var mouseX = getMouseX(event) - boundingRect.left;\n  var mouseY = getMouseY(event) - boundingRect.top;\n\n  if (!this.showTooltip) {\n    return;\n  }\n\n  if (this.tooltipTimeout) {\n    clearTimeout(this.tooltipTimeout);\n  }\n\n  // (delayed) display of a tooltip only if no mouse button is down\n  if (this.leftButtonDown) {\n    this._hideTooltip();\n    return;\n  }\n\n  if (this.tooltip && this.tooltip.dataPoint) {\n    // tooltip is currently visible\n    var dataPoint = this._dataPointFromXY(mouseX, mouseY);\n    if (dataPoint !== this.tooltip.dataPoint) {\n      // datapoint changed\n      if (dataPoint) {\n        this._showTooltip(dataPoint);\n      }\n      else {\n        this._hideTooltip();\n      }\n    }\n  }\n  else {\n    // tooltip is currently not visible\n    var me = this;\n    this.tooltipTimeout = setTimeout(function () {\n      me.tooltipTimeout = null;\n\n      // show a tooltip if we have a data point\n      var dataPoint = me._dataPointFromXY(mouseX, mouseY);\n      if (dataPoint) {\n        me._showTooltip(dataPoint);\n      }\n    }, delay);\n  }\n};\n\n/**\n * Event handler for touchstart event on mobile devices\n */\nGraph3d.prototype._onTouchStart = function(event) {\n  this.touchDown = true;\n\n  var me = this;\n  this.ontouchmove = function (event) {me._onTouchMove(event);};\n  this.ontouchend  = function (event) {me._onTouchEnd(event);};\n  util.addEventListener(document, 'touchmove', me.ontouchmove);\n  util.addEventListener(document, 'touchend', me.ontouchend);\n\n  this._onMouseDown(event);\n};\n\n/**\n * Event handler for touchmove event on mobile devices\n */\nGraph3d.prototype._onTouchMove = function(event) {\n  this._onMouseMove(event);\n};\n\n/**\n * Event handler for touchend event on mobile devices\n */\nGraph3d.prototype._onTouchEnd = function(event) {\n  this.touchDown = false;\n\n  util.removeEventListener(document, 'touchmove', this.ontouchmove);\n  util.removeEventListener(document, 'touchend',   this.ontouchend);\n\n  this._onMouseUp(event);\n};\n\n\n/**\n * Event handler for mouse wheel event, used to zoom the graph\n * Code from http://adomas.org/javascript-mouse-wheel/\n * @param {event}  event   The event\n */\nGraph3d.prototype._onWheel = function(event) {\n  if (!event) /* For IE. */\n    event = window.event;\n\n  // retrieve delta\n  var delta = 0;\n  if (event.wheelDelta) { /* IE/Opera. */\n    delta = event.wheelDelta/120;\n  } else if (event.detail) { /* Mozilla case. */\n    // In Mozilla, sign of delta is different than in IE.\n    // Also, delta is multiple of 3.\n    delta = -event.detail/3;\n  }\n\n  // If delta is nonzero, handle it.\n  // Basically, delta is now positive if wheel was scrolled up,\n  // and negative, if wheel was scrolled down.\n  if (delta) {\n    var oldLength = this.camera.getArmLength();\n    var newLength = oldLength * (1 - delta / 10);\n\n    this.camera.setArmLength(newLength);\n    this.redraw();\n\n    this._hideTooltip();\n  }\n\n  // fire a cameraPositionChange event\n  var parameters = this.getCameraPosition();\n  this.emit('cameraPositionChange', parameters);\n\n  // Prevent default actions caused by mouse wheel.\n  // That might be ugly, but we handle scrolls somehow\n  // anyway, so don't bother here..\n  util.preventDefault(event);\n};\n\n/**\n * Test whether a point lies inside given 2D triangle\n *\n * @param   {Point2d}   point\n * @param   {Point2d[]} triangle\n * @returns {boolean}   true if given point lies inside or on the edge of the\n *                      triangle, false otherwise\n * @private\n */\nGraph3d.prototype._insideTriangle = function (point, triangle) {\n  var a = triangle[0],\n    b = triangle[1],\n    c = triangle[2];\n\n  function sign (x) {\n    return x > 0 ? 1 : x < 0 ? -1 : 0;\n  }\n\n  var as = sign((b.x - a.x) * (point.y - a.y) - (b.y - a.y) * (point.x - a.x));\n  var bs = sign((c.x - b.x) * (point.y - b.y) - (c.y - b.y) * (point.x - b.x));\n  var cs = sign((a.x - c.x) * (point.y - c.y) - (a.y - c.y) * (point.x - c.x));\n\n  // each of the three signs must be either equal to each other or zero\n  return (as == 0 || bs == 0 || as == bs) &&\n    (bs == 0 || cs == 0 || bs == cs) &&\n    (as == 0 || cs == 0 || as == cs);\n};\n\n/**\n * Find a data point close to given screen position (x, y)\n *\n * @param   {Number} x\n * @param   {Number} y\n * @returns {Object | null} The closest data point or null if not close to any\n *                          data point\n * @private\n */\nGraph3d.prototype._dataPointFromXY = function (x, y) {\n  var i,\n    distMax = 100, // px\n    dataPoint = null,\n    closestDataPoint = null,\n    closestDist = null,\n    center = new Point2d(x, y);\n\n  if (this.style === Graph3d.STYLE.BAR ||\n    this.style === Graph3d.STYLE.BARCOLOR ||\n    this.style === Graph3d.STYLE.BARSIZE) {\n    // the data points are ordered from far away to closest\n    for (i = this.dataPoints.length - 1; i >= 0; i--) {\n      dataPoint = this.dataPoints[i];\n      var surfaces  = dataPoint.surfaces;\n      if (surfaces) {\n        for (var s = surfaces.length - 1; s >= 0; s--) {\n          // split each surface in two triangles, and see if the center point is inside one of these\n          var surface = surfaces[s];\n          var corners = surface.corners;\n          var triangle1 = [corners[0].screen, corners[1].screen, corners[2].screen];\n          var triangle2 = [corners[2].screen, corners[3].screen, corners[0].screen];\n          if (this._insideTriangle(center, triangle1) ||\n            this._insideTriangle(center, triangle2)) {\n            // return immediately at the first hit\n            return dataPoint;\n          }\n        }\n      }\n    }\n  }\n  else {\n    // find the closest data point, using distance to the center of the point on 2d screen\n    for (i = 0; i < this.dataPoints.length; i++) {\n      dataPoint = this.dataPoints[i];\n      var point = dataPoint.screen;\n      if (point) {\n        var distX = Math.abs(x - point.x);\n        var distY = Math.abs(y - point.y);\n        var dist  = Math.sqrt(distX * distX + distY * distY);\n\n        if ((closestDist === null || dist < closestDist) && dist < distMax) {\n          closestDist = dist;\n          closestDataPoint = dataPoint;\n        }\n      }\n    }\n  }\n\n\n  return closestDataPoint;\n};\n\n/**\n * Display a tooltip for given data point\n * @param {Object} dataPoint\n * @private\n */\nGraph3d.prototype._showTooltip = function (dataPoint) {\n  var content, line, dot;\n\n  if (!this.tooltip) {\n    content = document.createElement('div');\n    content.style.position = 'absolute';\n    content.style.padding = '10px';\n    content.style.border = '1px solid #4d4d4d';\n    content.style.color = '#1a1a1a';\n    content.style.background = 'rgba(255,255,255,0.7)';\n    content.style.borderRadius = '2px';\n    content.style.boxShadow = '5px 5px 10px rgba(128,128,128,0.5)';\n\n    line = document.createElement('div');\n    line.style.position = 'absolute';\n    line.style.height = '40px';\n    line.style.width = '0';\n    line.style.borderLeft = '1px solid #4d4d4d';\n\n    dot = document.createElement('div');\n    dot.style.position = 'absolute';\n    dot.style.height = '0';\n    dot.style.width = '0';\n    dot.style.border = '5px solid #4d4d4d';\n    dot.style.borderRadius = '5px';\n\n    this.tooltip = {\n      dataPoint: null,\n      dom: {\n        content: content,\n        line: line,\n        dot: dot\n      }\n    };\n  }\n  else {\n    content = this.tooltip.dom.content;\n    line  = this.tooltip.dom.line;\n    dot   = this.tooltip.dom.dot;\n  }\n\n  this._hideTooltip();\n\n  this.tooltip.dataPoint = dataPoint;\n  if (typeof this.showTooltip === 'function') {\n    content.innerHTML = this.showTooltip(dataPoint.point);\n  }\n  else {\n    content.innerHTML = '<table>' +\n      '<tr><td>' + this.xLabel + ':</td><td>' + dataPoint.point.x + '</td></tr>' +\n      '<tr><td>' + this.yLabel + ':</td><td>' + dataPoint.point.y + '</td></tr>' +\n      '<tr><td>' + this.zLabel + ':</td><td>' + dataPoint.point.z + '</td></tr>' +\n      '</table>';\n  }\n\n  content.style.left  = '0';\n  content.style.top   = '0';\n  this.frame.appendChild(content);\n  this.frame.appendChild(line);\n  this.frame.appendChild(dot);\n\n  // calculate sizes\n  var contentWidth  = content.offsetWidth;\n  var contentHeight   = content.offsetHeight;\n  var lineHeight    = line.offsetHeight;\n  var dotWidth    = dot.offsetWidth;\n  var dotHeight     = dot.offsetHeight;\n\n  var left = dataPoint.screen.x - contentWidth / 2;\n  left = Math.min(Math.max(left, 10), this.frame.clientWidth - 10 - contentWidth);\n\n  line.style.left   = dataPoint.screen.x + 'px';\n  line.style.top    = (dataPoint.screen.y - lineHeight) + 'px';\n  content.style.left  = left + 'px';\n  content.style.top   = (dataPoint.screen.y - lineHeight - contentHeight) + 'px';\n  dot.style.left    = (dataPoint.screen.x - dotWidth / 2) + 'px';\n  dot.style.top     = (dataPoint.screen.y - dotHeight / 2) + 'px';\n};\n\n/**\n * Hide the tooltip when displayed\n * @private\n */\nGraph3d.prototype._hideTooltip = function () {\n  if (this.tooltip) {\n    this.tooltip.dataPoint = null;\n\n    for (var prop in this.tooltip.dom) {\n      if (this.tooltip.dom.hasOwnProperty(prop)) {\n        var elem = this.tooltip.dom[prop];\n        if (elem && elem.parentNode) {\n          elem.parentNode.removeChild(elem);\n        }\n      }\n    }\n  }\n};\n\n/**--------------------------------------------------------------------------**/\n\n\n/**\n * Get the horizontal mouse position from a mouse event\n *\n * @param   {Event}  event\n * @returns {Number} mouse x\n */\nfunction getMouseX (event) {\n  if ('clientX' in event) return event.clientX;\n  return event.targetTouches[0] && event.targetTouches[0].clientX || 0;\n}\n\n/**\n * Get the vertical mouse position from a mouse event\n *\n * @param   {Event}  event\n * @returns {Number} mouse y\n */\nfunction getMouseY (event) {\n  if ('clientY' in event) return event.clientY;\n  return event.targetTouches[0] && event.targetTouches[0].clientY || 0;\n}\n\n\n// -----------------------------------------------------------------------------\n//  Public methods for specific settings\n// -----------------------------------------------------------------------------\n\n/**\n * Set the rotation and distance of the camera\n *\n * @param {Object}  pos            An object with the camera position\n * @param {?Number} pos.horizontal The horizontal rotation, between 0 and 2*PI.\n *                                 Optional, can be left undefined.\n * @param {?Number} pos.vertical   The vertical rotation, between 0 and 0.5*PI.\n *                                 if vertical=0.5*PI, the graph is shown from\n *                                 the top. Optional, can be left undefined.\n * @param {?Number} pos.distance   The (normalized) distance of the camera to the\n *                                 center of the graph, a value between 0.71 and\n *                                 5.0. Optional, can be left undefined.\n */\nGraph3d.prototype.setCameraPosition = function(pos) {\n  Settings.setCameraPosition(pos, this);\n  this.redraw();\n};\n\n\n/**\n * Set a new size for the graph\n *\n * @param {string} width  Width in pixels or percentage (for example '800px'\n *                        or '50%')\n * @param {string} height Height in pixels or percentage  (for example '400px'\n *                        or '30%')\n */\nGraph3d.prototype.setSize = function(width, height) {\n\tthis._setSize(width, height);\n\tthis.redraw();\n};\n\n// -----------------------------------------------------------------------------\n//  End public methods for specific settings\n// -----------------------------------------------------------------------------\n\n\nmodule.exports = Graph3d;\n\n\n// WEBPACK FOOTER //\n// ./lib/graph3d/Graph3d.js","\n/**\n * Expose `Emitter`.\n */\n\nmodule.exports = Emitter;\n\n/**\n * Initialize a new `Emitter`.\n *\n * @api public\n */\n\nfunction Emitter(obj) {\n  if (obj) return mixin(obj);\n};\n\n/**\n * Mixin the emitter properties.\n *\n * @param {Object} obj\n * @return {Object}\n * @api private\n */\n\nfunction mixin(obj) {\n  for (var key in Emitter.prototype) {\n    obj[key] = Emitter.prototype[key];\n  }\n  return obj;\n}\n\n/**\n * Listen on the given `event` with `fn`.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.on =\nEmitter.prototype.addEventListener = function(event, fn){\n  this._callbacks = this._callbacks || {};\n  (this._callbacks[event] = this._callbacks[event] || [])\n    .push(fn);\n  return this;\n};\n\n/**\n * Adds an `event` listener that will be invoked a single\n * time then automatically removed.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.once = function(event, fn){\n  var self = this;\n  this._callbacks = this._callbacks || {};\n\n  function on() {\n    self.off(event, on);\n    fn.apply(this, arguments);\n  }\n\n  on.fn = fn;\n  this.on(event, on);\n  return this;\n};\n\n/**\n * Remove the given callback for `event` or all\n * registered callbacks.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.off =\nEmitter.prototype.removeListener =\nEmitter.prototype.removeAllListeners =\nEmitter.prototype.removeEventListener = function(event, fn){\n  this._callbacks = this._callbacks || {};\n\n  // all\n  if (0 == arguments.length) {\n    this._callbacks = {};\n    return this;\n  }\n\n  // specific event\n  var callbacks = this._callbacks[event];\n  if (!callbacks) return this;\n\n  // remove all handlers\n  if (1 == arguments.length) {\n    delete this._callbacks[event];\n    return this;\n  }\n\n  // remove specific handler\n  var cb;\n  for (var i = 0; i < callbacks.length; i++) {\n    cb = callbacks[i];\n    if (cb === fn || cb.fn === fn) {\n      callbacks.splice(i, 1);\n      break;\n    }\n  }\n  return this;\n};\n\n/**\n * Emit `event` with the given args.\n *\n * @param {String} event\n * @param {Mixed} ...\n * @return {Emitter}\n */\n\nEmitter.prototype.emit = function(event){\n  this._callbacks = this._callbacks || {};\n  var args = [].slice.call(arguments, 1)\n    , callbacks = this._callbacks[event];\n\n  if (callbacks) {\n    callbacks = callbacks.slice(0);\n    for (var i = 0, len = callbacks.length; i < len; ++i) {\n      callbacks[i].apply(this, args);\n    }\n  }\n\n  return this;\n};\n\n/**\n * Return array of callbacks for `event`.\n *\n * @param {String} event\n * @return {Array}\n * @api public\n */\n\nEmitter.prototype.listeners = function(event){\n  this._callbacks = this._callbacks || {};\n  return this._callbacks[event] || [];\n};\n\n/**\n * Check if this emitter has `event` handlers.\n *\n * @param {String} event\n * @return {Boolean}\n * @api public\n */\n\nEmitter.prototype.hasListeners = function(event){\n  return !! this.listeners(event).length;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/emitter-component/index.js\n// module id = 95\n// module chunks = 0","/**\n * @prototype Point3d\n * @param {Number} [x]\n * @param {Number} [y]\n * @param {Number} [z]\n */\nfunction Point3d(x, y, z) {\n  this.x = x !== undefined ? x : 0;\n  this.y = y !== undefined ? y : 0;\n  this.z = z !== undefined ? z : 0;\n};\n\n/**\n * Subtract the two provided points, returns a-b\n * @param {Point3d} a\n * @param {Point3d} b\n * @return {Point3d} a-b\n */\nPoint3d.subtract = function(a, b) {\n  var sub = new Point3d();\n  sub.x = a.x - b.x;\n  sub.y = a.y - b.y;\n  sub.z = a.z - b.z;\n  return sub;\n};\n\n/**\n * Add the two provided points, returns a+b\n * @param {Point3d} a\n * @param {Point3d} b\n * @return {Point3d} a+b\n */\nPoint3d.add = function(a, b) {\n  var sum = new Point3d();\n  sum.x = a.x + b.x;\n  sum.y = a.y + b.y;\n  sum.z = a.z + b.z;\n  return sum;\n};\n\n/**\n * Calculate the average of two 3d points\n * @param {Point3d} a\n * @param {Point3d} b\n * @return {Point3d} The average, (a+b)/2\n */\nPoint3d.avg = function(a, b) {\n  return new Point3d(\n          (a.x + b.x) / 2,\n          (a.y + b.y) / 2,\n          (a.z + b.z) / 2\n  );\n};\n\n/**\n * Calculate the cross product of the two provided points, returns axb\n * Documentation: http://en.wikipedia.org/wiki/Cross_product\n * @param {Point3d} a\n * @param {Point3d} b\n * @return {Point3d} cross product axb\n */\nPoint3d.crossProduct = function(a, b) {\n  var crossproduct = new Point3d();\n\n  crossproduct.x = a.y * b.z - a.z * b.y;\n  crossproduct.y = a.z * b.x - a.x * b.z;\n  crossproduct.z = a.x * b.y - a.y * b.x;\n\n  return crossproduct;\n};\n\n\n/**\n * Rtrieve the length of the vector (or the distance from this point to the origin\n * @return {Number}  length\n */\nPoint3d.prototype.length = function() {\n  return Math.sqrt(\n          this.x * this.x +\n          this.y * this.y +\n          this.z * this.z\n  );\n};\n\nmodule.exports = Point3d;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/graph3d/Point3d.js","/**\n * @prototype Point2d\n * @param {Number} [x]\n * @param {Number} [y]\n */\nfunction Point2d (x, y) {\n  this.x = x !== undefined ? x : 0;\n  this.y = y !== undefined ? y : 0;\n}\n\nmodule.exports = Point2d;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/graph3d/Point2d.js","var Point3d = require('./Point3d');\n\n/**\n * @class Camera\n * The camera is mounted on a (virtual) camera arm. The camera arm can rotate\n * The camera is always looking in the direction of the origin of the arm.\n * This way, the camera always rotates around one fixed point, the location\n * of the camera arm.\n *\n * Documentation:\n *   http://en.wikipedia.org/wiki/3D_projection\n */\nfunction Camera() {\n  this.armLocation = new Point3d();\n  this.armRotation = {};\n  this.armRotation.horizontal = 0;\n  this.armRotation.vertical = 0;\n  this.armLength = 1.7;\n  this.cameraOffset = new Point3d();\n  this.offsetMultiplier = 0.6;\n\n  this.cameraLocation = new Point3d();\n  this.cameraRotation =  new Point3d(0.5*Math.PI, 0, 0);\n\n  this.calculateCameraOrientation();\n}\n\n/**\n * Set offset camera in camera coordinates\n * @param {Number} x offset by camera horisontal\n * @param {Number} y offset by camera vertical\n */\nCamera.prototype.setOffset = function(x, y) {\n  var abs = Math.abs,\n      sign = Math.sign,\n      mul = this.offsetMultiplier,\n      border = this.armLength * mul;\n\n  if (abs(x) > border) {\n      x = sign(x) * border;\n  }\n  if (abs(y) > border) {\n      y = sign(y) * border;\n  }\n  this.cameraOffset.x = x;\n  this.cameraOffset.y = y;\n  this.calculateCameraOrientation();\n};\n\n/**\n * Get camera offset by horizontal and vertical\n * @return {Point3d} x - horizontal offset, y - vertical offset, z - not used\n */\nCamera.prototype.getOffset = function(x, y) {\n  return this.cameraOffset;\n};\n\n/**\n * Set the location (origin) of the arm\n * @param {Number} x  Normalized value of x\n * @param {Number} y  Normalized value of y\n * @param {Number} z  Normalized value of z\n */\nCamera.prototype.setArmLocation = function(x, y, z) {\n  this.armLocation.x = x;\n  this.armLocation.y = y;\n  this.armLocation.z = z;\n\n  this.calculateCameraOrientation();\n};\n\n/**\n * Set the rotation of the camera arm\n * @param {Number} horizontal   The horizontal rotation, between 0 and 2*PI.\n *                Optional, can be left undefined.\n * @param {Number} vertical   The vertical rotation, between 0 and 0.5*PI\n *                if vertical=0.5*PI, the graph is shown from the\n *                top. Optional, can be left undefined.\n */\nCamera.prototype.setArmRotation = function(horizontal, vertical) {\n  if (horizontal !== undefined) {\n    this.armRotation.horizontal = horizontal;\n  }\n\n  if (vertical !== undefined) {\n    this.armRotation.vertical = vertical;\n    if (this.armRotation.vertical < 0) this.armRotation.vertical = 0;\n    if (this.armRotation.vertical > 0.5*Math.PI) this.armRotation.vertical = 0.5*Math.PI;\n  }\n\n  if (horizontal !== undefined || vertical !== undefined) {\n    this.calculateCameraOrientation();\n  }\n};\n\n/**\n * Retrieve the current arm rotation\n * @return {object}   An object with parameters horizontal and vertical\n */\nCamera.prototype.getArmRotation = function() {\n  var rot = {};\n  rot.horizontal = this.armRotation.horizontal;\n  rot.vertical = this.armRotation.vertical;\n\n  return rot;\n};\n\n/**\n * Set the (normalized) length of the camera arm.\n * @param {Number} length A length between 0.71 and 5.0\n */\nCamera.prototype.setArmLength = function(length) {\n  if (length === undefined)\n    return;\n\n  this.armLength = length;\n\n  // Radius must be larger than the corner of the graph,\n  // which has a distance of sqrt(0.5^2+0.5^2) = 0.71 from the center of the\n  // graph\n  if (this.armLength < 0.71) this.armLength = 0.71;\n  if (this.armLength > 5.0) this.armLength = 5.0;\n\n  this.setOffset(this.cameraOffset.x, this.cameraOffset.y);\n  this.calculateCameraOrientation();\n};\n\n/**\n * Retrieve the arm length\n * @return {Number} length\n */\nCamera.prototype.getArmLength = function() {\n  return this.armLength;\n};\n\n/**\n * Retrieve the camera location\n * @return {Point3d} cameraLocation\n */\nCamera.prototype.getCameraLocation = function() {\n  return this.cameraLocation;\n};\n\n/**\n * Retrieve the camera rotation\n * @return {Point3d} cameraRotation\n */\nCamera.prototype.getCameraRotation = function() {\n  return this.cameraRotation;\n};\n\n/**\n * Calculate the location and rotation of the camera based on the\n * position and orientation of the camera arm\n */\nCamera.prototype.calculateCameraOrientation = function() {\n  // calculate location of the camera\n  this.cameraLocation.x = this.armLocation.x - this.armLength * Math.sin(this.armRotation.horizontal) * Math.cos(this.armRotation.vertical);\n  this.cameraLocation.y = this.armLocation.y - this.armLength * Math.cos(this.armRotation.horizontal) * Math.cos(this.armRotation.vertical);\n  this.cameraLocation.z = this.armLocation.z + this.armLength * Math.sin(this.armRotation.vertical);\n\n  // calculate rotation of the camera\n  this.cameraRotation.x = Math.PI/2 - this.armRotation.vertical;\n  this.cameraRotation.y = 0;\n  this.cameraRotation.z = -this.armRotation.horizontal;\n\n  var xa = this.cameraRotation.x;\n  var ya = this.cameraRotation.y;\n  var za = this.cameraRotation.z;\n  var dx = this.cameraOffset.x;\n  var dy = this.cameraOffset.y;\n  var sin = Math.sin, cos = Math.cos;\n\n  this.cameraLocation.x = this.cameraLocation.x + dx * cos(za) + dy * - sin(za) * cos(xa);\n  this.cameraLocation.y = this.cameraLocation.y + dx * sin(za) + dy * cos(za) * cos(xa);\n  this.cameraLocation.z = this.cameraLocation.z + dy * sin(xa);\n};\n\nmodule.exports = Camera;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/graph3d/Camera.js","module.exports = { \"default\": require(\"core-js/library/fn/math/sign\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/math/sign.js\n// module id = 99\n// module chunks = 0","require('../../modules/es6.math.sign');\nmodule.exports = require('../../modules/_core').Math.sign;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/fn/math/sign.js\n// module id = 100\n// module chunks = 0","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {sign: require('./_math-sign')});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es6.math.sign.js\n// module id = 101\n// module chunks = 0","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x){\n  return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_math-sign.js\n// module id = 102\n// module chunks = 0","var DataView = require('../DataView');\n\n/**\n * @class Filter\n *\n * @param {DataSet} data The google data table\n * @param {Number}  column             The index of the column to be filtered\n * @param {Graph} graph           The graph\n */\nfunction Filter (data, column, graph) {\n  this.data = data;\n  this.column = column;\n  this.graph = graph; // the parent graph\n\n  this.index = undefined;\n  this.value = undefined;\n\n  // read all distinct values and select the first one\n  this.values = graph.getDistinctValues(data.get(), this.column);\n\n  // sort both numeric and string values correctly\n  this.values.sort(function (a, b) {\n    return a > b ? 1 : a < b ? -1 : 0;\n  });\n\n  if (this.values.length > 0) {\n    this.selectValue(0);\n  }\n\n  // create an array with the filtered datapoints. this will be loaded afterwards\n  this.dataPoints = [];\n\n  this.loaded = false;\n  this.onLoadCallback = undefined;\n\n  if (graph.animationPreload) {\n    this.loaded = false;\n    this.loadInBackground();\n  }\n  else {\n    this.loaded = true;\n  }\n};\n\n\n/**\n * Return the label\n * @return {string} label\n */\nFilter.prototype.isLoaded = function() {\n  return this.loaded;\n};\n\n\n/**\n * Return the loaded progress\n * @return {Number} percentage between 0 and 100\n */\nFilter.prototype.getLoadedProgress = function() {\n  var len = this.values.length;\n\n  var i = 0;\n  while (this.dataPoints[i]) {\n    i++;\n  }\n\n  return Math.round(i / len * 100);\n};\n\n\n/**\n * Return the label\n * @return {string} label\n */\nFilter.prototype.getLabel = function() {\n  return this.graph.filterLabel;\n};\n\n\n/**\n * Return the columnIndex of the filter\n * @return {Number} columnIndex\n */\nFilter.prototype.getColumn = function() {\n  return this.column;\n};\n\n/**\n * Return the currently selected value. Returns undefined if there is no selection\n * @return {*} value\n */\nFilter.prototype.getSelectedValue = function() {\n  if (this.index === undefined)\n    return undefined;\n\n  return this.values[this.index];\n};\n\n/**\n * Retrieve all values of the filter\n * @return {Array} values\n */\nFilter.prototype.getValues = function() {\n  return this.values;\n};\n\n/**\n * Retrieve one value of the filter\n * @param {Number}  index\n * @return {*} value\n */\nFilter.prototype.getValue = function(index) {\n  if (index >= this.values.length)\n    throw new Error('Index out of range');\n\n  return this.values[index];\n};\n\n\n/**\n * Retrieve the (filtered) dataPoints for the currently selected filter index\n * @param {Number} [index] (optional)\n * @return {Array} dataPoints\n */\nFilter.prototype._getDataPoints = function(index) {\n  if (index === undefined)\n    index = this.index;\n\n  if (index === undefined)\n    return [];\n\n  var dataPoints;\n  if (this.dataPoints[index]) {\n    dataPoints = this.dataPoints[index];\n  }\n  else {\n    var f = {};\n    f.column = this.column;\n    f.value = this.values[index];\n\n    var dataView = new DataView(this.data,{filter: function (item) {return (item[f.column] == f.value);}}).get();\n    dataPoints = this.graph._getDataPoints(dataView);\n\n    this.dataPoints[index] = dataPoints;\n  }\n\n  return dataPoints;\n};\n\n\n\n/**\n * Set a callback function when the filter is fully loaded.\n */\nFilter.prototype.setOnLoadCallback = function(callback) {\n  this.onLoadCallback = callback;\n};\n\n\n/**\n * Add a value to the list with available values for this filter\n * No double entries will be created.\n * @param {Number} index\n */\nFilter.prototype.selectValue = function(index) {\n  if (index >= this.values.length)\n    throw new Error('Index out of range');\n\n  this.index = index;\n  this.value = this.values[index];\n};\n\n/**\n * Load all filtered rows in the background one by one\n * Start this method without providing an index!\n */\nFilter.prototype.loadInBackground = function(index) {\n  if (index === undefined)\n    index = 0;\n\n  var frame = this.graph.frame;\n\n  if (index < this.values.length) {\n    var dataPointsTemp = this._getDataPoints(index);\n    //this.graph.redrawInfo(); // TODO: not neat\n\n    // create a progress box\n    if (frame.progress === undefined) {\n      frame.progress = document.createElement('DIV');\n      frame.progress.style.position = 'absolute';\n      frame.progress.style.color = 'gray';\n      frame.appendChild(frame.progress);\n    }\n    var progress = this.getLoadedProgress();\n    frame.progress.innerHTML = 'Loading animation... ' + progress + '%';\n    // TODO: this is no nice solution...\n    frame.progress.style.bottom = 60 + 'px'; // TODO: use height of slider\n    frame.progress.style.left = 10 + 'px';\n\n    var me = this;\n    setTimeout(function() {me.loadInBackground(index+1);}, 10);\n    this.loaded = false;\n  }\n  else {\n    this.loaded = true;\n\n    // remove the progress box\n    if (frame.progress !== undefined) {\n      frame.removeChild(frame.progress);\n      frame.progress = undefined;\n    }\n\n    if (this.onLoadCallback)\n      this.onLoadCallback();\n  }\n};\n\nmodule.exports = Filter;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/graph3d/Filter.js","var util = require('../util');\n\n/**\n * @constructor Slider\n *\n * An html slider control with start/stop/prev/next buttons\n * @param {Element} container  The element where the slider will be created\n * @param {Object} options   Available options:\n *                 {boolean} visible   If true (default) the\n *                           slider is visible.\n */\nfunction Slider(container, options) {\n  if (container === undefined) {\n    throw new Error('No container element defined');\n  }\n  this.container = container;\n  this.visible = (options && options.visible != undefined) ? options.visible : true;\n\n  if (this.visible) {\n    this.frame = document.createElement('DIV');\n    //this.frame.style.backgroundColor = '#E5E5E5';\n    this.frame.style.width = '100%';\n    this.frame.style.position = 'relative';\n    this.container.appendChild(this.frame);\n\n    this.frame.prev = document.createElement('INPUT');\n    this.frame.prev.type = 'BUTTON';\n    this.frame.prev.value = 'Prev';\n    this.frame.appendChild(this.frame.prev);\n\n    this.frame.play = document.createElement('INPUT');\n    this.frame.play.type = 'BUTTON';\n    this.frame.play.value = 'Play';\n    this.frame.appendChild(this.frame.play);\n\n    this.frame.next = document.createElement('INPUT');\n    this.frame.next.type = 'BUTTON';\n    this.frame.next.value = 'Next';\n    this.frame.appendChild(this.frame.next);\n\n    this.frame.bar = document.createElement('INPUT');\n    this.frame.bar.type = 'BUTTON';\n    this.frame.bar.style.position = 'absolute';\n    this.frame.bar.style.border = '1px solid red';\n    this.frame.bar.style.width = '100px';\n    this.frame.bar.style.height = '6px';\n    this.frame.bar.style.borderRadius = '2px';\n    this.frame.bar.style.MozBorderRadius = '2px';\n    this.frame.bar.style.border = '1px solid #7F7F7F';\n    this.frame.bar.style.backgroundColor = '#E5E5E5';\n    this.frame.appendChild(this.frame.bar);\n\n    this.frame.slide = document.createElement('INPUT');\n    this.frame.slide.type = 'BUTTON';\n    this.frame.slide.style.margin = '0px';\n    this.frame.slide.value = ' ';\n    this.frame.slide.style.position = 'relative';\n    this.frame.slide.style.left = '-100px';\n    this.frame.appendChild(this.frame.slide);\n\n    // create events\n    var me = this;\n    this.frame.slide.onmousedown = function (event) {me._onMouseDown(event);};\n    this.frame.prev.onclick = function (event) {me.prev(event);};\n    this.frame.play.onclick = function (event) {me.togglePlay(event);};\n    this.frame.next.onclick = function (event) {me.next(event);};\n  }\n\n  this.onChangeCallback = undefined;\n\n  this.values = [];\n  this.index = undefined;\n\n  this.playTimeout = undefined;\n  this.playInterval = 1000; // milliseconds\n  this.playLoop = true;\n}\n\n/**\n * Select the previous index\n */\nSlider.prototype.prev = function() {\n  var index = this.getIndex();\n  if (index > 0) {\n    index--;\n    this.setIndex(index);\n  }\n};\n\n/**\n * Select the next index\n */\nSlider.prototype.next = function() {\n  var index = this.getIndex();\n  if (index < this.values.length - 1) {\n    index++;\n    this.setIndex(index);\n  }\n};\n\n/**\n * Select the next index\n */\nSlider.prototype.playNext = function() {\n  var start = new Date();\n\n  var index = this.getIndex();\n  if (index < this.values.length - 1) {\n    index++;\n    this.setIndex(index);\n  }\n  else if (this.playLoop) {\n    // jump to the start\n    index = 0;\n    this.setIndex(index);\n  }\n\n  var end = new Date();\n  var diff = (end - start);\n\n  // calculate how much time it to to set the index and to execute the callback\n  // function.\n  var interval = Math.max(this.playInterval - diff, 0);\n  // document.title = diff // TODO: cleanup\n\n  var me = this;\n  this.playTimeout = setTimeout(function() {me.playNext();}, interval);\n};\n\n/**\n * Toggle start or stop playing\n */\nSlider.prototype.togglePlay = function() {\n  if (this.playTimeout === undefined) {\n    this.play();\n  } else {\n    this.stop();\n  }\n};\n\n/**\n * Start playing\n */\nSlider.prototype.play = function() {\n  // Test whether already playing\n  if (this.playTimeout) return;\n\n  this.playNext();\n\n  if (this.frame) {\n    this.frame.play.value = 'Stop';\n  }\n};\n\n/**\n * Stop playing\n */\nSlider.prototype.stop = function() {\n  clearInterval(this.playTimeout);\n  this.playTimeout = undefined;\n\n  if (this.frame) {\n    this.frame.play.value = 'Play';\n  }\n};\n\n/**\n * Set a callback function which will be triggered when the value of the\n * slider bar has changed.\n */\nSlider.prototype.setOnChangeCallback = function(callback) {\n  this.onChangeCallback = callback;\n};\n\n/**\n * Set the interval for playing the list\n * @param {Number} interval   The interval in milliseconds\n */\nSlider.prototype.setPlayInterval = function(interval) {\n  this.playInterval = interval;\n};\n\n/**\n * Retrieve the current play interval\n * @return {Number} interval   The interval in milliseconds\n */\nSlider.prototype.getPlayInterval = function(interval) {\n  return this.playInterval;\n};\n\n/**\n * Set looping on or off\n * @pararm {boolean} doLoop  If true, the slider will jump to the start when\n *               the end is passed, and will jump to the end\n *               when the start is passed.\n */\nSlider.prototype.setPlayLoop = function(doLoop) {\n  this.playLoop = doLoop;\n};\n\n\n/**\n * Execute the onchange callback function\n */\nSlider.prototype.onChange = function() {\n  if (this.onChangeCallback !== undefined) {\n    this.onChangeCallback();\n  }\n};\n\n/**\n * redraw the slider on the correct place\n */\nSlider.prototype.redraw = function() {\n  if (this.frame) {\n    // resize the bar\n    this.frame.bar.style.top = (this.frame.clientHeight/2 -\n        this.frame.bar.offsetHeight/2) + 'px';\n    this.frame.bar.style.width = (this.frame.clientWidth -\n        this.frame.prev.clientWidth -\n        this.frame.play.clientWidth -\n        this.frame.next.clientWidth - 30)  + 'px';\n\n    // position the slider button\n    var left = this.indexToLeft(this.index);\n    this.frame.slide.style.left = (left) + 'px';\n  }\n};\n\n\n/**\n * Set the list with values for the slider\n * @param {Array} values   A javascript array with values (any type)\n */\nSlider.prototype.setValues = function(values) {\n  this.values = values;\n\n  if (this.values.length > 0)\n    this.setIndex(0);\n  else\n    this.index = undefined;\n};\n\n/**\n * Select a value by its index\n * @param {Number} index\n */\nSlider.prototype.setIndex = function(index) {\n  if (index < this.values.length) {\n    this.index = index;\n\n    this.redraw();\n    this.onChange();\n  }\n  else {\n    throw new Error('Index out of range');\n  }\n};\n\n/**\n * retrieve the index of the currently selected vaue\n * @return {Number} index\n */\nSlider.prototype.getIndex = function() {\n  return this.index;\n};\n\n\n/**\n * retrieve the currently selected value\n * @return {*} value\n */\nSlider.prototype.get = function() {\n  return this.values[this.index];\n};\n\n\nSlider.prototype._onMouseDown = function(event) {\n  // only react on left mouse button down\n  var leftButtonDown = event.which ? (event.which === 1) : (event.button === 1);\n  if (!leftButtonDown) return;\n\n  this.startClientX = event.clientX;\n  this.startSlideX = parseFloat(this.frame.slide.style.left);\n\n  this.frame.style.cursor = 'move';\n\n  // add event listeners to handle moving the contents\n  // we store the function onmousemove and onmouseup in the graph, so we can\n  // remove the eventlisteners lateron in the function mouseUp()\n  var me = this;\n  this.onmousemove = function (event) {me._onMouseMove(event);};\n  this.onmouseup   = function (event) {me._onMouseUp(event);};\n  util.addEventListener(document, 'mousemove', this.onmousemove);\n  util.addEventListener(document, 'mouseup',   this.onmouseup);\n  util.preventDefault(event);\n};\n\n\nSlider.prototype.leftToIndex = function (left) {\n  var width = parseFloat(this.frame.bar.style.width) -\n      this.frame.slide.clientWidth - 10;\n  var x = left - 3;\n\n  var index = Math.round(x / width * (this.values.length-1));\n  if (index < 0) index = 0;\n  if (index > this.values.length-1) index = this.values.length-1;\n\n  return index;\n};\n\nSlider.prototype.indexToLeft = function (index) {\n  var width = parseFloat(this.frame.bar.style.width) -\n      this.frame.slide.clientWidth - 10;\n\n  var x = index / (this.values.length-1) * width;\n  var left = x + 3;\n\n  return left;\n};\n\n\n\nSlider.prototype._onMouseMove = function (event) {\n  var diff = event.clientX - this.startClientX;\n  var x = this.startSlideX + diff;\n\n  var index = this.leftToIndex(x);\n\n  this.setIndex(index);\n\n  util.preventDefault();\n};\n\n\nSlider.prototype._onMouseUp = function (event) {\n  this.frame.style.cursor = 'auto';\n\n  // remove event listeners\n  util.removeEventListener(document, 'mousemove', this.onmousemove);\n  util.removeEventListener(document, 'mouseup', this.onmouseup);\n\n  util.preventDefault();\n};\n\nmodule.exports = Slider;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/graph3d/Slider.js","/**\n * @prototype StepNumber\n * The class StepNumber is an iterator for Numbers. You provide a start and end\n * value, and a best step size. StepNumber itself rounds to fixed values and\n * a finds the step that best fits the provided step.\n *\n * If prettyStep is true, the step size is chosen as close as possible to the\n * provided step, but being a round value like 1, 2, 5, 10, 20, 50, ....\n *\n * Example usage:\n *   var step = new StepNumber(0, 10, 2.5, true);\n *   step.start();\n *   while (!step.end()) {\n *   alert(step.getCurrent());\n *   step.next();\n *   }\n *\n * Version: 1.0\n *\n * @param {Number} start     The start value\n * @param {Number} end     The end value\n * @param {Number} step    Optional. Step size. Must be a positive value.\n * @param {boolean} prettyStep Optional. If true, the step size is rounded\n *               To a pretty step size (like 1, 2, 5, 10, 20, 50, ...)\n */\nfunction StepNumber(start, end, step, prettyStep) {\n  // set default values\n  this._start = 0;\n  this._end = 0;\n  this._step = 1;\n  this.prettyStep = true;\n  this.precision = 5;\n\n  this._current = 0;\n  this.setRange(start, end, step, prettyStep);\n};\n\n\n/**\n * Check for input values, to prevent disasters from happening\n *\n * Source: http://stackoverflow.com/a/1830844\n */\nStepNumber.prototype.isNumeric = function(n) {\n  return !isNaN(parseFloat(n)) && isFinite(n);\n};\n\n\n/**\n * Set a new range: start, end and step.\n *\n * @param {Number} start     The start value\n * @param {Number} end     The end value\n * @param {Number} step    Optional. Step size. Must be a positive value.\n * @param {boolean} prettyStep Optional. If true, the step size is rounded\n *               To a pretty step size (like 1, 2, 5, 10, 20, 50, ...)\n */\nStepNumber.prototype.setRange = function(start, end, step, prettyStep) {\n  if (!this.isNumeric(start)) {\n    throw new Error('Parameter \\'start\\' is not numeric; value: ' + start);\n  }\n  if (!this.isNumeric(end)) {\n    throw new Error('Parameter \\'end\\' is not numeric; value: ' + start);\n  }\n  if (!this.isNumeric(step)) {\n    throw new Error('Parameter \\'step\\' is not numeric; value: ' + start);\n  }\n\n  this._start = start ? start : 0;\n  this._end = end ? end : 0;\n\n  this.setStep(step, prettyStep);\n};\n\n/**\n * Set a new step size\n * @param {Number} step    New step size. Must be a positive value\n * @param {boolean} prettyStep Optional. If true, the provided step is rounded\n *               to a pretty step size (like 1, 2, 5, 10, 20, 50, ...)\n */\nStepNumber.prototype.setStep = function(step, prettyStep) {\n  if (step === undefined || step <= 0)\n    return;\n\n  if (prettyStep !== undefined)\n    this.prettyStep = prettyStep;\n\n  if (this.prettyStep === true)\n    this._step = StepNumber.calculatePrettyStep(step);\n  else\n    this._step = step;\n};\n\n/**\n * Calculate a nice step size, closest to the desired step size.\n * Returns a value in one of the ranges 1*10^n, 2*10^n, or 5*10^n, where n is an\n * integer Number. For example 1, 2, 5, 10, 20, 50, etc...\n * @param {Number}  step  Desired step size\n * @return {Number}     Nice step size\n */\nStepNumber.calculatePrettyStep = function (step) {\n  var log10 = function (x) {return Math.log(x) / Math.LN10;};\n\n  // try three steps (multiple of 1, 2, or 5\n  var step1 = Math.pow(10, Math.round(log10(step))),\n      step2 = 2 * Math.pow(10, Math.round(log10(step / 2))),\n      step5 = 5 * Math.pow(10, Math.round(log10(step / 5)));\n\n  // choose the best step (closest to minimum step)\n  var prettyStep = step1;\n  if (Math.abs(step2 - step) <= Math.abs(prettyStep - step)) prettyStep = step2;\n  if (Math.abs(step5 - step) <= Math.abs(prettyStep - step)) prettyStep = step5;\n\n  // for safety\n  if (prettyStep <= 0) {\n    prettyStep = 1;\n  }\n\n  return prettyStep;\n};\n\n/**\n * returns the current value of the step\n * @return {Number} current value\n */\nStepNumber.prototype.getCurrent = function () {\n  return parseFloat(this._current.toPrecision(this.precision));\n};\n\n/**\n * returns the current step size\n * @return {Number} current step size\n */\nStepNumber.prototype.getStep = function () {\n  return this._step;\n};\n\n/**\n * Set the current to its starting value.\n *\n * By default, this will be the largest value smaller than start, which\n * is a multiple of the step size.\n *\n * Parameters checkFirst is optional, default false.\n * If set to true, move the current value one step if smaller than start.\n */\nStepNumber.prototype.start = function(checkFirst) {\n  if (checkFirst === undefined) {\n    checkFirst = false;\n  }\n\n  this._current = this._start - this._start % this._step;\n\n  if (checkFirst) {\n    if (this.getCurrent() < this._start) {\n      this.next();\n    }\n  }\n};\n\n\n/**\n * Do a step, add the step size to the current value\n */\nStepNumber.prototype.next = function () {\n  this._current += this._step;\n};\n\n/**\n * Returns true whether the end is reached\n * @return {boolean}  True if the current value has passed the end value.\n */\nStepNumber.prototype.end = function () {\n  return (this._current > this._end);\n};\n\nmodule.exports = StepNumber;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/graph3d/StepNumber.js","/**\n * @prototype Range\n *\n * Helper class to make working with related min and max values easier.\n *\n * The range is inclusive; a given value is considered part of the range if:\n *\n *    this.min <= value <= this.max\n */\nfunction Range() {\n  this.min = undefined;\n  this.max = undefined;\n}\n\n\n/**\n * Adjust the range so that the passed value fits in it.\n *\n * If the value is outside of the current extremes, adjust\n * the min or max so that the value is within the range.\n *\n * @param {number} value Numeric value to fit in range\n */\nRange.prototype.adjust = function(value) {\n  if (value === undefined) return;\n\n  if (this.min === undefined || this.min > value ) {\n    this.min = value;\n  }\n\n  if (this.max === undefined || this.max < value) {\n    this.max = value;\n  }\n};\n\n\n/**\n * Adjust the current range so that the passed range fits in it.\n *\n * @param {Range} range Range instance to fit in current instance\n */\nRange.prototype.combine = function(range) {\n   this.add(range.min);\n   this.add(range.max);\n};\n\n\n/**\n * Expand the range by the given value\n *\n * min will be lowered by given value;\n * max will be raised by given value\n *\n * Shrinking by passing a negative value is allowed.\n *\n * @param {number} val Amount by which to expand or shrink current range with\n */\nRange.prototype.expand = function(val) {\n  if (val === undefined) {\n    return;\n  }\n\n  var newMin = this.min - val;\n  var newMax = this.max + val;\n\n  // Note that following allows newMin === newMax.\n  // This should be OK, since method expand() allows this also.\n  if (newMin > newMax) {\n    throw new Error('Passed expansion value makes range invalid');\n  }\n\n  this.min = newMin;\n  this.max = newMax;\n};\n\n\n/**\n * Determine the full range width of current instance.\n *\n * @returns {num} The calculated width of this range\n */\nRange.prototype.range = function() {\n  return this.max - this.min;\n};\n\n\n/**\n * Determine the central point of current instance.\n *\n * @returns {number} the value in the middle of min and max\n */\nRange.prototype.center = function() {\n return (this.min + this.max) / 2;\n};\n\n\nmodule.exports = Range;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/graph3d/Range.js","////////////////////////////////////////////////////////////////////////////////\n// This modules handles the options for Graph3d.\n//\n////////////////////////////////////////////////////////////////////////////////\nvar Camera  = require('./Camera');\nvar Point3d = require('./Point3d');\n\n\n// enumerate the available styles\nvar STYLE = {\n  BAR     : 0,\n  BARCOLOR: 1,\n  BARSIZE : 2,\n  DOT     : 3,\n  DOTLINE : 4,\n  DOTCOLOR: 5,\n  DOTSIZE : 6,\n  GRID    : 7,\n  LINE    : 8,\n  SURFACE : 9\n};\n\n\n// The string representations of the styles\nvar STYLENAME = {\n  'dot'      : STYLE.DOT,\n  'dot-line' : STYLE.DOTLINE,\n  'dot-color': STYLE.DOTCOLOR,\n  'dot-size' : STYLE.DOTSIZE,\n  'line'     : STYLE.LINE,\n  'grid'     : STYLE.GRID,\n  'surface'  : STYLE.SURFACE,\n  'bar'      : STYLE.BAR,\n  'bar-color': STYLE.BARCOLOR,\n  'bar-size' : STYLE.BARSIZE\n};\n\n\n/**\n * Field names in the options hash which are of relevance to the user.\n *\n * Specifically, these are the fields which require no special handling,\n * and can be directly copied over.\n */\nvar OPTIONKEYS = [\n  'width',\n  'height',\n  'filterLabel',\n  'legendLabel',\n  'xLabel',\n  'yLabel',\n  'zLabel',\n  'xValueLabel',\n  'yValueLabel',\n  'zValueLabel',\n  'showGrid',\n  'showPerspective',\n  'showShadow',\n  'keepAspectRatio',\n  'verticalRatio',\n  'dotSizeRatio',\n  'showAnimationControls',\n  'animationInterval',\n  'animationPreload',\n  'animationAutoStart',\n  'axisColor',\n  'gridColor',\n  'xCenter',\n  'yCenter'\n];\n\n\n/**\n * Field names in the options hash which are of relevance to the user.\n *\n * Same as OPTIONKEYS, but internally these fields are stored with \n * prefix 'default' in the name.\n */\nvar PREFIXEDOPTIONKEYS = [\n  'xBarWidth',\n  'yBarWidth',\n  'valueMin',\n  'valueMax',\n  'xMin',\n  'xMax',\n  'xStep',\n  'yMin',\n  'yMax',\n  'yStep',\n  'zMin',\n  'zMax',\n  'zStep'\n];\n\n\n// Placeholder for DEFAULTS reference\nvar DEFAULTS = undefined; \n\n\n/**\n * Check if given hash is empty.\n *\n * Source: http://stackoverflow.com/a/679937\n */\nfunction isEmpty(obj) {\n  for(var prop in obj) {\n    if (obj.hasOwnProperty(prop))\n      return false;\n  }\n\n  return true;\n}\n\n\n\n/**\n * Make first letter of parameter upper case.\n *\n * Source: http://stackoverflow.com/a/1026087\n */\nfunction capitalize(str) {\n  if (str === undefined || str === \"\" || typeof str != \"string\") {\n    return str;\n  }\n\n  return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n\n/**\n * Add a prefix to a field name, taking style guide into account\n */\nfunction prefixFieldName(prefix, fieldName) {\n  if (prefix === undefined || prefix === \"\") {\n    return fieldName;\n  }\n\n  return prefix + capitalize(fieldName);\n}\n\n\n/**\n * Forcibly copy fields from src to dst in a controlled manner.\n *\n * A given field in dst will always be overwitten. If this field\n * is undefined or not present in src, the field in dst will \n * be explicitly set to undefined.\n * \n * The intention here is to be able to reset all option fields.\n * \n * Only the fields mentioned in array 'fields' will be handled.\n *\n * @param fields array with names of fields to copy\n * @param prefix optional; prefix to use for the target fields.\n */\nfunction forceCopy(src, dst, fields, prefix) {\n  var srcKey;\n  var dstKey;\n\n  for (var i in fields) {\n    srcKey  = fields[i];\n    dstKey  = prefixFieldName(prefix, srcKey);\n\n    dst[dstKey] = src[srcKey];\n  }\n}\n\n\n/**\n * Copy fields from src to dst in a safe and controlled manner.\n *\n * Only the fields mentioned in array 'fields' will be copied over,\n * and only if these are actually defined.\n *\n * @param fields array with names of fields to copy\n * @param prefix optional; prefix to use for the target fields.\n */\nfunction safeCopy(src, dst, fields, prefix) {\n  var srcKey;\n  var dstKey;\n\n  for (var i in fields) {\n    srcKey  = fields[i];\n    if (src[srcKey] === undefined) continue;\n\n    dstKey  = prefixFieldName(prefix, srcKey);\n\n    dst[dstKey] = src[srcKey];\n  }\n}\n\n\n/**\n * Initialize dst with the values in src.\n *\n * src is the hash with the default values. \n * A reference DEFAULTS to this hash is stored locally for \n * further handling.\n *\n * For now, dst is assumed to be a Graph3d instance.\n */\nfunction setDefaults(src, dst) {\n  if (src === undefined || isEmpty(src)) {\n    throw new Error('No DEFAULTS passed');\n  }\n  if (dst === undefined) {\n    throw new Error('No dst passed');\n  }\n\n  // Remember defaults for future reference\n  DEFAULTS = src;\n\n  // Handle the defaults which can be simply copied over\n  forceCopy(src, dst, OPTIONKEYS);\n  forceCopy(src, dst, PREFIXEDOPTIONKEYS, 'default');\n\n  // Handle the more complex ('special') fields\n  setSpecialSettings(src, dst);\n\n  // Following are internal fields, not part of the user settings\n  dst.margin = 10;                  // px\n  dst.showGrayBottom = false;       // TODO: this does not work correctly\n  dst.showTooltip = false;\n  dst.onclick_callback = null;\n  dst.eye = new Point3d(0, 0, -1);  // TODO: set eye.z about 3/4 of the width of the window?\n}\n\n\nfunction setOptions(options, dst) {\n  if (options === undefined) {\n    return;\n  }\n  if (dst === undefined) {\n    throw new Error('No dst passed');\n  }\n\n  if (DEFAULTS === undefined || isEmpty(DEFAULTS)) {\n    throw new Error('DEFAULTS not set for module Settings');\n  }\n\n\n  // Handle the parameters which can be simply copied over\n  safeCopy(options, dst, OPTIONKEYS);\n  safeCopy(options, dst, PREFIXEDOPTIONKEYS, 'default');\n\n  // Handle the more complex ('special') fields\n  setSpecialSettings(options, dst);\n}\n\n\n/**\n * Special handling for certain parameters\n *\n * 'Special' here means: setting requires more than a simple copy\n */\nfunction setSpecialSettings(src, dst) {\n  if (src.backgroundColor !== undefined) {\n    setBackgroundColor(src.backgroundColor, dst);\n  }\n\n  setDataColor(src.dataColor, dst);\n  setStyle(src.style, dst);\n  setShowLegend(src.showLegend, dst);\n  setCameraPosition(src.cameraPosition, dst);\n\n  // As special fields go, this is an easy one; just a translation of the name.\n  // Can't use this.tooltip directly, because that field exists internally\n  if (src.tooltip !== undefined) {\n    dst.showTooltip = src.tooltip;\n  }\n  if (src.onclick != undefined) {\n    dst.onclick_callback = src.onclick;\n  }\n}\n\n\n/**\n * Set the value of setting 'showLegend'\n *\n * This depends on the value of the style fields, so it must be called\n * after the style field has been initialized.\n */\nfunction setShowLegend(showLegend, dst) {\n  if (showLegend === undefined) {\n    // If the default was auto, make a choice for this field\n    var isAutoByDefault = (DEFAULTS.showLegend === undefined);\n\n    if (isAutoByDefault) {\n      // these styles default to having legends\n      var isLegendGraphStyle = dst.style === STYLE.DOTCOLOR\n                            || dst.style === STYLE.DOTSIZE;\n\n      dst.showLegend = isLegendGraphStyle;\n    } else {\n       // Leave current value as is\n    }\n  } else {\n    dst.showLegend = showLegend;\n  }\n}\n\n\n/**\n * Retrieve the style index from given styleName\n * @param {string} styleName  Style name such as 'dot', 'grid', 'dot-line'\n * @return {Number} styleNumber Enumeration value representing the style, or -1\n *                when not found\n */\nfunction getStyleNumberByName(styleName) {\n  var number = STYLENAME[styleName];\n\n  if (number === undefined) {\n    return -1;\n  }\n\n  return number;\n}\n\n\n/**\n * Check if given number is a valid style number.\n *\n * @return true if valid, false otherwise\n */\nfunction checkStyleNumber(style) {\n  var valid = false;\n\n  for (var n in STYLE) {\n    if (STYLE[n] === style) {\n      valid = true;\n      break;\n    }\n  }\n\n  return valid;\n}\n\n\nfunction setStyle(style, dst) {\n  if (style === undefined) {\n    return;   // Nothing to do\n  }\n\n  var styleNumber;\n\n  if (typeof style === 'string') {\n    styleNumber = getStyleNumberByName(style);\n\n    if (styleNumber === -1 ) {\n      throw new Error('Style \\'' + style + '\\' is invalid');\n    }\n  } else {\n    // Do a pedantic check on style number value\n    if (!checkStyleNumber(style)) {\n      throw new Error('Style \\'' + style + '\\' is invalid');\n    }\n\n    styleNumber = style;\n  }\n\n  dst.style = styleNumber;\n}\n\n\n/**\n * Set the background styling for the graph\n * @param {string | {fill: string, stroke: string, strokeWidth: string}} backgroundColor\n */\nfunction setBackgroundColor(backgroundColor, dst) {\n  var fill = 'white';\n  var stroke = 'gray';\n  var strokeWidth = 1;\n\n  if (typeof(backgroundColor) === 'string') {\n    fill = backgroundColor;\n    stroke = 'none';\n    strokeWidth = 0;\n  }\n  else if (typeof(backgroundColor) === 'object') {\n    if (backgroundColor.fill !== undefined)    fill = backgroundColor.fill;\n    if (backgroundColor.stroke !== undefined)    stroke = backgroundColor.stroke;\n    if (backgroundColor.strokeWidth !== undefined) strokeWidth = backgroundColor.strokeWidth;\n  }\n  else {\n    throw new Error('Unsupported type of backgroundColor');\n  }\n\n  dst.frame.style.backgroundColor = fill;\n  dst.frame.style.borderColor = stroke;\n  dst.frame.style.borderWidth = strokeWidth + 'px';\n  dst.frame.style.borderStyle = 'solid';\n}\n\n\nfunction setDataColor(dataColor, dst) {\n  if (dataColor === undefined) {\n    return;    // Nothing to do\n  }\n\n  if (dst.dataColor === undefined) {\n    dst.dataColor = {};\n  }\n\n  if (typeof dataColor === 'string') {\n    dst.dataColor.fill   = dataColor;\n    dst.dataColor.stroke = dataColor;\n  }\n  else {\n    if (dataColor.fill) {\n      dst.dataColor.fill = dataColor.fill;\n    }\n    if (dataColor.stroke) {\n      dst.dataColor.stroke = dataColor.stroke;\n    }\n    if (dataColor.strokeWidth !== undefined) {\n      dst.dataColor.strokeWidth = dataColor.strokeWidth;\n    }\n  }\n}\n\n\nfunction setCameraPosition(cameraPosition, dst) {\n  var camPos = cameraPosition;\n  if (camPos === undefined) {\n    return;\n  }\n\n  if (dst.camera === undefined) {\n    dst.camera = new Camera();\n  }\n\n  dst.camera.setArmRotation(camPos.horizontal, camPos.vertical);\n  dst.camera.setArmLength(camPos.distance);\n}\n\n\nmodule.exports.STYLE             = STYLE;\nmodule.exports.setDefaults       = setDefaults;\nmodule.exports.setOptions        = setOptions;\nmodule.exports.setCameraPosition = setCameraPosition;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/graph3d/Settings.js","// Only load hammer.js when in a browser environment\n// (loading hammer.js in a node.js environment gives errors)\nif (typeof window !== 'undefined') {\n  var propagating = require('propagating-hammerjs');\n  var Hammer = window['Hammer'] || require('hammerjs');\n  module.exports = propagating(Hammer, {\n    preventDefault: 'mouse'\n  });\n}\nelse {\n  module.exports = function () {\n    throw Error('hammer.js is only available in a browser, not in node.js.');\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./lib/module/hammer.js","'use strict';\n\n(function (factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define([], factory);\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like environments that support module.exports,\n    // like Node.\n    module.exports = factory();\n  } else {\n    // Browser globals (root is window)\n    window.propagating = factory();\n  }\n}(function () {\n  var _firstTarget = null; // singleton, will contain the target element where the touch event started\n\n  /**\n   * Extend an Hammer.js instance with event propagation.\n   *\n   * Features:\n   * - Events emitted by hammer will propagate in order from child to parent\n   *   elements.\n   * - Events are extended with a function `event.stopPropagation()` to stop\n   *   propagation to parent elements.\n   * - An option `preventDefault` to stop all default browser behavior.\n   *\n   * Usage:\n   *   var hammer = propagatingHammer(new Hammer(element));\n   *   var hammer = propagatingHammer(new Hammer(element), {preventDefault: true});\n   *\n   * @param {Hammer.Manager} hammer   An hammer instance.\n   * @param {Object} [options]        Available options:\n   *                                  - `preventDefault: true | false | 'mouse' | 'touch' | 'pen'`.\n   *                                    Enforce preventing the default browser behavior.\n   *                                    Cannot be set to `false`.\n   * @return {Hammer.Manager} Returns the same hammer instance with extended\n   *                          functionality\n   */\n  return function propagating(hammer, options) {\n    var _options = options || {\n      preventDefault: false\n    };\n\n    if (hammer.Manager) {\n      // This looks like the Hammer constructor.\n      // Overload the constructors with our own.\n      var Hammer = hammer;\n\n      var PropagatingHammer = function(element, options) {\n        var o = Object.create(_options);\n        if (options) Hammer.assign(o, options);\n        return propagating(new Hammer(element, o), o);\n      };\n      Hammer.assign(PropagatingHammer, Hammer);\n\n      PropagatingHammer.Manager = function (element, options) {\n        var o = Object.create(_options);\n        if (options) Hammer.assign(o, options);\n        return propagating(new Hammer.Manager(element, o), o);\n      };\n\n      return PropagatingHammer;\n    }\n\n    // create a wrapper object which will override the functions\n    // `on`, `off`, `destroy`, and `emit` of the hammer instance\n    var wrapper = Object.create(hammer);\n\n    // attach to DOM element\n    var element = hammer.element;\n\n    if(!element.hammer) element.hammer = [];\n    element.hammer.push(wrapper);\n\n    // register an event to catch the start of a gesture and store the\n    // target in a singleton\n    hammer.on('hammer.input', function (event) {\n      if (_options.preventDefault === true || (_options.preventDefault === event.pointerType)) {\n        event.preventDefault();\n      }\n      if (event.isFirst) {\n        _firstTarget = event.target;\n      }\n    });\n\n    /** @type {Object.<String, Array.<function>>} */\n    wrapper._handlers = {};\n\n    /**\n     * Register a handler for one or multiple events\n     * @param {String} events    A space separated string with events\n     * @param {function} handler A callback function, called as handler(event)\n     * @returns {Hammer.Manager} Returns the hammer instance\n     */\n    wrapper.on = function (events, handler) {\n      // register the handler\n      split(events).forEach(function (event) {\n        var _handlers = wrapper._handlers[event];\n        if (!_handlers) {\n          wrapper._handlers[event] = _handlers = [];\n\n          // register the static, propagated handler\n          hammer.on(event, propagatedHandler);\n        }\n        _handlers.push(handler);\n      });\n\n      return wrapper;\n    };\n\n    /**\n     * Unregister a handler for one or multiple events\n     * @param {String} events      A space separated string with events\n     * @param {function} [handler] Optional. The registered handler. If not\n     *                             provided, all handlers for given events\n     *                             are removed.\n     * @returns {Hammer.Manager}   Returns the hammer instance\n     */\n    wrapper.off = function (events, handler) {\n      // unregister the handler\n      split(events).forEach(function (event) {\n        var _handlers = wrapper._handlers[event];\n        if (_handlers) {\n          _handlers = handler ? _handlers.filter(function (h) {\n            return h !== handler;\n          }) : [];\n\n          if (_handlers.length > 0) {\n            wrapper._handlers[event] = _handlers;\n          }\n          else {\n            // remove static, propagated handler\n            hammer.off(event, propagatedHandler);\n            delete wrapper._handlers[event];\n          }\n        }\n      });\n\n      return wrapper;\n    };\n\n    /**\n     * Emit to the event listeners\n     * @param {string} eventType\n     * @param {Event} event\n     */\n    wrapper.emit = function(eventType, event) {\n      _firstTarget = event.target;\n      hammer.emit(eventType, event);\n    };\n\n    wrapper.destroy = function () {\n      // Detach from DOM element\n      var hammers = hammer.element.hammer;\n      var idx = hammers.indexOf(wrapper);\n      if(idx !== -1) hammers.splice(idx,1);\n      if(!hammers.length) delete hammer.element.hammer;\n\n      // clear all handlers\n      wrapper._handlers = {};\n\n      // call original hammer destroy\n      hammer.destroy();\n    };\n\n    // split a string with space separated words\n    function split(events) {\n      return events.match(/[^ ]+/g);\n    }\n\n    /**\n     * A static event handler, applying event propagation.\n     * @param {Object} event\n     */\n    function propagatedHandler(event) {\n      // let only a single hammer instance handle this event\n      if (event.type !== 'hammer.input') {\n        // it is possible that the same srcEvent is used with multiple hammer events,\n        // we keep track on which events are handled in an object _handled\n        if (!event.srcEvent._handled) {\n          event.srcEvent._handled = {};\n        }\n\n        if (event.srcEvent._handled[event.type]) {\n          return;\n        }\n        else {\n          event.srcEvent._handled[event.type] = true;\n        }\n      }\n\n      // attach a stopPropagation function to the event\n      var stopped = false;\n      event.stopPropagation = function () {\n        stopped = true;\n      };\n\n      //wrap the srcEvent's stopPropagation to also stop hammer propagation:\n      var srcStop = event.srcEvent.stopPropagation.bind(event.srcEvent);\n      if(typeof srcStop == \"function\") {\n        event.srcEvent.stopPropagation = function(){\n          srcStop();\n          event.stopPropagation();\n        }\n      }\n\n      // attach firstTarget property to the event\n      event.firstTarget = _firstTarget;\n\n      // propagate over all elements (until stopped)\n      var elem = _firstTarget;\n      while (elem && !stopped) {\n        var elemHammer = elem.hammer;\n        if(elemHammer){\n          var _handlers;\n          for(var k = 0; k < elemHammer.length; k++){\n            _handlers = elemHammer[k]._handlers[event.type];\n            if(_handlers) for (var i = 0; i < _handlers.length && !stopped; i++) {\n              _handlers[i](event);\n            }\n          }\n        }\n        elem = elem.parentNode;\n      }\n    }\n\n    return wrapper;\n  };\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/propagating-hammerjs/propagating.js\n// module id = 109\n// module chunks = 0","/*! Hammer.JS - v2.0.7 - 2016-04-22\n * http://hammerjs.github.io/\n *\n * Copyright (c) 2016 Jorik Tangelder;\n * Licensed under the MIT license */\n(function(window, document, exportName, undefined) {\n  'use strict';\n\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\nvar TEST_ELEMENT = document.createElement('div');\n\nvar TYPE_FUNCTION = 'function';\n\nvar round = Math.round;\nvar abs = Math.abs;\nvar now = Date.now;\n\n/**\n * set a timeout with a given scope\n * @param {Function} fn\n * @param {Number} timeout\n * @param {Object} context\n * @returns {number}\n */\nfunction setTimeoutContext(fn, timeout, context) {\n    return setTimeout(bindFn(fn, context), timeout);\n}\n\n/**\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\nfunction invokeArrayArg(arg, fn, context) {\n    if (Array.isArray(arg)) {\n        each(arg, context[fn], context);\n        return true;\n    }\n    return false;\n}\n\n/**\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\nfunction each(obj, iterator, context) {\n    var i;\n\n    if (!obj) {\n        return;\n    }\n\n    if (obj.forEach) {\n        obj.forEach(iterator, context);\n    } else if (obj.length !== undefined) {\n        i = 0;\n        while (i < obj.length) {\n            iterator.call(context, obj[i], i, obj);\n            i++;\n        }\n    } else {\n        for (i in obj) {\n            obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n        }\n    }\n}\n\n/**\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\nfunction deprecate(method, name, message) {\n    var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\\n' + message + ' AT \\n';\n    return function() {\n        var e = new Error('get-stack-trace');\n        var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '')\n            .replace(/^\\s+at\\s+/gm, '')\n            .replace(/^Object.<anonymous>\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n\n        var log = window.console && (window.console.warn || window.console.log);\n        if (log) {\n            log.call(window.console, deprecationMessage, stack);\n        }\n        return method.apply(this, arguments);\n    };\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\nvar assign;\nif (typeof Object.assign !== 'function') {\n    assign = function assign(target) {\n        if (target === undefined || target === null) {\n            throw new TypeError('Cannot convert undefined or null to object');\n        }\n\n        var output = Object(target);\n        for (var index = 1; index < arguments.length; index++) {\n            var source = arguments[index];\n            if (source !== undefined && source !== null) {\n                for (var nextKey in source) {\n                    if (source.hasOwnProperty(nextKey)) {\n                        output[nextKey] = source[nextKey];\n                    }\n                }\n            }\n        }\n        return output;\n    };\n} else {\n    assign = Object.assign;\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\nvar extend = deprecate(function extend(dest, src, merge) {\n    var keys = Object.keys(src);\n    var i = 0;\n    while (i < keys.length) {\n        if (!merge || (merge && dest[keys[i]] === undefined)) {\n            dest[keys[i]] = src[keys[i]];\n        }\n        i++;\n    }\n    return dest;\n}, 'extend', 'Use `assign`.');\n\n/**\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\nvar merge = deprecate(function merge(dest, src) {\n    return extend(dest, src, true);\n}, 'merge', 'Use `assign`.');\n\n/**\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\nfunction inherit(child, base, properties) {\n    var baseP = base.prototype,\n        childP;\n\n    childP = child.prototype = Object.create(baseP);\n    childP.constructor = child;\n    childP._super = baseP;\n\n    if (properties) {\n        assign(childP, properties);\n    }\n}\n\n/**\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\nfunction bindFn(fn, context) {\n    return function boundFn() {\n        return fn.apply(context, arguments);\n    };\n}\n\n/**\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\nfunction boolOrFn(val, args) {\n    if (typeof val == TYPE_FUNCTION) {\n        return val.apply(args ? args[0] || undefined : undefined, args);\n    }\n    return val;\n}\n\n/**\n * use the val2 when val1 is undefined\n * @param {*} val1\n * @param {*} val2\n * @returns {*}\n */\nfunction ifUndefined(val1, val2) {\n    return (val1 === undefined) ? val2 : val1;\n}\n\n/**\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction addEventListeners(target, types, handler) {\n    each(splitStr(types), function(type) {\n        target.addEventListener(type, handler, false);\n    });\n}\n\n/**\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction removeEventListeners(target, types, handler) {\n    each(splitStr(types), function(type) {\n        target.removeEventListener(type, handler, false);\n    });\n}\n\n/**\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\nfunction hasParent(node, parent) {\n    while (node) {\n        if (node == parent) {\n            return true;\n        }\n        node = node.parentNode;\n    }\n    return false;\n}\n\n/**\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\nfunction inStr(str, find) {\n    return str.indexOf(find) > -1;\n}\n\n/**\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\nfunction splitStr(str) {\n    return str.trim().split(/\\s+/g);\n}\n\n/**\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\nfunction inArray(src, find, findByKey) {\n    if (src.indexOf && !findByKey) {\n        return src.indexOf(find);\n    } else {\n        var i = 0;\n        while (i < src.length) {\n            if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) {\n                return i;\n            }\n            i++;\n        }\n        return -1;\n    }\n}\n\n/**\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\nfunction toArray(obj) {\n    return Array.prototype.slice.call(obj, 0);\n}\n\n/**\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\nfunction uniqueArray(src, key, sort) {\n    var results = [];\n    var values = [];\n    var i = 0;\n\n    while (i < src.length) {\n        var val = key ? src[i][key] : src[i];\n        if (inArray(values, val) < 0) {\n            results.push(src[i]);\n        }\n        values[i] = val;\n        i++;\n    }\n\n    if (sort) {\n        if (!key) {\n            results = results.sort();\n        } else {\n            results = results.sort(function sortUniqueArray(a, b) {\n                return a[key] > b[key];\n            });\n        }\n    }\n\n    return results;\n}\n\n/**\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\nfunction prefixed(obj, property) {\n    var prefix, prop;\n    var camelProp = property[0].toUpperCase() + property.slice(1);\n\n    var i = 0;\n    while (i < VENDOR_PREFIXES.length) {\n        prefix = VENDOR_PREFIXES[i];\n        prop = (prefix) ? prefix + camelProp : property;\n\n        if (prop in obj) {\n            return prop;\n        }\n        i++;\n    }\n    return undefined;\n}\n\n/**\n * get a unique id\n * @returns {number} uniqueId\n */\nvar _uniqueId = 1;\nfunction uniqueId() {\n    return _uniqueId++;\n}\n\n/**\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\nfunction getWindowForElement(element) {\n    var doc = element.ownerDocument || element;\n    return (doc.defaultView || doc.parentWindow || window);\n}\n\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\n\nvar SUPPORT_TOUCH = ('ontouchstart' in window);\nvar SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\n\nvar INPUT_TYPE_TOUCH = 'touch';\nvar INPUT_TYPE_PEN = 'pen';\nvar INPUT_TYPE_MOUSE = 'mouse';\nvar INPUT_TYPE_KINECT = 'kinect';\n\nvar COMPUTE_INTERVAL = 25;\n\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar INPUT_CANCEL = 8;\n\nvar DIRECTION_NONE = 1;\nvar DIRECTION_LEFT = 2;\nvar DIRECTION_RIGHT = 4;\nvar DIRECTION_UP = 8;\nvar DIRECTION_DOWN = 16;\n\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\n\nvar PROPS_XY = ['x', 'y'];\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\n\n/**\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\nfunction Input(manager, callback) {\n    var self = this;\n    this.manager = manager;\n    this.callback = callback;\n    this.element = manager.element;\n    this.target = manager.options.inputTarget;\n\n    // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n    // so when disabled the input events are completely bypassed.\n    this.domHandler = function(ev) {\n        if (boolOrFn(manager.options.enable, [manager])) {\n            self.handler(ev);\n        }\n    };\n\n    this.init();\n\n}\n\nInput.prototype = {\n    /**\n     * should handle the inputEvent data and trigger the callback\n     * @virtual\n     */\n    handler: function() { },\n\n    /**\n     * bind the events\n     */\n    init: function() {\n        this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n        this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n        this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n    },\n\n    /**\n     * unbind the events\n     */\n    destroy: function() {\n        this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n        this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n        this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n    }\n};\n\n/**\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\nfunction createInputInstance(manager) {\n    var Type;\n    var inputClass = manager.options.inputClass;\n\n    if (inputClass) {\n        Type = inputClass;\n    } else if (SUPPORT_POINTER_EVENTS) {\n        Type = PointerEventInput;\n    } else if (SUPPORT_ONLY_TOUCH) {\n        Type = TouchInput;\n    } else if (!SUPPORT_TOUCH) {\n        Type = MouseInput;\n    } else {\n        Type = TouchMouseInput;\n    }\n    return new (Type)(manager, inputHandler);\n}\n\n/**\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\nfunction inputHandler(manager, eventType, input) {\n    var pointersLen = input.pointers.length;\n    var changedPointersLen = input.changedPointers.length;\n    var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0));\n    var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0));\n\n    input.isFirst = !!isFirst;\n    input.isFinal = !!isFinal;\n\n    if (isFirst) {\n        manager.session = {};\n    }\n\n    // source event is the normalized value of the domEvents\n    // like 'touchstart, mouseup, pointerdown'\n    input.eventType = eventType;\n\n    // compute scale, rotation etc\n    computeInputData(manager, input);\n\n    // emit secret event\n    manager.emit('hammer.input', input);\n\n    manager.recognize(input);\n    manager.session.prevInput = input;\n}\n\n/**\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\nfunction computeInputData(manager, input) {\n    var session = manager.session;\n    var pointers = input.pointers;\n    var pointersLength = pointers.length;\n\n    // store the first input to calculate the distance and direction\n    if (!session.firstInput) {\n        session.firstInput = simpleCloneInputData(input);\n    }\n\n    // to compute scale and rotation we need to store the multiple touches\n    if (pointersLength > 1 && !session.firstMultiple) {\n        session.firstMultiple = simpleCloneInputData(input);\n    } else if (pointersLength === 1) {\n        session.firstMultiple = false;\n    }\n\n    var firstInput = session.firstInput;\n    var firstMultiple = session.firstMultiple;\n    var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n\n    var center = input.center = getCenter(pointers);\n    input.timeStamp = now();\n    input.deltaTime = input.timeStamp - firstInput.timeStamp;\n\n    input.angle = getAngle(offsetCenter, center);\n    input.distance = getDistance(offsetCenter, center);\n\n    computeDeltaXY(session, input);\n    input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n\n    var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n    input.overallVelocityX = overallVelocity.x;\n    input.overallVelocityY = overallVelocity.y;\n    input.overallVelocity = (abs(overallVelocity.x) > abs(overallVelocity.y)) ? overallVelocity.x : overallVelocity.y;\n\n    input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n    input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n\n    input.maxPointers = !session.prevInput ? input.pointers.length : ((input.pointers.length >\n        session.prevInput.maxPointers) ? input.pointers.length : session.prevInput.maxPointers);\n\n    computeIntervalInputData(session, input);\n\n    // find the correct target\n    var target = manager.element;\n    if (hasParent(input.srcEvent.target, target)) {\n        target = input.srcEvent.target;\n    }\n    input.target = target;\n}\n\nfunction computeDeltaXY(session, input) {\n    var center = input.center;\n    var offset = session.offsetDelta || {};\n    var prevDelta = session.prevDelta || {};\n    var prevInput = session.prevInput || {};\n\n    if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n        prevDelta = session.prevDelta = {\n            x: prevInput.deltaX || 0,\n            y: prevInput.deltaY || 0\n        };\n\n        offset = session.offsetDelta = {\n            x: center.x,\n            y: center.y\n        };\n    }\n\n    input.deltaX = prevDelta.x + (center.x - offset.x);\n    input.deltaY = prevDelta.y + (center.y - offset.y);\n}\n\n/**\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\nfunction computeIntervalInputData(session, input) {\n    var last = session.lastInterval || input,\n        deltaTime = input.timeStamp - last.timeStamp,\n        velocity, velocityX, velocityY, direction;\n\n    if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n        var deltaX = input.deltaX - last.deltaX;\n        var deltaY = input.deltaY - last.deltaY;\n\n        var v = getVelocity(deltaTime, deltaX, deltaY);\n        velocityX = v.x;\n        velocityY = v.y;\n        velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;\n        direction = getDirection(deltaX, deltaY);\n\n        session.lastInterval = input;\n    } else {\n        // use latest velocity info if it doesn't overtake a minimum period\n        velocity = last.velocity;\n        velocityX = last.velocityX;\n        velocityY = last.velocityY;\n        direction = last.direction;\n    }\n\n    input.velocity = velocity;\n    input.velocityX = velocityX;\n    input.velocityY = velocityY;\n    input.direction = direction;\n}\n\n/**\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\nfunction simpleCloneInputData(input) {\n    // make a simple copy of the pointers because we will get a reference if we don't\n    // we only need clientXY for the calculations\n    var pointers = [];\n    var i = 0;\n    while (i < input.pointers.length) {\n        pointers[i] = {\n            clientX: round(input.pointers[i].clientX),\n            clientY: round(input.pointers[i].clientY)\n        };\n        i++;\n    }\n\n    return {\n        timeStamp: now(),\n        pointers: pointers,\n        center: getCenter(pointers),\n        deltaX: input.deltaX,\n        deltaY: input.deltaY\n    };\n}\n\n/**\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\nfunction getCenter(pointers) {\n    var pointersLength = pointers.length;\n\n    // no need to loop when only one touch\n    if (pointersLength === 1) {\n        return {\n            x: round(pointers[0].clientX),\n            y: round(pointers[0].clientY)\n        };\n    }\n\n    var x = 0, y = 0, i = 0;\n    while (i < pointersLength) {\n        x += pointers[i].clientX;\n        y += pointers[i].clientY;\n        i++;\n    }\n\n    return {\n        x: round(x / pointersLength),\n        y: round(y / pointersLength)\n    };\n}\n\n/**\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\nfunction getVelocity(deltaTime, x, y) {\n    return {\n        x: x / deltaTime || 0,\n        y: y / deltaTime || 0\n    };\n}\n\n/**\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\nfunction getDirection(x, y) {\n    if (x === y) {\n        return DIRECTION_NONE;\n    }\n\n    if (abs(x) >= abs(y)) {\n        return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n    }\n    return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n\n/**\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\nfunction getDistance(p1, p2, props) {\n    if (!props) {\n        props = PROPS_XY;\n    }\n    var x = p2[props[0]] - p1[props[0]],\n        y = p2[props[1]] - p1[props[1]];\n\n    return Math.sqrt((x * x) + (y * y));\n}\n\n/**\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\nfunction getAngle(p1, p2, props) {\n    if (!props) {\n        props = PROPS_XY;\n    }\n    var x = p2[props[0]] - p1[props[0]],\n        y = p2[props[1]] - p1[props[1]];\n    return Math.atan2(y, x) * 180 / Math.PI;\n}\n\n/**\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\nfunction getRotation(start, end) {\n    return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n}\n\n/**\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\nfunction getScale(start, end) {\n    return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n}\n\nvar MOUSE_INPUT_MAP = {\n    mousedown: INPUT_START,\n    mousemove: INPUT_MOVE,\n    mouseup: INPUT_END\n};\n\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n\n/**\n * Mouse events input\n * @constructor\n * @extends Input\n */\nfunction MouseInput() {\n    this.evEl = MOUSE_ELEMENT_EVENTS;\n    this.evWin = MOUSE_WINDOW_EVENTS;\n\n    this.pressed = false; // mousedown state\n\n    Input.apply(this, arguments);\n}\n\ninherit(MouseInput, Input, {\n    /**\n     * handle mouse events\n     * @param {Object} ev\n     */\n    handler: function MEhandler(ev) {\n        var eventType = MOUSE_INPUT_MAP[ev.type];\n\n        // on start we want to have the left mouse button down\n        if (eventType & INPUT_START && ev.button === 0) {\n            this.pressed = true;\n        }\n\n        if (eventType & INPUT_MOVE && ev.which !== 1) {\n            eventType = INPUT_END;\n        }\n\n        // mouse must be down\n        if (!this.pressed) {\n            return;\n        }\n\n        if (eventType & INPUT_END) {\n            this.pressed = false;\n        }\n\n        this.callback(this.manager, eventType, {\n            pointers: [ev],\n            changedPointers: [ev],\n            pointerType: INPUT_TYPE_MOUSE,\n            srcEvent: ev\n        });\n    }\n});\n\nvar POINTER_INPUT_MAP = {\n    pointerdown: INPUT_START,\n    pointermove: INPUT_MOVE,\n    pointerup: INPUT_END,\n    pointercancel: INPUT_CANCEL,\n    pointerout: INPUT_CANCEL\n};\n\n// in IE10 the pointer types is defined as an enum\nvar IE10_POINTER_TYPE_ENUM = {\n    2: INPUT_TYPE_TOUCH,\n    3: INPUT_TYPE_PEN,\n    4: INPUT_TYPE_MOUSE,\n    5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n};\n\nvar POINTER_ELEMENT_EVENTS = 'pointerdown';\nvar POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel';\n\n// IE10 has prefixed support, and case-sensitive\nif (window.MSPointerEvent && !window.PointerEvent) {\n    POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n    POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n}\n\n/**\n * Pointer events input\n * @constructor\n * @extends Input\n */\nfunction PointerEventInput() {\n    this.evEl = POINTER_ELEMENT_EVENTS;\n    this.evWin = POINTER_WINDOW_EVENTS;\n\n    Input.apply(this, arguments);\n\n    this.store = (this.manager.session.pointerEvents = []);\n}\n\ninherit(PointerEventInput, Input, {\n    /**\n     * handle mouse events\n     * @param {Object} ev\n     */\n    handler: function PEhandler(ev) {\n        var store = this.store;\n        var removePointer = false;\n\n        var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n        var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n        var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n\n        var isTouch = (pointerType == INPUT_TYPE_TOUCH);\n\n        // get index of the event in the store\n        var storeIndex = inArray(store, ev.pointerId, 'pointerId');\n\n        // start and mouse must be down\n        if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n            if (storeIndex < 0) {\n                store.push(ev);\n                storeIndex = store.length - 1;\n            }\n        } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n            removePointer = true;\n        }\n\n        // it not found, so the pointer hasn't been down (so it's probably a hover)\n        if (storeIndex < 0) {\n            return;\n        }\n\n        // update the event in the store\n        store[storeIndex] = ev;\n\n        this.callback(this.manager, eventType, {\n            pointers: store,\n            changedPointers: [ev],\n            pointerType: pointerType,\n            srcEvent: ev\n        });\n\n        if (removePointer) {\n            // remove from the store\n            store.splice(storeIndex, 1);\n        }\n    }\n});\n\nvar SINGLE_TOUCH_INPUT_MAP = {\n    touchstart: INPUT_START,\n    touchmove: INPUT_MOVE,\n    touchend: INPUT_END,\n    touchcancel: INPUT_CANCEL\n};\n\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Touch events input\n * @constructor\n * @extends Input\n */\nfunction SingleTouchInput() {\n    this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n    this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n    this.started = false;\n\n    Input.apply(this, arguments);\n}\n\ninherit(SingleTouchInput, Input, {\n    handler: function TEhandler(ev) {\n        var type = SINGLE_TOUCH_INPUT_MAP[ev.type];\n\n        // should we handle the touch events?\n        if (type === INPUT_START) {\n            this.started = true;\n        }\n\n        if (!this.started) {\n            return;\n        }\n\n        var touches = normalizeSingleTouches.call(this, ev, type);\n\n        // when done, reset the started state\n        if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n            this.started = false;\n        }\n\n        this.callback(this.manager, type, {\n            pointers: touches[0],\n            changedPointers: touches[1],\n            pointerType: INPUT_TYPE_TOUCH,\n            srcEvent: ev\n        });\n    }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction normalizeSingleTouches(ev, type) {\n    var all = toArray(ev.touches);\n    var changed = toArray(ev.changedTouches);\n\n    if (type & (INPUT_END | INPUT_CANCEL)) {\n        all = uniqueArray(all.concat(changed), 'identifier', true);\n    }\n\n    return [all, changed];\n}\n\nvar TOUCH_INPUT_MAP = {\n    touchstart: INPUT_START,\n    touchmove: INPUT_MOVE,\n    touchend: INPUT_END,\n    touchcancel: INPUT_CANCEL\n};\n\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\nfunction TouchInput() {\n    this.evTarget = TOUCH_TARGET_EVENTS;\n    this.targetIds = {};\n\n    Input.apply(this, arguments);\n}\n\ninherit(TouchInput, Input, {\n    handler: function MTEhandler(ev) {\n        var type = TOUCH_INPUT_MAP[ev.type];\n        var touches = getTouches.call(this, ev, type);\n        if (!touches) {\n            return;\n        }\n\n        this.callback(this.manager, type, {\n            pointers: touches[0],\n            changedPointers: touches[1],\n            pointerType: INPUT_TYPE_TOUCH,\n            srcEvent: ev\n        });\n    }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction getTouches(ev, type) {\n    var allTouches = toArray(ev.touches);\n    var targetIds = this.targetIds;\n\n    // when there is only one touch, the process can be simplified\n    if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n        targetIds[allTouches[0].identifier] = true;\n        return [allTouches, allTouches];\n    }\n\n    var i,\n        targetTouches,\n        changedTouches = toArray(ev.changedTouches),\n        changedTargetTouches = [],\n        target = this.target;\n\n    // get target touches from touches\n    targetTouches = allTouches.filter(function(touch) {\n        return hasParent(touch.target, target);\n    });\n\n    // collect touches\n    if (type === INPUT_START) {\n        i = 0;\n        while (i < targetTouches.length) {\n            targetIds[targetTouches[i].identifier] = true;\n            i++;\n        }\n    }\n\n    // filter changed touches to only contain touches that exist in the collected target ids\n    i = 0;\n    while (i < changedTouches.length) {\n        if (targetIds[changedTouches[i].identifier]) {\n            changedTargetTouches.push(changedTouches[i]);\n        }\n\n        // cleanup removed touches\n        if (type & (INPUT_END | INPUT_CANCEL)) {\n            delete targetIds[changedTouches[i].identifier];\n        }\n        i++;\n    }\n\n    if (!changedTargetTouches.length) {\n        return;\n    }\n\n    return [\n        // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n        uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true),\n        changedTargetTouches\n    ];\n}\n\n/**\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\nvar DEDUP_TIMEOUT = 2500;\nvar DEDUP_DISTANCE = 25;\n\nfunction TouchMouseInput() {\n    Input.apply(this, arguments);\n\n    var handler = bindFn(this.handler, this);\n    this.touch = new TouchInput(this.manager, handler);\n    this.mouse = new MouseInput(this.manager, handler);\n\n    this.primaryTouch = null;\n    this.lastTouches = [];\n}\n\ninherit(TouchMouseInput, Input, {\n    /**\n     * handle mouse and touch events\n     * @param {Hammer} manager\n     * @param {String} inputEvent\n     * @param {Object} inputData\n     */\n    handler: function TMEhandler(manager, inputEvent, inputData) {\n        var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH),\n            isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE);\n\n        if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n            return;\n        }\n\n        // when we're in a touch event, record touches to  de-dupe synthetic mouse event\n        if (isTouch) {\n            recordTouches.call(this, inputEvent, inputData);\n        } else if (isMouse && isSyntheticEvent.call(this, inputData)) {\n            return;\n        }\n\n        this.callback(manager, inputEvent, inputData);\n    },\n\n    /**\n     * remove the event listeners\n     */\n    destroy: function destroy() {\n        this.touch.destroy();\n        this.mouse.destroy();\n    }\n});\n\nfunction recordTouches(eventType, eventData) {\n    if (eventType & INPUT_START) {\n        this.primaryTouch = eventData.changedPointers[0].identifier;\n        setLastTouch.call(this, eventData);\n    } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n        setLastTouch.call(this, eventData);\n    }\n}\n\nfunction setLastTouch(eventData) {\n    var touch = eventData.changedPointers[0];\n\n    if (touch.identifier === this.primaryTouch) {\n        var lastTouch = {x: touch.clientX, y: touch.clientY};\n        this.lastTouches.push(lastTouch);\n        var lts = this.lastTouches;\n        var removeLastTouch = function() {\n            var i = lts.indexOf(lastTouch);\n            if (i > -1) {\n                lts.splice(i, 1);\n            }\n        };\n        setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n    }\n}\n\nfunction isSyntheticEvent(eventData) {\n    var x = eventData.srcEvent.clientX, y = eventData.srcEvent.clientY;\n    for (var i = 0; i < this.lastTouches.length; i++) {\n        var t = this.lastTouches[i];\n        var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);\n        if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n            return true;\n        }\n    }\n    return false;\n}\n\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\n\n// magical touchAction value\nvar TOUCH_ACTION_COMPUTE = 'compute';\nvar TOUCH_ACTION_AUTO = 'auto';\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\nvar TOUCH_ACTION_NONE = 'none';\nvar TOUCH_ACTION_PAN_X = 'pan-x';\nvar TOUCH_ACTION_PAN_Y = 'pan-y';\nvar TOUCH_ACTION_MAP = getTouchActionProps();\n\n/**\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\nfunction TouchAction(manager, value) {\n    this.manager = manager;\n    this.set(value);\n}\n\nTouchAction.prototype = {\n    /**\n     * set the touchAction value on the element or enable the polyfill\n     * @param {String} value\n     */\n    set: function(value) {\n        // find out the touch-action by the event handlers\n        if (value == TOUCH_ACTION_COMPUTE) {\n            value = this.compute();\n        }\n\n        if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n            this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n        }\n        this.actions = value.toLowerCase().trim();\n    },\n\n    /**\n     * just re-set the touchAction value\n     */\n    update: function() {\n        this.set(this.manager.options.touchAction);\n    },\n\n    /**\n     * compute the value for the touchAction property based on the recognizer's settings\n     * @returns {String} value\n     */\n    compute: function() {\n        var actions = [];\n        each(this.manager.recognizers, function(recognizer) {\n            if (boolOrFn(recognizer.options.enable, [recognizer])) {\n                actions = actions.concat(recognizer.getTouchAction());\n            }\n        });\n        return cleanTouchActions(actions.join(' '));\n    },\n\n    /**\n     * this method is called on each input cycle and provides the preventing of the browser behavior\n     * @param {Object} input\n     */\n    preventDefaults: function(input) {\n        var srcEvent = input.srcEvent;\n        var direction = input.offsetDirection;\n\n        // if the touch action did prevented once this session\n        if (this.manager.session.prevented) {\n            srcEvent.preventDefault();\n            return;\n        }\n\n        var actions = this.actions;\n        var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n        var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n        var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n        if (hasNone) {\n            //do not prevent defaults if this is a tap gesture\n\n            var isTapPointer = input.pointers.length === 1;\n            var isTapMovement = input.distance < 2;\n            var isTapTouchTime = input.deltaTime < 250;\n\n            if (isTapPointer && isTapMovement && isTapTouchTime) {\n                return;\n            }\n        }\n\n        if (hasPanX && hasPanY) {\n            // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n            return;\n        }\n\n        if (hasNone ||\n            (hasPanY && direction & DIRECTION_HORIZONTAL) ||\n            (hasPanX && direction & DIRECTION_VERTICAL)) {\n            return this.preventSrc(srcEvent);\n        }\n    },\n\n    /**\n     * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n     * @param {Object} srcEvent\n     */\n    preventSrc: function(srcEvent) {\n        this.manager.session.prevented = true;\n        srcEvent.preventDefault();\n    }\n};\n\n/**\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\nfunction cleanTouchActions(actions) {\n    // none\n    if (inStr(actions, TOUCH_ACTION_NONE)) {\n        return TOUCH_ACTION_NONE;\n    }\n\n    var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n    var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);\n\n    // if both pan-x and pan-y are set (different recognizers\n    // for different directions, e.g. horizontal pan but vertical swipe?)\n    // we need none (as otherwise with pan-x pan-y combined none of these\n    // recognizers will work, since the browser would handle all panning\n    if (hasPanX && hasPanY) {\n        return TOUCH_ACTION_NONE;\n    }\n\n    // pan-x OR pan-y\n    if (hasPanX || hasPanY) {\n        return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n    }\n\n    // manipulation\n    if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n        return TOUCH_ACTION_MANIPULATION;\n    }\n\n    return TOUCH_ACTION_AUTO;\n}\n\nfunction getTouchActionProps() {\n    if (!NATIVE_TOUCH_ACTION) {\n        return false;\n    }\n    var touchMap = {};\n    var cssSupports = window.CSS && window.CSS.supports;\n    ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function(val) {\n\n        // If css.supports is not supported but there is native touch-action assume it supports\n        // all values. This is the case for IE 10 and 11.\n        touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true;\n    });\n    return touchMap;\n}\n\n/**\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n *               Possible\n *                  |\n *            +-----+---------------+\n *            |                     |\n *      +-----+-----+               |\n *      |           |               |\n *   Failed      Cancelled          |\n *                          +-------+------+\n *                          |              |\n *                      Recognized       Began\n *                                         |\n *                                      Changed\n *                                         |\n *                                  Ended/Recognized\n */\nvar STATE_POSSIBLE = 1;\nvar STATE_BEGAN = 2;\nvar STATE_CHANGED = 4;\nvar STATE_ENDED = 8;\nvar STATE_RECOGNIZED = STATE_ENDED;\nvar STATE_CANCELLED = 16;\nvar STATE_FAILED = 32;\n\n/**\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\nfunction Recognizer(options) {\n    this.options = assign({}, this.defaults, options || {});\n\n    this.id = uniqueId();\n\n    this.manager = null;\n\n    // default is enable true\n    this.options.enable = ifUndefined(this.options.enable, true);\n\n    this.state = STATE_POSSIBLE;\n\n    this.simultaneous = {};\n    this.requireFail = [];\n}\n\nRecognizer.prototype = {\n    /**\n     * @virtual\n     * @type {Object}\n     */\n    defaults: {},\n\n    /**\n     * set options\n     * @param {Object} options\n     * @return {Recognizer}\n     */\n    set: function(options) {\n        assign(this.options, options);\n\n        // also update the touchAction, in case something changed about the directions/enabled state\n        this.manager && this.manager.touchAction.update();\n        return this;\n    },\n\n    /**\n     * recognize simultaneous with an other recognizer.\n     * @param {Recognizer} otherRecognizer\n     * @returns {Recognizer} this\n     */\n    recognizeWith: function(otherRecognizer) {\n        if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n            return this;\n        }\n\n        var simultaneous = this.simultaneous;\n        otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n        if (!simultaneous[otherRecognizer.id]) {\n            simultaneous[otherRecognizer.id] = otherRecognizer;\n            otherRecognizer.recognizeWith(this);\n        }\n        return this;\n    },\n\n    /**\n     * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n     * @param {Recognizer} otherRecognizer\n     * @returns {Recognizer} this\n     */\n    dropRecognizeWith: function(otherRecognizer) {\n        if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n            return this;\n        }\n\n        otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n        delete this.simultaneous[otherRecognizer.id];\n        return this;\n    },\n\n    /**\n     * recognizer can only run when an other is failing\n     * @param {Recognizer} otherRecognizer\n     * @returns {Recognizer} this\n     */\n    requireFailure: function(otherRecognizer) {\n        if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n            return this;\n        }\n\n        var requireFail = this.requireFail;\n        otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n        if (inArray(requireFail, otherRecognizer) === -1) {\n            requireFail.push(otherRecognizer);\n            otherRecognizer.requireFailure(this);\n        }\n        return this;\n    },\n\n    /**\n     * drop the requireFailure link. it does not remove the link on the other recognizer.\n     * @param {Recognizer} otherRecognizer\n     * @returns {Recognizer} this\n     */\n    dropRequireFailure: function(otherRecognizer) {\n        if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n            return this;\n        }\n\n        otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n        var index = inArray(this.requireFail, otherRecognizer);\n        if (index > -1) {\n            this.requireFail.splice(index, 1);\n        }\n        return this;\n    },\n\n    /**\n     * has require failures boolean\n     * @returns {boolean}\n     */\n    hasRequireFailures: function() {\n        return this.requireFail.length > 0;\n    },\n\n    /**\n     * if the recognizer can recognize simultaneous with an other recognizer\n     * @param {Recognizer} otherRecognizer\n     * @returns {Boolean}\n     */\n    canRecognizeWith: function(otherRecognizer) {\n        return !!this.simultaneous[otherRecognizer.id];\n    },\n\n    /**\n     * You should use `tryEmit` instead of `emit` directly to check\n     * that all the needed recognizers has failed before emitting.\n     * @param {Object} input\n     */\n    emit: function(input) {\n        var self = this;\n        var state = this.state;\n\n        function emit(event) {\n            self.manager.emit(event, input);\n        }\n\n        // 'panstart' and 'panmove'\n        if (state < STATE_ENDED) {\n            emit(self.options.event + stateStr(state));\n        }\n\n        emit(self.options.event); // simple 'eventName' events\n\n        if (input.additionalEvent) { // additional event(panleft, panright, pinchin, pinchout...)\n            emit(input.additionalEvent);\n        }\n\n        // panend and pancancel\n        if (state >= STATE_ENDED) {\n            emit(self.options.event + stateStr(state));\n        }\n    },\n\n    /**\n     * Check that all the require failure recognizers has failed,\n     * if true, it emits a gesture event,\n     * otherwise, setup the state to FAILED.\n     * @param {Object} input\n     */\n    tryEmit: function(input) {\n        if (this.canEmit()) {\n            return this.emit(input);\n        }\n        // it's failing anyway\n        this.state = STATE_FAILED;\n    },\n\n    /**\n     * can we emit?\n     * @returns {boolean}\n     */\n    canEmit: function() {\n        var i = 0;\n        while (i < this.requireFail.length) {\n            if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n                return false;\n            }\n            i++;\n        }\n        return true;\n    },\n\n    /**\n     * update the recognizer\n     * @param {Object} inputData\n     */\n    recognize: function(inputData) {\n        // make a new copy of the inputData\n        // so we can change the inputData without messing up the other recognizers\n        var inputDataClone = assign({}, inputData);\n\n        // is is enabled and allow recognizing?\n        if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n            this.reset();\n            this.state = STATE_FAILED;\n            return;\n        }\n\n        // reset when we've reached the end\n        if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n            this.state = STATE_POSSIBLE;\n        }\n\n        this.state = this.process(inputDataClone);\n\n        // the recognizer has recognized a gesture\n        // so trigger an event\n        if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n            this.tryEmit(inputDataClone);\n        }\n    },\n\n    /**\n     * return the state of the recognizer\n     * the actual recognizing happens in this method\n     * @virtual\n     * @param {Object} inputData\n     * @returns {Const} STATE\n     */\n    process: function(inputData) { }, // jshint ignore:line\n\n    /**\n     * return the preferred touch-action\n     * @virtual\n     * @returns {Array}\n     */\n    getTouchAction: function() { },\n\n    /**\n     * called when the gesture isn't allowed to recognize\n     * like when another is being recognized or it is disabled\n     * @virtual\n     */\n    reset: function() { }\n};\n\n/**\n * get a usable string, used as event postfix\n * @param {Const} state\n * @returns {String} state\n */\nfunction stateStr(state) {\n    if (state & STATE_CANCELLED) {\n        return 'cancel';\n    } else if (state & STATE_ENDED) {\n        return 'end';\n    } else if (state & STATE_CHANGED) {\n        return 'move';\n    } else if (state & STATE_BEGAN) {\n        return 'start';\n    }\n    return '';\n}\n\n/**\n * direction cons to string\n * @param {Const} direction\n * @returns {String}\n */\nfunction directionStr(direction) {\n    if (direction == DIRECTION_DOWN) {\n        return 'down';\n    } else if (direction == DIRECTION_UP) {\n        return 'up';\n    } else if (direction == DIRECTION_LEFT) {\n        return 'left';\n    } else if (direction == DIRECTION_RIGHT) {\n        return 'right';\n    }\n    return '';\n}\n\n/**\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\nfunction getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n    var manager = recognizer.manager;\n    if (manager) {\n        return manager.get(otherRecognizer);\n    }\n    return otherRecognizer;\n}\n\n/**\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\nfunction AttrRecognizer() {\n    Recognizer.apply(this, arguments);\n}\n\ninherit(AttrRecognizer, Recognizer, {\n    /**\n     * @namespace\n     * @memberof AttrRecognizer\n     */\n    defaults: {\n        /**\n         * @type {Number}\n         * @default 1\n         */\n        pointers: 1\n    },\n\n    /**\n     * Used to check if it the recognizer receives valid input, like input.distance > 10.\n     * @memberof AttrRecognizer\n     * @param {Object} input\n     * @returns {Boolean} recognized\n     */\n    attrTest: function(input) {\n        var optionPointers = this.options.pointers;\n        return optionPointers === 0 || input.pointers.length === optionPointers;\n    },\n\n    /**\n     * Process the input and return the state for the recognizer\n     * @memberof AttrRecognizer\n     * @param {Object} input\n     * @returns {*} State\n     */\n    process: function(input) {\n        var state = this.state;\n        var eventType = input.eventType;\n\n        var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n        var isValid = this.attrTest(input);\n\n        // on cancel input and we've recognized before, return STATE_CANCELLED\n        if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n            return state | STATE_CANCELLED;\n        } else if (isRecognized || isValid) {\n            if (eventType & INPUT_END) {\n                return state | STATE_ENDED;\n            } else if (!(state & STATE_BEGAN)) {\n                return STATE_BEGAN;\n            }\n            return state | STATE_CHANGED;\n        }\n        return STATE_FAILED;\n    }\n});\n\n/**\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PanRecognizer() {\n    AttrRecognizer.apply(this, arguments);\n\n    this.pX = null;\n    this.pY = null;\n}\n\ninherit(PanRecognizer, AttrRecognizer, {\n    /**\n     * @namespace\n     * @memberof PanRecognizer\n     */\n    defaults: {\n        event: 'pan',\n        threshold: 10,\n        pointers: 1,\n        direction: DIRECTION_ALL\n    },\n\n    getTouchAction: function() {\n        var direction = this.options.direction;\n        var actions = [];\n        if (direction & DIRECTION_HORIZONTAL) {\n            actions.push(TOUCH_ACTION_PAN_Y);\n        }\n        if (direction & DIRECTION_VERTICAL) {\n            actions.push(TOUCH_ACTION_PAN_X);\n        }\n        return actions;\n    },\n\n    directionTest: function(input) {\n        var options = this.options;\n        var hasMoved = true;\n        var distance = input.distance;\n        var direction = input.direction;\n        var x = input.deltaX;\n        var y = input.deltaY;\n\n        // lock to axis?\n        if (!(direction & options.direction)) {\n            if (options.direction & DIRECTION_HORIZONTAL) {\n                direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT;\n                hasMoved = x != this.pX;\n                distance = Math.abs(input.deltaX);\n            } else {\n                direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN;\n                hasMoved = y != this.pY;\n                distance = Math.abs(input.deltaY);\n            }\n        }\n        input.direction = direction;\n        return hasMoved && distance > options.threshold && direction & options.direction;\n    },\n\n    attrTest: function(input) {\n        return AttrRecognizer.prototype.attrTest.call(this, input) &&\n            (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input)));\n    },\n\n    emit: function(input) {\n\n        this.pX = input.deltaX;\n        this.pY = input.deltaY;\n\n        var direction = directionStr(input.direction);\n\n        if (direction) {\n            input.additionalEvent = this.options.event + direction;\n        }\n        this._super.emit.call(this, input);\n    }\n});\n\n/**\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PinchRecognizer() {\n    AttrRecognizer.apply(this, arguments);\n}\n\ninherit(PinchRecognizer, AttrRecognizer, {\n    /**\n     * @namespace\n     * @memberof PinchRecognizer\n     */\n    defaults: {\n        event: 'pinch',\n        threshold: 0,\n        pointers: 2\n    },\n\n    getTouchAction: function() {\n        return [TOUCH_ACTION_NONE];\n    },\n\n    attrTest: function(input) {\n        return this._super.attrTest.call(this, input) &&\n            (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n    },\n\n    emit: function(input) {\n        if (input.scale !== 1) {\n            var inOut = input.scale < 1 ? 'in' : 'out';\n            input.additionalEvent = this.options.event + inOut;\n        }\n        this._super.emit.call(this, input);\n    }\n});\n\n/**\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\nfunction PressRecognizer() {\n    Recognizer.apply(this, arguments);\n\n    this._timer = null;\n    this._input = null;\n}\n\ninherit(PressRecognizer, Recognizer, {\n    /**\n     * @namespace\n     * @memberof PressRecognizer\n     */\n    defaults: {\n        event: 'press',\n        pointers: 1,\n        time: 251, // minimal time of the pointer to be pressed\n        threshold: 9 // a minimal movement is ok, but keep it low\n    },\n\n    getTouchAction: function() {\n        return [TOUCH_ACTION_AUTO];\n    },\n\n    process: function(input) {\n        var options = this.options;\n        var validPointers = input.pointers.length === options.pointers;\n        var validMovement = input.distance < options.threshold;\n        var validTime = input.deltaTime > options.time;\n\n        this._input = input;\n\n        // we only allow little movement\n        // and we've reached an end event, so a tap is possible\n        if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) {\n            this.reset();\n        } else if (input.eventType & INPUT_START) {\n            this.reset();\n            this._timer = setTimeoutContext(function() {\n                this.state = STATE_RECOGNIZED;\n                this.tryEmit();\n            }, options.time, this);\n        } else if (input.eventType & INPUT_END) {\n            return STATE_RECOGNIZED;\n        }\n        return STATE_FAILED;\n    },\n\n    reset: function() {\n        clearTimeout(this._timer);\n    },\n\n    emit: function(input) {\n        if (this.state !== STATE_RECOGNIZED) {\n            return;\n        }\n\n        if (input && (input.eventType & INPUT_END)) {\n            this.manager.emit(this.options.event + 'up', input);\n        } else {\n            this._input.timeStamp = now();\n            this.manager.emit(this.options.event, this._input);\n        }\n    }\n});\n\n/**\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction RotateRecognizer() {\n    AttrRecognizer.apply(this, arguments);\n}\n\ninherit(RotateRecognizer, AttrRecognizer, {\n    /**\n     * @namespace\n     * @memberof RotateRecognizer\n     */\n    defaults: {\n        event: 'rotate',\n        threshold: 0,\n        pointers: 2\n    },\n\n    getTouchAction: function() {\n        return [TOUCH_ACTION_NONE];\n    },\n\n    attrTest: function(input) {\n        return this._super.attrTest.call(this, input) &&\n            (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n    }\n});\n\n/**\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction SwipeRecognizer() {\n    AttrRecognizer.apply(this, arguments);\n}\n\ninherit(SwipeRecognizer, AttrRecognizer, {\n    /**\n     * @namespace\n     * @memberof SwipeRecognizer\n     */\n    defaults: {\n        event: 'swipe',\n        threshold: 10,\n        velocity: 0.3,\n        direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n        pointers: 1\n    },\n\n    getTouchAction: function() {\n        return PanRecognizer.prototype.getTouchAction.call(this);\n    },\n\n    attrTest: function(input) {\n        var direction = this.options.direction;\n        var velocity;\n\n        if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n            velocity = input.overallVelocity;\n        } else if (direction & DIRECTION_HORIZONTAL) {\n            velocity = input.overallVelocityX;\n        } else if (direction & DIRECTION_VERTICAL) {\n            velocity = input.overallVelocityY;\n        }\n\n        return this._super.attrTest.call(this, input) &&\n            direction & input.offsetDirection &&\n            input.distance > this.options.threshold &&\n            input.maxPointers == this.options.pointers &&\n            abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n    },\n\n    emit: function(input) {\n        var direction = directionStr(input.offsetDirection);\n        if (direction) {\n            this.manager.emit(this.options.event + direction, input);\n        }\n\n        this.manager.emit(this.options.event, input);\n    }\n});\n\n/**\n * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\nfunction TapRecognizer() {\n    Recognizer.apply(this, arguments);\n\n    // previous time and center,\n    // used for tap counting\n    this.pTime = false;\n    this.pCenter = false;\n\n    this._timer = null;\n    this._input = null;\n    this.count = 0;\n}\n\ninherit(TapRecognizer, Recognizer, {\n    /**\n     * @namespace\n     * @memberof PinchRecognizer\n     */\n    defaults: {\n        event: 'tap',\n        pointers: 1,\n        taps: 1,\n        interval: 300, // max time between the multi-tap taps\n        time: 250, // max time of the pointer to be down (like finger on the screen)\n        threshold: 9, // a minimal movement is ok, but keep it low\n        posThreshold: 10 // a multi-tap can be a bit off the initial position\n    },\n\n    getTouchAction: function() {\n        return [TOUCH_ACTION_MANIPULATION];\n    },\n\n    process: function(input) {\n        var options = this.options;\n\n        var validPointers = input.pointers.length === options.pointers;\n        var validMovement = input.distance < options.threshold;\n        var validTouchTime = input.deltaTime < options.time;\n\n        this.reset();\n\n        if ((input.eventType & INPUT_START) && (this.count === 0)) {\n            return this.failTimeout();\n        }\n\n        // we only allow little movement\n        // and we've reached an end event, so a tap is possible\n        if (validMovement && validTouchTime && validPointers) {\n            if (input.eventType != INPUT_END) {\n                return this.failTimeout();\n            }\n\n            var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true;\n            var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n\n            this.pTime = input.timeStamp;\n            this.pCenter = input.center;\n\n            if (!validMultiTap || !validInterval) {\n                this.count = 1;\n            } else {\n                this.count += 1;\n            }\n\n            this._input = input;\n\n            // if tap count matches we have recognized it,\n            // else it has began recognizing...\n            var tapCount = this.count % options.taps;\n            if (tapCount === 0) {\n                // no failing requirements, immediately trigger the tap event\n                // or wait as long as the multitap interval to trigger\n                if (!this.hasRequireFailures()) {\n                    return STATE_RECOGNIZED;\n                } else {\n                    this._timer = setTimeoutContext(function() {\n                        this.state = STATE_RECOGNIZED;\n                        this.tryEmit();\n                    }, options.interval, this);\n                    return STATE_BEGAN;\n                }\n            }\n        }\n        return STATE_FAILED;\n    },\n\n    failTimeout: function() {\n        this._timer = setTimeoutContext(function() {\n            this.state = STATE_FAILED;\n        }, this.options.interval, this);\n        return STATE_FAILED;\n    },\n\n    reset: function() {\n        clearTimeout(this._timer);\n    },\n\n    emit: function() {\n        if (this.state == STATE_RECOGNIZED) {\n            this._input.tapCount = this.count;\n            this.manager.emit(this.options.event, this._input);\n        }\n    }\n});\n\n/**\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Hammer(element, options) {\n    options = options || {};\n    options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset);\n    return new Manager(element, options);\n}\n\n/**\n * @const {string}\n */\nHammer.VERSION = '2.0.7';\n\n/**\n * default settings\n * @namespace\n */\nHammer.defaults = {\n    /**\n     * set if DOM events are being triggered.\n     * But this is slower and unused by simple implementations, so disabled by default.\n     * @type {Boolean}\n     * @default false\n     */\n    domEvents: false,\n\n    /**\n     * The value for the touchAction property/fallback.\n     * When set to `compute` it will magically set the correct value based on the added recognizers.\n     * @type {String}\n     * @default compute\n     */\n    touchAction: TOUCH_ACTION_COMPUTE,\n\n    /**\n     * @type {Boolean}\n     * @default true\n     */\n    enable: true,\n\n    /**\n     * EXPERIMENTAL FEATURE -- can be removed/changed\n     * Change the parent input target element.\n     * If Null, then it is being set the to main element.\n     * @type {Null|EventTarget}\n     * @default null\n     */\n    inputTarget: null,\n\n    /**\n     * force an input class\n     * @type {Null|Function}\n     * @default null\n     */\n    inputClass: null,\n\n    /**\n     * Default recognizer setup when calling `Hammer()`\n     * When creating a new Manager these will be skipped.\n     * @type {Array}\n     */\n    preset: [\n        // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]\n        [RotateRecognizer, {enable: false}],\n        [PinchRecognizer, {enable: false}, ['rotate']],\n        [SwipeRecognizer, {direction: DIRECTION_HORIZONTAL}],\n        [PanRecognizer, {direction: DIRECTION_HORIZONTAL}, ['swipe']],\n        [TapRecognizer],\n        [TapRecognizer, {event: 'doubletap', taps: 2}, ['tap']],\n        [PressRecognizer]\n    ],\n\n    /**\n     * Some CSS properties can be used to improve the working of Hammer.\n     * Add them to this method and they will be set when creating a new Manager.\n     * @namespace\n     */\n    cssProps: {\n        /**\n         * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n         * @type {String}\n         * @default 'none'\n         */\n        userSelect: 'none',\n\n        /**\n         * Disable the Windows Phone grippers when pressing an element.\n         * @type {String}\n         * @default 'none'\n         */\n        touchSelect: 'none',\n\n        /**\n         * Disables the default callout shown when you touch and hold a touch target.\n         * On iOS, when you touch and hold a touch target such as a link, Safari displays\n         * a callout containing information about the link. This property allows you to disable that callout.\n         * @type {String}\n         * @default 'none'\n         */\n        touchCallout: 'none',\n\n        /**\n         * Specifies whether zooming is enabled. Used by IE10>\n         * @type {String}\n         * @default 'none'\n         */\n        contentZooming: 'none',\n\n        /**\n         * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n         * @type {String}\n         * @default 'none'\n         */\n        userDrag: 'none',\n\n        /**\n         * Overrides the highlight color shown when the user taps a link or a JavaScript\n         * clickable element in iOS. This property obeys the alpha value, if specified.\n         * @type {String}\n         * @default 'rgba(0,0,0,0)'\n         */\n        tapHighlightColor: 'rgba(0,0,0,0)'\n    }\n};\n\nvar STOP = 1;\nvar FORCED_STOP = 2;\n\n/**\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Manager(element, options) {\n    this.options = assign({}, Hammer.defaults, options || {});\n\n    this.options.inputTarget = this.options.inputTarget || element;\n\n    this.handlers = {};\n    this.session = {};\n    this.recognizers = [];\n    this.oldCssProps = {};\n\n    this.element = element;\n    this.input = createInputInstance(this);\n    this.touchAction = new TouchAction(this, this.options.touchAction);\n\n    toggleCssProps(this, true);\n\n    each(this.options.recognizers, function(item) {\n        var recognizer = this.add(new (item[0])(item[1]));\n        item[2] && recognizer.recognizeWith(item[2]);\n        item[3] && recognizer.requireFailure(item[3]);\n    }, this);\n}\n\nManager.prototype = {\n    /**\n     * set options\n     * @param {Object} options\n     * @returns {Manager}\n     */\n    set: function(options) {\n        assign(this.options, options);\n\n        // Options that need a little more setup\n        if (options.touchAction) {\n            this.touchAction.update();\n        }\n        if (options.inputTarget) {\n            // Clean up existing event listeners and reinitialize\n            this.input.destroy();\n            this.input.target = options.inputTarget;\n            this.input.init();\n        }\n        return this;\n    },\n\n    /**\n     * stop recognizing for this session.\n     * This session will be discarded, when a new [input]start event is fired.\n     * When forced, the recognizer cycle is stopped immediately.\n     * @param {Boolean} [force]\n     */\n    stop: function(force) {\n        this.session.stopped = force ? FORCED_STOP : STOP;\n    },\n\n    /**\n     * run the recognizers!\n     * called by the inputHandler function on every movement of the pointers (touches)\n     * it walks through all the recognizers and tries to detect the gesture that is being made\n     * @param {Object} inputData\n     */\n    recognize: function(inputData) {\n        var session = this.session;\n        if (session.stopped) {\n            return;\n        }\n\n        // run the touch-action polyfill\n        this.touchAction.preventDefaults(inputData);\n\n        var recognizer;\n        var recognizers = this.recognizers;\n\n        // this holds the recognizer that is being recognized.\n        // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n        // if no recognizer is detecting a thing, it is set to `null`\n        var curRecognizer = session.curRecognizer;\n\n        // reset when the last recognizer is recognized\n        // or when we're in a new session\n        if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) {\n            curRecognizer = session.curRecognizer = null;\n        }\n\n        var i = 0;\n        while (i < recognizers.length) {\n            recognizer = recognizers[i];\n\n            // find out if we are allowed try to recognize the input for this one.\n            // 1.   allow if the session is NOT forced stopped (see the .stop() method)\n            // 2.   allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n            //      that is being recognized.\n            // 3.   allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n            //      this can be setup with the `recognizeWith()` method on the recognizer.\n            if (session.stopped !== FORCED_STOP && ( // 1\n                    !curRecognizer || recognizer == curRecognizer || // 2\n                    recognizer.canRecognizeWith(curRecognizer))) { // 3\n                recognizer.recognize(inputData);\n            } else {\n                recognizer.reset();\n            }\n\n            // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n            // current active recognizer. but only if we don't already have an active recognizer\n            if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n                curRecognizer = session.curRecognizer = recognizer;\n            }\n            i++;\n        }\n    },\n\n    /**\n     * get a recognizer by its event name.\n     * @param {Recognizer|String} recognizer\n     * @returns {Recognizer|Null}\n     */\n    get: function(recognizer) {\n        if (recognizer instanceof Recognizer) {\n            return recognizer;\n        }\n\n        var recognizers = this.recognizers;\n        for (var i = 0; i < recognizers.length; i++) {\n            if (recognizers[i].options.event == recognizer) {\n                return recognizers[i];\n            }\n        }\n        return null;\n    },\n\n    /**\n     * add a recognizer to the manager\n     * existing recognizers with the same event name will be removed\n     * @param {Recognizer} recognizer\n     * @returns {Recognizer|Manager}\n     */\n    add: function(recognizer) {\n        if (invokeArrayArg(recognizer, 'add', this)) {\n            return this;\n        }\n\n        // remove existing\n        var existing = this.get(recognizer.options.event);\n        if (existing) {\n            this.remove(existing);\n        }\n\n        this.recognizers.push(recognizer);\n        recognizer.manager = this;\n\n        this.touchAction.update();\n        return recognizer;\n    },\n\n    /**\n     * remove a recognizer by name or instance\n     * @param {Recognizer|String} recognizer\n     * @returns {Manager}\n     */\n    remove: function(recognizer) {\n        if (invokeArrayArg(recognizer, 'remove', this)) {\n            return this;\n        }\n\n        recognizer = this.get(recognizer);\n\n        // let's make sure this recognizer exists\n        if (recognizer) {\n            var recognizers = this.recognizers;\n            var index = inArray(recognizers, recognizer);\n\n            if (index !== -1) {\n                recognizers.splice(index, 1);\n                this.touchAction.update();\n            }\n        }\n\n        return this;\n    },\n\n    /**\n     * bind event\n     * @param {String} events\n     * @param {Function} handler\n     * @returns {EventEmitter} this\n     */\n    on: function(events, handler) {\n        if (events === undefined) {\n            return;\n        }\n        if (handler === undefined) {\n            return;\n        }\n\n        var handlers = this.handlers;\n        each(splitStr(events), function(event) {\n            handlers[event] = handlers[event] || [];\n            handlers[event].push(handler);\n        });\n        return this;\n    },\n\n    /**\n     * unbind event, leave emit blank to remove all handlers\n     * @param {String} events\n     * @param {Function} [handler]\n     * @returns {EventEmitter} this\n     */\n    off: function(events, handler) {\n        if (events === undefined) {\n            return;\n        }\n\n        var handlers = this.handlers;\n        each(splitStr(events), function(event) {\n            if (!handler) {\n                delete handlers[event];\n            } else {\n                handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n            }\n        });\n        return this;\n    },\n\n    /**\n     * emit event to the listeners\n     * @param {String} event\n     * @param {Object} data\n     */\n    emit: function(event, data) {\n        // we also want to trigger dom events\n        if (this.options.domEvents) {\n            triggerDomEvent(event, data);\n        }\n\n        // no handlers, so skip it all\n        var handlers = this.handlers[event] && this.handlers[event].slice();\n        if (!handlers || !handlers.length) {\n            return;\n        }\n\n        data.type = event;\n        data.preventDefault = function() {\n            data.srcEvent.preventDefault();\n        };\n\n        var i = 0;\n        while (i < handlers.length) {\n            handlers[i](data);\n            i++;\n        }\n    },\n\n    /**\n     * destroy the manager and unbinds all events\n     * it doesn't unbind dom events, that is the user own responsibility\n     */\n    destroy: function() {\n        this.element && toggleCssProps(this, false);\n\n        this.handlers = {};\n        this.session = {};\n        this.input.destroy();\n        this.element = null;\n    }\n};\n\n/**\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\nfunction toggleCssProps(manager, add) {\n    var element = manager.element;\n    if (!element.style) {\n        return;\n    }\n    var prop;\n    each(manager.options.cssProps, function(value, name) {\n        prop = prefixed(element.style, name);\n        if (add) {\n            manager.oldCssProps[prop] = element.style[prop];\n            element.style[prop] = value;\n        } else {\n            element.style[prop] = manager.oldCssProps[prop] || '';\n        }\n    });\n    if (!add) {\n        manager.oldCssProps = {};\n    }\n}\n\n/**\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\nfunction triggerDomEvent(event, data) {\n    var gestureEvent = document.createEvent('Event');\n    gestureEvent.initEvent(event, true, true);\n    gestureEvent.gesture = data;\n    data.target.dispatchEvent(gestureEvent);\n}\n\nassign(Hammer, {\n    INPUT_START: INPUT_START,\n    INPUT_MOVE: INPUT_MOVE,\n    INPUT_END: INPUT_END,\n    INPUT_CANCEL: INPUT_CANCEL,\n\n    STATE_POSSIBLE: STATE_POSSIBLE,\n    STATE_BEGAN: STATE_BEGAN,\n    STATE_CHANGED: STATE_CHANGED,\n    STATE_ENDED: STATE_ENDED,\n    STATE_RECOGNIZED: STATE_RECOGNIZED,\n    STATE_CANCELLED: STATE_CANCELLED,\n    STATE_FAILED: STATE_FAILED,\n\n    DIRECTION_NONE: DIRECTION_NONE,\n    DIRECTION_LEFT: DIRECTION_LEFT,\n    DIRECTION_RIGHT: DIRECTION_RIGHT,\n    DIRECTION_UP: DIRECTION_UP,\n    DIRECTION_DOWN: DIRECTION_DOWN,\n    DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,\n    DIRECTION_VERTICAL: DIRECTION_VERTICAL,\n    DIRECTION_ALL: DIRECTION_ALL,\n\n    Manager: Manager,\n    Input: Input,\n    TouchAction: TouchAction,\n\n    TouchInput: TouchInput,\n    MouseInput: MouseInput,\n    PointerEventInput: PointerEventInput,\n    TouchMouseInput: TouchMouseInput,\n    SingleTouchInput: SingleTouchInput,\n\n    Recognizer: Recognizer,\n    AttrRecognizer: AttrRecognizer,\n    Tap: TapRecognizer,\n    Pan: PanRecognizer,\n    Swipe: SwipeRecognizer,\n    Pinch: PinchRecognizer,\n    Rotate: RotateRecognizer,\n    Press: PressRecognizer,\n\n    on: addEventListeners,\n    off: removeEventListeners,\n    each: each,\n    merge: merge,\n    extend: extend,\n    assign: assign,\n    inherit: inherit,\n    bindFn: bindFn,\n    prefixed: prefixed\n});\n\n// this prevents errors when Hammer is loaded in the presence of an AMD\n//  style loader but by script tag, not by the loader.\nvar freeGlobal = (typeof window !== 'undefined' ? window : (typeof self !== 'undefined' ? self : {})); // jshint ignore:line\nfreeGlobal.Hammer = Hammer;\n\nif (typeof define === 'function' && define.amd) {\n    define(function() {\n        return Hammer;\n    });\n} else if (typeof module != 'undefined' && module.exports) {\n    module.exports = Hammer;\n} else {\n    window[exportName] = Hammer;\n}\n\n})(window, document, 'Hammer');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/hammerjs/hammer.js\n// module id = 110\n// module chunks = 0","\"use strict\";\r\n/**\r\n * Created by Alex on 11/6/2014.\r\n */\r\n\r\n// https://github.com/umdjs/umd/blob/master/returnExports.js#L40-L60\r\n// if the module has no dependencies, the above pattern can be simplified to\r\n(function (root, factory) {\r\n  if (typeof define === 'function' && define.amd) {\r\n    // AMD. Register as an anonymous module.\r\n    define([], factory);\r\n  } else if (typeof exports === 'object') {\r\n    // Node. Does not work with strict CommonJS, but\r\n    // only CommonJS-like environments that support module.exports,\r\n    // like Node.\r\n    module.exports = factory();\r\n  } else {\r\n    // Browser globals (root is window)\r\n    root.keycharm = factory();\r\n  }\r\n}(this, function () {\r\n\r\n  function keycharm(options) {\r\n    var preventDefault = options && options.preventDefault || false;\r\n\r\n    var container = options && options.container || window;\r\n\r\n    var _exportFunctions = {};\r\n    var _bound = {keydown:{}, keyup:{}};\r\n    var _keys = {};\r\n    var i;\r\n\r\n    // a - z\r\n    for (i = 97; i <= 122; i++) {_keys[String.fromCharCode(i)] = {code:65 + (i - 97), shift: false};}\r\n    // A - Z\r\n    for (i = 65; i <= 90; i++) {_keys[String.fromCharCode(i)] = {code:i, shift: true};}\r\n    // 0 - 9\r\n    for (i = 0;  i <= 9;   i++) {_keys['' + i] = {code:48 + i, shift: false};}\r\n    // F1 - F12\r\n    for (i = 1;  i <= 12;   i++) {_keys['F' + i] = {code:111 + i, shift: false};}\r\n    // num0 - num9\r\n    for (i = 0;  i <= 9;   i++) {_keys['num' + i] = {code:96 + i, shift: false};}\r\n\r\n    // numpad misc\r\n    _keys['num*'] = {code:106, shift: false};\r\n    _keys['num+'] = {code:107, shift: false};\r\n    _keys['num-'] = {code:109, shift: false};\r\n    _keys['num/'] = {code:111, shift: false};\r\n    _keys['num.'] = {code:110, shift: false};\r\n    // arrows\r\n    _keys['left']  = {code:37, shift: false};\r\n    _keys['up']    = {code:38, shift: false};\r\n    _keys['right'] = {code:39, shift: false};\r\n    _keys['down']  = {code:40, shift: false};\r\n    // extra keys\r\n    _keys['space'] = {code:32, shift: false};\r\n    _keys['enter'] = {code:13, shift: false};\r\n    _keys['shift'] = {code:16, shift: undefined};\r\n    _keys['esc']   = {code:27, shift: false};\r\n    _keys['backspace'] = {code:8, shift: false};\r\n    _keys['tab']       = {code:9, shift: false};\r\n    _keys['ctrl']      = {code:17, shift: false};\r\n    _keys['alt']       = {code:18, shift: false};\r\n    _keys['delete']    = {code:46, shift: false};\r\n    _keys['pageup']    = {code:33, shift: false};\r\n    _keys['pagedown']  = {code:34, shift: false};\r\n    // symbols\r\n    _keys['=']     = {code:187, shift: false};\r\n    _keys['-']     = {code:189, shift: false};\r\n    _keys[']']     = {code:221, shift: false};\r\n    _keys['[']     = {code:219, shift: false};\r\n\r\n\r\n\r\n    var down = function(event) {handleEvent(event,'keydown');};\r\n    var up = function(event) {handleEvent(event,'keyup');};\r\n\r\n    // handle the actualy bound key with the event\r\n    var handleEvent = function(event,type) {\r\n      if (_bound[type][event.keyCode] !== undefined) {\r\n        var bound = _bound[type][event.keyCode];\r\n        for (var i = 0; i < bound.length; i++) {\r\n          if (bound[i].shift === undefined) {\r\n            bound[i].fn(event);\r\n          }\r\n          else if (bound[i].shift == true && event.shiftKey == true) {\r\n            bound[i].fn(event);\r\n          }\r\n          else if (bound[i].shift == false && event.shiftKey == false) {\r\n            bound[i].fn(event);\r\n          }\r\n        }\r\n\r\n        if (preventDefault == true) {\r\n          event.preventDefault();\r\n        }\r\n      }\r\n    };\r\n\r\n    // bind a key to a callback\r\n    _exportFunctions.bind = function(key, callback, type) {\r\n      if (type === undefined) {\r\n        type = 'keydown';\r\n      }\r\n      if (_keys[key] === undefined) {\r\n        throw new Error(\"unsupported key: \" + key);\r\n      }\r\n      if (_bound[type][_keys[key].code] === undefined) {\r\n        _bound[type][_keys[key].code] = [];\r\n      }\r\n      _bound[type][_keys[key].code].push({fn:callback, shift:_keys[key].shift});\r\n    };\r\n\r\n\r\n    // bind all keys to a call back (demo purposes)\r\n    _exportFunctions.bindAll = function(callback, type) {\r\n      if (type === undefined) {\r\n        type = 'keydown';\r\n      }\r\n      for (var key in _keys) {\r\n        if (_keys.hasOwnProperty(key)) {\r\n          _exportFunctions.bind(key,callback,type);\r\n        }\r\n      }\r\n    };\r\n\r\n    // get the key label from an event\r\n    _exportFunctions.getKey = function(event) {\r\n      for (var key in _keys) {\r\n        if (_keys.hasOwnProperty(key)) {\r\n          if (event.shiftKey == true && _keys[key].shift == true && event.keyCode == _keys[key].code) {\r\n            return key;\r\n          }\r\n          else if (event.shiftKey == false && _keys[key].shift == false && event.keyCode == _keys[key].code) {\r\n            return key;\r\n          }\r\n          else if (event.keyCode == _keys[key].code && key == 'shift') {\r\n            return key;\r\n          }\r\n        }\r\n      }\r\n      return \"unknown key, currently not supported\";\r\n    };\r\n\r\n    // unbind either a specific callback from a key or all of them (by leaving callback undefined)\r\n    _exportFunctions.unbind = function(key, callback, type) {\r\n      if (type === undefined) {\r\n        type = 'keydown';\r\n      }\r\n      if (_keys[key] === undefined) {\r\n        throw new Error(\"unsupported key: \" + key);\r\n      }\r\n      if (callback !== undefined) {\r\n        var newBindings = [];\r\n        var bound = _bound[type][_keys[key].code];\r\n        if (bound !== undefined) {\r\n          for (var i = 0; i < bound.length; i++) {\r\n            if (!(bound[i].fn == callback && bound[i].shift == _keys[key].shift)) {\r\n              newBindings.push(_bound[type][_keys[key].code][i]);\r\n            }\r\n          }\r\n        }\r\n        _bound[type][_keys[key].code] = newBindings;\r\n      }\r\n      else {\r\n        _bound[type][_keys[key].code] = [];\r\n      }\r\n    };\r\n\r\n    // reset all bound variables.\r\n    _exportFunctions.reset = function() {\r\n      _bound = {keydown:{}, keyup:{}};\r\n    };\r\n\r\n    // unbind all listeners and reset all variables.\r\n    _exportFunctions.destroy = function() {\r\n      _bound = {keydown:{}, keyup:{}};\r\n      container.removeEventListener('keydown', down, true);\r\n      container.removeEventListener('keyup', up, true);\r\n    };\r\n\r\n    // create listeners.\r\n    container.addEventListener('keydown',down,true);\r\n    container.addEventListener('keyup',up,true);\r\n\r\n    // return the public functions.\r\n    return _exportFunctions;\r\n  }\r\n\r\n  return keycharm;\r\n}));\r\n\r\n\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/keycharm/keycharm.js\n// module id = 111\n// module chunks = 0","// utils\nexports.util = require('./lib/util');\nexports.DOMutil = require('./lib/DOMutil');\n\n// data\nexports.DataSet = require('./lib/DataSet');\nexports.DataView = require('./lib/DataView');\nexports.Queue = require('./lib/Queue');\n\n// Timeline\nexports.Timeline = require('./lib/timeline/Timeline');\nexports.Graph2d = require('./lib/timeline/Graph2d');\nexports.timeline = {\n  Core: require('./lib/timeline/Core'),\n  DateUtil: require('./lib/timeline/DateUtil'),\n  Range: require('./lib/timeline/Range'),\n  stack: require('./lib/timeline/Stack'),\n  TimeStep: require('./lib/timeline/TimeStep'),\n\n  components: {\n    items: {\n      Item: require('./lib/timeline/component/item/Item'),\n      BackgroundItem: require('./lib/timeline/component/item/BackgroundItem'),\n      BoxItem: require('./lib/timeline/component/item/BoxItem'),\n      PointItem: require('./lib/timeline/component/item/PointItem'),\n      RangeItem: require('./lib/timeline/component/item/RangeItem')\n    },\n\n    BackgroundGroup: require('./lib/timeline/component/BackgroundGroup'),\n    Component: require('./lib/timeline/component/Component'),\n    CurrentTime: require('./lib/timeline/component/CurrentTime'),\n    CustomTime: require('./lib/timeline/component/CustomTime'),\n    DataAxis: require('./lib/timeline/component/DataAxis'),\n    DataScale: require('./lib/timeline/component/DataScale'),\n    GraphGroup: require('./lib/timeline/component/GraphGroup'),\n    Group: require('./lib/timeline/component/Group'),\n    ItemSet: require('./lib/timeline/component/ItemSet'),\n    Legend: require('./lib/timeline/component/Legend'),\n    LineGraph: require('./lib/timeline/component/LineGraph'),\n    TimeAxis: require('./lib/timeline/component/TimeAxis')\n  }\n};\n\n// bundled external libraries\nexports.moment = require('./lib/module/moment');\nexports.Hammer = require('./lib/module/hammer');\nexports.keycharm = require('keycharm');\n\n\n\n// WEBPACK FOOTER //\n// ./index-timeline-graph2d.js","var Emitter = require('emitter-component');\nvar Hammer = require('../module/hammer');\nvar moment = require('../module/moment');\nvar util = require('../util');\nvar DataSet = require('../DataSet');\nvar DataView = require('../DataView');\nvar Range = require('./Range');\nvar Core = require('./Core');\nvar TimeAxis = require('./component/TimeAxis');\nvar CurrentTime = require('./component/CurrentTime');\nvar CustomTime = require('./component/CustomTime');\nvar ItemSet = require('./component/ItemSet');\n\nvar printStyle = require('../shared/Validator').printStyle;\nvar allOptions = require('./optionsTimeline').allOptions;\nvar configureOptions = require('./optionsTimeline').configureOptions;\n\nimport Configurator from '../shared/Configurator';\nimport Validator from '../shared/Validator';\n\n\n/**\n * Create a timeline visualization\n * @param {HTMLElement} container\n * @param {vis.DataSet | vis.DataView | Array} [items]\n * @param {vis.DataSet | vis.DataView | Array} [groups]\n * @param {Object} [options]  See Timeline.setOptions for the available options.\n * @constructor\n * @extends Core\n */\nfunction Timeline (container, items, groups, options) {\n\n  if (!(this instanceof Timeline)) {\n    throw new SyntaxError('Constructor must be called with the new operator');\n  }\n\n  // if the third element is options, the forth is groups (optionally);\n  if (!(Array.isArray(groups) || groups instanceof DataSet || groups instanceof DataView) && groups instanceof Object) {\n    var forthArgument = options;\n    options = groups;\n    groups = forthArgument;\n  }\n\n  // TODO: REMOVE THIS in the next MAJOR release\n  // see https://github.com/almende/vis/issues/2511\n  if (options && options.throttleRedraw) {\n    console.warn(\"Timeline option \\\"throttleRedraw\\\" is DEPRICATED and no longer supported. It will be removed in the next MAJOR release.\");\n  }\n\n  var me = this;\n  this.defaultOptions = {\n    start: null,\n    end:   null,\n    autoResize: true,\n    orientation: {\n      axis: 'bottom',   // axis orientation: 'bottom', 'top', or 'both'\n      item: 'bottom'    // not relevant\n    },\n    moment: moment,\n    width: null,\n    height: null,\n    maxHeight: null,\n    minHeight: null\n  };\n  this.options = util.deepExtend({}, this.defaultOptions);\n\n  // Create the DOM, props, and emitter\n  this._create(container);\n  if (!options || (options && typeof options.rtl == \"undefined\")) {\n    var directionFromDom, domNode = this.dom.root;\n    while (!directionFromDom && domNode) {\n      directionFromDom = window.getComputedStyle(domNode, null).direction;\n      domNode = domNode.parentElement;\n    }\n    this.options.rtl = (directionFromDom && (directionFromDom.toLowerCase() == \"rtl\"));\n  } else {\n    this.options.rtl = options.rtl;\n  }\n\n  this.options.rollingMode = options && options.rollingMode;\n\n  // all components listed here will be repainted automatically\n  this.components = [];\n\n  this.body = {\n    dom: this.dom,\n    domProps: this.props,\n    emitter: {\n      on: this.on.bind(this),\n      off: this.off.bind(this),\n      emit: this.emit.bind(this)\n    },\n    hiddenDates: [],\n    util: {\n      getScale: function () {\n        return me.timeAxis.step.scale;\n      },\n      getStep: function () {\n        return me.timeAxis.step.step;\n      },\n\n      toScreen: me._toScreen.bind(me),\n      toGlobalScreen: me._toGlobalScreen.bind(me), // this refers to the root.width\n      toTime: me._toTime.bind(me),\n      toGlobalTime : me._toGlobalTime.bind(me)\n    }\n  };\n\n  // range\n  this.range = new Range(this.body, this.options);\n  this.components.push(this.range);\n  this.body.range = this.range;\n\n  // time axis\n  this.timeAxis = new TimeAxis(this.body, this.options);\n  this.timeAxis2 = null; // used in case of orientation option 'both'\n  this.components.push(this.timeAxis);\n\n  // current time bar\n  this.currentTime = new CurrentTime(this.body, this.options);\n  this.components.push(this.currentTime);\n\n  // item set\n  this.itemSet = new ItemSet(this.body, this.options);\n  this.components.push(this.itemSet);\n\n  this.itemsData = null;      // DataSet\n  this.groupsData = null;     // DataSet\n\n  this.dom.root.onclick = function (event) {\n    me.emit('click', me.getEventProperties(event))\n  };\n  this.dom.root.ondblclick = function (event) {\n    me.emit('doubleClick', me.getEventProperties(event))\n  };\n  this.dom.root.oncontextmenu = function (event) {\n    me.emit('contextmenu', me.getEventProperties(event))\n  };\n  this.dom.root.onmouseover = function (event) {\n    me.emit('mouseOver', me.getEventProperties(event))\n  };\n  this.dom.root.onmousemove = function (event) {\n    me.emit('mouseMove', me.getEventProperties(event))\n  };\n\n  //Single time autoscale/fit\n  this.fitDone = false;\n  this.on('changed', function (){\n    if (this.itemsData == null || this.options.rollingMode) return;\n    if (!me.fitDone) {\n      me.fitDone = true;\n      if (me.options.start != undefined || me.options.end != undefined) {\n        if (me.options.start == undefined || me.options.end == undefined) {\n          var range = me.getItemRange();\n        }\n\n        var start = me.options.start != undefined ? me.options.start : range.min;\n        var end   = me.options.end   != undefined ? me.options.end   : range.max;\n        me.setWindow(start, end, {animation: false});\n      }\n      else {\n        me.fit({animation: false});\n      }\n    }\n  });\n\n  // apply options\n  if (options) {\n    this.setOptions(options);\n  }\n\n  // IMPORTANT: THIS HAPPENS BEFORE SET ITEMS!\n  if (groups) {\n    this.setGroups(groups);\n  }\n\n  // create itemset\n  if (items) {\n    this.setItems(items);\n  }\n\n  // draw for the first time\n  this._redraw();\n}\n\n// Extend the functionality from Core\nTimeline.prototype = new Core();\n\n/**\n * Load a configurator\n * @return {Object}\n * @private\n */\nTimeline.prototype._createConfigurator = function () {\n  return new Configurator(this, this.dom.container, configureOptions);\n};\n\n/**\n * Force a redraw. The size of all items will be recalculated.\n * Can be useful to manually redraw when option autoResize=false and the window\n * has been resized, or when the items CSS has been changed.\n *\n * Note: this function will be overridden on construction with a trottled version\n */\nTimeline.prototype.redraw = function() {\n  this.itemSet && this.itemSet.markDirty({refreshItems: true});\n  this._redraw();\n};\n\nTimeline.prototype.setOptions = function (options) {\n  // validate options\n  let errorFound = Validator.validate(options, allOptions);\n\n  if (errorFound === true) {\n    console.log('%cErrors have been found in the supplied options object.', printStyle);\n  }\n  Core.prototype.setOptions.call(this, options);\n\n  if ('type' in options) {\n    if (options.type !== this.options.type) {\n      this.options.type = options.type;\n\n      // force recreation of all items\n      var itemsData = this.itemsData;\n      if (itemsData) {\n        var selection = this.getSelection();\n        this.setItems(null);          // remove all\n        this.setItems(itemsData);     // add all\n        this.setSelection(selection); // restore selection\n      }\n    }\n  }\n};\n\n/**\n * Set items\n * @param {vis.DataSet | Array | null} items\n */\nTimeline.prototype.setItems = function(items) {\n  // convert to type DataSet when needed\n  var newDataSet;\n  if (!items) {\n    newDataSet = null;\n  }\n  else if (items instanceof DataSet || items instanceof DataView) {\n    newDataSet = items;\n  }\n  else {\n    // turn an array into a dataset\n    newDataSet = new DataSet(items, {\n      type: {\n        start: 'Date',\n        end: 'Date'\n      }\n    });\n  }\n\n  // set items\n  this.itemsData = newDataSet;\n  this.itemSet && this.itemSet.setItems(newDataSet);\n};\n\n/**\n * Set groups\n * @param {vis.DataSet | Array} groups\n */\nTimeline.prototype.setGroups = function(groups) {\n  // convert to type DataSet when needed\n  var newDataSet;\n  if (!groups) {\n    newDataSet = null;\n  }\n  else {\n    var filter = function(group) {\n      return group.visible !== false;\n    }\n    if (groups instanceof DataSet || groups instanceof DataView) {\n      newDataSet = new DataView(groups,{filter: filter});\n    }\n    else {\n      // turn an array into a dataset\n      newDataSet = new DataSet(groups.filter(filter));\n    }\n  }\n\n\n  this.groupsData = newDataSet;\n  this.itemSet.setGroups(newDataSet);\n};\n\n/**\n * Set both items and groups in one go\n * @param {{items: Array | vis.DataSet, groups: Array | vis.DataSet}} data\n */\nTimeline.prototype.setData = function (data) {\n  if (data && data.groups) {\n    this.setGroups(data.groups);\n  }\n\n  if (data && data.items) {\n    this.setItems(data.items);\n  }\n};\n\n/**\n * Set selected items by their id. Replaces the current selection\n * Unknown id's are silently ignored.\n * @param {string[] | string} [ids]  An array with zero or more id's of the items to be\n *                                selected. If ids is an empty array, all items will be\n *                                unselected.\n * @param {Object} [options]      Available options:\n *                                `focus: boolean`\n *                                    If true, focus will be set to the selected item(s)\n *                                `animation: boolean | {duration: number, easingFunction: string}`\n *                                    If true (default), the range is animated\n *                                    smoothly to the new window. An object can be\n *                                    provided to specify duration and easing function.\n *                                    Default duration is 500 ms, and default easing\n *                                    function is 'easeInOutQuad'.\n *                                    Only applicable when option focus is true.\n */\nTimeline.prototype.setSelection = function(ids, options) {\n  this.itemSet && this.itemSet.setSelection(ids);\n\n  if (options && options.focus) {\n    this.focus(ids, options);\n  }\n};\n\n/**\n * Get the selected items by their id\n * @return {Array} ids  The ids of the selected items\n */\nTimeline.prototype.getSelection = function() {\n  return this.itemSet && this.itemSet.getSelection() || [];\n};\n\n/**\n * Adjust the visible window such that the selected item (or multiple items)\n * are centered on screen.\n * @param {String | String[]} id     An item id or array with item ids\n * @param {Object} [options]      Available options:\n *                                `animation: boolean | {duration: number, easingFunction: string}`\n *                                    If true (default), the range is animated\n *                                    smoothly to the new window. An object can be\n *                                    provided to specify duration and easing function.\n *                                    Default duration is 500 ms, and default easing\n *                                    function is 'easeInOutQuad'.\n */\nTimeline.prototype.focus = function(id, options) {\n  if (!this.itemsData || id == undefined) return;\n\n  var ids = Array.isArray(id) ? id : [id];\n\n  // get the specified item(s)\n  var itemsData = this.itemsData.getDataSet().get(ids, {\n    type: {\n      start: 'Date',\n      end: 'Date'\n    }\n  });\n\n  // calculate minimum start and maximum end of specified items\n  var start = null;\n  var end = null;\n  itemsData.forEach(function (itemData) {\n    var s = itemData.start.valueOf();\n    var e = 'end' in itemData ? itemData.end.valueOf() : itemData.start.valueOf();\n\n    if (start === null || s < start) {\n      start = s;\n    }\n\n    if (end === null || e > end) {\n      end = e;\n    }\n  });\n\n  if (start !== null && end !== null) {\n    // calculate the new middle and interval for the window\n    var middle = (start + end) / 2;\n    var interval = Math.max((this.range.end - this.range.start), (end - start) * 1.1);\n\n    var animation = (options && options.animation !== undefined) ? options.animation : true;\n    this.range.setRange(middle - interval / 2, middle + interval / 2, animation);\n  }\n};\n\n/**\n * Set Timeline window such that it fits all items\n * @param {Object} [options]  Available options:\n *                                `animation: boolean | {duration: number, easingFunction: string}`\n *                                    If true (default), the range is animated\n *                                    smoothly to the new window. An object can be\n *                                    provided to specify duration and easing function.\n *                                    Default duration is 500 ms, and default easing\n *                                    function is 'easeInOutQuad'.\n */\nTimeline.prototype.fit = function (options) {\n  var animation = (options && options.animation !== undefined) ? options.animation : true;\n  var range;\n\n  var dataset = this.itemsData && this.itemsData.getDataSet();\n  if (dataset.length === 1 && dataset.get()[0].end === undefined) {\n    // a single item -> don't fit, just show a range around the item from -4 to +3 days\n    range = this.getDataRange();\n    this.moveTo(range.min.valueOf(), {animation});\n  }\n  else {\n    // exactly fit the items (plus a small margin)\n    range = this.getItemRange();\n    this.range.setRange(range.min, range.max, animation);\n  }\n};\n\n/**\n * Determine the range of the items, taking into account their actual width\n * and a margin of 10 pixels on both sides.\n * @return {{min: Date | null, max: Date | null}}\n */\nTimeline.prototype.getItemRange = function () {\n  // get a rough approximation for the range based on the items start and end dates\n  var range = this.getDataRange();\n  var min = range.min !== null ? range.min.valueOf() : null;\n  var max = range.max !== null ? range.max.valueOf() : null;\n  var minItem = null;\n  var maxItem = null;\n\n  if (min != null && max != null) {\n    var interval = (max - min); // ms\n    if (interval <= 0) {\n      interval = 10;\n    }\n    var factor = interval / this.props.center.width;\n\n    function getStart(item) {\n      return util.convert(item.data.start, 'Date').valueOf()\n    }\n\n    function getEnd(item) {\n      var end = item.data.end != undefined ? item.data.end : item.data.start;\n      return util.convert(end, 'Date').valueOf();\n    }\n\n    // calculate the date of the left side and right side of the items given\n    util.forEach(this.itemSet.items, function (item) {\n      if (item.groupShowing) {\n        item.show();\n        item.repositionX();\n      }\n\n      var start = getStart(item);\n      var end = getEnd(item);\n\n      if (this.options.rtl) {\n        var startSide  = start - (item.getWidthRight()  + 10) * factor;\n        var endSide = end   + (item.getWidthLeft() + 10) * factor;\n      } else {\n        var startSide  = start - (item.getWidthLeft()  + 10) * factor;\n        var endSide = end   + (item.getWidthRight() + 10) * factor;\n      }\n\n\n      if (startSide < min) {\n        min = startSide;\n        minItem = item;\n      }\n      if (endSide > max) {\n        max = endSide;\n        maxItem = item;\n      }\n    }.bind(this));\n\n    if (minItem && maxItem) {\n      var lhs = minItem.getWidthLeft() + 10;\n      var rhs = maxItem.getWidthRight() + 10;\n      var delta = this.props.center.width - lhs - rhs;  // px\n\n      if (delta > 0) {\n        if (this.options.rtl) {\n          min = getStart(minItem) - rhs * interval / delta; // ms\n          max = getEnd(maxItem)   + lhs * interval / delta; // ms\n        } else {\n          min = getStart(minItem) - lhs * interval / delta; // ms\n          max = getEnd(maxItem)   + rhs * interval / delta; // ms\n        }\n      }\n    }\n  }\n\n  return {\n    min: min != null ? new Date(min) : null,\n    max: max != null ? new Date(max) : null\n  }\n};\n\n/**\n * Calculate the data range of the items start and end dates\n * @returns {{min: Date | null, max: Date | null}}\n */\nTimeline.prototype.getDataRange = function() {\n  var min = null;\n  var max = null;\n\n  var dataset = this.itemsData && this.itemsData.getDataSet();\n  if (dataset) {\n    dataset.forEach(function (item) {\n      var start = util.convert(item.start, 'Date').valueOf();\n      var end   = util.convert(item.end != undefined ? item.end : item.start, 'Date').valueOf();\n      if (min === null || start < min) {\n        min = start;\n      }\n      if (max === null || end > max) {\n        max = end;\n      }\n    });\n  }\n\n  return {\n    min: min != null ? new Date(min) : null,\n    max: max != null ? new Date(max) : null\n  }\n};\n\n/**\n * Generate Timeline related information from an event\n * @param {Event} event\n * @return {Object} An object with related information, like on which area\n *                  The event happened, whether clicked on an item, etc.\n */\nTimeline.prototype.getEventProperties = function (event) {\n  var clientX = event.center ? event.center.x : event.clientX;\n  var clientY = event.center ? event.center.y : event.clientY;\n  if (this.options.rtl) {\n    var x = util.getAbsoluteRight(this.dom.centerContainer) - clientX;\n  } else {\n    var x = clientX - util.getAbsoluteLeft(this.dom.centerContainer);\n  }\n  var y = clientY - util.getAbsoluteTop(this.dom.centerContainer);\n\n  var item  = this.itemSet.itemFromTarget(event);\n  var group = this.itemSet.groupFromTarget(event);\n  var customTime = CustomTime.customTimeFromTarget(event);\n\n  var snap = this.itemSet.options.snap || null;\n  var scale = this.body.util.getScale();\n  var step = this.body.util.getStep();\n  var time = this._toTime(x);\n  var snappedTime = snap ? snap(time, scale, step) : time;\n\n  var element = util.getTarget(event);\n  var what = null;\n  if (item != null)                                                    {what = 'item';}\n  else if (customTime != null)                                         {what = 'custom-time';}\n  else if (util.hasParent(element, this.timeAxis.dom.foreground))      {what = 'axis';}\n  else if (this.timeAxis2 && util.hasParent(element, this.timeAxis2.dom.foreground)) {what = 'axis';}\n  else if (util.hasParent(element, this.itemSet.dom.labelSet))         {what = 'group-label';}\n  else if (util.hasParent(element, this.currentTime.bar))              {what = 'current-time';}\n  else if (util.hasParent(element, this.dom.center))                   {what = 'background';}\n\n  return {\n    event: event,\n    item: item ? item.id : null,\n    group: group ? group.groupId : null,\n    what: what,\n    pageX: event.srcEvent ? event.srcEvent.pageX : event.pageX,\n    pageY: event.srcEvent ? event.srcEvent.pageY : event.pageY,\n    x: x,\n    y: y,\n    time: time,\n    snappedTime: snappedTime\n  }\n};\n\nmodule.exports = Timeline;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/Timeline.js","var util = require('../util');\n\nimport ColorPicker from './ColorPicker'\n\n/**\n * The way this works is for all properties of this.possible options, you can supply the property name in any form to list the options.\n * Boolean options are recognised as Boolean\n * Number options should be written as array: [default value, min value, max value, stepsize]\n * Colors should be written as array: ['color', '#ffffff']\n * Strings with should be written as array: [option1, option2, option3, ..]\n *\n * The options are matched with their counterparts in each of the modules and the values used in the configuration are\n *\n * @param parentModule        | the location where parentModule.setOptions() can be called\n * @param defaultContainer    | the default container of the module\n * @param configureOptions    | the fully configured and predefined options set found in allOptions.js\n * @param pixelRatio          | canvas pixel ratio\n */\nclass Configurator {\n  constructor(parentModule, defaultContainer, configureOptions, pixelRatio = 1) {\n    this.parent = parentModule;\n    this.changedOptions = [];\n    this.container = defaultContainer;\n    this.allowCreation = false;\n\n    this.options = {};\n    this.initialized = false;\n    this.popupCounter = 0;\n    this.defaultOptions = {\n      enabled: false,\n      filter: true,\n      container: undefined,\n      showButton: true\n    };\n    util.extend(this.options, this.defaultOptions);\n\n    this.configureOptions = configureOptions;\n    this.moduleOptions = {};\n    this.domElements = [];\n    this.popupDiv = {};\n    this.popupLimit = 5;\n    this.popupHistory = {};\n    this.colorPicker = new ColorPicker(pixelRatio);\n    this.wrapper = undefined;\n  }\n\n\n  /**\n   * refresh all options.\n   * Because all modules parse their options by themselves, we just use their options. We copy them here.\n   *\n   * @param options\n   */\n  setOptions(options) {\n    if (options !== undefined) {\n      // reset the popup history because the indices may have been changed.\n      this.popupHistory = {};\n      this._removePopup();\n\n      let enabled = true;\n      if (typeof options === 'string') {\n        this.options.filter = options;\n      }\n      else if (options instanceof Array) {\n        this.options.filter = options.join();\n      }\n      else if (typeof options === 'object') {\n        if (options.container !== undefined) {\n          this.options.container = options.container;\n        }\n        if (options.filter !== undefined) {\n          this.options.filter = options.filter;\n        }\n        if (options.showButton !== undefined) {\n          this.options.showButton = options.showButton;\n        }\n        if (options.enabled !== undefined) {\n          enabled = options.enabled;\n        }\n      }\n      else if (typeof options === 'boolean') {\n        this.options.filter = true;\n        enabled = options;\n      }\n      else if (typeof options === 'function') {\n        this.options.filter = options;\n        enabled = true;\n      }\n      if (this.options.filter === false) {\n        enabled = false;\n      }\n\n      this.options.enabled = enabled;\n    }\n    this._clean();\n  }\n\n\n  setModuleOptions(moduleOptions) {\n    this.moduleOptions = moduleOptions;\n    if (this.options.enabled === true) {\n      this._clean();\n      if (this.options.container !== undefined) {\n        this.container = this.options.container;\n      }\n      this._create();\n    }\n  }\n\n  /**\n   * Create all DOM elements\n   * @private\n   */\n  _create() {\n    this._clean();\n    this.changedOptions = [];\n\n    let filter = this.options.filter;\n    let counter = 0;\n    let show = false;\n    for (let option in this.configureOptions) {\n      if (this.configureOptions.hasOwnProperty(option)) {\n        this.allowCreation = false;\n        show = false;\n        if (typeof filter === 'function') {\n          show = filter(option,[]);\n          show = show || this._handleObject(this.configureOptions[option], [option], true);\n        }\n        else if (filter === true || filter.indexOf(option) !== -1) {\n          show = true;\n        }\n\n        if (show !== false) {\n          this.allowCreation = true;\n\n          // linebreak between categories\n          if (counter > 0) {\n            this._makeItem([]);\n          }\n          // a header for the category\n          this._makeHeader(option);\n\n          // get the sub options\n          this._handleObject(this.configureOptions[option], [option]);\n        }\n        counter++;\n      }\n    }\n\n    if (this.options.showButton === true) {\n      let generateButton = document.createElement('div');\n      generateButton.className = 'vis-configuration vis-config-button';\n      generateButton.innerHTML = 'generate options';\n      generateButton.onclick =     () => {this._printOptions();};\n      generateButton.onmouseover = () => {generateButton.className = 'vis-configuration vis-config-button hover';};\n      generateButton.onmouseout =  () => {generateButton.className = 'vis-configuration vis-config-button';};\n\n      this.optionsContainer = document.createElement('div');\n      this.optionsContainer.className = 'vis-configuration vis-config-option-container';\n\n      this.domElements.push(this.optionsContainer);\n      this.domElements.push(generateButton);\n    }\n\n    this._push();\n    //~ this.colorPicker.insertTo(this.container);\n  }\n\n\n  /**\n   * draw all DOM elements on the screen\n   * @private\n   */\n  _push() {\n    this.wrapper = document.createElement('div');\n    this.wrapper.className = 'vis-configuration-wrapper';\n    this.container.appendChild(this.wrapper);\n    for (var i = 0; i < this.domElements.length; i++) {\n      this.wrapper.appendChild(this.domElements[i]);\n    }\n\n    this._showPopupIfNeeded()\n  }\n\n\n  /**\n   * delete all DOM elements\n   * @private\n   */\n  _clean() {\n    for (var i = 0; i < this.domElements.length; i++) {\n      this.wrapper.removeChild(this.domElements[i]);\n    }\n\n    if (this.wrapper !== undefined) {\n      this.container.removeChild(this.wrapper);\n      this.wrapper = undefined;\n    }\n    this.domElements = [];\n\n    this._removePopup();\n  }\n\n\n  /**\n   * get the value from the actualOptions if it exists\n   * @param {array} path    | where to look for the actual option\n   * @returns {*}\n   * @private\n   */\n  _getValue(path) {\n    let base = this.moduleOptions;\n    for (let i = 0; i < path.length; i++) {\n      if (base[path[i]] !== undefined) {\n        base = base[path[i]];\n      }\n      else {\n        base = undefined;\n        break;\n      }\n    }\n    return base;\n  }\n\n\n  /**\n   * all option elements are wrapped in an item\n   * @param path\n   * @param domElements\n   * @private\n   */\n  _makeItem(path, ...domElements) {\n    if (this.allowCreation === true) {\n      let item = document.createElement('div');\n      item.className = 'vis-configuration vis-config-item vis-config-s' + path.length;\n      domElements.forEach((element) => {\n        item.appendChild(element);\n      });\n      this.domElements.push(item);\n      return this.domElements.length;\n    }\n    return 0;\n  }\n\n\n  /**\n   * header for major subjects\n   * @param name\n   * @private\n   */\n  _makeHeader(name) {\n    let div = document.createElement('div');\n    div.className = 'vis-configuration vis-config-header';\n    div.innerHTML = name;\n    this._makeItem([],div);\n  }\n\n\n  /**\n   * make a label, if it is an object label, it gets different styling.\n   * @param name\n   * @param path\n   * @param objectLabel\n   * @returns {HTMLElement}\n   * @private\n   */\n  _makeLabel(name, path, objectLabel = false) {\n    let div = document.createElement('div');\n    div.className = 'vis-configuration vis-config-label vis-config-s' + path.length;\n    if (objectLabel === true) {\n      div.innerHTML = '<i><b>' + name + ':</b></i>';\n    }\n    else {\n      div.innerHTML = name + ':';\n    }\n    return div;\n  }\n\n\n  /**\n   * make a dropdown list for multiple possible string optoins\n   * @param arr\n   * @param value\n   * @param path\n   * @private\n   */\n  _makeDropdown(arr, value, path) {\n    let select = document.createElement('select');\n    select.className = 'vis-configuration vis-config-select';\n    let selectedValue = 0;\n    if (value !== undefined) {\n      if (arr.indexOf(value) !== -1) {\n        selectedValue = arr.indexOf(value);\n      }\n    }\n\n    for (let i = 0; i < arr.length; i++) {\n      let option = document.createElement('option');\n      option.value = arr[i];\n      if (i === selectedValue) {\n        option.selected = 'selected';\n      }\n      option.innerHTML = arr[i];\n      select.appendChild(option);\n    }\n\n    let me = this;\n    select.onchange = function () {me._update(this.value, path);};\n\n    let label = this._makeLabel(path[path.length-1], path);\n    this._makeItem(path, label, select);\n  }\n\n\n  /**\n   * make a range object for numeric options\n   * @param arr\n   * @param value\n   * @param path\n   * @private\n   */\n  _makeRange(arr, value, path) {\n    let defaultValue = arr[0];\n    let min = arr[1];\n    let max = arr[2];\n    let step = arr[3];\n    let range = document.createElement('input');\n    range.className = 'vis-configuration vis-config-range';\n    try {\n      range.type = 'range'; // not supported on IE9\n      range.min = min;\n      range.max = max;\n    }\n    catch (err) {}\n    range.step = step;\n\n    // set up the popup settings in case they are needed.\n    let popupString = '';\n    let popupValue = 0;\n\n    if (value !== undefined) {\n      let factor = 1.20;\n      if (value < 0 && value * factor < min) {\n        range.min = Math.ceil(value * factor);\n        popupValue = range.min;\n        popupString = 'range increased';\n      }\n      else if (value / factor < min) {\n        range.min = Math.ceil(value / factor);\n        popupValue = range.min;\n        popupString = 'range increased';\n      }\n      if (value * factor > max && max !== 1) {\n        range.max = Math.ceil(value * factor);\n        popupValue = range.max;\n        popupString = 'range increased';\n      }\n      range.value = value;\n    }\n    else {\n      range.value = defaultValue;\n    }\n\n    let input = document.createElement('input');\n    input.className = 'vis-configuration vis-config-rangeinput';\n    input.value = range.value;\n\n    var me = this;\n    range.onchange = function () {input.value = this.value; me._update(Number(this.value), path);};\n    range.oninput  = function () {input.value = this.value; };\n\n    let label = this._makeLabel(path[path.length-1], path);\n    let itemIndex = this._makeItem(path, label, range, input);\n\n    // if a popup is needed AND it has not been shown for this value, show it.\n    if (popupString !== '' && this.popupHistory[itemIndex] !== popupValue) {\n      this.popupHistory[itemIndex] = popupValue;\n      this._setupPopup(popupString, itemIndex);\n    }\n\n  }\n\n\n  /**\n   * prepare the popup\n   * @param string\n   * @param index\n   * @private\n   */\n  _setupPopup(string, index) {\n    if (this.initialized === true && this.allowCreation === true && this.popupCounter < this.popupLimit) {\n      let div = document.createElement(\"div\");\n      div.id = \"vis-configuration-popup\";\n      div.className = \"vis-configuration-popup\";\n      div.innerHTML = string;\n      div.onclick = () => {this._removePopup()};\n      this.popupCounter += 1;\n      this.popupDiv = {html:div, index:index};\n    }\n  }\n\n\n  /**\n   * remove the popup from the dom\n   * @private\n   */\n  _removePopup() {\n    if (this.popupDiv.html !== undefined) {\n      this.popupDiv.html.parentNode.removeChild(this.popupDiv.html);\n      clearTimeout(this.popupDiv.hideTimeout);\n      clearTimeout(this.popupDiv.deleteTimeout);\n      this.popupDiv = {};\n    }\n  }\n\n\n  /**\n   * Show the popup if it is needed.\n   * @private\n   */\n  _showPopupIfNeeded() {\n    if (this.popupDiv.html !== undefined) {\n      let correspondingElement = this.domElements[this.popupDiv.index];\n      let rect = correspondingElement.getBoundingClientRect();\n      this.popupDiv.html.style.left = rect.left + \"px\";\n      this.popupDiv.html.style.top = rect.top - 30 + \"px\"; // 30 is the height;\n      document.body.appendChild(this.popupDiv.html)\n      this.popupDiv.hideTimeout = setTimeout(() => {\n        this.popupDiv.html.style.opacity = 0;\n      },1500);\n      this.popupDiv.deleteTimeout = setTimeout(() => {\n        this._removePopup();\n      },1800)\n    }\n  }\n\n  /**\n   * make a checkbox for boolean options.\n   * @param defaultValue\n   * @param value\n   * @param path\n   * @private\n   */\n  _makeCheckbox(defaultValue, value, path) {\n    var checkbox = document.createElement('input');\n    checkbox.type = 'checkbox';\n    checkbox.className = 'vis-configuration vis-config-checkbox';\n    checkbox.checked = defaultValue;\n    if (value !== undefined) {\n      checkbox.checked = value;\n      if (value !== defaultValue) {\n        if (typeof defaultValue === 'object') {\n          if (value !== defaultValue.enabled) {\n            this.changedOptions.push({path:path, value:value});\n          }\n        }\n        else {\n          this.changedOptions.push({path:path, value:value});\n        }\n      }\n    }\n\n    let me = this;\n    checkbox.onchange = function() {me._update(this.checked, path)};\n\n    let label = this._makeLabel(path[path.length-1], path);\n    this._makeItem(path, label, checkbox);\n  }\n\n  /**\n   * make a text input field for string options.\n   * @param defaultValue\n   * @param value\n   * @param path\n   * @private\n   */\n  _makeTextInput(defaultValue, value, path) {\n    var checkbox = document.createElement('input');\n    checkbox.type = 'text';\n    checkbox.className = 'vis-configuration vis-config-text';\n    checkbox.value = value;\n    if (value !== defaultValue) {\n      this.changedOptions.push({path:path, value:value});\n    }\n\n    let me = this;\n    checkbox.onchange = function() {me._update(this.value, path)};\n\n    let label = this._makeLabel(path[path.length-1], path);\n    this._makeItem(path, label, checkbox);\n  }\n\n\n  /**\n   * make a color field with a color picker for color fields\n   * @param arr\n   * @param value\n   * @param path\n   * @private\n   */\n  _makeColorField(arr, value, path) {\n    let defaultColor = arr[1];\n    let div = document.createElement('div');\n    value = value === undefined ? defaultColor : value;\n\n    if (value !== 'none') {\n      div.className = 'vis-configuration vis-config-colorBlock';\n      div.style.backgroundColor = value;\n    }\n    else {\n      div.className = 'vis-configuration vis-config-colorBlock none';\n    }\n\n    value = value === undefined ? defaultColor : value;\n    div.onclick = () => {\n      this._showColorPicker(value,div,path);\n    };\n\n    let label = this._makeLabel(path[path.length-1], path);\n    this._makeItem(path,label, div);\n  }\n\n\n  /**\n   * used by the color buttons to call the color picker.\n   * @param event\n   * @param value\n   * @param div\n   * @param path\n   * @private\n   */\n  _showColorPicker(value, div, path) {\n    // clear the callback from this div\n    div.onclick = function() {};\n\n    this.colorPicker.insertTo(div);\n    this.colorPicker.show();\n\n    this.colorPicker.setColor(value);\n    this.colorPicker.setUpdateCallback((color) => {\n      let colorString = 'rgba(' + color.r + ',' + color.g + ',' + color.b + ',' + color.a + ')';\n      div.style.backgroundColor = colorString;\n      this._update(colorString,path);\n    });\n\n    // on close of the colorpicker, restore the callback.\n    this.colorPicker.setCloseCallback(() => {\n      div.onclick = () => {\n        this._showColorPicker(value,div,path);\n      };\n    });\n  }\n\n\n  /**\n   * parse an object and draw the correct items\n   * @param obj\n   * @param path\n   * @private\n   */\n  _handleObject(obj, path = [], checkOnly = false) {\n    let show = false;\n    let filter = this.options.filter;\n    let visibleInSet = false;\n    for (let subObj in obj) {\n      if (obj.hasOwnProperty(subObj)) {\n        show = true;\n        let item = obj[subObj];\n        let newPath = util.copyAndExtendArray(path, subObj);\n        if (typeof filter === 'function') {\n          show = filter(subObj,path);\n\n          // if needed we must go deeper into the object.\n          if (show === false) {\n            if (!(item instanceof Array) && typeof item !== 'string' && typeof item !== 'boolean' && item instanceof Object) {\n              this.allowCreation = false;\n              show = this._handleObject(item, newPath, true);\n              this.allowCreation = checkOnly === false;\n            }\n          }\n        }\n\n        if (show !== false) {\n          visibleInSet = true;\n          let value = this._getValue(newPath);\n\n          if (item instanceof Array) {\n            this._handleArray(item, value, newPath);\n          }\n          else if (typeof item === 'string') {\n            this._makeTextInput(item, value, newPath);\n          }\n          else if (typeof item === 'boolean') {\n            this._makeCheckbox(item, value, newPath);\n          }\n          else if (item instanceof Object) {\n            // collapse the physics options that are not enabled\n            let draw = true;\n            if (path.indexOf('physics') !== -1) {\n              if (this.moduleOptions.physics.solver !== subObj) {\n                draw = false;\n              }\n            }\n\n            if (draw === true) {\n              // initially collapse options with an disabled enabled option.\n              if (item.enabled !== undefined) {\n                let enabledPath = util.copyAndExtendArray(newPath, 'enabled');\n                let enabledValue = this._getValue(enabledPath);\n                if (enabledValue === true) {\n                  let label = this._makeLabel(subObj, newPath, true);\n                  this._makeItem(newPath, label);\n                  visibleInSet = this._handleObject(item, newPath) || visibleInSet;\n                }\n                else {\n                  this._makeCheckbox(item, enabledValue, newPath);\n                }\n              }\n              else {\n                let label = this._makeLabel(subObj, newPath, true);\n                this._makeItem(newPath, label);\n                visibleInSet = this._handleObject(item, newPath) || visibleInSet;\n              }\n            }\n          }\n          else {\n            console.error('dont know how to handle', item, subObj, newPath);\n          }\n        }\n      }\n    }\n    return visibleInSet;\n  }\n\n\n  /**\n   * handle the array type of option\n   * @param optionName\n   * @param arr\n   * @param value\n   * @param path\n   * @private\n   */\n  _handleArray(arr, value, path) {\n    if (typeof arr[0] === 'string' && arr[0] === 'color') {\n      this._makeColorField(arr, value, path);\n      if (arr[1] !== value) {this.changedOptions.push({path:path, value:value});}\n    }\n    else if (typeof arr[0] === 'string') {\n      this._makeDropdown(arr, value, path);\n      if (arr[0] !== value) {this.changedOptions.push({path:path, value:value});}\n    }\n    else if (typeof arr[0] === 'number') {\n      this._makeRange(arr, value, path);\n      if (arr[0] !== value) {this.changedOptions.push({path:path, value:Number(value)});}\n    }\n  }\n\n\n\n  /**\n   * called to update the network with the new settings.\n   * @param value\n   * @param path\n   * @private\n   */\n  _update(value, path) {\n    let options = this._constructOptions(value,path);\n\n    if (this.parent.body && this.parent.body.emitter && this.parent.body.emitter.emit) {\n      this.parent.body.emitter.emit(\"configChange\", options);\n    }\n    this.initialized = true;\n    this.parent.setOptions(options);\n  }\n\n  _constructOptions(value, path, optionsObj = {}) {\n    let pointer = optionsObj;\n\n    // when dropdown boxes can be string or boolean, we typecast it into correct types\n    value = value === 'true'  ? true  : value;\n    value = value === 'false' ? false : value;\n\n    for (let i = 0; i < path.length; i++) {\n      if (path[i] !== 'global') {\n        if (pointer[path[i]] === undefined) {\n          pointer[path[i]] = {};\n        }\n        if (i !== path.length - 1) {\n          pointer = pointer[path[i]];\n        }\n        else {\n          pointer[path[i]] = value;\n        }\n      }\n    }\n    return optionsObj;\n  }\n\n  _printOptions() {\n    let options = this.getOptions();\n    this.optionsContainer.innerHTML = '<pre>var options = ' + JSON.stringify(options, null, 2) + '</pre>';\n  }\n\n  getOptions() {\n    let options = {};\n    for (var i = 0; i < this.changedOptions.length; i++) {\n      this._constructOptions(this.changedOptions[i].value, this.changedOptions[i].path, options)\n    }\n    return options;\n  }\n}\n\n\nexport default Configurator;\n\n\n// WEBPACK FOOTER //\n// ./lib/shared/Configurator.js","\"use strict\";\n\nexports.__esModule = true;\n\nexports.default = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/helpers/classCallCheck.js\n// module id = 115\n// module chunks = 0","\"use strict\";\n\nexports.__esModule = true;\n\nvar _defineProperty = require(\"../core-js/object/define-property\");\n\nvar _defineProperty2 = _interopRequireDefault(_defineProperty);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      (0, _defineProperty2.default)(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/helpers/createClass.js\n// module id = 116\n// module chunks = 0","module.exports = { \"default\": require(\"core-js/library/fn/object/define-property\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/object/define-property.js\n// module id = 117\n// module chunks = 0","require('../../modules/es6.object.define-property');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function defineProperty(it, key, desc){\n  return $Object.defineProperty(it, key, desc);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/fn/object/define-property.js\n// module id = 118\n// module chunks = 0","var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', {defineProperty: require('./_object-dp').f});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es6.object.define-property.js\n// module id = 119\n// module chunks = 0","let Hammer = require('../module/hammer');\nlet hammerUtil = require('../hammerUtil');\nlet util = require('../util');\n\nclass ColorPicker {\n  constructor(pixelRatio = 1) {\n    this.pixelRatio = pixelRatio;\n    this.generated = false;\n    this.centerCoordinates = {x:289/2, y:289/2};\n    this.r = 289 * 0.49;\n    this.color = {r:255,g:255,b:255,a:1.0};\n    this.hueCircle = undefined;\n    this.initialColor = {r:255,g:255,b:255,a:1.0};\n    this.previousColor= undefined;\n    this.applied = false;\n\n    // bound by\n    this.updateCallback = () => {};\n    this.closeCallback = () => {};\n\n    // create all DOM elements\n    this._create();\n  }\n\n\n  /**\n   * this inserts the colorPicker into a div from the DOM\n   * @param container\n   */\n  insertTo(container) {\n    if (this.hammer !== undefined) {\n      this.hammer.destroy();\n      this.hammer = undefined;\n    }\n    this.container = container;\n    this.container.appendChild(this.frame);\n    this._bindHammer();\n\n    this._setSize();\n  }\n\n  /**\n   * the callback is executed on apply and save. Bind it to the application\n   * @param callback\n   */\n  setUpdateCallback(callback) {\n    if (typeof callback === 'function') {\n      this.updateCallback = callback;\n    }\n    else {\n      throw new Error(\"Function attempted to set as colorPicker update callback is not a function.\");\n    }\n  }\n\n  /**\n   * the callback is executed on apply and save. Bind it to the application\n   * @param callback\n   */\n  setCloseCallback(callback) {\n    if (typeof callback === 'function') {\n      this.closeCallback = callback;\n    }\n    else {\n      throw new Error(\"Function attempted to set as colorPicker closing callback is not a function.\");\n    }\n  }\n\n  _isColorString(color) {\n    var htmlColors = {black: '#000000',navy: '#000080',darkblue: '#00008B',mediumblue: '#0000CD',blue: '#0000FF',darkgreen: '#006400',green: '#008000',teal: '#008080',darkcyan: '#008B8B',deepskyblue: '#00BFFF',darkturquoise: '#00CED1',mediumspringgreen: '#00FA9A',lime: '#00FF00',springgreen: '#00FF7F',aqua: '#00FFFF',cyan: '#00FFFF',midnightblue: '#191970',dodgerblue: '#1E90FF',lightseagreen: '#20B2AA',forestgreen: '#228B22',seagreen: '#2E8B57',darkslategray: '#2F4F4F',limegreen: '#32CD32',mediumseagreen: '#3CB371',turquoise: '#40E0D0',royalblue: '#4169E1',steelblue: '#4682B4',darkslateblue: '#483D8B',mediumturquoise: '#48D1CC',indigo: '#4B0082',darkolivegreen: '#556B2F',cadetblue: '#5F9EA0',cornflowerblue: '#6495ED',mediumaquamarine: '#66CDAA',dimgray: '#696969',slateblue: '#6A5ACD',olivedrab: '#6B8E23',slategray: '#708090',lightslategray: '#778899',mediumslateblue: '#7B68EE',lawngreen: '#7CFC00',chartreuse: '#7FFF00',aquamarine: '#7FFFD4',maroon: '#800000',purple: '#800080',olive: '#808000',gray: '#808080',skyblue: '#87CEEB',lightskyblue: '#87CEFA',blueviolet: '#8A2BE2',darkred: '#8B0000',darkmagenta: '#8B008B',saddlebrown: '#8B4513',darkseagreen: '#8FBC8F',lightgreen: '#90EE90',mediumpurple: '#9370D8',darkviolet: '#9400D3',palegreen: '#98FB98',darkorchid: '#9932CC',yellowgreen: '#9ACD32',sienna: '#A0522D',brown: '#A52A2A',darkgray: '#A9A9A9',lightblue: '#ADD8E6',greenyellow: '#ADFF2F',paleturquoise: '#AFEEEE',lightsteelblue: '#B0C4DE',powderblue: '#B0E0E6',firebrick: '#B22222',darkgoldenrod: '#B8860B',mediumorchid: '#BA55D3',rosybrown: '#BC8F8F',darkkhaki: '#BDB76B',silver: '#C0C0C0',mediumvioletred: '#C71585',indianred: '#CD5C5C',peru: '#CD853F',chocolate: '#D2691E',tan: '#D2B48C',lightgrey: '#D3D3D3',palevioletred: '#D87093',thistle: '#D8BFD8',orchid: '#DA70D6',goldenrod: '#DAA520',crimson: '#DC143C',gainsboro: '#DCDCDC',plum: '#DDA0DD',burlywood: '#DEB887',lightcyan: '#E0FFFF',lavender: '#E6E6FA',darksalmon: '#E9967A',violet: '#EE82EE',palegoldenrod: '#EEE8AA',lightcoral: '#F08080',khaki: '#F0E68C',aliceblue: '#F0F8FF',honeydew: '#F0FFF0',azure: '#F0FFFF',sandybrown: '#F4A460',wheat: '#F5DEB3',beige: '#F5F5DC',whitesmoke: '#F5F5F5',mintcream: '#F5FFFA',ghostwhite: '#F8F8FF',salmon: '#FA8072',antiquewhite: '#FAEBD7',linen: '#FAF0E6',lightgoldenrodyellow: '#FAFAD2',oldlace: '#FDF5E6',red: '#FF0000',fuchsia: '#FF00FF',magenta: '#FF00FF',deeppink: '#FF1493',orangered: '#FF4500',tomato: '#FF6347',hotpink: '#FF69B4',coral: '#FF7F50',darkorange: '#FF8C00',lightsalmon: '#FFA07A',orange: '#FFA500',lightpink: '#FFB6C1',pink: '#FFC0CB',gold: '#FFD700',peachpuff: '#FFDAB9',navajowhite: '#FFDEAD',moccasin: '#FFE4B5',bisque: '#FFE4C4',mistyrose: '#FFE4E1',blanchedalmond: '#FFEBCD',papayawhip: '#FFEFD5',lavenderblush: '#FFF0F5',seashell: '#FFF5EE',cornsilk: '#FFF8DC',lemonchiffon: '#FFFACD',floralwhite: '#FFFAF0',snow: '#FFFAFA',yellow: '#FFFF00',lightyellow: '#FFFFE0',ivory: '#FFFFF0',white: '#FFFFFF'};\n    if (typeof color === 'string') {\n      return htmlColors[color];\n    }\n  }\n\n\n  /**\n   * Set the color of the colorPicker\n   * Supported formats:\n   * 'red'                   --> HTML color string\n   * '#ffffff'               --> hex string\n   * 'rbg(255,255,255)'      --> rgb string\n   * 'rgba(255,255,255,1.0)' --> rgba string\n   * {r:255,g:255,b:255}     --> rgb object\n   * {r:255,g:255,b:255,a:1.0} --> rgba object\n   * @param color\n   * @param setInitial\n   */\n  setColor(color, setInitial = true) {\n    if (color === 'none') {\n      return;\n    }\n\n    let rgba;\n\n    // if a html color shorthand is used, convert to hex\n    var htmlColor = this._isColorString(color);\n    if (htmlColor !== undefined) {\n      color = htmlColor;\n    }\n\n    // check format\n    if (util.isString(color) === true) {\n      if (util.isValidRGB(color) === true) {\n        let rgbaArray = color.substr(4).substr(0, color.length - 5).split(',');\n        rgba = {r:rgbaArray[0], g:rgbaArray[1], b:rgbaArray[2], a:1.0};\n      }\n      else if (util.isValidRGBA(color) === true) {\n        let rgbaArray = color.substr(5).substr(0, color.length - 6).split(',');\n        rgba = {r:rgbaArray[0], g:rgbaArray[1], b:rgbaArray[2], a:rgbaArray[3]};\n      }\n      else if (util.isValidHex(color) === true) {\n        let rgbObj = util.hexToRGB(color);\n        rgba = {r:rgbObj.r, g:rgbObj.g, b:rgbObj.b, a:1.0};\n      }\n    }\n    else {\n      if (color instanceof Object) {\n        if (color.r !== undefined && color.g !== undefined && color.b !== undefined) {\n          let alpha = color.a !== undefined ? color.a : '1.0';\n          rgba = {r:color.r, g:color.g, b:color.b, a:alpha};\n        }\n      }\n    }\n\n    // set color\n    if (rgba === undefined) {\n      throw new Error(\"Unknown color passed to the colorPicker. Supported are strings: rgb, hex, rgba. Object: rgb ({r:r,g:g,b:b,[a:a]}). Supplied: \" + JSON.stringify(color));\n    }\n    else {\n      this._setColor(rgba, setInitial);\n    }\n  }\n\n\n  /**\n   * this shows the color picker.\n   * The hue circle is constructed once and stored.\n   */\n  show() {\n    if (this.closeCallback !== undefined) {\n      this.closeCallback();\n      this.closeCallback = undefined;\n    }\n\n    this.applied = false;\n    this.frame.style.display = 'block';\n    this._generateHueCircle();\n  }\n\n  // ------------------------------------------ PRIVATE ----------------------------- //\n\n  /**\n   * Hide the picker. Is called by the cancel button.\n   * Optional boolean to store the previous color for easy access later on.\n   * @param storePrevious\n   * @private\n   */\n  _hide(storePrevious = true) {\n    // store the previous color for next time;\n    if (storePrevious === true) {\n      this.previousColor = util.extend({}, this.color);\n    }\n\n    if (this.applied === true) {\n      this.updateCallback(this.initialColor);\n    }\n\n    this.frame.style.display = 'none';\n\n    // call the closing callback, restoring the onclick method.\n    // this is in a setTimeout because it will trigger the show again before the click is done.\n    setTimeout(() => {\n      if (this.closeCallback !== undefined) {\n        this.closeCallback();\n        this.closeCallback = undefined;\n      }\n    },0);\n  }\n\n\n  /**\n   * bound to the save button. Saves and hides.\n   * @private\n   */\n  _save() {\n    this.updateCallback(this.color);\n    this.applied = false;\n    this._hide();\n  }\n\n\n  /**\n   * Bound to apply button. Saves but does not close. Is undone by the cancel button.\n   * @private\n   */\n  _apply() {\n    this.applied = true;\n    this.updateCallback(this.color);\n    this._updatePicker(this.color);\n  }\n\n\n  /**\n   * load the color from the previous session.\n   * @private\n   */\n  _loadLast() {\n    if (this.previousColor !== undefined) {\n      this.setColor(this.previousColor, false);\n    }\n    else {\n      alert(\"There is no last color to load...\");\n    }\n  }\n\n\n  /**\n   * set the color, place the picker\n   * @param rgba\n   * @param setInitial\n   * @private\n   */\n  _setColor(rgba, setInitial = true) {\n    // store the initial color\n    if (setInitial === true) {\n      this.initialColor = util.extend({}, rgba);\n    }\n\n    this.color = rgba;\n    let hsv = util.RGBToHSV(rgba.r, rgba.g, rgba.b);\n\n    let angleConvert = 2 * Math.PI;\n    let radius = this.r * hsv.s;\n    let x = this.centerCoordinates.x + radius * Math.sin(angleConvert * hsv.h);\n    let y = this.centerCoordinates.y + radius * Math.cos(angleConvert * hsv.h);\n\n    this.colorPickerSelector.style.left = x - 0.5 * this.colorPickerSelector.clientWidth + 'px';\n    this.colorPickerSelector.style.top = y - 0.5 * this.colorPickerSelector.clientHeight + 'px';\n\n    this._updatePicker(rgba);\n  }\n\n\n  /**\n   * bound to opacity control\n   * @param value\n   * @private\n   */\n  _setOpacity(value) {\n    this.color.a = value / 100;\n    this._updatePicker(this.color);\n  }\n\n\n  /**\n   * bound to brightness control\n   * @param value\n   * @private\n   */\n  _setBrightness(value) {\n    let hsv = util.RGBToHSV(this.color.r, this.color.g, this.color.b);\n    hsv.v = value / 100;\n    let rgba = util.HSVToRGB(hsv.h, hsv.s, hsv.v);\n    rgba['a'] = this.color.a;\n    this.color = rgba;\n    this._updatePicker();\n  }\n\n\n  /**\n   * update the color picker. A black circle overlays the hue circle to mimic the brightness decreasing.\n   * @param rgba\n   * @private\n   */\n  _updatePicker(rgba = this.color) {\n    let hsv = util.RGBToHSV(rgba.r, rgba.g, rgba.b);\n    let ctx = this.colorPickerCanvas.getContext('2d');\n    if (this.pixelRation === undefined) {\n      this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio ||\n      ctx.mozBackingStorePixelRatio ||\n      ctx.msBackingStorePixelRatio ||\n      ctx.oBackingStorePixelRatio ||\n      ctx.backingStorePixelRatio || 1);\n    }\n    ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);\n\n    // clear the canvas\n    let w = this.colorPickerCanvas.clientWidth;\n    let h = this.colorPickerCanvas.clientHeight;\n    ctx.clearRect(0, 0, w, h);\n\n    ctx.putImageData(this.hueCircle, 0,0);\n    ctx.fillStyle = 'rgba(0,0,0,' + (1- hsv.v) + ')';\n    ctx.circle(this.centerCoordinates.x, this.centerCoordinates.y, this.r);\n    ctx.fill();\n\n    this.brightnessRange.value = 100 * hsv.v;\n    this.opacityRange.value    = 100 * rgba.a;\n\n    this.initialColorDiv.style.backgroundColor = 'rgba(' + this.initialColor.r + ',' + this.initialColor.g + ',' + this.initialColor.b + ',' + this.initialColor.a + ')';\n    this.newColorDiv.style.backgroundColor = 'rgba(' + this.color.r + ',' + this.color.g + ',' + this.color.b + ',' + this.color.a + ')';\n  }\n\n\n  /**\n   * used by create to set the size of the canvas.\n   * @private\n   */\n  _setSize() {\n    this.colorPickerCanvas.style.width = '100%';\n    this.colorPickerCanvas.style.height = '100%';\n\n    this.colorPickerCanvas.width = 289 * this.pixelRatio;\n    this.colorPickerCanvas.height = 289 * this.pixelRatio;\n  }\n\n\n  /**\n   * create all dom elements\n   * TODO: cleanup, lots of similar dom elements\n   * @private\n   */\n  _create() {\n    this.frame = document.createElement('div');\n    this.frame.className = 'vis-color-picker';\n\n    this.colorPickerDiv = document.createElement('div');\n    this.colorPickerSelector = document.createElement('div');\n    this.colorPickerSelector.className = 'vis-selector';\n    this.colorPickerDiv.appendChild(this.colorPickerSelector);\n\n    this.colorPickerCanvas = document.createElement('canvas');\n    this.colorPickerDiv.appendChild(this.colorPickerCanvas);\n\n    if (!this.colorPickerCanvas.getContext) {\n      let noCanvas = document.createElement( 'DIV' );\n      noCanvas.style.color = 'red';\n      noCanvas.style.fontWeight =  'bold' ;\n      noCanvas.style.padding =  '10px';\n      noCanvas.innerHTML =  'Error: your browser does not support HTML canvas';\n      this.colorPickerCanvas.appendChild(noCanvas);\n    }\n    else {\n      let ctx = this.colorPickerCanvas.getContext(\"2d\");\n      this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio ||\n      ctx.mozBackingStorePixelRatio ||\n      ctx.msBackingStorePixelRatio ||\n      ctx.oBackingStorePixelRatio ||\n      ctx.backingStorePixelRatio || 1);\n\n      this.colorPickerCanvas.getContext(\"2d\").setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);\n    }\n\n    this.colorPickerDiv.className = 'vis-color';\n\n    this.opacityDiv = document.createElement('div');\n    this.opacityDiv.className = 'vis-opacity';\n\n    this.brightnessDiv = document.createElement('div');\n    this.brightnessDiv.className = 'vis-brightness';\n\n    this.arrowDiv = document.createElement('div');\n    this.arrowDiv.className = 'vis-arrow';\n\n    this.opacityRange = document.createElement('input');\n    try {\n      this.opacityRange.type = 'range'; // Not supported on IE9\n      this.opacityRange.min = '0';\n      this.opacityRange.max = '100';\n    }\n    catch (err) {}\n    this.opacityRange.value = '100';\n    this.opacityRange.className = 'vis-range';\n\n    this.brightnessRange = document.createElement('input');\n    try {\n      this.brightnessRange.type = 'range'; // Not supported on IE9\n      this.brightnessRange.min = '0';\n      this.brightnessRange.max = '100';\n    }\n    catch (err) {}\n    this.brightnessRange.value = '100';\n    this.brightnessRange.className = 'vis-range';\n\n    this.opacityDiv.appendChild(this.opacityRange);\n    this.brightnessDiv.appendChild(this.brightnessRange);\n\n    var me = this;\n    this.opacityRange.onchange = function () {me._setOpacity(this.value);};\n    this.opacityRange.oninput  = function () {me._setOpacity(this.value);};\n    this.brightnessRange.onchange = function () {me._setBrightness(this.value);};\n    this.brightnessRange.oninput  = function () {me._setBrightness(this.value);};\n\n    this.brightnessLabel = document.createElement(\"div\");\n    this.brightnessLabel.className = \"vis-label vis-brightness\";\n    this.brightnessLabel.innerHTML = 'brightness:';\n\n    this.opacityLabel = document.createElement(\"div\");\n    this.opacityLabel.className = \"vis-label vis-opacity\";\n    this.opacityLabel.innerHTML = 'opacity:';\n\n    this.newColorDiv = document.createElement(\"div\");\n    this.newColorDiv.className = \"vis-new-color\";\n    this.newColorDiv.innerHTML = 'new';\n\n    this.initialColorDiv = document.createElement(\"div\");\n    this.initialColorDiv.className = \"vis-initial-color\";\n    this.initialColorDiv.innerHTML = 'initial';\n\n    this.cancelButton = document.createElement(\"div\");\n    this.cancelButton.className = \"vis-button vis-cancel\";\n    this.cancelButton.innerHTML = 'cancel';\n    this.cancelButton.onclick = this._hide.bind(this, false);\n\n    this.applyButton = document.createElement(\"div\");\n    this.applyButton.className = \"vis-button vis-apply\";\n    this.applyButton.innerHTML = 'apply';\n    this.applyButton.onclick = this._apply.bind(this);\n\n    this.saveButton = document.createElement(\"div\");\n    this.saveButton.className = \"vis-button vis-save\";\n    this.saveButton.innerHTML = 'save';\n    this.saveButton.onclick = this._save.bind(this);\n\n    this.loadButton = document.createElement(\"div\");\n    this.loadButton.className = \"vis-button vis-load\";\n    this.loadButton.innerHTML = 'load last';\n    this.loadButton.onclick = this._loadLast.bind(this);\n\n    this.frame.appendChild(this.colorPickerDiv);\n    this.frame.appendChild(this.arrowDiv);\n    this.frame.appendChild(this.brightnessLabel);\n    this.frame.appendChild(this.brightnessDiv);\n    this.frame.appendChild(this.opacityLabel);\n    this.frame.appendChild(this.opacityDiv);\n    this.frame.appendChild(this.newColorDiv);\n    this.frame.appendChild(this.initialColorDiv);\n\n    this.frame.appendChild(this.cancelButton);\n    this.frame.appendChild(this.applyButton);\n    this.frame.appendChild(this.saveButton);\n    this.frame.appendChild(this.loadButton);\n  }\n\n\n  /**\n   * bind hammer to the color picker\n   * @private\n   */\n  _bindHammer() {\n    this.drag = {};\n    this.pinch = {};\n    this.hammer = new Hammer(this.colorPickerCanvas);\n    this.hammer.get('pinch').set({enable: true});\n\n    hammerUtil.onTouch(this.hammer, (event) => {this._moveSelector(event)});\n    this.hammer.on('tap',       (event) => {this._moveSelector(event)});\n    this.hammer.on('panstart',  (event) => {this._moveSelector(event)});\n    this.hammer.on('panmove',   (event) => {this._moveSelector(event)});\n    this.hammer.on('panend',    (event) => {this._moveSelector(event)});\n  }\n\n\n  /**\n   * generate the hue circle. This is relatively heavy (200ms) and is done only once on the first time it is shown.\n   * @private\n   */\n  _generateHueCircle() {\n    if (this.generated === false) {\n      let ctx = this.colorPickerCanvas.getContext('2d');\n      if (this.pixelRation === undefined) {\n        this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio ||\n        ctx.mozBackingStorePixelRatio ||\n        ctx.msBackingStorePixelRatio ||\n        ctx.oBackingStorePixelRatio ||\n        ctx.backingStorePixelRatio || 1);\n      }\n      ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);\n\n      // clear the canvas\n      let w = this.colorPickerCanvas.clientWidth;\n      let h = this.colorPickerCanvas.clientHeight;\n      ctx.clearRect(0, 0, w, h);\n\n\n      // draw hue circle\n      let x, y, hue, sat;\n      this.centerCoordinates = {x: w * 0.5, y: h * 0.5};\n      this.r = 0.49 * w;\n      let angleConvert = (2 * Math.PI) / 360;\n      let hfac = 1 / 360;\n      let sfac = 1 / this.r;\n      let rgb;\n      for (hue = 0; hue < 360; hue++) {\n        for (sat = 0; sat < this.r; sat++) {\n          x = this.centerCoordinates.x + sat * Math.sin(angleConvert * hue);\n          y = this.centerCoordinates.y + sat * Math.cos(angleConvert * hue);\n          rgb = util.HSVToRGB(hue * hfac, sat * sfac, 1);\n          ctx.fillStyle = 'rgb(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ')';\n          ctx.fillRect(x - 0.5, y - 0.5, 2, 2);\n        }\n      }\n      ctx.strokeStyle = 'rgba(0,0,0,1)';\n      ctx.circle(this.centerCoordinates.x, this.centerCoordinates.y, this.r);\n      ctx.stroke();\n\n      this.hueCircle = ctx.getImageData(0,0,w,h);\n    }\n    this.generated = true;\n  }\n\n\n  /**\n   * move the selector. This is called by hammer functions.\n   *\n   * @param event\n   * @private\n   */\n  _moveSelector(event) {\n    let rect = this.colorPickerDiv.getBoundingClientRect();\n    let left = event.center.x - rect.left;\n    let top = event.center.y - rect.top;\n\n    let centerY = 0.5 * this.colorPickerDiv.clientHeight;\n    let centerX = 0.5 * this.colorPickerDiv.clientWidth;\n\n    let x = left - centerX;\n    let y = top - centerY;\n\n    let angle = Math.atan2(x,y);\n    let radius = 0.98 * Math.min(Math.sqrt(x * x + y * y), centerX);\n\n    let newTop = Math.cos(angle) * radius + centerY;\n    let newLeft = Math.sin(angle) * radius + centerX;\n\n    this.colorPickerSelector.style.top = newTop - 0.5 * this.colorPickerSelector.clientHeight + 'px';\n    this.colorPickerSelector.style.left = newLeft - 0.5 * this.colorPickerSelector.clientWidth + 'px';\n\n    // set color\n    let h = angle / (2 * Math.PI);\n    h = h < 0 ? h + 1 : h;\n    let s = radius / this.r;\n    let hsv = util.RGBToHSV(this.color.r, this.color.g, this.color.b);\n    hsv.h = h;\n    hsv.s = s;\n    let rgba = util.HSVToRGB(hsv.h, hsv.s, hsv.v);\n    rgba['a'] = this.color.a;\n    this.color = rgba;\n\n    // update previews\n    this.initialColorDiv.style.backgroundColor = 'rgba(' + this.initialColor.r + ',' + this.initialColor.g + ',' + this.initialColor.b + ',' + this.initialColor.a + ')';\n    this.newColorDiv.style.backgroundColor = 'rgba(' + this.color.r + ',' + this.color.g + ',' + this.color.b + ',' + this.color.a + ')';\n  }\n}\n\nexport default ColorPicker;\n\n\n// WEBPACK FOOTER //\n// ./lib/shared/ColorPicker.js","var Hammer = require('./module/hammer');\n\n/**\n * Register a touch event, taking place before a gesture\n * @param {Hammer} hammer       A hammer instance\n * @param {function} callback   Callback, called as callback(event)\n */\nexports.onTouch = function (hammer, callback) {\n  callback.inputHandler = function (event) {\n    if (event.isFirst) {\n      callback(event);\n    }\n  };\n\n  hammer.on('hammer.input', callback.inputHandler);\n};\n\n/**\n * Register a release event, taking place after a gesture\n * @param {Hammer} hammer       A hammer instance\n * @param {function} callback   Callback, called as callback(event)\n */\nexports.onRelease = function (hammer, callback) {\n  callback.inputHandler = function (event) {\n    if (event.isFinal) {\n      callback(event);\n    }\n  };\n\n  return hammer.on('hammer.input', callback.inputHandler);\n};\n\n\n/**\n * Unregister a touch event, taking place before a gesture\n * @param {Hammer} hammer       A hammer instance\n * @param {function} callback   Callback, called as callback(event)\n */\nexports.offTouch = function (hammer, callback) {\n  hammer.off('hammer.input', callback.inputHandler);\n};\n\n/**\n * Unregister a release event, taking place before a gesture\n * @param {Hammer} hammer       A hammer instance\n * @param {function} callback   Callback, called as callback(event)\n */\nexports.offRelease = exports.offTouch;\n\n/**\n * Hack the PinchRecognizer such that it doesn't prevent default behavior\n * for vertical panning.\n *\n * Yeah ... this is quite a hack ... see https://github.com/hammerjs/hammer.js/issues/932\n *\n * @param {Hammer.Pinch} pinchRecognizer\n * @return {Hammer.Pinch} returns the pinchRecognizer\n */\nexports.disablePreventDefaultVertically = function (pinchRecognizer) {\n  var TOUCH_ACTION_PAN_Y = 'pan-y';\n\n  pinchRecognizer.getTouchAction = function() {\n    // default method returns [TOUCH_ACTION_NONE]\n    return [TOUCH_ACTION_PAN_Y];\n  };\n\n  return pinchRecognizer;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./lib/hammerUtil.js","var util = require('../util');\n\nlet errorFound = false;\nlet allOptions;\nlet printStyle = 'background: #FFeeee; color: #dd0000';\n/**\n *  Used to validate options.\n */\nclass Validator {\n  constructor() {\n  }\n\n  /**\n   * Main function to be called\n   * @param options\n   * @param subObject\n   * @returns {boolean}\n   */\n  static validate(options, referenceOptions, subObject) {\n    errorFound = false;\n    allOptions = referenceOptions;\n    let usedOptions = referenceOptions;\n    if (subObject !== undefined) {\n      usedOptions = referenceOptions[subObject];\n    }\n    Validator.parse(options, usedOptions, []);\n    return errorFound;\n  }\n\n\n  /**\n   * Will traverse an object recursively and check every value\n   * @param options\n   * @param referenceOptions\n   * @param path\n   */\n  static parse(options, referenceOptions, path) {\n    for (let option in options) {\n      if (options.hasOwnProperty(option)) {\n        Validator.check(option, options, referenceOptions, path);\n      }\n    }\n  }\n\n\n  /**\n   * Check every value. If the value is an object, call the parse function on that object.\n   * @param option\n   * @param options\n   * @param referenceOptions\n   * @param path\n   */\n  static check(option, options, referenceOptions, path) {\n    if (referenceOptions[option] === undefined && referenceOptions.__any__ === undefined) {\n      Validator.getSuggestion(option, referenceOptions, path);\n    }\n    else if (referenceOptions[option] === undefined && referenceOptions.__any__ !== undefined) {\n      // __any__ is a wildcard. Any value is accepted and will be further analysed by reference.\n      if (Validator.getType(options[option]) === 'object' && referenceOptions['__any__'].__type__ !== undefined) {\n        // if the any subgroup is not a predefined object int he configurator we do not look deeper into the object.\n        Validator.checkFields(option, options, referenceOptions, '__any__', referenceOptions['__any__'].__type__, path);\n      }\n      else {\n        Validator.checkFields(option, options, referenceOptions, '__any__', referenceOptions['__any__'], path);\n      }\n    }\n    else {\n      // Since all options in the reference are objects, we can check whether they are supposed to be object to look for the __type__ field.\n      if (referenceOptions[option].__type__ !== undefined) {\n        // if this should be an object, we check if the correct type has been supplied to account for shorthand options.\n        Validator.checkFields(option, options, referenceOptions, option, referenceOptions[option].__type__, path);\n      }\n      else {\n        Validator.checkFields(option, options, referenceOptions, option, referenceOptions[option], path);\n      }\n    }\n  }\n\n  /**\n   *\n   * @param {String}  option     | the option property\n   * @param {Object}  options    | The supplied options object\n   * @param {Object}  referenceOptions    | The reference options containing all options and their allowed formats\n   * @param {String}  referenceOption     | Usually this is the same as option, except when handling an __any__ tag.\n   * @param {String}  refOptionType       | This is the type object from the reference options\n   * @param {Array}   path      | where in the object is the option\n   */\n  static checkFields(option, options, referenceOptions, referenceOption, refOptionObj, path) {\n    let optionType = Validator.getType(options[option]);\n    let refOptionType = refOptionObj[optionType];\n    if (refOptionType !== undefined) {\n      // if the type is correct, we check if it is supposed to be one of a few select values\n      if (Validator.getType(refOptionType) === 'array') {\n        if (refOptionType.indexOf(options[option]) === -1) {\n          console.log('%cInvalid option detected in \"' + option + '\".' +\n            ' Allowed values are:' + Validator.print(refOptionType) + ' not \"' + options[option] + '\". ' + Validator.printLocation(path, option), printStyle);\n          errorFound = true;\n        }\n        else if (optionType === 'object' && referenceOption !== \"__any__\") {\n          path = util.copyAndExtendArray(path, option);\n          Validator.parse(options[option], referenceOptions[referenceOption], path);\n        }\n      }\n      else if (optionType === 'object' && referenceOption !== \"__any__\") {\n        path = util.copyAndExtendArray(path, option);\n        Validator.parse(options[option], referenceOptions[referenceOption], path);\n      }\n    }\n    else if (refOptionObj['any'] === undefined) {\n      // type of the field is incorrect and the field cannot be any\n      console.log('%cInvalid type received for \"' + option + '\". Expected: ' + Validator.print(Object.keys(refOptionObj)) + '. Received [' + optionType + '] \"' + options[option] + '\"' + Validator.printLocation(path, option), printStyle);\n      errorFound = true;\n    }\n  }\n\n\n  static getType(object) {\n    var type = typeof object;\n\n    if (type === 'object') {\n      if (object === null) {\n        return 'null';\n      }\n      if (object instanceof Boolean) {\n        return 'boolean';\n      }\n      if (object instanceof Number) {\n        return 'number';\n      }\n      if (object instanceof String) {\n        return 'string';\n      }\n      if (Array.isArray(object)) {\n        return 'array';\n      }\n      if (object instanceof Date) {\n        return 'date';\n      }\n      if (object.nodeType !== undefined) {\n        return 'dom';\n      }\n      if (object._isAMomentObject === true) {\n        return 'moment';\n      }\n      return 'object';\n    }\n    else if (type === 'number') {\n      return 'number';\n    }\n    else if (type === 'boolean') {\n      return 'boolean';\n    }\n    else if (type === 'string') {\n      return 'string';\n    }\n    else if (type === undefined) {\n      return 'undefined';\n    }\n    return type;\n  }\n\n  static getSuggestion(option, options, path) {\n    let localSearch = Validator.findInOptions(option,options,path,false);\n    let globalSearch = Validator.findInOptions(option,allOptions,[],true);\n\n    let localSearchThreshold = 8;\n    let globalSearchThreshold = 4;\n\n    if (localSearch.indexMatch !== undefined) {\n      console.log('%cUnknown option detected: \"' + option + '\" in ' + Validator.printLocation(localSearch.path, option,'') + 'Perhaps it was incomplete? Did you mean: \"' + localSearch.indexMatch + '\"?\\n\\n', printStyle);\n    }\n    else if (globalSearch.distance <= globalSearchThreshold && localSearch.distance > globalSearch.distance) {\n      console.log('%cUnknown option detected: \"' + option + '\" in ' + Validator.printLocation(localSearch.path, option,'') + 'Perhaps it was misplaced? Matching option found at: ' + Validator.printLocation(globalSearch.path, globalSearch.closestMatch,''), printStyle);\n    }\n    else if (localSearch.distance <= localSearchThreshold) {\n      console.log('%cUnknown option detected: \"' + option + '\". Did you mean \"' + localSearch.closestMatch + '\"?' + Validator.printLocation(localSearch.path, option), printStyle);\n    }\n    else {\n      console.log('%cUnknown option detected: \"' + option + '\". Did you mean one of these: ' + Validator.print(Object.keys(options)) + Validator.printLocation(path, option), printStyle);\n    }\n\n    errorFound = true;\n  }\n\n  /**\n   * traverse the options in search for a match.\n   * @param option\n   * @param options\n   * @param path\n   * @param recursive\n   * @returns {{closestMatch: string, path: Array, distance: number}}\n   */\n  static findInOptions(option, options, path, recursive = false) {\n    let min = 1e9;\n    let closestMatch = '';\n    let closestMatchPath = [];\n    let lowerCaseOption = option.toLowerCase();\n    let indexMatch = undefined;\n    for (let op in options) {\n      let distance;\n      if (options[op].__type__ !== undefined && recursive === true) {\n        let result = Validator.findInOptions(option, options[op], util.copyAndExtendArray(path,op));\n        if (min > result.distance) {\n          closestMatch = result.closestMatch;\n          closestMatchPath = result.path;\n          min = result.distance;\n          indexMatch = result.indexMatch;\n        }\n      }\n      else {\n        if (op.toLowerCase().indexOf(lowerCaseOption) !== -1) {\n          indexMatch = op;\n        }\n        distance = Validator.levenshteinDistance(option, op);\n        if (min > distance) {\n          closestMatch = op;\n          closestMatchPath = util.copyArray(path);\n          min = distance;\n        }\n      }\n    }\n    return {closestMatch:closestMatch, path:closestMatchPath, distance:min, indexMatch: indexMatch};\n  }\n\n  static printLocation(path, option, prefix = 'Problem value found at: \\n') {\n    let str = '\\n\\n' + prefix + 'options = {\\n';\n    for (let i = 0; i < path.length; i++) {\n      for (let j = 0; j < i + 1; j++) {\n        str += '  ';\n      }\n      str += path[i] + ': {\\n'\n    }\n    for (let j = 0; j < path.length + 1; j++) {\n      str += '  ';\n    }\n    str += option + '\\n';\n    for (let i = 0; i < path.length + 1; i++) {\n      for (let j = 0; j < path.length - i; j++) {\n        str += '  ';\n      }\n      str += '}\\n'\n    }\n    return str + '\\n\\n';\n  }\n\n  static print(options) {\n    return JSON.stringify(options).replace(/(\\\")|(\\[)|(\\])|(,\"__type__\")/g, \"\").replace(/(\\,)/g, ', ')\n  }\n\n\n  // Compute the edit distance between the two given strings\n  // http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#JavaScript\n  /*\n   Copyright (c) 2011 Andrei Mackenzie\n\n   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:\n\n   The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\n   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.\n   */\n  static levenshteinDistance(a, b) {\n    if (a.length === 0) return b.length;\n    if (b.length === 0) return a.length;\n\n    var matrix = [];\n\n    // increment along the first column of each row\n    var i;\n    for (i = 0; i <= b.length; i++) {\n      matrix[i] = [i];\n    }\n\n    // increment each column in the first row\n    var j;\n    for (j = 0; j <= a.length; j++) {\n      matrix[0][j] = j;\n    }\n\n    // Fill in the rest of the matrix\n    for (i = 1; i <= b.length; i++) {\n      for (j = 1; j <= a.length; j++) {\n        if (b.charAt(i - 1) == a.charAt(j - 1)) {\n          matrix[i][j] = matrix[i - 1][j - 1];\n        } else {\n          matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, // substitution\n            Math.min(matrix[i][j - 1] + 1, // insertion\n              matrix[i - 1][j] + 1)); // deletion\n        }\n      }\n    }\n\n    return matrix[b.length][a.length];\n  }\n\n;\n}\n\n\nexport default Validator;\nexport {printStyle}\n\n\n// WEBPACK FOOTER //\n// ./lib/shared/Validator.js","var util = require('../util');\nvar hammerUtil = require('../hammerUtil');\nvar moment = require('../module/moment');\nvar Component = require('./component/Component');\nvar DateUtil = require('./DateUtil');\n\n/**\n * @constructor Range\n * A Range controls a numeric range with a start and end value.\n * The Range adjusts the range based on mouse events or programmatic changes,\n * and triggers events when the range is changing or has been changed.\n * @param {{dom: Object, domProps: Object, emitter: Emitter}} body\n * @param {Object} [options]    See description at Range.setOptions\n */\nfunction Range(body, options) {\n  var now = moment().hours(0).minutes(0).seconds(0).milliseconds(0);\n  var start = now.clone().add(-3, 'days').valueOf();\n  var end = now.clone().add(-3, 'days').valueOf(); \n\n  if(options === undefined) {\n    this.start = start;\n    this.end = end;\n  } else {\n    this.start = options.start || start\n    this.end = options.end || end\n  }\n\n  this.rolling = false;\n\n  this.body = body;\n  this.deltaDifference = 0;\n  this.scaleOffset = 0;\n  this.startToFront = false;\n  this.endToFront = true;\n\n  // default options\n  this.defaultOptions = {\n    rtl: false,\n    start: null,\n    end: null,\n    moment: moment,\n    direction: 'horizontal', // 'horizontal' or 'vertical'\n    moveable: true,\n    zoomable: true,\n    min: null,\n    max: null,\n    zoomMin: 10,                                // milliseconds\n    zoomMax: 1000 * 60 * 60 * 24 * 365 * 10000  // milliseconds\n  };\n  this.options = util.extend({}, this.defaultOptions);\n  this.props = {\n    touch: {}\n  };\n  this.animationTimer = null;\n\n  // drag listeners for dragging\n  this.body.emitter.on('panstart', this._onDragStart.bind(this));\n  this.body.emitter.on('panmove',  this._onDrag.bind(this));\n  this.body.emitter.on('panend',   this._onDragEnd.bind(this));\n\n  // mouse wheel for zooming\n  this.body.emitter.on('mousewheel', this._onMouseWheel.bind(this));\n\n  // pinch to zoom\n  this.body.emitter.on('touch', this._onTouch.bind(this));\n  this.body.emitter.on('pinch', this._onPinch.bind(this));\n\n  // on click of rolling mode button\n  this.body.dom.rollingModeBtn.addEventListener('click', this.startRolling.bind(this));\n\n  this.setOptions(options);\n}\n\nRange.prototype = new Component();\n\n/**\n * Set options for the range controller\n * @param {Object} options      Available options:\n *                              {Number | Date | String} start  Start date for the range\n *                              {Number | Date | String} end    End date for the range\n *                              {Number} min    Minimum value for start\n *                              {Number} max    Maximum value for end\n *                              {Number} zoomMin    Set a minimum value for\n *                                                  (end - start).\n *                              {Number} zoomMax    Set a maximum value for\n *                                                  (end - start).\n *                              {Boolean} moveable Enable moving of the range\n *                                                 by dragging. True by default\n *                              {Boolean} zoomable Enable zooming of the range\n *                                                 by pinching/scrolling. True by default\n */\nRange.prototype.setOptions = function (options) {\n  if (options) {\n    // copy the options that we know\n    var fields = [\n      'animation', 'direction', 'min', 'max', 'zoomMin', 'zoomMax', 'moveable', 'zoomable',\n      'moment', 'activate', 'hiddenDates', 'zoomKey', 'rtl', 'showCurrentTime', 'rollMode', 'horizontalScroll'\n    ];\n    util.selectiveExtend(fields, this.options, options);\n\n    if (options.rollingMode) {\n      this.startRolling();\n    }\n    if ('start' in options || 'end' in options) {\n      // apply a new range. both start and end are optional\n      this.setRange(options.start, options.end);\n    }\n  }\n};\n\n/**\n * Test whether direction has a valid value\n * @param {String} direction    'horizontal' or 'vertical'\n */\nfunction validateDirection (direction) {\n  if (direction != 'horizontal' && direction != 'vertical') {\n    throw new TypeError('Unknown direction \"' + direction + '\". ' +\n        'Choose \"horizontal\" or \"vertical\".');\n  }\n}\n\n/**\n * Start auto refreshing the current time bar\n */\nRange.prototype.startRolling = function() {\n  var me = this;\n\n\n  function update () {\n    me.stopRolling();\n    me.rolling = true;\n\n\n    var interval = me.end - me.start;\n    var t = util.convert(new Date(), 'Date').valueOf();\n\n    var start = t - interval / 2;\n    var end = t + interval / 2;\n    var animation = (me.options && me.options.animation !== undefined) ? me.options.animation : true;\n\n    me.setRange(start, end, false);\n\n    // determine interval to refresh\n    var scale = me.conversion(me.body.domProps.center.width).scale;\n    var interval = 1 / scale / 10;\n    if (interval < 30)   interval = 30;\n    if (interval > 1000) interval = 1000;\n\n    me.body.dom.rollingModeBtn.style.visibility = \"hidden\";\n    // start a renderTimer to adjust for the new time\n    me.currentTimeTimer = setTimeout(update, interval);\n  }\n\n  update();\n};\n\n/**\n * Stop auto refreshing the current time bar\n */\nRange.prototype.stopRolling = function() {\n  if (this.currentTimeTimer !== undefined) {\n    clearTimeout(this.currentTimeTimer);\n    this.rolling = false;\n    this.body.dom.rollingModeBtn.style.visibility = \"visible\";\n  }\n};\n\n/**\n * Set a new start and end range\n * @param {Date | Number | String} [start]\n * @param {Date | Number | String} [end]\n * @param {boolean | {duration: number, easingFunction: string}} [animation=false]\n *                                    If true (default), the range is animated\n *                                    smoothly to the new window. An object can be\n *                                    provided to specify duration and easing function.\n *                                    Default duration is 500 ms, and default easing\n *                                    function is 'easeInOutQuad'.\n * @param {Boolean} [byUser=false]\n *\n */\nRange.prototype.setRange = function(start, end, animation, byUser, event) {\n  if (byUser !== true) {\n    byUser = false;\n  }\n  var finalStart = start != undefined ? util.convert(start, 'Date').valueOf() : null;\n  var finalEnd   = end != undefined   ? util.convert(end, 'Date').valueOf()   : null;\n  this._cancelAnimation();\n\n  if (animation) { // true or an Object\n    var me = this;\n    var initStart = this.start;\n    var initEnd = this.end;\n    var duration = (typeof animation === 'object' && 'duration' in animation) ? animation.duration : 500;\n    var easingName = (typeof animation === 'object' && 'easingFunction' in animation) ? animation.easingFunction : 'easeInOutQuad';\n    var easingFunction = util.easingFunctions[easingName];\n    if (!easingFunction) {\n      throw new Error('Unknown easing function ' + JSON.stringify(easingName) + '. ' +\n          'Choose from: ' + Object.keys(util.easingFunctions).join(', '));\n    }\n\n    var initTime = new Date().valueOf();\n    var anyChanged = false;\n\n    var next = function () {\n      if (!me.props.touch.dragging) {\n        var now = new Date().valueOf();\n        var time = now - initTime;\n        var ease = easingFunction(time / duration);\n        var done = time > duration;\n        var s = (done || finalStart === null) ? finalStart : initStart + (finalStart - initStart) * ease;\n        var e = (done || finalEnd   === null) ? finalEnd   : initEnd   + (finalEnd   - initEnd)   * ease;\n\n        changed = me._applyRange(s, e);\n        DateUtil.updateHiddenDates(me.options.moment, me.body, me.options.hiddenDates);\n        anyChanged = anyChanged || changed;\n\n        var params = {\n          start: new Date(me.start), \n          end: new Date(me.end), \n          byUser:byUser,\n          event: util.elementsCensor(event)\n        }\n\n        if (changed) {\n          me.body.emitter.emit('rangechange', params);\n        }\n\n        if (done) {\n          if (anyChanged) {\n            me.body.emitter.emit('rangechanged', params);\n          }\n        }\n        else {\n          // animate with as high as possible frame rate, leave 20 ms in between\n          // each to prevent the browser from blocking\n          me.animationTimer = setTimeout(next, 20);\n        }\n      }\n    };\n\n    return next();\n  }\n  else {\n    var changed = this._applyRange(finalStart, finalEnd);\n    DateUtil.updateHiddenDates(this.options.moment, this.body, this.options.hiddenDates);\n    if (changed) {\n      var params = {\n        start: new Date(this.start), \n        end: new Date(this.end), \n        byUser:byUser, \n        event: util.elementsCensor(event)\n      };\n      this.body.emitter.emit('rangechange', params);\n      this.body.emitter.emit('rangechanged', params);\n    }\n  }\n};\n\n/**\n * Stop an animation\n * @private\n */\nRange.prototype._cancelAnimation = function () {\n  if (this.animationTimer) {\n    clearTimeout(this.animationTimer);\n    this.animationTimer = null;\n  }\n};\n\n/**\n * Set a new start and end range. This method is the same as setRange, but\n * does not trigger a range change and range changed event, and it returns\n * true when the range is changed\n * @param {Number} [start]\n * @param {Number} [end]\n * @return {Boolean} changed\n * @private\n */\nRange.prototype._applyRange = function(start, end) {\n  var newStart = (start != null) ? util.convert(start, 'Date').valueOf() : this.start,\n      newEnd   = (end != null)   ? util.convert(end, 'Date').valueOf()   : this.end,\n      max = (this.options.max != null) ? util.convert(this.options.max, 'Date').valueOf() : null,\n      min = (this.options.min != null) ? util.convert(this.options.min, 'Date').valueOf() : null,\n      diff;\n\n  // check for valid number\n  if (isNaN(newStart) || newStart === null) {\n    throw new Error('Invalid start \"' + start + '\"');\n  }\n  if (isNaN(newEnd) || newEnd === null) {\n    throw new Error('Invalid end \"' + end + '\"');\n  }\n\n  // prevent start < end\n  if (newEnd < newStart) {\n    newEnd = newStart;\n  }\n\n  // prevent start < min\n  if (min !== null) {\n    if (newStart < min) {\n      diff = (min - newStart);\n      newStart += diff;\n      newEnd += diff;\n\n      // prevent end > max\n      if (max != null) {\n        if (newEnd > max) {\n          newEnd = max;\n        }\n      }\n    }\n  }\n\n  // prevent end > max\n  if (max !== null) {\n    if (newEnd > max) {\n      diff = (newEnd - max);\n      newStart -= diff;\n      newEnd -= diff;\n\n      // prevent start < min\n      if (min != null) {\n        if (newStart < min) {\n          newStart = min;\n        }\n      }\n    }\n  }\n\n  // prevent (end-start) < zoomMin\n  if (this.options.zoomMin !== null) {\n    var zoomMin = parseFloat(this.options.zoomMin);\n    if (zoomMin < 0) {\n      zoomMin = 0;\n    }\n    if ((newEnd - newStart) < zoomMin) {\n      if ((this.end - this.start) === zoomMin && newStart > this.start && newEnd < this.end) {\n        // ignore this action, we are already zoomed to the minimum\n        newStart = this.start;\n        newEnd = this.end;\n      }\n      else {\n        // zoom to the minimum\n        diff = (zoomMin - (newEnd - newStart));\n        newStart -= diff / 2;\n        newEnd += diff / 2;\n      }\n    }\n  }\n\n  // prevent (end-start) > zoomMax\n  if (this.options.zoomMax !== null) {\n    var zoomMax = parseFloat(this.options.zoomMax);\n    if (zoomMax < 0) {\n      zoomMax = 0;\n    }\n\n    if ((newEnd - newStart) > zoomMax) {\n      if ((this.end - this.start) === zoomMax && newStart < this.start && newEnd > this.end) {\n        // ignore this action, we are already zoomed to the maximum\n        newStart = this.start;\n        newEnd = this.end;\n      }\n      else {\n        // zoom to the maximum\n        diff = ((newEnd - newStart) - zoomMax);\n        newStart += diff / 2;\n        newEnd -= diff / 2;\n      }\n    }\n  }\n\n  var changed = (this.start != newStart || this.end != newEnd);\n\n  // if the new range does NOT overlap with the old range, emit checkRangedItems to avoid not showing ranged items (ranged meaning has end time, not necessarily of type Range)\n  if (!((newStart >= this.start && newStart   <= this.end) || (newEnd   >= this.start && newEnd   <= this.end)) &&\n      !((this.start >= newStart && this.start <= newEnd)   || (this.end >= newStart   && this.end <= newEnd) )) {\n    this.body.emitter.emit('checkRangedItems');\n  }\n\n  this.start = newStart;\n  this.end = newEnd;\n  return changed;\n};\n\n/**\n * Retrieve the current range.\n * @return {Object} An object with start and end properties\n */\nRange.prototype.getRange = function() {\n  return {\n    start: this.start,\n    end: this.end\n  };\n};\n\n/**\n * Calculate the conversion offset and scale for current range, based on\n * the provided width\n * @param {Number} width\n * @returns {{offset: number, scale: number}} conversion\n */\nRange.prototype.conversion = function (width, totalHidden) {\n  return Range.conversion(this.start, this.end, width, totalHidden);\n};\n\n/**\n * Static method to calculate the conversion offset and scale for a range,\n * based on the provided start, end, and width\n * @param {Number} start\n * @param {Number} end\n * @param {Number} width\n * @returns {{offset: number, scale: number}} conversion\n */\nRange.conversion = function (start, end, width, totalHidden) {\n  if (totalHidden === undefined) {\n    totalHidden = 0;\n  }\n  if (width != 0 && (end - start != 0)) {\n    return {\n      offset: start,\n      scale: width / (end - start - totalHidden)\n    }\n  }\n  else {\n    return {\n      offset: 0,\n      scale: 1\n    };\n  }\n};\n\n/**\n * Start dragging horizontally or vertically\n * @param {Event} event\n * @private\n */\nRange.prototype._onDragStart = function(event) {\n  this.deltaDifference = 0;\n  this.previousDelta = 0;\n\n  // only allow dragging when configured as movable\n  if (!this.options.moveable) return;\n\n  // only start dragging when the mouse is inside the current range\n  if (!this._isInsideRange(event)) return;\n\n  // refuse to drag when we where pinching to prevent the timeline make a jump\n  // when releasing the fingers in opposite order from the touch screen\n  if (!this.props.touch.allowDragging) return;\n\n  this.stopRolling();\n\n  this.props.touch.start = this.start;\n  this.props.touch.end = this.end;\n  this.props.touch.dragging = true;\n\n  if (this.body.dom.root) {\n    this.body.dom.root.style.cursor = 'move';\n  }\n};\n\n/**\n * Perform dragging operation\n * @param {Event} event\n * @private\n */\nRange.prototype._onDrag = function (event) {\n  if (!event) return\n\n  if (!this.props.touch.dragging) return;\n\n  // only allow dragging when configured as movable\n  if (!this.options.moveable) return;\n\n  // TODO: this may be redundant in hammerjs2\n  // refuse to drag when we where pinching to prevent the timeline make a jump\n  // when releasing the fingers in opposite order from the touch screen\n  if (!this.props.touch.allowDragging) return;\n\n  var direction = this.options.direction;\n  validateDirection(direction);\n  var delta = (direction == 'horizontal') ? event.deltaX : event.deltaY;\n  delta -= this.deltaDifference;\n  var interval = (this.props.touch.end - this.props.touch.start);\n\n  // normalize dragging speed if cutout is in between.\n  var duration = DateUtil.getHiddenDurationBetween(this.body.hiddenDates, this.start, this.end);\n  interval -= duration;\n\n  var width = (direction == 'horizontal') ? this.body.domProps.center.width : this.body.domProps.center.height;\n\n  if (this.options.rtl) {\n    var diffRange = delta / width * interval;\n  } else {\n     var diffRange = -delta / width * interval;\n  }\n\n  var newStart = this.props.touch.start + diffRange;\n  var newEnd = this.props.touch.end + diffRange;\n\n  // snapping times away from hidden zones\n  var safeStart = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newStart, this.previousDelta-delta, true);\n  var safeEnd = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newEnd, this.previousDelta-delta, true);\n  if (safeStart != newStart || safeEnd != newEnd) {\n    this.deltaDifference += delta;\n    this.props.touch.start = safeStart;\n    this.props.touch.end = safeEnd;\n    this._onDrag(event);\n    return;\n  }\n\n  this.previousDelta = delta;\n  this._applyRange(newStart, newEnd);\n\n\n  var startDate = new Date(this.start);\n  var endDate = new Date(this.end);\n\n  // fire a rangechange event\n  this.body.emitter.emit('rangechange', {\n    start: startDate,\n    end:   endDate,\n    byUser: true,\n    event: util.elementsCensor(event)\n  });\n\n  // fire a panmove event\n  this.body.emitter.emit('panmove');\n};\n\n/**\n * Stop dragging operation\n * @param {event} event\n * @private\n */\nRange.prototype._onDragEnd = function (event) {\n  if (!this.props.touch.dragging) return;\n\n  // only allow dragging when configured as movable\n  if (!this.options.moveable) return;\n\n  // TODO: this may be redundant in hammerjs2\n  // refuse to drag when we where pinching to prevent the timeline make a jump\n  // when releasing the fingers in opposite order from the touch screen\n  if (!this.props.touch.allowDragging) return;\n\n  this.props.touch.dragging = false;\n  if (this.body.dom.root) {\n    this.body.dom.root.style.cursor = 'auto';\n  }\n\n  // fire a rangechanged event\n  this.body.emitter.emit('rangechanged', {\n    start: new Date(this.start),\n    end:   new Date(this.end),\n    byUser: true,\n    event: util.elementsCensor(event)\n  });\n};\n\n/**\n * Event handler for mouse wheel event, used to zoom\n * Code from http://adomas.org/javascript-mouse-wheel/\n * @param {Event} event\n * @private\n */\nRange.prototype._onMouseWheel = function(event) {\n  // retrieve delta\n  var delta = 0;\n  if (event.wheelDelta) { /* IE/Opera. */\n    delta = event.wheelDelta / 120;\n  } else if (event.detail) { /* Mozilla case. */\n    // In Mozilla, sign of delta is different than in IE.\n    // Also, delta is multiple of 3.\n    delta = -event.detail / 3;\n  }\n\n  // don't allow zoom when the according key is pressed and the zoomKey option or not zoomable but movable\n  if ((this.options.zoomKey && !event[this.options.zoomKey] && this.options.zoomable) \n    || (!this.options.zoomable && this.options.moveable)) {\n    if (this.options.horizontalScroll) {\n      // Prevent default actions caused by mouse wheel\n      // (else the page and timeline both scroll)\n      event.preventDefault();\n      \n      // calculate a single scroll jump relative to the range scale\n      var diff = delta * (this.end - this.start) / 20;\n      // calculate new start and end\n      var newStart = this.start - diff;\n      var newEnd = this.end - diff;\n\n      this.setRange(newStart, newEnd, false, true, event);\n    }\n    return;\n  }\n\n  // only allow zooming when configured as zoomable and moveable\n  if (!(this.options.zoomable && this.options.moveable)) return;\n  \n  // only zoom when the mouse is inside the current range\n  if (!this._isInsideRange(event)) return;\n\n  // If delta is nonzero, handle it.\n  // Basically, delta is now positive if wheel was scrolled up,\n  // and negative, if wheel was scrolled down.\n  if (delta) {\n    // perform the zoom action. Delta is normally 1 or -1\n\n    // adjust a negative delta such that zooming in with delta 0.1\n    // equals zooming out with a delta -0.1\n    var scale;\n    if (delta < 0) {\n      scale = 1 - (delta / 5);\n    }\n    else {\n      scale = 1 / (1 + (delta / 5)) ;\n    }\n\n    // calculate center, the date to zoom around\n    var pointerDate\n    if (this.rolling) {\n      pointerDate = (this.start + this.end) / 2;\n    } else {\n      var pointer = this.getPointer({x: event.clientX, y: event.clientY}, this.body.dom.center);\n      pointerDate = this._pointerToDate(pointer);\n    }\n    this.zoom(scale, pointerDate, delta, event);\n\n    // Prevent default actions caused by mouse wheel\n    // (else the page and timeline both scroll)\n    event.preventDefault();\n  }\n};\n\n/**\n * Start of a touch gesture\n * @private\n */\nRange.prototype._onTouch = function (event) {\n  this.props.touch.start = this.start;\n  this.props.touch.end = this.end;\n  this.props.touch.allowDragging = true;\n  this.props.touch.center = null;\n  this.scaleOffset = 0;\n  this.deltaDifference = 0;\n};\n\n/**\n * Handle pinch event\n * @param {Event} event\n * @private\n */\nRange.prototype._onPinch = function (event) {\n  // only allow zooming when configured as zoomable and moveable\n  if (!(this.options.zoomable && this.options.moveable)) return;\n\n  this.props.touch.allowDragging = false;\n\n  if (!this.props.touch.center) {\n    this.props.touch.center = this.getPointer(event.center, this.body.dom.center);\n  }\n\n  this.stopRolling();\n\n  var scale = 1 / (event.scale + this.scaleOffset);\n  var centerDate = this._pointerToDate(this.props.touch.center);\n\n  var hiddenDuration = DateUtil.getHiddenDurationBetween(this.body.hiddenDates, this.start, this.end);\n  var hiddenDurationBefore = DateUtil.getHiddenDurationBefore(this.options.moment, this.body.hiddenDates, this, centerDate);\n  var hiddenDurationAfter = hiddenDuration - hiddenDurationBefore;\n\n  // calculate new start and end\n  var newStart = (centerDate - hiddenDurationBefore) + (this.props.touch.start - (centerDate - hiddenDurationBefore)) * scale;\n  var newEnd = (centerDate + hiddenDurationAfter) + (this.props.touch.end - (centerDate + hiddenDurationAfter)) * scale;\n\n  // snapping times away from hidden zones\n  this.startToFront = 1 - scale <= 0; // used to do the right auto correction with periodic hidden times\n  this.endToFront = scale - 1 <= 0;   // used to do the right auto correction with periodic hidden times\n\n  var safeStart = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newStart, 1 - scale, true);\n  var safeEnd = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newEnd, scale - 1, true);\n  if (safeStart != newStart || safeEnd != newEnd) {\n    this.props.touch.start = safeStart;\n    this.props.touch.end = safeEnd;\n    this.scaleOffset = 1 - event.scale;\n    newStart = safeStart;\n    newEnd = safeEnd;\n  }\n\n  this.setRange(newStart, newEnd, false, true, event);\n\n  this.startToFront = false; // revert to default\n  this.endToFront = true; // revert to default\n};\n\n/**\n * Test whether the mouse from a mouse event is inside the visible window,\n * between the current start and end date\n * @param {Object} event\n * @return {boolean} Returns true when inside the visible window\n * @private\n */\nRange.prototype._isInsideRange = function(event) {\n  // calculate the time where the mouse is, check whether inside\n  // and no scroll action should happen.\n  var clientX = event.center ? event.center.x : event.clientX;\n  if (this.options.rtl) {\n    var x = clientX - util.getAbsoluteLeft(this.body.dom.centerContainer);\n  } else {\n    var x = util.getAbsoluteRight(this.body.dom.centerContainer) - clientX;\n  }\n  var time = this.body.util.toTime(x);\n\n  return time >= this.start && time <= this.end;\n};\n\n/**\n * Helper function to calculate the center date for zooming\n * @param {{x: Number, y: Number}} pointer\n * @return {number} date\n * @private\n */\nRange.prototype._pointerToDate = function (pointer) {\n  var conversion;\n  var direction = this.options.direction;\n\n  validateDirection(direction);\n\n  if (direction == 'horizontal') {\n    return this.body.util.toTime(pointer.x).valueOf();\n  }\n  else {\n    var height = this.body.domProps.center.height;\n    conversion = this.conversion(height);\n    return pointer.y / conversion.scale + conversion.offset;\n  }\n};\n\n/**\n * Get the pointer location relative to the location of the dom element\n * @param {{x: Number, y: Number}} touch\n * @param {Element} element   HTML DOM element\n * @return {{x: Number, y: Number}} pointer\n * @private\n */\nRange.prototype.getPointer = function (touch, element) {\n  if (this.options.rtl) {\n    return {\n      x: util.getAbsoluteRight(element) - touch.x,\n      y: touch.y - util.getAbsoluteTop(element)\n    };\n  } else {\n    return {\n      x: touch.x - util.getAbsoluteLeft(element),\n      y: touch.y - util.getAbsoluteTop(element)\n    };\n  }\n}\n\n/**\n * Zoom the range the given scale in or out. Start and end date will\n * be adjusted, and the timeline will be redrawn. You can optionally give a\n * date around which to zoom.\n * For example, try scale = 0.9 or 1.1\n * @param {Number} scale      Scaling factor. Values above 1 will zoom out,\n *                            values below 1 will zoom in.\n * @param {Number} [center]   Value representing a date around which will\n *                            be zoomed.\n */\nRange.prototype.zoom = function(scale, center, delta, event) {\n  // if centerDate is not provided, take it half between start Date and end Date\n  if (center == null) {\n    center = (this.start + this.end) / 2;\n  }\n\n  var hiddenDuration = DateUtil.getHiddenDurationBetween(this.body.hiddenDates, this.start, this.end);\n  var hiddenDurationBefore = DateUtil.getHiddenDurationBefore(this.options.moment, this.body.hiddenDates, this, center);\n  var hiddenDurationAfter = hiddenDuration - hiddenDurationBefore;\n\n  // calculate new start and end\n  var newStart = (center-hiddenDurationBefore) + (this.start - (center-hiddenDurationBefore)) * scale;\n  var newEnd   = (center+hiddenDurationAfter) + (this.end - (center+hiddenDurationAfter)) * scale;\n\n  // snapping times away from hidden zones\n  this.startToFront = delta > 0 ? false : true; // used to do the right autocorrection with periodic hidden times\n  this.endToFront = -delta  > 0 ? false : true; // used to do the right autocorrection with periodic hidden times\n  var safeStart = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newStart, delta, true);\n  var safeEnd = DateUtil.snapAwayFromHidden(this.body.hiddenDates, newEnd, -delta, true);\n  if (safeStart != newStart || safeEnd != newEnd) {\n    newStart = safeStart;\n    newEnd = safeEnd;\n  }\n\n  this.setRange(newStart, newEnd, false, true, event);\n\n  this.startToFront = false; // revert to default\n  this.endToFront = true; // revert to default\n};\n\n\n\n/**\n * Move the range with a given delta to the left or right. Start and end\n * value will be adjusted. For example, try delta = 0.1 or -0.1\n * @param {Number}  delta     Moving amount. Positive value will move right,\n *                            negative value will move left\n */\nRange.prototype.move = function(delta) {\n  // zoom start Date and end Date relative to the centerDate\n  var diff = (this.end - this.start);\n\n  // apply new values\n  var newStart = this.start + diff * delta;\n  var newEnd = this.end + diff * delta;\n\n  // TODO: reckon with min and max range\n\n  this.start = newStart;\n  this.end = newEnd;\n};\n\n/**\n * Move the range to a new center point\n * @param {Number} moveTo      New center point of the range\n */\nRange.prototype.moveTo = function(moveTo) {\n  var center = (this.start + this.end) / 2;\n\n  var diff = center - moveTo;\n\n  // calculate new start and end\n  var newStart = this.start - diff;\n  var newEnd = this.end - diff;\n\n  this.setRange(newStart, newEnd, false, true, event);\n};\n\nmodule.exports = Range;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/Range.js","var util = require('../../util');\n\n/**\n * Prototype for visual components\n * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} [body]\n * @param {Object} [options]\n */\nfunction Component (body, options) {\n  this.options = null;\n  this.props = null;\n}\n\n/**\n * Set options for the component. The new options will be merged into the\n * current options.\n * @param {Object} options\n */\nComponent.prototype.setOptions = function(options) {\n  if (options) {\n    util.extend(this.options, options);\n  }\n};\n\n/**\n * Repaint the component\n * @return {boolean} Returns true if the component is resized\n */\nComponent.prototype.redraw = function() {\n  // should be implemented by the component\n  return false;\n};\n\n/**\n * Destroy the component. Cleanup DOM and event listeners\n */\nComponent.prototype.destroy = function() {\n  // should be implemented by the component\n};\n\n/**\n * Test whether the component is resized since the last time _isResized() was\n * called.\n * @return {Boolean} Returns true if the component is resized\n * @protected\n */\nComponent.prototype._isResized = function() {\n  var resized = (this.props._previousWidth !== this.props.width ||\n      this.props._previousHeight !== this.props.height);\n\n  this.props._previousWidth = this.props.width;\n  this.props._previousHeight = this.props.height;\n\n  return resized;\n};\n\nmodule.exports = Component;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/component/Component.js","\n/**\n * used in Core to convert the options into a volatile variable\n * \n * @param {function} moment\n * @param {Object} body\n * @param {Array | Object} hiddenDates\n */\nexports.convertHiddenOptions = function(moment, body, hiddenDates) {\n  if (hiddenDates && !Array.isArray(hiddenDates)) {\n    return exports.convertHiddenOptions(moment, body, [hiddenDates])\n  }\n\n  body.hiddenDates = [];\n  if (hiddenDates) {\n    if (Array.isArray(hiddenDates) == true) {\n      for (var i = 0; i < hiddenDates.length; i++) {\n        if (hiddenDates[i].repeat === undefined) {\n          var dateItem = {};\n          dateItem.start = moment(hiddenDates[i].start).toDate().valueOf();\n          dateItem.end = moment(hiddenDates[i].end).toDate().valueOf();\n          body.hiddenDates.push(dateItem);\n        }\n      }\n      body.hiddenDates.sort(function (a, b) {\n        return a.start - b.start;\n      }); // sort by start time\n    }\n  }\n};\n\n\n/**\n * create new entrees for the repeating hidden dates\n * @param {function} moment\n * @param {Object} body\n * @param {Array | Object} hiddenDates\n */\nexports.updateHiddenDates = function (moment, body, hiddenDates) {\n  if (hiddenDates && !Array.isArray(hiddenDates)) {\n    return exports.updateHiddenDates(moment, body, [hiddenDates])\n  }\n\n  if (hiddenDates && body.domProps.centerContainer.width !== undefined) {\n    exports.convertHiddenOptions(moment, body, hiddenDates);\n\n    var start = moment(body.range.start);\n    var end = moment(body.range.end);\n\n    var totalRange = (body.range.end - body.range.start);\n    var pixelTime = totalRange / body.domProps.centerContainer.width;\n\n    for (var i = 0; i < hiddenDates.length; i++) {\n      if (hiddenDates[i].repeat !== undefined) {\n        var startDate = moment(hiddenDates[i].start);\n        var endDate = moment(hiddenDates[i].end);\n\n        if (startDate._d == \"Invalid Date\") {\n          throw new Error(\"Supplied start date is not valid: \" + hiddenDates[i].start);\n        }\n        if (endDate._d == \"Invalid Date\") {\n          throw new Error(\"Supplied end date is not valid: \" + hiddenDates[i].end);\n        }\n\n        var duration = endDate - startDate;\n        if (duration >= 4 * pixelTime) {\n\n          var offset = 0;\n          var runUntil = end.clone();\n          switch (hiddenDates[i].repeat) {\n            case \"daily\": // case of time\n              if (startDate.day() != endDate.day()) {\n                offset = 1;\n              }\n              startDate.dayOfYear(start.dayOfYear());\n              startDate.year(start.year());\n              startDate.subtract(7,'days');\n\n              endDate.dayOfYear(start.dayOfYear());\n              endDate.year(start.year());\n              endDate.subtract(7 - offset,'days');\n\n              runUntil.add(1, 'weeks');\n              break;\n            case \"weekly\":\n              var dayOffset = endDate.diff(startDate,'days')\n              var day = startDate.day();\n\n              // set the start date to the range.start\n              startDate.date(start.date());\n              startDate.month(start.month());\n              startDate.year(start.year());\n              endDate = startDate.clone();\n\n              // force\n              startDate.day(day);\n              endDate.day(day);\n              endDate.add(dayOffset,'days');\n\n              startDate.subtract(1,'weeks');\n              endDate.subtract(1,'weeks');\n\n              runUntil.add(1, 'weeks');\n              break\n            case \"monthly\":\n              if (startDate.month() != endDate.month()) {\n                offset = 1;\n              }\n              startDate.month(start.month());\n              startDate.year(start.year());\n              startDate.subtract(1,'months');\n\n              endDate.month(start.month());\n              endDate.year(start.year());\n              endDate.subtract(1,'months');\n              endDate.add(offset,'months');\n\n              runUntil.add(1, 'months');\n              break;\n            case \"yearly\":\n              if (startDate.year() != endDate.year()) {\n                offset = 1;\n              }\n              startDate.year(start.year());\n              startDate.subtract(1,'years');\n              endDate.year(start.year());\n              endDate.subtract(1,'years');\n              endDate.add(offset,'years');\n\n              runUntil.add(1, 'years');\n              break;\n            default:\n              console.log(\"Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:\", hiddenDates[i].repeat);\n              return;\n          }\n          while (startDate < runUntil) {\n            body.hiddenDates.push({start: startDate.valueOf(), end: endDate.valueOf()});\n            switch (hiddenDates[i].repeat) {\n              case \"daily\":\n                startDate.add(1, 'days');\n                endDate.add(1, 'days');\n                break;\n              case \"weekly\":\n                startDate.add(1, 'weeks');\n                endDate.add(1, 'weeks');\n                break;\n              case \"monthly\":\n                startDate.add(1, 'months');\n                endDate.add(1, 'months');\n                break;\n              case \"yearly\":\n                startDate.add(1, 'y');\n                endDate.add(1, 'y');\n                break;\n              default:\n                console.log(\"Wrong repeat format, allowed are: daily, weekly, monthly, yearly. Given:\", hiddenDates[i].repeat);\n                return;\n            }\n          }\n          body.hiddenDates.push({start: startDate.valueOf(), end: endDate.valueOf()});\n        }\n      }\n    }\n    // remove duplicates, merge where possible\n    exports.removeDuplicates(body);\n    // ensure the new positions are not on hidden dates\n    var startHidden = exports.isHidden(body.range.start, body.hiddenDates);\n    var endHidden = exports.isHidden(body.range.end,body.hiddenDates);\n    var rangeStart = body.range.start;\n    var rangeEnd = body.range.end;\n    if (startHidden.hidden == true) {rangeStart = body.range.startToFront == true ? startHidden.startDate - 1 : startHidden.endDate + 1;}\n    if (endHidden.hidden == true)   {rangeEnd   = body.range.endToFront == true ?   endHidden.startDate - 1   : endHidden.endDate + 1;}\n    if (startHidden.hidden == true || endHidden.hidden == true) {\n      body.range._applyRange(rangeStart, rangeEnd);\n    }\n  }\n\n}\n\n\n/**\n * remove duplicates from the hidden dates list. Duplicates are evil. They mess everything up.\n * Scales with N^2\n * @param body\n */\nexports.removeDuplicates = function(body) {\n  var hiddenDates = body.hiddenDates;\n  var safeDates = [];\n  for (var i = 0; i < hiddenDates.length; i++) {\n    for (var j = 0; j < hiddenDates.length; j++) {\n      if (i != j && hiddenDates[j].remove != true && hiddenDates[i].remove != true) {\n        // j inside i\n        if (hiddenDates[j].start >= hiddenDates[i].start && hiddenDates[j].end <= hiddenDates[i].end) {\n          hiddenDates[j].remove = true;\n        }\n        // j start inside i\n        else if (hiddenDates[j].start >= hiddenDates[i].start && hiddenDates[j].start <= hiddenDates[i].end) {\n          hiddenDates[i].end = hiddenDates[j].end;\n          hiddenDates[j].remove = true;\n        }\n        // j end inside i\n        else if (hiddenDates[j].end >= hiddenDates[i].start && hiddenDates[j].end <= hiddenDates[i].end) {\n          hiddenDates[i].start = hiddenDates[j].start;\n          hiddenDates[j].remove = true;\n        }\n      }\n    }\n  }\n\n  for (var i = 0; i < hiddenDates.length; i++) {\n    if (hiddenDates[i].remove !== true) {\n      safeDates.push(hiddenDates[i]);\n    }\n  }\n\n  body.hiddenDates = safeDates;\n  body.hiddenDates.sort(function (a, b) {\n    return a.start - b.start;\n  }); // sort by start time\n};\n\nexports.printDates = function(dates) {\n  for (var i =0; i < dates.length; i++) {\n    console.log(i, new Date(dates[i].start),new Date(dates[i].end), dates[i].start, dates[i].end, dates[i].remove);\n  }\n};\n\n/**\n * Used in TimeStep to avoid the hidden times.\n * @param {function} moment\n * @param {TimeStep} timeStep\n * @param previousTime\n */\nexports.stepOverHiddenDates = function(moment, timeStep, previousTime) {\n  var stepInHidden = false;\n  var currentValue = timeStep.current.valueOf();\n  for (var i = 0; i < timeStep.hiddenDates.length; i++) {\n    var startDate = timeStep.hiddenDates[i].start;\n    var endDate = timeStep.hiddenDates[i].end;\n    if (currentValue >= startDate && currentValue < endDate) {\n      stepInHidden = true;\n      break;\n    }\n  }\n\n  if (stepInHidden == true && currentValue < timeStep._end.valueOf() && currentValue != previousTime) {\n    var prevValue = moment(previousTime);\n    var newValue = moment(endDate);\n    //check if the next step should be major\n    if (prevValue.year() != newValue.year()) {timeStep.switchedYear = true;}\n    else if (prevValue.month() != newValue.month()) {timeStep.switchedMonth = true;}\n    else if (prevValue.dayOfYear() != newValue.dayOfYear()) {timeStep.switchedDay = true;}\n\n    timeStep.current = newValue;\n  }\n};\n\n\n///**\n// * Used in TimeStep to avoid the hidden times.\n// * @param timeStep\n// * @param previousTime\n// */\n//exports.checkFirstStep = function(timeStep) {\n//  var stepInHidden = false;\n//  var currentValue = timeStep.current.valueOf();\n//  for (var i = 0; i < timeStep.hiddenDates.length; i++) {\n//    var startDate = timeStep.hiddenDates[i].start;\n//    var endDate = timeStep.hiddenDates[i].end;\n//    if (currentValue >= startDate && currentValue < endDate) {\n//      stepInHidden = true;\n//      break;\n//    }\n//  }\n//\n//  if (stepInHidden == true && currentValue <= timeStep._end.valueOf()) {\n//    var newValue = moment(endDate);\n//    timeStep.current = newValue.toDate();\n//  }\n//};\n\n/**\n * replaces the Core toScreen methods\n * @param Core\n * @param time\n * @param width\n * @returns {number}\n */\nexports.toScreen = function (Core, time, width) {\n    if (Core.body.hiddenDates.length == 0) {\n      var conversion = Core.range.conversion(width);\n      return (time.valueOf() - conversion.offset) * conversion.scale;\n    } else {\n      var hidden = exports.isHidden(time, Core.body.hiddenDates);\n      if (hidden.hidden == true) {\n        time = hidden.startDate;\n      }\n\n      var duration = exports.getHiddenDurationBetween(Core.body.hiddenDates, Core.range.start, Core.range.end);\n      if (time < Core.range.start) {\n        var conversion = Core.range.conversion(width, duration);\n        var hiddenBeforeStart = exports.getHiddenDurationBeforeStart(Core.body.hiddenDates, time, conversion.offset);\n        time = Core.options.moment(time).toDate().valueOf();\n        time = time + hiddenBeforeStart;\n        return -(conversion.offset - time.valueOf()) * conversion.scale;\n        \n      } else if (time > Core.range.end) {\n        var rangeAfterEnd = {start: Core.range.start, end: time};\n        time = exports.correctTimeForHidden(Core.options.moment, Core.body.hiddenDates, rangeAfterEnd, time);\n        var conversion = Core.range.conversion(width, duration);\n        return (time.valueOf() - conversion.offset) * conversion.scale;\n\n      } else {\n        time = exports.correctTimeForHidden(Core.options.moment, Core.body.hiddenDates, Core.range, time);\n        var conversion = Core.range.conversion(width, duration);\n        return (time.valueOf() - conversion.offset) * conversion.scale;\n      }\n    }\n  };\n\n\n/**\n * Replaces the core toTime methods\n * @param body\n * @param range\n * @param x\n * @param width\n * @returns {Date}\n */\nexports.toTime = function(Core, x, width) {\n  if (Core.body.hiddenDates.length == 0) {\n    var conversion = Core.range.conversion(width);\n    return new Date(x / conversion.scale + conversion.offset);\n  }\n  else {\n    var hiddenDuration = exports.getHiddenDurationBetween(Core.body.hiddenDates, Core.range.start, Core.range.end);\n    var totalDuration = Core.range.end - Core.range.start - hiddenDuration;\n    var partialDuration = totalDuration * x / width;\n    var accumulatedHiddenDuration = exports.getAccumulatedHiddenDuration(Core.body.hiddenDates, Core.range, partialDuration);\n\n    var newTime = new Date(accumulatedHiddenDuration + partialDuration + Core.range.start);\n    return newTime;\n  }\n};\n\n\n/**\n * Support function\n *\n * @param hiddenDates\n * @param range\n * @returns {number}\n */\nexports.getHiddenDurationBetween = function(hiddenDates, start, end) {\n  var duration = 0;\n  for (var i = 0; i < hiddenDates.length; i++) {\n    var startDate = hiddenDates[i].start;\n    var endDate = hiddenDates[i].end;\n    // if time after the cutout, and the\n    if (startDate >= start && endDate < end) {\n      duration += endDate - startDate;\n    }\n  }\n  return duration;\n};\n\n/**\n   * Support function\n   *\n   * @param hiddenDates\n   * @param start\n   * @param end\n   * @returns {number}\n   */\nexports.getHiddenDurationBeforeStart = function (hiddenDates, start, end) {\n  var duration = 0;\n  for (var i = 0; i < hiddenDates.length; i++) {\n    var startDate = hiddenDates[i].start;\n    var endDate = hiddenDates[i].end;\n\n    if (startDate >= start && endDate <= end) {\n      duration += endDate - startDate;\n    }\n  }\n  return duration;\n};\n\n\n/**\n * Support function\n * @param moment\n * @param hiddenDates\n * @param range\n * @param time\n * @returns {{duration: number, time: *, offset: number}}\n */\nexports.correctTimeForHidden = function(moment, hiddenDates, range, time) {\n  time = moment(time).toDate().valueOf();\n  time -= exports.getHiddenDurationBefore(moment, hiddenDates,range,time);\n  return time;\n};\n\nexports.getHiddenDurationBefore = function(moment, hiddenDates, range, time) {\n  var timeOffset = 0;\n  time = moment(time).toDate().valueOf();\n\n  for (var i = 0; i < hiddenDates.length; i++) {\n    var startDate = hiddenDates[i].start;\n    var endDate = hiddenDates[i].end;\n    // if time after the cutout, and the\n    if (startDate >= range.start && endDate < range.end) {\n      if (time >= endDate) {\n        timeOffset += (endDate - startDate);\n      }\n    }\n  }\n  return timeOffset;\n}\n\n/**\n * sum the duration from start to finish, including the hidden duration,\n * until the required amount has been reached, return the accumulated hidden duration\n * @param hiddenDates\n * @param range\n * @param time\n * @returns {{duration: number, time: *, offset: number}}\n */\nexports.getAccumulatedHiddenDuration = function(hiddenDates, range, requiredDuration) {\n  var hiddenDuration = 0;\n  var duration = 0;\n  var previousPoint = range.start;\n  //exports.printDates(hiddenDates)\n  for (var i = 0; i < hiddenDates.length; i++) {\n    var startDate = hiddenDates[i].start;\n    var endDate = hiddenDates[i].end;\n    // if time after the cutout, and the\n    if (startDate >= range.start && endDate < range.end) {\n      duration += startDate - previousPoint;\n      previousPoint = endDate;\n      if (duration >= requiredDuration) {\n        break;\n      }\n      else {\n        hiddenDuration += endDate - startDate;\n      }\n    }\n  }\n\n  return hiddenDuration;\n};\n\n\n\n/**\n * used to step over to either side of a hidden block. Correction is disabled on tablets, might be set to true\n * @param hiddenDates\n * @param time\n * @param direction\n * @param correctionEnabled\n * @returns {*}\n */\nexports.snapAwayFromHidden = function(hiddenDates, time, direction, correctionEnabled) {\n  var isHidden = exports.isHidden(time, hiddenDates);\n  if (isHidden.hidden == true) {\n    if (direction < 0) {\n      if (correctionEnabled == true) {\n        return isHidden.startDate - (isHidden.endDate - time) - 1;\n      }\n      else {\n        return isHidden.startDate - 1;\n      }\n    }\n    else {\n      if (correctionEnabled == true) {\n        return isHidden.endDate + (time - isHidden.startDate) + 1;\n      }\n      else {\n        return isHidden.endDate + 1;\n      }\n    }\n  }\n  else {\n    return time;\n  }\n\n}\n\n\n/**\n * Check if a time is hidden\n *\n * @param time\n * @param hiddenDates\n * @returns {{hidden: boolean, startDate: Window.start, endDate: *}}\n */\nexports.isHidden = function(time, hiddenDates) {\n  for (var i = 0; i < hiddenDates.length; i++) {\n    var startDate = hiddenDates[i].start;\n    var endDate = hiddenDates[i].end;\n\n    if (time >= startDate && time < endDate) { // if the start is entering a hidden zone\n      return {hidden: true, startDate: startDate, endDate: endDate};\n      break;\n    }\n  }\n  return {hidden: false, startDate: startDate, endDate: endDate};\n}\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/DateUtil.js","var Emitter = require('emitter-component');\nvar Hammer = require('../module/hammer');\nvar hammerUtil = require('../hammerUtil');\nvar util = require('../util');\nvar DataSet = require('../DataSet');\nvar DataView = require('../DataView');\nvar Range = require('./Range');\nvar ItemSet = require('./component/ItemSet');\nvar TimeAxis = require('./component/TimeAxis');\nvar Activator = require('../shared/Activator');\nvar DateUtil = require('./DateUtil');\nvar CustomTime = require('./component/CustomTime');\n\n/**\n * Create a timeline visualization\n * @constructor\n */\nfunction Core () {}\n\n// turn Core into an event emitter\nEmitter(Core.prototype);\n\n/**\n * Create the main DOM for the Core: a root panel containing left, right,\n * top, bottom, content, and background panel.\n * @param {Element} container  The container element where the Core will\n *                             be attached.\n * @protected\n */\nCore.prototype._create = function (container) {\n  this.dom = {};\n\n  this.dom.container = container;\n\n  this.dom.root                 = document.createElement('div');\n  this.dom.background           = document.createElement('div');\n  this.dom.backgroundVertical   = document.createElement('div');\n  this.dom.backgroundHorizontal = document.createElement('div');\n  this.dom.centerContainer      = document.createElement('div');\n  this.dom.leftContainer        = document.createElement('div');\n  this.dom.rightContainer       = document.createElement('div');\n  this.dom.center               = document.createElement('div');\n  this.dom.left                 = document.createElement('div');\n  this.dom.right                = document.createElement('div');\n  this.dom.top                  = document.createElement('div');\n  this.dom.bottom               = document.createElement('div');\n  this.dom.shadowTop            = document.createElement('div');\n  this.dom.shadowBottom         = document.createElement('div');\n  this.dom.shadowTopLeft        = document.createElement('div');\n  this.dom.shadowBottomLeft     = document.createElement('div');\n  this.dom.shadowTopRight       = document.createElement('div');\n  this.dom.shadowBottomRight    = document.createElement('div');\n  this.dom.rollingModeBtn       = document.createElement('div');\n\n  this.dom.root.className                 = 'vis-timeline';\n  this.dom.background.className           = 'vis-panel vis-background';\n  this.dom.backgroundVertical.className   = 'vis-panel vis-background vis-vertical';\n  this.dom.backgroundHorizontal.className = 'vis-panel vis-background vis-horizontal';\n  this.dom.centerContainer.className      = 'vis-panel vis-center';\n  this.dom.leftContainer.className        = 'vis-panel vis-left';\n  this.dom.rightContainer.className       = 'vis-panel vis-right';\n  this.dom.top.className                  = 'vis-panel vis-top';\n  this.dom.bottom.className               = 'vis-panel vis-bottom';\n  this.dom.left.className                 = 'vis-content';\n  this.dom.center.className               = 'vis-content';\n  this.dom.right.className                = 'vis-content';\n  this.dom.shadowTop.className            = 'vis-shadow vis-top';\n  this.dom.shadowBottom.className         = 'vis-shadow vis-bottom';\n  this.dom.shadowTopLeft.className        = 'vis-shadow vis-top';\n  this.dom.shadowBottomLeft.className     = 'vis-shadow vis-bottom';\n  this.dom.shadowTopRight.className       = 'vis-shadow vis-top';\n  this.dom.shadowBottomRight.className    = 'vis-shadow vis-bottom';\n  this.dom.rollingModeBtn.className       = 'vis-rolling-mode-btn';\n\n  this.dom.root.appendChild(this.dom.background);\n  this.dom.root.appendChild(this.dom.backgroundVertical);\n  this.dom.root.appendChild(this.dom.backgroundHorizontal);\n  this.dom.root.appendChild(this.dom.centerContainer);\n  this.dom.root.appendChild(this.dom.leftContainer);\n  this.dom.root.appendChild(this.dom.rightContainer);\n  this.dom.root.appendChild(this.dom.top);\n  this.dom.root.appendChild(this.dom.bottom);\n  this.dom.root.appendChild(this.dom.bottom);\n  this.dom.root.appendChild(this.dom.rollingModeBtn);\n\n  this.dom.centerContainer.appendChild(this.dom.center);\n  this.dom.leftContainer.appendChild(this.dom.left);\n  this.dom.rightContainer.appendChild(this.dom.right);\n  this.dom.centerContainer.appendChild(this.dom.shadowTop);\n  this.dom.centerContainer.appendChild(this.dom.shadowBottom);\n  this.dom.leftContainer.appendChild(this.dom.shadowTopLeft);\n  this.dom.leftContainer.appendChild(this.dom.shadowBottomLeft);\n  this.dom.rightContainer.appendChild(this.dom.shadowTopRight);\n  this.dom.rightContainer.appendChild(this.dom.shadowBottomRight);\n\n  // size properties of each of the panels\n  this.props = {\n    root: {},\n    background: {},\n    centerContainer: {},\n    leftContainer: {},\n    rightContainer: {},\n    center: {},\n    left: {},\n    right: {},\n    top: {},\n    bottom: {},\n    border: {},\n    scrollTop: 0,\n    scrollTopMin: 0\n  };\n\n  this.on('rangechange', function () {\n    if (this.initialDrawDone === true) {\n      this._redraw();\n    }\n  }.bind(this));\n  this.on('touch',       this._onTouch.bind(this));\n  this.on('panmove',         this._onDrag.bind(this));\n\n  var me = this;\n  this._origRedraw = this._redraw.bind(this);\n  this._redraw = util.throttle(this._origRedraw);\n\n  this.on('_change', function (properties) {\n    if (me.itemSet && me.itemSet.initialItemSetDrawn && properties && properties.queue == true) {\n      me._redraw()\n    } else {\n      me._origRedraw();\n    }\n  });\n\n  // create event listeners for all interesting events, these events will be\n  // emitted via emitter\n  this.hammer = new Hammer(this.dom.root);\n  var pinchRecognizer = this.hammer.get('pinch').set({enable: true});\n  hammerUtil.disablePreventDefaultVertically(pinchRecognizer);\n  this.hammer.get('pan').set({threshold:5, direction: Hammer.DIRECTION_HORIZONTAL});\n  this.listeners = {};\n\n  var events = [\n    'tap', 'doubletap', 'press',\n    'pinch',\n    'pan', 'panstart', 'panmove', 'panend'\n      // TODO: cleanup\n    //'touch', 'pinch',\n    //'tap', 'doubletap', 'hold',\n    //'dragstart', 'drag', 'dragend',\n    //'mousewheel', 'DOMMouseScroll' // DOMMouseScroll is needed for Firefox\n  ];\n  events.forEach(function (type) {\n    var listener = function (event) {\n      if (me.isActive()) {\n        me.emit(type, event);\n      }\n    };\n    me.hammer.on(type, listener);\n    me.listeners[type] = listener;\n  });\n\n  // emulate a touch event (emitted before the start of a pan, pinch, tap, or press)\n  hammerUtil.onTouch(this.hammer, function (event) {\n    me.emit('touch', event);\n  }.bind(this));\n\n  // emulate a release event (emitted after a pan, pinch, tap, or press)\n  hammerUtil.onRelease(this.hammer, function (event) {\n    me.emit('release', event);\n  }.bind(this));\n\n  function onMouseWheel(event) {\n    if (this.isActive()) {\n      this.emit('mousewheel', event);\n    }\n\n    // prevent scrolling if not specified explicitly or when horizontalScroll is true\n    if (!this.options.verticalScroll || this.options.horizontalScroll) return;\n\n    // prevent scrolling when zoomKey defined or activated\n    if (!this.options.zoomKey || event[this.options.zoomKey]) return;\n\n    // Prevent default actions caused by mouse wheel\n    // (else the page and timeline both scroll)\n    event.preventDefault();\n\n    var delta = 0;\n    if (event.wheelDelta) { /* IE/Opera. */\n      delta = event.wheelDelta / 120;\n    } else if (event.detail) { /* Mozilla case. */\n      // In Mozilla, sign of delta is different than in IE.\n      // Also, delta is multiple of 3.\n      delta = -event.detail / 3;\n    }\n\n    var current = this.props.scrollTop;\n    var adjusted = current + delta * 120;\n\n    if (this.isActive()) {\n      this._setScrollTop(adjusted);\n      this._redraw();\n      this.emit('scroll', event);\n    }\n  }\n\n  if (this.dom.centerContainer.addEventListener) {\n    // IE9, Chrome, Safari, Opera\n    this.dom.centerContainer.addEventListener(\"mousewheel\", onMouseWheel.bind(this), false);\n    // Firefox\n    this.dom.centerContainer.addEventListener(\"DOMMouseScroll\", onMouseWheel.bind(this), false);\n  } else {\n    // IE 6/7/8\n    this.dom.centerContainer.attachEvent(\"onmousewheel\", onMouseWheel.bind(this));\n  }\n\n  function onMouseScrollSide(event) {\n    if (!me.options.verticalScroll) return;\n    event.preventDefault();\n    if (me.isActive()) {\n      var adjusted = -event.target.scrollTop;\n      me._setScrollTop(adjusted);\n      me._redraw();\n      me.emit('scrollSide', event);\n    }\n  }\n\n  this.dom.left.parentNode.addEventListener('scroll', onMouseScrollSide.bind(this));\n  this.dom.right.parentNode.addEventListener('scroll', onMouseScrollSide.bind(this));\n\n  var itemAddedToTimeline = false;\n\n  function handleDragOver(event) {\n    if (event.preventDefault) {\n      event.preventDefault(); // Necessary. Allows us to drop.\n    }\n\n    // make sure your target is a vis element\n    if (!event.target.className.indexOf(\"vis\") > -1) return;\n\n    // make sure only one item is added every time you're over the timeline\n    if (itemAddedToTimeline) return;\n\n    event.dataTransfer.dropEffect = 'move';  \n    itemAddedToTimeline = true;\n    return false;\n  }\n\n  function handleDrop(event) {\n    // return when dropping non-vis items \n    try {\n      var itemData = JSON.parse(event.dataTransfer.getData(\"text\"))\n      if (!itemData.content) return\n    } catch (err) {\n      return false;\n    }\n\n    itemAddedToTimeline = false;\n    event.center = {\n      x: event.clientX,\n      y: event.clientY\n    }\n    me.itemSet._onAddItem(event);\n\n    return false;\n  }\n\n  this.dom.center.addEventListener('dragover', handleDragOver.bind(this), false);\n  this.dom.center.addEventListener('drop', handleDrop.bind(this), false);\n\n  this.customTimes = [];\n\n  // store state information needed for touch events\n  this.touch = {};\n\n  this.redrawCount = 0;\n  this.initialDrawDone = false;\n\n  // attach the root panel to the provided container\n  if (!container) throw new Error('No container provided');\n  container.appendChild(this.dom.root);\n};\n\n/**\n * Set options. Options will be passed to all components loaded in the Timeline.\n * @param {Object} [options]\n *                           {String} orientation\n *                              Vertical orientation for the Timeline,\n *                              can be 'bottom' (default) or 'top'.\n *                           {String | Number} width\n *                              Width for the timeline, a number in pixels or\n *                              a css string like '1000px' or '75%'. '100%' by default.\n *                           {String | Number} height\n *                              Fixed height for the Timeline, a number in pixels or\n *                              a css string like '400px' or '75%'. If undefined,\n *                              The Timeline will automatically size such that\n *                              its contents fit.\n *                           {String | Number} minHeight\n *                              Minimum height for the Timeline, a number in pixels or\n *                              a css string like '400px' or '75%'.\n *                           {String | Number} maxHeight\n *                              Maximum height for the Timeline, a number in pixels or\n *                              a css string like '400px' or '75%'.\n *                           {Number | Date | String} start\n *                              Start date for the visible window\n *                           {Number | Date | String} end\n *                              End date for the visible window\n */\nCore.prototype.setOptions = function (options) {\n  if (options) {\n    // copy the known options\n    var fields = [\n      'width', 'height', 'minHeight', 'maxHeight', 'autoResize',\n      'start', 'end', 'clickToUse', 'dataAttributes', 'hiddenDates',\n      'locale', 'locales', 'moment', 'rtl', 'zoomKey', 'horizontalScroll', 'verticalScroll'\n    ];\n    util.selectiveExtend(fields, this.options, options); \n\n    this.dom.rollingModeBtn.style.visibility = 'hidden';\n\n    if (this.options.rtl) {\n      this.dom.container.style.direction = \"rtl\";\n      this.dom.backgroundVertical.className = 'vis-panel vis-background vis-vertical-rtl';    \n    }\n\n    if (this.options.verticalScroll) {\n      if (this.options.rtl) {\n        this.dom.rightContainer.className = 'vis-panel vis-right vis-vertical-scroll';\n      } else {\n        this.dom.leftContainer.className = 'vis-panel vis-left vis-vertical-scroll';\n      }\n    }\n\n    this.options.orientation = {item:undefined,axis:undefined};\n    if ('orientation' in options) {\n      if (typeof options.orientation === 'string') {\n        this.options.orientation = {\n          item: options.orientation,\n          axis: options.orientation\n        };\n      }\n      else if (typeof options.orientation === 'object') {\n        if ('item' in options.orientation) {\n          this.options.orientation.item = options.orientation.item;\n        }\n        if ('axis' in options.orientation) {\n          this.options.orientation.axis = options.orientation.axis;\n        }\n      }\n    }\n\n    if (this.options.orientation.axis === 'both') {\n      if (!this.timeAxis2) {\n        var timeAxis2 = this.timeAxis2 = new TimeAxis(this.body);\n        timeAxis2.setOptions = function (options) {\n          var _options = options ? util.extend({}, options) : {};\n          _options.orientation = 'top'; // override the orientation option, always top\n          TimeAxis.prototype.setOptions.call(timeAxis2, _options);\n        };\n        this.components.push(timeAxis2);\n      }\n    }\n    else {\n      if (this.timeAxis2) {\n        var index = this.components.indexOf(this.timeAxis2);\n        if (index !== -1) {\n          this.components.splice(index, 1);\n        }\n        this.timeAxis2.destroy();\n        this.timeAxis2 = null;\n      }\n    }\n\n    // if the graph2d's drawPoints is a function delegate the callback to the onRender property\n    if (typeof options.drawPoints == 'function') {\n      options.drawPoints = {\n          onRender: options.drawPoints\n      };\n    }\n\n    if ('hiddenDates' in this.options) {\n      DateUtil.convertHiddenOptions(this.options.moment, this.body, this.options.hiddenDates);\n    }\n\n    if ('clickToUse' in options) {\n      if (options.clickToUse) {\n        if (!this.activator) {\n          this.activator = new Activator(this.dom.root);\n        }\n      }\n      else {\n        if (this.activator) {\n          this.activator.destroy();\n          delete this.activator;\n        }\n      }\n    }\n\n    if ('showCustomTime' in options) {\n      throw new Error('Option `showCustomTime` is deprecated. Create a custom time bar via timeline.addCustomTime(time [, id])');\n    }\n\n    // enable/disable autoResize\n    this._initAutoResize();\n  }\n\n  // propagate options to all components\n  this.components.forEach(component => component.setOptions(options));\n\n  // enable/disable configure\n  if ('configure' in options) {\n    if (!this.configurator) {\n      this.configurator = this._createConfigurator();\n    }\n\n    this.configurator.setOptions(options.configure);\n\n    // collect the settings of all components, and pass them to the configuration system\n    var appliedOptions = util.deepExtend({}, this.options);\n    this.components.forEach(function (component) {\n      util.deepExtend(appliedOptions, component.options);\n    });\n    this.configurator.setModuleOptions({global: appliedOptions});\n  }\n\n  this._redraw();\n};\n\n/**\n * Returns true when the Timeline is active.\n * @returns {boolean}\n */\nCore.prototype.isActive = function () {\n  return !this.activator || this.activator.active;\n};\n\n/**\n * Destroy the Core, clean up all DOM elements and event listeners.\n */\nCore.prototype.destroy = function () {\n  // unbind datasets\n  this.setItems(null);\n  this.setGroups(null);\n\n  // remove all event listeners\n  this.off();\n\n  // stop checking for changed size\n  this._stopAutoResize();\n\n  // remove from DOM\n  if (this.dom.root.parentNode) {\n    this.dom.root.parentNode.removeChild(this.dom.root);\n  }\n  this.dom = null;\n\n  // remove Activator\n  if (this.activator) {\n    this.activator.destroy();\n    delete this.activator;\n  }\n\n  // cleanup hammer touch events\n  for (var event in this.listeners) {\n    if (this.listeners.hasOwnProperty(event)) {\n      delete this.listeners[event];\n    }\n  }\n  this.listeners = null;\n  this.hammer = null;\n\n  // give all components the opportunity to cleanup\n  this.components.forEach(component => component.destroy());\n\n  this.body = null;\n};\n\n\n/**\n * Set a custom time bar\n * @param {Date} time\n * @param {number} [id=undefined] Optional id of the custom time bar to be adjusted.\n */\nCore.prototype.setCustomTime = function (time, id) {\n  var customTimes = this.customTimes.filter(function (component) {\n    return id === component.options.id;\n  });\n\n  if (customTimes.length === 0) {\n    throw new Error('No custom time bar found with id ' + JSON.stringify(id))\n  }\n\n  if (customTimes.length > 0) {\n    customTimes[0].setCustomTime(time);\n  }\n};\n\n/**\n * Retrieve the current custom time.\n * @param {number} [id=undefined]    Id of the custom time bar.\n * @return {Date | undefined} customTime\n */\nCore.prototype.getCustomTime = function(id) {\n  var customTimes = this.customTimes.filter(function (component) {\n    return component.options.id === id;\n  });\n\n  if (customTimes.length === 0) {\n    throw new Error('No custom time bar found with id ' + JSON.stringify(id))\n  }\n  return customTimes[0].getCustomTime();\n};\n\n/**\n * Set a custom title for the custom time bar.\n * @param {String} [title] Custom title\n * @param {number} [id=undefined]    Id of the custom time bar.\n */\nCore.prototype.setCustomTimeTitle = function(title, id) {\n  var customTimes = this.customTimes.filter(function (component) {\n    return component.options.id === id;\n  });\n\n  if (customTimes.length === 0) {\n    throw new Error('No custom time bar found with id ' + JSON.stringify(id))\n  }\n  if (customTimes.length > 0) {\n    return customTimes[0].setCustomTitle(title);\n  }\n};\n\n/**\n * Retrieve meta information from an event.\n * Should be overridden by classes extending Core\n * @param {Event} event\n * @return {Object} An object with related information.\n */\nCore.prototype.getEventProperties = function (event) {\n  return { event: event };\n};\n\n/**\n * Add custom vertical bar\n * @param {Date | String | Number} [time]  A Date, unix timestamp, or\n *                                         ISO date string. Time point where\n *                                         the new bar should be placed.\n *                                         If not provided, `new Date()` will\n *                                         be used.\n * @param {Number | String} [id=undefined] Id of the new bar. Optional\n * @return {Number | String}               Returns the id of the new bar\n */\nCore.prototype.addCustomTime = function (time, id) {\n  var timestamp = time !== undefined\n      ? util.convert(time, 'Date').valueOf()\n      : new Date();\n\n  var exists = this.customTimes.some(function (customTime) {\n    return customTime.options.id === id;\n  });\n  if (exists) {\n    throw new Error('A custom time with id ' + JSON.stringify(id) + ' already exists');\n  }\n\n  var customTime = new CustomTime(this.body, util.extend({}, this.options, {\n    time : timestamp,\n    id : id\n  }));\n\n  this.customTimes.push(customTime);\n  this.components.push(customTime);\n  this._redraw();\n\n  return id;\n};\n\n/**\n * Remove previously added custom bar\n * @param {int} id ID of the custom bar to be removed\n * @return {boolean} True if the bar exists and is removed, false otherwise\n */\nCore.prototype.removeCustomTime = function (id) {\n  var customTimes = this.customTimes.filter(function (bar) {\n    return (bar.options.id === id);\n  });\n\n  if (customTimes.length === 0) {\n    throw new Error('No custom time bar found with id ' + JSON.stringify(id))\n  }\n\n  customTimes.forEach(function (customTime) {\n    this.customTimes.splice(this.customTimes.indexOf(customTime), 1);\n    this.components.splice(this.components.indexOf(customTime), 1);\n    customTime.destroy();\n  }.bind(this))\n};\n\n\n/**\n * Get the id's of the currently visible items.\n * @returns {Array} The ids of the visible items\n */\nCore.prototype.getVisibleItems = function() {\n  return this.itemSet && this.itemSet.getVisibleItems() || [];\n};\n\n/**\n * Set Core window such that it fits all items\n * @param {Object} [options]  Available options:\n *                                `animation: boolean | {duration: number, easingFunction: string}`\n *                                    If true (default), the range is animated\n *                                    smoothly to the new window. An object can be\n *                                    provided to specify duration and easing function.\n *                                    Default duration is 500 ms, and default easing\n *                                    function is 'easeInOutQuad'.\n */\nCore.prototype.fit = function(options) {\n  var range = this.getDataRange();\n\n  // skip range set if there is no min and max date\n  if (range.min === null && range.max === null) {\n    return;\n  }\n\n  // apply a margin of 1% left and right of the data\n  var interval = range.max - range.min;\n  var min = new Date(range.min.valueOf() - interval * 0.01);\n  var max = new Date(range.max.valueOf() + interval * 0.01);\n  var animation = (options && options.animation !== undefined) ? options.animation : true;\n  this.range.setRange(min, max, animation);\n};\n\n/**\n * Calculate the data range of the items start and end dates\n * @returns {{min: Date | null, max: Date | null}}\n * @protected\n */\nCore.prototype.getDataRange = function() {\n  // must be implemented by Timeline and Graph2d\n  throw new Error('Cannot invoke abstract method getDataRange');\n};\n\n/**\n * Set the visible window. Both parameters are optional, you can change only\n * start or only end. Syntax:\n *\n *     TimeLine.setWindow(start, end)\n *     TimeLine.setWindow(start, end, options)\n *     TimeLine.setWindow(range)\n *\n * Where start and end can be a Date, number, or string, and range is an\n * object with properties start and end.\n *\n * @param {Date | Number | String | Object} [start] Start date of visible window\n * @param {Date | Number | String} [end]            End date of visible window\n * @param {Object} [options]  Available options:\n *                                `animation: boolean | {duration: number, easingFunction: string}`\n *                                    If true (default), the range is animated\n *                                    smoothly to the new window. An object can be\n *                                    provided to specify duration and easing function.\n *                                    Default duration is 500 ms, and default easing\n *                                    function is 'easeInOutQuad'.\n */\nCore.prototype.setWindow = function(start, end, options) {\n  var animation;\n  if (arguments.length == 1) {\n    var range = arguments[0];\n    animation = (range.animation !== undefined) ? range.animation : true;\n    this.range.setRange(range.start, range.end, animation);\n  }\n  else {\n    animation = (options && options.animation !== undefined) ? options.animation : true;\n    this.range.setRange(start, end, animation);\n  }\n};\n\n/**\n * Move the window such that given time is centered on screen.\n * @param {Date | Number | String} time\n * @param {Object} [options]  Available options:\n *                                `animation: boolean | {duration: number, easingFunction: string}`\n *                                    If true (default), the range is animated\n *                                    smoothly to the new window. An object can be\n *                                    provided to specify duration and easing function.\n *                                    Default duration is 500 ms, and default easing\n *                                    function is 'easeInOutQuad'.\n */\nCore.prototype.moveTo = function(time, options) {\n  var interval = this.range.end - this.range.start;\n  var t = util.convert(time, 'Date').valueOf();\n\n  var start = t - interval / 2;\n  var end = t + interval / 2;\n  var animation = (options && options.animation !== undefined) ? options.animation : true;\n\n  this.range.setRange(start, end, animation);\n};\n\n/**\n * Get the visible window\n * @return {{start: Date, end: Date}}   Visible range\n */\nCore.prototype.getWindow = function() {\n  var range = this.range.getRange();\n  return {\n    start: new Date(range.start),\n    end: new Date(range.end)\n  };\n};\n\n/**\n * Zoom in the window such that given time is centered on screen.\n * @param {Number} percentage - must be between [0..1]\n */\nCore.prototype.zoomIn = function(percentage) {\n  if (!percentage || percentage < 0 || percentage > 1) return\n  var range = this.getWindow();\n  var start = range.start.valueOf();\n  var end = range.end.valueOf();\n  var interval = end - start;\n  var newInterval = interval / (1 + percentage);\n  var distance = (interval - newInterval) / 2;\n  var newStart = start + distance;\n  var newEnd = end - distance;\n\n  this.setWindow({\n    start   : newStart,\n    end     : newEnd\n  });\n};\n\n/**\n * Zoom out the window such that given time is centered on screen.\n * @param {Number} percentage - must be between [0..1]\n */\nCore.prototype.zoomOut = function(percentage) {\n  if (!percentage || percentage < 0 || percentage > 1) return\n  var range = this.getWindow();\n  var start = range.start.valueOf();\n  var end = range.end.valueOf();\n  var interval = end - start;\n  var newStart = start - interval * percentage / 2;\n  var newEnd = end + interval * percentage / 2;\n\n  this.setWindow({\n    start   : newStart,\n    end     : newEnd\n  });\n};\n\n/**\n * Force a redraw. Can be overridden by implementations of Core\n *\n * Note: this function will be overridden on construction with a trottled version\n */\nCore.prototype.redraw = function() {\n  this._redraw();\n};\n\n/**\n * Redraw for internal use. Redraws all components. See also the public\n * method redraw.\n * @protected\n */\nCore.prototype._redraw = function() {\n  this.redrawCount++;\n  var resized = false;\n  var options = this.options;\n  var props = this.props;\n  var dom = this.dom;\n\n  if (!dom || !dom.container || dom.root.offsetWidth == 0) return; // when destroyed, or invisible\n\n  DateUtil.updateHiddenDates(this.options.moment, this.body, this.options.hiddenDates);\n\n  // update class names\n  if (options.orientation == 'top') {\n    util.addClassName(dom.root, 'vis-top');\n    util.removeClassName(dom.root, 'vis-bottom');\n  }\n  else {\n    util.removeClassName(dom.root, 'vis-top');\n    util.addClassName(dom.root, 'vis-bottom');\n  }\n\n  // update root width and height options\n  dom.root.style.maxHeight = util.option.asSize(options.maxHeight, '');\n  dom.root.style.minHeight = util.option.asSize(options.minHeight, '');\n  dom.root.style.width = util.option.asSize(options.width, '');\n\n  // calculate border widths\n  props.border.left   = (dom.centerContainer.offsetWidth - dom.centerContainer.clientWidth) / 2;\n  props.border.right  = props.border.left;\n  props.border.top    = (dom.centerContainer.offsetHeight - dom.centerContainer.clientHeight) / 2;\n  props.border.bottom = props.border.top;\n  props.borderRootHeight= dom.root.offsetHeight - dom.root.clientHeight;\n  props.borderRootWidth = dom.root.offsetWidth - dom.root.clientWidth;\n\n  // workaround for a bug in IE: the clientWidth of an element with\n  // a height:0px and overflow:hidden is not calculated and always has value 0\n  if (dom.centerContainer.clientHeight === 0) {\n    props.border.left = props.border.top;\n    props.border.right  = props.border.left;\n  }\n  if (dom.root.clientHeight === 0) {\n    props.borderRootWidth = props.borderRootHeight;\n  }\n\n  // calculate the heights. If any of the side panels is empty, we set the height to\n  // minus the border width, such that the border will be invisible\n  props.center.height = dom.center.offsetHeight;\n  props.left.height   = dom.left.offsetHeight;\n  props.right.height  = dom.right.offsetHeight;\n  props.top.height    = dom.top.clientHeight    || -props.border.top;\n  props.bottom.height = dom.bottom.clientHeight || -props.border.bottom;\n\n  // TODO: compensate borders when any of the panels is empty.\n\n  // apply auto height\n  // TODO: only calculate autoHeight when needed (else we cause an extra reflow/repaint of the DOM)\n  var contentHeight = Math.max(props.left.height, props.center.height, props.right.height);\n  var autoHeight = props.top.height + contentHeight + props.bottom.height +\n    props.borderRootHeight + props.border.top + props.border.bottom;\n  dom.root.style.height = util.option.asSize(options.height, autoHeight + 'px');\n\n  // calculate heights of the content panels\n  props.root.height = dom.root.offsetHeight;\n  props.background.height = props.root.height - props.borderRootHeight;\n  var containerHeight = props.root.height - props.top.height - props.bottom.height -\n    props.borderRootHeight;\n  props.centerContainer.height  = containerHeight;\n  props.leftContainer.height    = containerHeight;\n  props.rightContainer.height   = props.leftContainer.height;\n\n  // calculate the widths of the panels\n  props.root.width = dom.root.offsetWidth;\n  props.background.width = props.root.width - props.borderRootWidth;\n\n  if (!this.initialDrawDone) {\n    props.scrollbarWidth = util.getScrollBarWidth();\n  }\n\n  if (options.verticalScroll) {\n    if (options.rtl) {\n      props.left.width = dom.leftContainer.clientWidth || -props.border.left;\n      props.right.width = dom.rightContainer.clientWidth + props.scrollbarWidth || -props.border.right;\n    } else {\n      props.left.width = dom.leftContainer.clientWidth + props.scrollbarWidth || -props.border.left;\n      props.right.width = dom.rightContainer.clientWidth || -props.border.right;\n    }\n  } else {\n    props.left.width = dom.leftContainer.clientWidth  || -props.border.left;\n    props.right.width = dom.rightContainer.clientWidth || -props.border.right;\n  }\n\n  this._setDOM();\n\n  // update the scrollTop, feasible range for the offset can be changed\n  // when the height of the Core or of the contents of the center changed\n  var offset = this._updateScrollTop();\n\n  // reposition the scrollable contents\n  if (options.orientation.item != 'top') {\n    offset += Math.max(props.centerContainer.height - props.center.height -\n      props.border.top - props.border.bottom, 0);\n  }\n  dom.center.style.top  = offset + 'px';\n  \n  // show shadows when vertical scrolling is available\n  var visibilityTop = props.scrollTop == 0 ? 'hidden' : '';\n  var visibilityBottom = props.scrollTop == props.scrollTopMin ? 'hidden' : '';\n  dom.shadowTop.style.visibility          = visibilityTop;\n  dom.shadowBottom.style.visibility       = visibilityBottom;\n  dom.shadowTopLeft.style.visibility      = visibilityTop;\n  dom.shadowBottomLeft.style.visibility   = visibilityBottom;\n  dom.shadowTopRight.style.visibility     = visibilityTop;\n  dom.shadowBottomRight.style.visibility  = visibilityBottom;\n\n  if (options.verticalScroll) {\n    dom.rightContainer.className = 'vis-panel vis-right vis-vertical-scroll';\n    dom.leftContainer.className = 'vis-panel vis-left vis-vertical-scroll';\n\n    dom.shadowTopRight.style.visibility     = \"hidden\";\n    dom.shadowBottomRight.style.visibility  = \"hidden\";\n    dom.shadowTopLeft.style.visibility      = \"hidden\";\n    dom.shadowBottomLeft.style.visibility   = \"hidden\";\n\n    dom.left.style.top    = '0px';\n    dom.right.style.top   = '0px';\n  }\n\n  if (!options.verticalScroll ||  props.center.height < props.centerContainer.height) {\n    dom.left.style.top    = offset + 'px';\n    dom.right.style.top   = offset + 'px';\n    dom.rightContainer.className = dom.rightContainer.className.replace(new RegExp('(?:^|\\\\s)'+ 'vis-vertical-scroll' + '(?:\\\\s|$)'), ' ');\n    dom.leftContainer.className = dom.leftContainer.className.replace(new RegExp('(?:^|\\\\s)'+ 'vis-vertical-scroll' + '(?:\\\\s|$)'), ' ');\n    props.left.width = dom.leftContainer.clientWidth  || -props.border.left;\n    props.right.width = dom.rightContainer.clientWidth || -props.border.right;\n    this._setDOM();\n  }\n\n  // enable/disable vertical panning\n  var contentsOverflow = props.center.height > props.centerContainer.height;\n  this.hammer.get('pan').set({\n    direction: contentsOverflow ? Hammer.DIRECTION_ALL : Hammer.DIRECTION_HORIZONTAL\n  });\n\n  // redraw all components\n  this.components.forEach(function (component) {\n    resized = component.redraw() || resized;\n  });\n  var MAX_REDRAW = 5;\n  if (resized) {\n    if (this.redrawCount < MAX_REDRAW) {\n      this.body.emitter.emit('_change');\n      return;\n    }\n    else {\n      console.log('WARNING: infinite loop in redraw?');\n    }\n  } else {\n    this.redrawCount = 0;\n  }\n  this.initialDrawDone = true;\n\n  //Emit public 'changed' event for UI updates, see issue #1592\n  this.body.emitter.emit(\"changed\");\n};\n\nCore.prototype._setDOM = function () {\n  var props = this.props;\n  var dom = this.dom;\n\n  props.leftContainer.width = props.left.width;\n  props.rightContainer.width = props.right.width;\n  var centerWidth = props.root.width - props.left.width - props.right.width - props.borderRootWidth;\n  props.center.width          = centerWidth;\n  props.centerContainer.width = centerWidth;\n  props.top.width             = centerWidth;\n  props.bottom.width          = centerWidth;\n\n  // resize the panels\n  dom.background.style.height           = props.background.height + 'px';\n  dom.backgroundVertical.style.height   = props.background.height + 'px';\n  dom.backgroundHorizontal.style.height = props.centerContainer.height + 'px';\n  dom.centerContainer.style.height      = props.centerContainer.height + 'px';\n  dom.leftContainer.style.height        = props.leftContainer.height + 'px';\n  dom.rightContainer.style.height       = props.rightContainer.height + 'px';\n\n  dom.background.style.width            = props.background.width + 'px';\n  dom.backgroundVertical.style.width    = props.centerContainer.width + 'px';\n  dom.backgroundHorizontal.style.width  = props.background.width + 'px';\n  dom.centerContainer.style.width       = props.center.width + 'px';\n  dom.top.style.width                   = props.top.width + 'px';\n  dom.bottom.style.width                = props.bottom.width + 'px';\n\n  // reposition the panels\n  dom.background.style.left           = '0';\n  dom.background.style.top            = '0';\n  dom.backgroundVertical.style.left   = (props.left.width + props.border.left) + 'px';\n  dom.backgroundVertical.style.top    = '0';\n  dom.backgroundHorizontal.style.left = '0';\n  dom.backgroundHorizontal.style.top  = props.top.height + 'px';\n  dom.centerContainer.style.left      = props.left.width + 'px';\n  dom.centerContainer.style.top       = props.top.height + 'px';\n  dom.leftContainer.style.left        = '0';\n  dom.leftContainer.style.top         = props.top.height + 'px';\n  dom.rightContainer.style.left       = (props.left.width + props.center.width) + 'px';\n  dom.rightContainer.style.top        = props.top.height + 'px';\n  dom.top.style.left                  = props.left.width + 'px';\n  dom.top.style.top                   = '0';\n  dom.bottom.style.left               = props.left.width + 'px';\n  dom.bottom.style.top                = (props.top.height + props.centerContainer.height) + 'px';\n  dom.center.style.left               = '0';\n  dom.left.style.left                 = '0';\n  dom.right.style.left                = '0';\n}\n\n// TODO: deprecated since version 1.1.0, remove some day\nCore.prototype.repaint = function () {\n  throw new Error('Function repaint is deprecated. Use redraw instead.');\n};\n\n/**\n * Set a current time. This can be used for example to ensure that a client's\n * time is synchronized with a shared server time.\n * Only applicable when option `showCurrentTime` is true.\n * @param {Date | String | Number} time     A Date, unix timestamp, or\n *                                          ISO date string.\n */\nCore.prototype.setCurrentTime = function(time) {\n  if (!this.currentTime) {\n    throw new Error('Option showCurrentTime must be true');\n  }\n\n  this.currentTime.setCurrentTime(time);\n};\n\n/**\n * Get the current time.\n * Only applicable when option `showCurrentTime` is true.\n * @return {Date} Returns the current time.\n */\nCore.prototype.getCurrentTime = function() {\n  if (!this.currentTime) {\n    throw new Error('Option showCurrentTime must be true');\n  }\n\n  return this.currentTime.getCurrentTime();\n};\n\n/**\n * Convert a position on screen (pixels) to a datetime\n * @param {int}     x    Position on the screen in pixels\n * @return {Date}   time The datetime the corresponds with given position x\n * @protected\n */\n// TODO: move this function to Range\nCore.prototype._toTime = function(x) {\n  return DateUtil.toTime(this, x, this.props.center.width);\n};\n\n/**\n * Convert a position on the global screen (pixels) to a datetime\n * @param {int}     x    Position on the screen in pixels\n * @return {Date}   time The datetime the corresponds with given position x\n * @protected\n */\n// TODO: move this function to Range\nCore.prototype._toGlobalTime = function(x) {\n  return DateUtil.toTime(this, x, this.props.root.width);\n  //var conversion = this.range.conversion(this.props.root.width);\n  //return new Date(x / conversion.scale + conversion.offset);\n};\n\n/**\n * Convert a datetime (Date object) into a position on the screen\n * @param {Date}   time A date\n * @return {int}   x    The position on the screen in pixels which corresponds\n *                      with the given date.\n * @protected\n */\n// TODO: move this function to Range\nCore.prototype._toScreen = function(time) {\n  return DateUtil.toScreen(this, time, this.props.center.width);\n};\n\n\n\n/**\n * Convert a datetime (Date object) into a position on the root\n * This is used to get the pixel density estimate for the screen, not the center panel\n * @param {Date}   time A date\n * @return {int}   x    The position on root in pixels which corresponds\n *                      with the given date.\n * @protected\n */\n// TODO: move this function to Range\nCore.prototype._toGlobalScreen = function(time) {\n  return DateUtil.toScreen(this, time, this.props.root.width);\n  //var conversion = this.range.conversion(this.props.root.width);\n  //return (time.valueOf() - conversion.offset) * conversion.scale;\n};\n\n\n/**\n * Initialize watching when option autoResize is true\n * @private\n */\nCore.prototype._initAutoResize = function () {\n  if (this.options.autoResize == true) {\n    this._startAutoResize();\n  }\n  else {\n    this._stopAutoResize();\n  }\n};\n\n/**\n * Watch for changes in the size of the container. On resize, the Panel will\n * automatically redraw itself.\n * @private\n */\nCore.prototype._startAutoResize = function () {\n  var me = this;\n\n  this._stopAutoResize();\n\n  this._onResize = function() {\n    if (me.options.autoResize != true) {\n      // stop watching when the option autoResize is changed to false\n      me._stopAutoResize();\n      return;\n    }\n\n    if (me.dom.root) {\n      // check whether the frame is resized\n      // Note: we compare offsetWidth here, not clientWidth. For some reason,\n      // IE does not restore the clientWidth from 0 to the actual width after\n      // changing the timeline's container display style from none to visible\n      if ((me.dom.root.offsetWidth != me.props.lastWidth) ||\n        (me.dom.root.offsetHeight != me.props.lastHeight)) {\n        me.props.lastWidth = me.dom.root.offsetWidth;\n        me.props.lastHeight = me.dom.root.offsetHeight;\n        me.props.scrollbarWidth = util.getScrollBarWidth();\n\n        me.body.emitter.emit('_change');\n      }\n    }\n  };\n\n  // add event listener to window resize\n  util.addEventListener(window, 'resize', this._onResize);\n\n  //Prevent initial unnecessary redraw\n  if (me.dom.root) {\n      me.props.lastWidth = me.dom.root.offsetWidth;\n      me.props.lastHeight = me.dom.root.offsetHeight;\n  }\n\n  this.watchTimer = setInterval(this._onResize, 1000);\n};\n\n/**\n * Stop watching for a resize of the frame.\n * @private\n */\nCore.prototype._stopAutoResize = function () {\n  if (this.watchTimer) {\n    clearInterval(this.watchTimer);\n    this.watchTimer = undefined;\n  }\n\n  // remove event listener on window.resize\n  if (this._onResize) {\n    util.removeEventListener(window, 'resize', this._onResize);\n    this._onResize = null;\n  }\n};\n\n/**\n * Start moving the timeline vertically\n * @param {Event} event\n * @private\n */\nCore.prototype._onTouch = function (event) {\n  this.touch.allowDragging = true;\n  this.touch.initialScrollTop = this.props.scrollTop;\n};\n\n/**\n * Start moving the timeline vertically\n * @param {Event} event\n * @private\n */\nCore.prototype._onPinch = function (event) {\n  this.touch.allowDragging = false;\n};\n\n/**\n * Move the timeline vertically\n * @param {Event} event\n * @private\n */\nCore.prototype._onDrag = function (event) {\n  if (!event) return\n  // refuse to drag when we where pinching to prevent the timeline make a jump\n  // when releasing the fingers in opposite order from the touch screen\n  if (!this.touch.allowDragging) return;\n\n  var delta = event.deltaY;\n\n  var oldScrollTop = this._getScrollTop();\n  var newScrollTop = this._setScrollTop(this.touch.initialScrollTop + delta);\n\n  if (this.options.verticalScroll) {\n    this.dom.left.parentNode.scrollTop = -this.props.scrollTop;\n    this.dom.right.parentNode.scrollTop = -this.props.scrollTop;\n  }\n\n  if (newScrollTop != oldScrollTop) {\n    this.emit(\"verticalDrag\");\n  }\n};\n\n/**\n * Apply a scrollTop\n * @param {Number} scrollTop\n * @returns {Number} scrollTop  Returns the applied scrollTop\n * @private\n */\nCore.prototype._setScrollTop = function (scrollTop) {\n  this.props.scrollTop = scrollTop;\n  this._updateScrollTop();\n  return this.props.scrollTop;\n};\n\n/**\n * Update the current scrollTop when the height of  the containers has been changed\n * @returns {Number} scrollTop  Returns the applied scrollTop\n * @private\n */\nCore.prototype._updateScrollTop = function () {\n  // recalculate the scrollTopMin\n  var scrollTopMin = Math.min(this.props.centerContainer.height - this.props.center.height, 0); // is negative or zero\n  if (scrollTopMin != this.props.scrollTopMin) {\n    // in case of bottom orientation, change the scrollTop such that the contents\n    // do not move relative to the time axis at the bottom\n    if (this.options.orientation.item != 'top') {\n      this.props.scrollTop += (scrollTopMin - this.props.scrollTopMin);\n    }\n    this.props.scrollTopMin = scrollTopMin;\n  }\n\n  // limit the scrollTop to the feasible scroll range\n  if (this.props.scrollTop > 0) this.props.scrollTop = 0;\n  if (this.props.scrollTop < scrollTopMin) this.props.scrollTop = scrollTopMin;\n\n  if (this.options.verticalScroll) {\n    this.dom.left.parentNode.scrollTop = -this.props.scrollTop;\n    this.dom.right.parentNode.scrollTop = -this.props.scrollTop;\n  }\n\n  return this.props.scrollTop;\n};\n\n/**\n * Get the current scrollTop\n * @returns {number} scrollTop\n * @private\n */\nCore.prototype._getScrollTop = function () {\n  return this.props.scrollTop;\n};\n\n/**\n * Load a configurator\n * @return {Object}\n * @private\n */\nCore.prototype._createConfigurator = function () {\n  throw new Error('Cannot invoke abstract method _createConfigurator');\n};\n\nmodule.exports = Core;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/Core.js","var Hammer = require('../../module/hammer');\nvar util = require('../../util');\nvar DataSet = require('../../DataSet');\nvar DataView = require('../../DataView');\nvar TimeStep = require('../TimeStep');\nvar Component = require('./Component');\nvar Group = require('./Group');\nvar BackgroundGroup = require('./BackgroundGroup');\nvar BoxItem = require('./item/BoxItem');\nvar PointItem = require('./item/PointItem');\nvar RangeItem = require('./item/RangeItem');\nvar BackgroundItem = require('./item/BackgroundItem');\nimport Popup from '../../shared/Popup';\n\n\nvar UNGROUPED = '__ungrouped__';   // reserved group id for ungrouped items\nvar BACKGROUND = '__background__'; // reserved group id for background items without group\n\n/**\n * An ItemSet holds a set of items and ranges which can be displayed in a\n * range. The width is determined by the parent of the ItemSet, and the height\n * is determined by the size of the items.\n * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} body\n * @param {Object} [options]      See ItemSet.setOptions for the available options.\n * @constructor ItemSet\n * @extends Component\n */\nfunction ItemSet(body, options) {\n  this.body = body;\n  this.defaultOptions = {\n    type: null,  // 'box', 'point', 'range', 'background'\n    orientation: {\n      item: 'bottom'   // item orientation: 'top' or 'bottom'\n    },\n    align: 'auto', // alignment of box items\n    stack: true,\n    stackSubgroups: true,\n    groupOrderSwap: function(fromGroup, toGroup, groups) {\n    \tvar targetOrder = toGroup.order;\n    \ttoGroup.order = fromGroup.order;\n    \tfromGroup.order = targetOrder;\n    },\n    groupOrder: 'order',\n\n    selectable: true,\n    multiselect: false,\n    itemsAlwaysDraggable: false,\n\n    editable: {\n      updateTime: false,\n      updateGroup: false,\n      add: false,\n      remove: false,\n      overrideItems: false\n    },\n\n    groupEditable: {\n      order: false,\n      add: false,\n      remove: false\n    },    \n    \n    snap: TimeStep.snap,\n\n    onAdd: function (item, callback) {\n      callback(item);\n    },\n    onUpdate: function (item, callback) {\n      callback(item);\n    },\n    onMove: function (item, callback) {\n      callback(item);\n    },\n    onRemove: function (item, callback) {\n      callback(item);\n    },\n    onMoving: function (item, callback) {\n      callback(item);\n    },\n    onAddGroup: function (item, callback) {\n      callback(item);\n    },\n    onMoveGroup: function (item, callback) {\n      callback(item);\n    },\n    onRemoveGroup: function (item, callback) {\n      callback(item);\n    },\n\n    margin: {\n      item: {\n        horizontal: 10,\n        vertical: 10\n      },\n      axis: 20\n    },\n\n    tooltip: {\n      followMouse: false,\n      overflowMethod: 'flip'\n    },\n\n    tooltipOnItemUpdateTime: false\n  };\n\n  // options is shared by this ItemSet and all its items\n  this.options = util.extend({}, this.defaultOptions);\n  this.options.rtl = options.rtl;\n\n  // options for getting items from the DataSet with the correct type\n  this.itemOptions = {\n    type: {start: 'Date', end: 'Date'}\n  };\n\n  this.conversion = {\n    toScreen: body.util.toScreen,\n    toTime: body.util.toTime\n  };\n  this.dom = {};\n  this.props = {};\n  this.hammer = null;\n\n  var me = this;\n  this.itemsData = null;    // DataSet\n  this.groupsData = null;   // DataSet\n\n  // listeners for the DataSet of the items\n  this.itemListeners = {\n    'add': function (event, params, senderId) {\n      me._onAdd(params.items);\n    },\n    'update': function (event, params, senderId) {\n      me._onUpdate(params.items);\n    },\n    'remove': function (event, params, senderId) {\n      me._onRemove(params.items);\n    }\n  };\n\n  // listeners for the DataSet of the groups\n  this.groupListeners = {\n    'add': function (event, params, senderId) {\n      me._onAddGroups(params.items);\n    },\n    'update': function (event, params, senderId) {\n      me._onUpdateGroups(params.items);\n    },\n    'remove': function (event, params, senderId) {\n      me._onRemoveGroups(params.items);\n    }\n  };\n\n  this.items = {};      // object with an Item for every data item\n  this.groups = {};     // Group object for every group\n  this.groupIds = [];\n\n  this.selection = [];  // list with the ids of all selected nodes\n  this.stackDirty = true; // if true, all items will be restacked on next redraw\n\n  this.touchParams = {}; // stores properties while dragging\n  this.groupTouchParams = {};\n  // create the HTML DOM\n\n  this._create();\n\n  this.setOptions(options);\n}\n\nItemSet.prototype = new Component();\n\n// available item types will be registered here\nItemSet.types = {\n  background: BackgroundItem,\n  box: BoxItem,\n  range: RangeItem,\n  point: PointItem\n};\n\n/**\n * Create the HTML DOM for the ItemSet\n */\nItemSet.prototype._create = function(){\n  var frame = document.createElement('div');\n  frame.className = 'vis-itemset';\n  frame['timeline-itemset'] = this;\n  this.dom.frame = frame;\n\n  // create background panel\n  var background = document.createElement('div');\n  background.className = 'vis-background';\n  frame.appendChild(background);\n  this.dom.background = background;\n\n  // create foreground panel\n  var foreground = document.createElement('div');\n  foreground.className = 'vis-foreground';\n  frame.appendChild(foreground);\n  this.dom.foreground = foreground;\n\n  // create axis panel\n  var axis = document.createElement('div');\n  axis.className = 'vis-axis';\n  this.dom.axis = axis;\n\n  // create labelset\n  var labelSet = document.createElement('div');\n  labelSet.className = 'vis-labelset';\n  this.dom.labelSet = labelSet;\n\n  // create ungrouped Group\n  this._updateUngrouped();\n\n  // create background Group\n  var backgroundGroup = new BackgroundGroup(BACKGROUND, null, this);\n  backgroundGroup.show();\n  this.groups[BACKGROUND] = backgroundGroup;\n\n  // attach event listeners\n  // Note: we bind to the centerContainer for the case where the height\n  //       of the center container is larger than of the ItemSet, so we\n  //       can click in the empty area to create a new item or deselect an item.\n  this.hammer = new Hammer(this.body.dom.centerContainer);\n\n  // drag items when selected\n  this.hammer.on('hammer.input', function (event) {\n    if (event.isFirst) {\n      this._onTouch(event);\n    }\n  }.bind(this));\n  this.hammer.on('panstart', this._onDragStart.bind(this));\n  this.hammer.on('panmove',  this._onDrag.bind(this));\n  this.hammer.on('panend',   this._onDragEnd.bind(this));\n  this.hammer.get('pan').set({threshold:5, direction: Hammer.DIRECTION_HORIZONTAL});\n\n  // single select (or unselect) when tapping an item\n  this.hammer.on('tap',  this._onSelectItem.bind(this));\n\n  // multi select when holding mouse/touch, or on ctrl+click\n  this.hammer.on('press', this._onMultiSelectItem.bind(this));\n\n  // add item on doubletap\n  this.hammer.on('doubletap', this._onAddItem.bind(this));\n\n  if (this.options.rtl) {\n    this.groupHammer = new Hammer(this.body.dom.rightContainer);\n  } else {\n    this.groupHammer = new Hammer(this.body.dom.leftContainer);\n  }\n  \n  this.groupHammer.on('tap',      this._onGroupClick.bind(this));\n  this.groupHammer.on('panstart', this._onGroupDragStart.bind(this));\n  this.groupHammer.on('panmove',  this._onGroupDrag.bind(this));\n  this.groupHammer.on('panend',   this._onGroupDragEnd.bind(this));\n  this.groupHammer.get('pan').set({threshold:5, direction: Hammer.DIRECTION_VERTICAL});\n  \n  this.body.dom.centerContainer.addEventListener('mouseover', this._onMouseOver.bind(this));\n  this.body.dom.centerContainer.addEventListener('mouseout', this._onMouseOut.bind(this));\n  this.body.dom.centerContainer.addEventListener('mousemove', this._onMouseMove.bind(this));\n  // right-click on timeline \n  this.body.dom.centerContainer.addEventListener('contextmenu', this._onDragEnd.bind(this));\n\n  // attach to the DOM\n  this.show();\n};\n\n/**\n * Set options for the ItemSet. Existing options will be extended/overwritten.\n * @param {Object} [options] The following options are available:\n *                           {String} type\n *                              Default type for the items. Choose from 'box'\n *                              (default), 'point', 'range', or 'background'.\n *                              The default style can be overwritten by\n *                              individual items.\n *                           {String} align\n *                              Alignment for the items, only applicable for\n *                              BoxItem. Choose 'center' (default), 'left', or\n *                              'right'.\n *                           {String} orientation.item\n *                              Orientation of the item set. Choose 'top' or\n *                              'bottom' (default).\n *                           {Function} groupOrder\n *                              A sorting function for ordering groups\n *                           {Boolean} stack\n *                              If true (default), items will be stacked on\n *                              top of each other.\n *                           {Number} margin.axis\n *                              Margin between the axis and the items in pixels.\n *                              Default is 20.\n *                           {Number} margin.item.horizontal\n *                              Horizontal margin between items in pixels.\n *                              Default is 10.\n *                           {Number} margin.item.vertical\n *                              Vertical Margin between items in pixels.\n *                              Default is 10.\n *                           {Number} margin.item\n *                              Margin between items in pixels in both horizontal\n *                              and vertical direction. Default is 10.\n *                           {Number} margin\n *                              Set margin for both axis and items in pixels.\n *                           {Boolean} selectable\n *                              If true (default), items can be selected.\n *                           {Boolean} multiselect\n *                              If true, multiple items can be selected.\n *                              False by default.\n *                           {Boolean} editable\n *                              Set all editable options to true or false\n *                           {Boolean} editable.updateTime\n *                              Allow dragging an item to an other moment in time\n *                           {Boolean} editable.updateGroup\n *                              Allow dragging an item to an other group\n *                           {Boolean} editable.add\n *                              Allow creating new items on double tap\n *                           {Boolean} editable.remove\n *                              Allow removing items by clicking the delete button\n *                              top right of a selected item.\n *                           {Function(item: Item, callback: Function)} onAdd\n *                              Callback function triggered when an item is about to be added:\n *                              when the user double taps an empty space in the Timeline.\n *                           {Function(item: Item, callback: Function)} onUpdate\n *                              Callback function fired when an item is about to be updated.\n *                              This function typically has to show a dialog where the user\n *                              change the item. If not implemented, nothing happens.\n *                           {Function(item: Item, callback: Function)} onMove\n *                              Fired when an item has been moved. If not implemented,\n *                              the move action will be accepted.\n *                           {Function(item: Item, callback: Function)} onRemove\n *                              Fired when an item is about to be deleted.\n *                              If not implemented, the item will be always removed.\n */\nItemSet.prototype.setOptions = function(options) {\n  if (options) {\n    // copy all options that we know\n    var fields = [\n      'type', 'rtl', 'align', 'order', 'stack', 'stackSubgroups', 'selectable', 'multiselect', 'itemsAlwaysDraggable', \n      'multiselectPerGroup', 'groupOrder', 'dataAttributes', 'template', 'groupTemplate', 'visibleFrameTemplate',\n      'hide', 'snap', 'groupOrderSwap', 'tooltip', 'tooltipOnItemUpdateTime'\n    ];\n    util.selectiveExtend(fields, this.options, options);\n\n    if ('orientation' in options) {\n      if (typeof options.orientation === 'string') {\n        this.options.orientation.item = options.orientation === 'top' ? 'top' : 'bottom';\n      }\n      else if (typeof options.orientation === 'object' && 'item' in options.orientation) {\n        this.options.orientation.item = options.orientation.item;\n      }\n    }\n\n    if ('margin' in options) {\n      if (typeof options.margin === 'number') {\n        this.options.margin.axis = options.margin;\n        this.options.margin.item.horizontal = options.margin;\n        this.options.margin.item.vertical = options.margin;\n      }\n      else if (typeof options.margin === 'object') {\n        util.selectiveExtend(['axis'], this.options.margin, options.margin);\n        if ('item' in options.margin) {\n          if (typeof options.margin.item === 'number') {\n            this.options.margin.item.horizontal = options.margin.item;\n            this.options.margin.item.vertical = options.margin.item;\n          }\n          else if (typeof options.margin.item === 'object') {\n            util.selectiveExtend(['horizontal', 'vertical'], this.options.margin.item, options.margin.item);\n          }\n        }\n      }\n    }\n\n    if ('editable' in options) {\n      if (typeof options.editable === 'boolean') {\n        this.options.editable.updateTime    = options.editable;\n        this.options.editable.updateGroup   = options.editable;\n        this.options.editable.add           = options.editable;\n        this.options.editable.remove        = options.editable;\n        this.options.editable.overrideItems = false;\n      }\n      else if (typeof options.editable === 'object') {\n        util.selectiveExtend(['updateTime', 'updateGroup', 'add', 'remove', 'overrideItems'], this.options.editable, options.editable);\n      }\n    }\n\n    if ('groupEditable' in options) {\n      if (typeof options.groupEditable === 'boolean') {\n        this.options.groupEditable.order  = options.groupEditable;\n        this.options.groupEditable.add    = options.groupEditable;\n        this.options.groupEditable.remove = options.groupEditable;\n      }\n      else if (typeof options.groupEditable === 'object') {\n        util.selectiveExtend(['order', 'add', 'remove'], this.options.groupEditable, options.groupEditable);\n      }\n    }\n\n    // callback functions\n    var addCallback = (function (name) {\n      var fn = options[name];\n      if (fn) {\n        if (!(fn instanceof Function)) {\n          throw new Error('option ' + name + ' must be a function ' + name + '(item, callback)');\n        }\n        this.options[name] = fn;\n      }\n    }).bind(this);\n    ['onAdd', 'onUpdate', 'onRemove', 'onMove', 'onMoving', 'onAddGroup', 'onMoveGroup', 'onRemoveGroup'].forEach(addCallback);\n\n    // force the itemSet to refresh: options like orientation and margins may be changed\n    this.markDirty();\n  }\n};\n\n/**\n * Mark the ItemSet dirty so it will refresh everything with next redraw.\n * Optionally, all items can be marked as dirty and be refreshed.\n * @param {{refreshItems: boolean}} [options]\n */\nItemSet.prototype.markDirty = function(options) {\n  this.groupIds = [];\n  this.stackDirty = true;\n\n  if (options && options.refreshItems) {\n    util.forEach(this.items, function (item) {\n      item.dirty = true;\n      if (item.displayed) item.redraw();\n    });\n  }\n};\n\n/**\n * Destroy the ItemSet\n */\nItemSet.prototype.destroy = function() {\n  this.hide();\n  this.setItems(null);\n  this.setGroups(null);\n\n  this.hammer = null;\n\n  this.body = null;\n  this.conversion = null;\n};\n\n/**\n * Hide the component from the DOM\n */\nItemSet.prototype.hide = function() {\n  // remove the frame containing the items\n  if (this.dom.frame.parentNode) {\n    this.dom.frame.parentNode.removeChild(this.dom.frame);\n  }\n\n  // remove the axis with dots\n  if (this.dom.axis.parentNode) {\n    this.dom.axis.parentNode.removeChild(this.dom.axis);\n  }\n\n  // remove the labelset containing all group labels\n  if (this.dom.labelSet.parentNode) {\n    this.dom.labelSet.parentNode.removeChild(this.dom.labelSet);\n  }\n};\n\n/**\n * Show the component in the DOM (when not already visible).\n * @return {Boolean} changed\n */\nItemSet.prototype.show = function() {\n  // show frame containing the items\n  if (!this.dom.frame.parentNode) {\n    this.body.dom.center.appendChild(this.dom.frame);\n  }\n\n  // show axis with dots\n  if (!this.dom.axis.parentNode) {\n    this.body.dom.backgroundVertical.appendChild(this.dom.axis);\n  }\n\n  // show labelset containing labels\n  if (!this.dom.labelSet.parentNode) {\n    if (this.options.rtl) {\n      this.body.dom.right.appendChild(this.dom.labelSet);\n    } else {\n      this.body.dom.left.appendChild(this.dom.labelSet);\n    }\n  }\n};\n\n/**\n * Set selected items by their id. Replaces the current selection\n * Unknown id's are silently ignored.\n * @param {string[] | string} [ids] An array with zero or more id's of the items to be\n *                                  selected, or a single item id. If ids is undefined\n *                                  or an empty array, all items will be unselected.\n */\nItemSet.prototype.setSelection = function(ids) {\n  var i, ii, id, item;\n\n  if (ids == undefined) ids = [];\n  if (!Array.isArray(ids)) ids = [ids];\n\n  // unselect currently selected items\n  for (i = 0, ii = this.selection.length; i < ii; i++) {\n    id = this.selection[i];\n    item = this.items[id];\n    if (item) item.unselect();\n  }\n\n  // select items\n  this.selection = [];\n  for (i = 0, ii = ids.length; i < ii; i++) {\n    id = ids[i];\n    item = this.items[id];\n    if (item) {\n      this.selection.push(id);\n      item.select();\n    }\n  }\n};\n\n/**\n * Get the selected items by their id\n * @return {Array} ids  The ids of the selected items\n */\nItemSet.prototype.getSelection = function() {\n  return this.selection.concat([]);\n};\n\n/**\n * Get the id's of the currently visible items.\n * @returns {Array} The ids of the visible items\n */\nItemSet.prototype.getVisibleItems = function() {\n  var range = this.body.range.getRange();\n\n  if (this.options.rtl) { \n    var right  = this.body.util.toScreen(range.start);\n    var left = this.body.util.toScreen(range.end);\n  } else {\n    var left  = this.body.util.toScreen(range.start);\n    var right = this.body.util.toScreen(range.end);\n  }\n\n  var ids = [];\n  for (var groupId in this.groups) {\n    if (this.groups.hasOwnProperty(groupId)) {\n      var group = this.groups[groupId];\n      var rawVisibleItems = group.visibleItems;\n\n      // filter the \"raw\" set with visibleItems into a set which is really\n      // visible by pixels\n      for (var i = 0; i < rawVisibleItems.length; i++) {\n        var item = rawVisibleItems[i];\n        // TODO: also check whether visible vertically\n        if (this.options.rtl) { \n          if ((item.right < left) && (item.right + item.width > right)) {\n            ids.push(item.id);\n          }\n        } else {\n          if ((item.left < right) && (item.left + item.width > left)) {\n            ids.push(item.id);\n          }\n        }\n      }\n    }\n  }\n\n  return ids;\n};\n\n/**\n * Deselect a selected item\n * @param {String | Number} id\n * @private\n */\nItemSet.prototype._deselect = function(id) {\n  var selection = this.selection;\n  for (var i = 0, ii = selection.length; i < ii; i++) {\n    if (selection[i] == id) { // non-strict comparison!\n      selection.splice(i, 1);\n      break;\n    }\n  }\n};\n\n/**\n * Repaint the component\n * @return {boolean} Returns true if the component is resized\n */\nItemSet.prototype.redraw = function() {\n  var margin = this.options.margin,\n      range = this.body.range,\n      asSize = util.option.asSize,\n      options = this.options,\n      orientation = options.orientation.item,\n      resized = false,\n      frame = this.dom.frame;\n\n  // recalculate absolute position (before redrawing groups)\n  this.props.top = this.body.domProps.top.height + this.body.domProps.border.top;\n\n  if (this.options.rtl) {\n    this.props.right = this.body.domProps.right.width + this.body.domProps.border.right;\n  } else {\n    this.props.left = this.body.domProps.left.width + this.body.domProps.border.left;\n  }\n\n  // update class name\n  frame.className = 'vis-itemset';\n\n  // reorder the groups (if needed)\n  resized = this._orderGroups() || resized;\n\n  // check whether zoomed (in that case we need to re-stack everything)\n  // TODO: would be nicer to get this as a trigger from Range\n  var visibleInterval = range.end - range.start;\n  var zoomed = (visibleInterval != this.lastVisibleInterval) || (this.props.width != this.props.lastWidth);\n  if (zoomed) this.stackDirty = true;\n  this.lastVisibleInterval = visibleInterval;\n  this.props.lastWidth = this.props.width;\n\n  var restack = this.stackDirty;\n  var firstGroup = this._firstGroup();\n  var firstMargin = {\n    item: margin.item,\n    axis: margin.axis\n  };\n  var nonFirstMargin = {\n    item: margin.item,\n    axis: margin.item.vertical / 2\n  };\n  var height = 0;\n  var minHeight = margin.axis + margin.item.vertical;\n\n  // redraw the background group\n  this.groups[BACKGROUND].redraw(range, nonFirstMargin, restack);\n\n  // redraw all regular groups\n  util.forEach(this.groups, function (group) {\n    var groupMargin = (group == firstGroup) ? firstMargin : nonFirstMargin;\n    var groupResized = group.redraw(range, groupMargin, restack);\n    resized = groupResized || resized;\n    height += group.height;\n  });\n  height = Math.max(height, minHeight);\n  this.stackDirty = false;\n\n  // update frame height\n  frame.style.height  = asSize(height);\n\n  // calculate actual size\n  this.props.width = frame.offsetWidth;\n  this.props.height = height;\n\n  // reposition axis\n  this.dom.axis.style.top = asSize((orientation == 'top') ?\n      (this.body.domProps.top.height + this.body.domProps.border.top) :\n      (this.body.domProps.top.height + this.body.domProps.centerContainer.height));\n  if (this.options.rtl) {\n    this.dom.axis.style.right = '0';\n  } else {\n    this.dom.axis.style.left = '0';\n  }\n\n  this.initialItemSetDrawn = true;\n  // check if this component is resized\n  resized = this._isResized() || resized;\n\n  return resized;\n};\n\n/**\n * Get the first group, aligned with the axis\n * @return {Group | null} firstGroup\n * @private\n */\nItemSet.prototype._firstGroup = function() {\n  var firstGroupIndex = (this.options.orientation.item == 'top') ? 0 : (this.groupIds.length - 1);\n  var firstGroupId = this.groupIds[firstGroupIndex];\n  var firstGroup = this.groups[firstGroupId] || this.groups[UNGROUPED];\n\n  return firstGroup || null;\n};\n\n/**\n * Create or delete the group holding all ungrouped items. This group is used when\n * there are no groups specified.\n * @protected\n */\nItemSet.prototype._updateUngrouped = function() {\n  var ungrouped = this.groups[UNGROUPED];\n  var background = this.groups[BACKGROUND];\n  var item, itemId;\n\n  if (this.groupsData) {\n    // remove the group holding all ungrouped items\n    if (ungrouped) {\n      ungrouped.hide();\n      delete this.groups[UNGROUPED];\n\n      for (itemId in this.items) {\n        if (this.items.hasOwnProperty(itemId)) {\n          item = this.items[itemId];\n          item.parent && item.parent.remove(item);\n          var groupId = this._getGroupId(item.data);\n          var group = this.groups[groupId];\n          group && group.add(item) || item.hide();\n        }\n      }\n    }\n  }\n  else {\n    // create a group holding all (unfiltered) items\n    if (!ungrouped) {\n      var id = null;\n      var data = null;\n      ungrouped = new Group(id, data, this);\n      this.groups[UNGROUPED] = ungrouped;\n\n      for (itemId in this.items) {\n        if (this.items.hasOwnProperty(itemId)) {\n          item = this.items[itemId];\n          ungrouped.add(item);\n        }\n      }\n\n      ungrouped.show();\n    }\n  }\n};\n\n/**\n * Get the element for the labelset\n * @return {HTMLElement} labelSet\n */\nItemSet.prototype.getLabelSet = function() {\n  return this.dom.labelSet;\n};\n\n/**\n * Set items\n * @param {vis.DataSet | null} items\n */\nItemSet.prototype.setItems = function(items) {\n  var me = this,\n      ids,\n      oldItemsData = this.itemsData;\n\n  // replace the dataset\n  if (!items) {\n    this.itemsData = null;\n  }\n  else if (items instanceof DataSet || items instanceof DataView) {\n    this.itemsData = items;\n  }\n  else {\n    throw new TypeError('Data must be an instance of DataSet or DataView');\n  }\n\n  if (oldItemsData) {\n    // unsubscribe from old dataset\n    util.forEach(this.itemListeners, function (callback, event) {\n      oldItemsData.off(event, callback);\n    });\n\n    // remove all drawn items\n    ids = oldItemsData.getIds();\n    this._onRemove(ids);\n  }\n\n  if (this.itemsData) {\n    // subscribe to new dataset\n    var id = this.id;\n    util.forEach(this.itemListeners, function (callback, event) {\n      me.itemsData.on(event, callback, id);\n    });\n\n    // add all new items\n    ids = this.itemsData.getIds();\n    this._onAdd(ids);\n\n    // update the group holding all ungrouped items\n    this._updateUngrouped();\n  }\n\n  this.body.emitter.emit('_change', {queue: true});\n};\n\n/**\n * Get the current items\n * @returns {vis.DataSet | null}\n */\nItemSet.prototype.getItems = function() {\n  return this.itemsData;\n};\n\n/**\n * Set groups\n * @param {vis.DataSet} groups\n */\nItemSet.prototype.setGroups = function(groups) {\n  var me = this,\n      ids;\n\n  // unsubscribe from current dataset\n  if (this.groupsData) {\n    util.forEach(this.groupListeners, function (callback, event) {\n      me.groupsData.off(event, callback);\n    });\n\n    // remove all drawn groups\n    ids = this.groupsData.getIds();\n    this.groupsData = null;\n    this._onRemoveGroups(ids); // note: this will cause a redraw\n  }\n\n  // replace the dataset\n  if (!groups) {\n    this.groupsData = null;\n  }\n  else if (groups instanceof DataSet || groups instanceof DataView) {\n    this.groupsData = groups;\n  }\n  else {\n    throw new TypeError('Data must be an instance of DataSet or DataView');\n  }\n\n  if (this.groupsData) {\n    // go over all groups nesting\n    var groupsData = this.groupsData;\n    if (this.groupsData instanceof DataView) {\n      groupsData = this.groupsData.getDataSet()\n    }\n\n    groupsData.get().forEach(function(group){\n      if (group.nestedGroups) {\n        group.nestedGroups.forEach(function(nestedGroupId) {\n          var updatedNestedGroup = groupsData.get(nestedGroupId);\n          updatedNestedGroup.nestedInGroup = group.id;\n          if (group.showNested == false) {\n            updatedNestedGroup.visible = false;\n          }\n          groupsData.update(updatedNestedGroup);\n        })\n      }\n    })\n\n\n    // subscribe to new dataset\n    var id = this.id;\n    util.forEach(this.groupListeners, function (callback, event) {\n      me.groupsData.on(event, callback, id);\n    });\n\n    // draw all ms\n    ids = this.groupsData.getIds();\n    this._onAddGroups(ids);\n  }\n\n  // update the group holding all ungrouped items\n  this._updateUngrouped();\n\n  // update the order of all items in each group\n  this._order();\n\n  this.body.emitter.emit('_change', {queue: true});\n};\n\n/**\n * Get the current groups\n * @returns {vis.DataSet | null} groups\n */\nItemSet.prototype.getGroups = function() {\n  return this.groupsData;\n};\n\n/**\n * Remove an item by its id\n * @param {String | Number} id\n */\nItemSet.prototype.removeItem = function(id) {\n  var item = this.itemsData.get(id),\n      dataset = this.itemsData.getDataSet(),\n      itemObj = this.items[id];\n\n  if (item) {\n    // confirm deletion\n    this.options.onRemove(item, function (item) {\n      if (item) {\n        // remove by id here, it is possible that an item has no id defined\n        // itself, so better not delete by the item itself\n        dataset.remove(id);\n\n        // Remove it's popup\n        if (itemObj.popup) {\n          itemObj.popup.destroy();\n          itemObj.popup = null;\n        }\n      }\n    });\n  }\n};\n\n/**\n * Get the time of an item based on it's data and options.type\n * @param {Object} itemData\n * @returns {string} Returns the type\n * @private\n */\nItemSet.prototype._getType = function (itemData) {\n  return itemData.type || this.options.type || (itemData.end ? 'range' : 'box');\n};\n\n\n/**\n * Get the group id for an item\n * @param {Object} itemData\n * @returns {string} Returns the groupId\n * @private\n */\nItemSet.prototype._getGroupId = function (itemData) {\n  var type = this._getType(itemData);\n  if (type == 'background' && itemData.group == undefined) {\n   return BACKGROUND;\n  }\n  else {\n    return this.groupsData ? itemData.group : UNGROUPED;\n  }\n};\n\n/**\n * Handle updated items\n * @param {Number[]} ids\n * @protected\n */\nItemSet.prototype._onUpdate = function(ids) {\n  var me = this;\n\n  ids.forEach(function (id) {\n    var itemData = me.itemsData.get(id, me.itemOptions);\n    var item = me.items[id];\n    var type = itemData ? me._getType(itemData) : null;\n\n    var constructor = ItemSet.types[type];\n    var selected;\n\n    if (item) {\n      // update item   \t\n      if (!constructor || !(item instanceof constructor)) {\n        // item type has changed, delete the item and recreate it\n        selected = item.selected; // preserve selection of this item\n        me._removeItem(item);\n        item = null;\n      }\n      else {\n        me._updateItem(item, itemData);\n      }\n    }\n\n    if (!item && itemData) {\n      // create item\n      if (constructor) {\n        item = new constructor(itemData, me.conversion, me.options);\n        item.id = id; // TODO: not so nice setting id afterwards\n\n        me._addItem(item);\n        if (selected) {\n          this.selection.push(id);\n          item.select();\n        }\n      }\n      else if (type == 'rangeoverflow') {\n        // TODO: deprecated since version 2.1.0 (or 3.0.0?). cleanup some day\n        throw new TypeError('Item type \"rangeoverflow\" is deprecated. Use css styling instead: ' +\n            '.vis-item.vis-range .vis-item-content {overflow: visible;}');\n      }\n      else {\n        throw new TypeError('Unknown item type \"' + type + '\"');\n      }\n    }\n  }.bind(this));\n\n  this._order();\n  this.stackDirty = true; // force re-stacking of all items next redraw\n  this.body.emitter.emit('_change', {queue: true});\n};\n\n/**\n * Handle added items\n * @param {Number[]} ids\n * @protected\n */\nItemSet.prototype._onAdd = ItemSet.prototype._onUpdate;\n\n/**\n * Handle removed items\n * @param {Number[]} ids\n * @protected\n */\nItemSet.prototype._onRemove = function(ids) {\n  var count = 0;\n  var me = this;\n  ids.forEach(function (id) {\n    var item = me.items[id];\n    if (item) {\n      count++;\n      me._removeItem(item);\n    }\n  });\n\n  if (count) {\n    // update order\n    this._order();\n    this.stackDirty = true; // force re-stacking of all items next redraw\n    this.body.emitter.emit('_change', {queue: true});\n  }\n};\n\n/**\n * Update the order of item in all groups\n * @private\n */\nItemSet.prototype._order = function() {\n  // reorder the items in all groups\n  // TODO: optimization: only reorder groups affected by the changed items\n  util.forEach(this.groups, function (group) {\n    group.order();\n  });\n};\n\n/**\n * Handle updated groups\n * @param {Number[]} ids\n * @private\n */\nItemSet.prototype._onUpdateGroups = function(ids) {\n  this._onAddGroups(ids);\n};\n\n/**\n * Handle changed groups (added or updated)\n * @param {Number[]} ids\n * @private\n */\nItemSet.prototype._onAddGroups = function(ids) {\n  var me = this;\n\n  ids.forEach(function (id) {\n    var groupData = me.groupsData.get(id);\n    var group = me.groups[id];\n\n    if (!group) {\n      // check for reserved ids\n      if (id == UNGROUPED || id == BACKGROUND) {\n        throw new Error('Illegal group id. ' + id + ' is a reserved id.');\n      }\n\n      var groupOptions = Object.create(me.options);\n      util.extend(groupOptions, {\n        height: null\n      });\n\n      group = new Group(id, groupData, me);\n      me.groups[id] = group;\n\n      // add items with this groupId to the new group\n      for (var itemId in me.items) {\n        if (me.items.hasOwnProperty(itemId)) {\n          var item = me.items[itemId];\n          if (item.data.group == id) {\n            group.add(item);\n          }\n        }\n      }\n\n      group.order();\n      group.show();\n    }\n    else {\n      // update group\n      group.setData(groupData);\n    }\n  });\n\n  this.body.emitter.emit('_change', {queue: true});\n};\n\n/**\n * Handle removed groups\n * @param {Number[]} ids\n * @private\n */\nItemSet.prototype._onRemoveGroups = function(ids) {\n  var groups = this.groups;\n  ids.forEach(function (id) {\n    var group = groups[id];\n\n    if (group) {\n      group.hide();\n      delete groups[id];\n    }\n  });\n\n  this.markDirty();\n\n  this.body.emitter.emit('_change', {queue: true});\n};\n\n/**\n * Reorder the groups if needed\n * @return {boolean} changed\n * @private\n */\nItemSet.prototype._orderGroups = function () {\n  if (this.groupsData) {\n    // reorder the groups\n    var groupIds = this.groupsData.getIds({\n      order: this.options.groupOrder\n    });\n\n    groupIds = this._orderNestedGroups(groupIds);\n\n    var changed = !util.equalArray(groupIds, this.groupIds);\n    if (changed) {\n      // hide all groups, removes them from the DOM\n      var groups = this.groups;\n      groupIds.forEach(function (groupId) {\n        groups[groupId].hide();\n      });\n\n      // show the groups again, attach them to the DOM in correct order\n      groupIds.forEach(function (groupId) {\n        groups[groupId].show();\n      });\n\n      this.groupIds = groupIds;\n    }\n\n    return changed;\n  }\n  else {\n    return false;\n  }\n};\n\n/**\n * Reorder the nested groups\n * @return {boolean} changed\n * @private\n */\nItemSet.prototype._orderNestedGroups = function(groupIds) {\n  var newGroupIdsOrder = [];\n\n  groupIds.forEach(function(groupId){\n    var groupData = this.groupsData.get(groupId);\n    if (!groupData.nestedInGroup) {\n      newGroupIdsOrder.push(groupId)\n    }\n    if (groupData.nestedGroups) {\n      var nestedGroups = this.groupsData.get({\n        filter: function(nestedGroup) {\n          return nestedGroup.nestedInGroup == groupId;\n        }\n      });\n      var nestedGroupIds = nestedGroups.map(function(nestedGroup) { return nestedGroup.id })\n      newGroupIdsOrder = newGroupIdsOrder.concat(nestedGroupIds);\n    }\n  }, this)\n  return newGroupIdsOrder;\n}\n\n\n/**\n * Add a new item\n * @param {Item} item\n * @private\n */\nItemSet.prototype._addItem = function(item) {\n  this.items[item.id] = item;\n\n  // add to group\n  var groupId = this._getGroupId(item.data);\n  var group = this.groups[groupId];\n\n  if (!group) {\n   \titem.groupShowing = false;\n  } else if (group && group.data && group.data.showNested) {\n  \titem.groupShowing = true;\n  }\n\n  if (group) group.add(item);\n};\n\n/**\n * Update an existing item\n * @param {Item} item\n * @param {Object} itemData\n * @private\n */\nItemSet.prototype._updateItem = function(item, itemData) {\n  var oldGroupId = item.data.group;\n  var oldSubGroupId = item.data.subgroup;\n\n  // update the items data (will redraw the item when displayed)\n  item.setData(itemData);\n\n  var groupId = this._getGroupId(item.data);\n\tvar group = this.groups[groupId];\n  if (!group) {\n   \titem.groupShowing = false;\n  } else if (group && group.data && group.data.showNested) {\n  \titem.groupShowing = true;\n  }\n  // update group\n  if (oldGroupId != item.data.group || oldSubGroupId != item.data.subgroup) {\n    var oldGroup = this.groups[oldGroupId];\n    if (oldGroup) oldGroup.remove(item);\n    if (group) group.add(item);\n  }\n};\n\n/**\n * Delete an item from the ItemSet: remove it from the DOM, from the map\n * with items, and from the map with visible items, and from the selection\n * @param {Item} item\n * @private\n */\nItemSet.prototype._removeItem = function(item) {\n  // remove from DOM\n  item.hide();\n\n  // remove from items\n  delete this.items[item.id];\n\n  // remove from selection\n  var index = this.selection.indexOf(item.id);\n  if (index != -1) this.selection.splice(index, 1);\n\n  // remove from group\n  item.parent && item.parent.remove(item);\n};\n\n/**\n * Create an array containing all items being a range (having an end date)\n * @param array\n * @returns {Array}\n * @private\n */\nItemSet.prototype._constructByEndArray = function(array) {\n  var endArray = [];\n\n  for (var i = 0; i < array.length; i++) {\n    if (array[i] instanceof RangeItem) {\n      endArray.push(array[i]);\n    }\n  }\n  return endArray;\n};\n\n/**\n * Register the clicked item on touch, before dragStart is initiated.\n *\n * dragStart is initiated from a mousemove event, AFTER the mouse/touch is\n * already moving. Therefore, the mouse/touch can sometimes be above an other\n * DOM element than the item itself.\n *\n * @param {Event} event\n * @private\n */\nItemSet.prototype._onTouch = function (event) {\n  // store the touched item, used in _onDragStart\n  this.touchParams.item = this.itemFromTarget(event);\n  this.touchParams.dragLeftItem = event.target.dragLeftItem || false;\n  this.touchParams.dragRightItem = event.target.dragRightItem || false;\n  this.touchParams.itemProps = null;\n};\n\n\n/**\n * Given an group id, returns the index it has.\n *\n * @param {Number} groupID\n * @private\n */\nItemSet.prototype._getGroupIndex = function(groupId) {\n    for (var i = 0; i < this.groupIds.length; i++) {\n        if (groupId == this.groupIds[i])\n            return i;\n    }\n};\n\n/**\n * Start dragging the selected events\n * @param {Event} event\n * @private\n */\nItemSet.prototype._onDragStart = function (event) {\n  if (this.touchParams.itemIsDragging) { return; }\n  var item = this.touchParams.item || null;\n  var me = this;\n  var props;\n\n  if (item && (item.selected || this.options.itemsAlwaysDraggable)) {\n\n    if (this.options.editable.overrideItems &&\n        !this.options.editable.updateTime &&\n        !this.options.editable.updateGroup) {\n      return;\n    }\n\n    // override options.editable\n    if ((item.editable != null && !item.editable.updateTime && !item.editable.updateGroup)\n        && !this.options.editable.overrideItems) {\n      return;\n    }\n\n    var dragLeftItem = this.touchParams.dragLeftItem;\n    var dragRightItem = this.touchParams.dragRightItem;\n    this.touchParams.itemIsDragging = true;\n    this.touchParams.selectedItem = item;\n\n    if (dragLeftItem) {\n      props = {\n        item: dragLeftItem,\n        initialX: event.center.x,\n        dragLeft:  true,\n        data: this._cloneItemData(item.data)\n      };\n\n      this.touchParams.itemProps = [props];\n    }\n    else if (dragRightItem) {\n      props = {\n        item: dragRightItem,\n        initialX: event.center.x,\n        dragRight: true,\n        data: this._cloneItemData(item.data)\n      };\n\n      this.touchParams.itemProps = [props];\n    }\n    else {\n      var baseGroupIndex = this._getGroupIndex(item.data.group);\n\n      var itemsToDrag = (this.options.itemsAlwaysDraggable && !item.selected) ? [item.id] : this.getSelection();\n\n      this.touchParams.itemProps = itemsToDrag.map(function (id) {\n        var item = me.items[id];\n        var groupIndex = me._getGroupIndex(item.data.group);\n        return {\n          item: item,\n          initialX: event.center.x,\n          groupOffset: baseGroupIndex-groupIndex,\n          data: this._cloneItemData(item.data)\n        };\n      }.bind(this));\n    }\n\n    event.stopPropagation();\n  }\n  else if (this.options.editable.add && (event.srcEvent.ctrlKey || event.srcEvent.metaKey)) {\n    // create a new range item when dragging with ctrl key down\n    this._onDragStartAddItem(event);\n  }\n};\n\n/**\n * Start creating a new range item by dragging.\n * @param {Event} event\n * @private\n */\nItemSet.prototype._onDragStartAddItem = function (event) {\n  var snap = this.options.snap || null;\n\n  if (this.options.rtl) {\n    var xAbs = util.getAbsoluteRight(this.dom.frame);\n    var x = xAbs - event.center.x  + 10;  // plus 10 to compensate for the drag starting as soon as you've moved 10px\n  } else {\n    var xAbs = util.getAbsoluteLeft(this.dom.frame);\n    var x = event.center.x - xAbs - 10;  // minus 10 to compensate for the drag starting as soon as you've moved 10px\n  }\n\n  var time = this.body.util.toTime(x);\n  var scale = this.body.util.getScale();\n  var step = this.body.util.getStep();\n  var start = snap ? snap(time, scale, step) : time;\n  var end = start;\n\n  var itemData = {\n    type: 'range',\n    start: start,\n    end: end,\n    content: 'new item'\n  };\n\n  var id = util.randomUUID();\n  itemData[this.itemsData._fieldId] = id;\n\n  var group = this.groupFromTarget(event);\n  if (group) {\n    itemData.group = group.groupId;\n  }\n  var newItem = new RangeItem(itemData, this.conversion, this.options);\n  newItem.id = id; // TODO: not so nice setting id afterwards\n  newItem.data = this._cloneItemData(itemData);\n  this._addItem(newItem);\n  this.touchParams.selectedItem = newItem;\n  \n  var props = {\n    item: newItem,\n    initialX: event.center.x,\n    data: newItem.data\n  };\n\n  if (this.options.rtl) {\n    props.dragLeft = true;\n  } else {\n    props.dragRight = true;\n  }\n  this.touchParams.itemProps = [props];\n\n  event.stopPropagation();\n};\n\n/**\n * Drag selected items\n * @param {Event} event\n * @private\n */\nItemSet.prototype._onDrag = function (event) {\n  if (this.touchParams.itemProps) {\n    event.stopPropagation();\n\n    var me = this;\n    var snap = this.options.snap || null;\n\n    if (this.options.rtl) {\n      var xOffset = this.body.dom.root.offsetLeft + this.body.domProps.right.width;\n    } else {\n      var xOffset = this.body.dom.root.offsetLeft + this.body.domProps.left.width;\n    }\n\n    var scale = this.body.util.getScale();\n    var step = this.body.util.getStep();\n\n    //only calculate the new group for the item that's actually dragged\n    var selectedItem = this.touchParams.selectedItem;\n    var updateGroupAllowed = ((this.options.editable.overrideItems || selectedItem.editable == null) && this.options.editable.updateGroup) ||\n                             (!this.options.editable.overrideItems && selectedItem.editable != null && selectedItem.editable.updateGroup);\n    var newGroupBase = null;\n    if (updateGroupAllowed && selectedItem) {\n      if (selectedItem.data.group != undefined) {\n        // drag from one group to another\n        var group = me.groupFromTarget(event);\n        if (group) {\n          //we know the offset for all items, so the new group for all items\n          //will be relative to this one.\n          newGroupBase = this._getGroupIndex(group.groupId);\n        }\n      }\n    }\n\n    // move\n    this.touchParams.itemProps.forEach(function (props) {\n      var current = me.body.util.toTime(event.center.x - xOffset);\n      var initial = me.body.util.toTime(props.initialX - xOffset);\n\n      if (this.options.rtl) {\n        var offset = -(current - initial); // ms\n      } else {\n        var offset = (current - initial); // ms\n      }\n\n      var itemData = this._cloneItemData(props.item.data); // clone the data\n      if (props.item.editable != null\n        && !props.item.editable.updateTime\n        && !props.item.editable.updateGroup\n        && !me.options.editable.overrideItems) {\n        return;\n      }\n\n      var updateTimeAllowed = ((this.options.editable.overrideItems || selectedItem.editable == null) && this.options.editable.updateTime) ||\n                               (!this.options.editable.overrideItems && selectedItem.editable != null && selectedItem.editable.updateTime);\n      if (updateTimeAllowed) {\n        if (props.dragLeft) {\n          // drag left side of a range item\n          if (this.options.rtl) {\n            if (itemData.end != undefined) {\n              var initialEnd = util.convert(props.data.end, 'Date');\n              var end = new Date(initialEnd.valueOf() + offset);\n              // TODO: pass a Moment instead of a Date to snap(). (Breaking change)\n              itemData.end = snap ? snap(end, scale, step) : end;\n            }\n          } else {\n            if (itemData.start != undefined) {\n              var initialStart = util.convert(props.data.start, 'Date');\n              var start = new Date(initialStart.valueOf() + offset);\n              // TODO: pass a Moment instead of a Date to snap(). (Breaking change)\n              itemData.start = snap ? snap(start, scale, step) : start;\n            }\n          }\n        }\n        else if (props.dragRight) {\n          // drag right side of a range item\n          if (this.options.rtl) {\n            if (itemData.start != undefined) {\n              var initialStart = util.convert(props.data.start, 'Date');\n              var start = new Date(initialStart.valueOf() + offset);\n              // TODO: pass a Moment instead of a Date to snap(). (Breaking change)\n              itemData.start = snap ? snap(start, scale, step) : start;\n            }\n          } else {\n            if (itemData.end != undefined) {\n              var initialEnd = util.convert(props.data.end, 'Date');\n              var end = new Date(initialEnd.valueOf() + offset);\n              // TODO: pass a Moment instead of a Date to snap(). (Breaking change)\n              itemData.end = snap ? snap(end, scale, step) : end;\n            }\n          }\n        }\n        else {\n          // drag both start and end\n          if (itemData.start != undefined) {\n\n            var initialStart = util.convert(props.data.start, 'Date').valueOf();\n            var start = new Date(initialStart + offset);\n\n            if (itemData.end != undefined) {\n              var initialEnd = util.convert(props.data.end, 'Date');\n              var duration  = initialEnd.valueOf() - initialStart.valueOf();\n\n              // TODO: pass a Moment instead of a Date to snap(). (Breaking change)\n              itemData.start = snap ? snap(start, scale, step) : start;\n              itemData.end   = new Date(itemData.start.valueOf() + duration);\n            }\n            else {\n              // TODO: pass a Moment instead of a Date to snap(). (Breaking change)\n              itemData.start = snap ? snap(start, scale, step) : start;\n            }\n\n\n          }\n        }\n      }\n\n\n      if (updateGroupAllowed && (!props.dragLeft && !props.dragRight) && newGroupBase!=null) {\n        if (itemData.group != undefined) {\n          var newOffset = newGroupBase - props.groupOffset;\n\n          //make sure we stay in bounds\n          newOffset = Math.max(0, newOffset);\n          newOffset = Math.min(me.groupIds.length-1, newOffset);\n\n          itemData.group = me.groupIds[newOffset];\n        }\n      }\n\n      // confirm moving the item\n      itemData = this._cloneItemData(itemData);  // convert start and end to the correct type\n      me.options.onMoving(itemData, function (itemData) {\n        if (itemData) {\n          props.item.setData(this._cloneItemData(itemData, 'Date'));\n        }\n      }.bind(this));\n    }.bind(this));\n\n    this.stackDirty = true; // force re-stacking of all items next redraw\n    this.body.emitter.emit('_change');\n  }\n};\n\n/**\n * Move an item to another group\n * @param {Item} item\n * @param {String | Number} groupId\n * @private\n */\nItemSet.prototype._moveToGroup = function(item, groupId) {\n  var group = this.groups[groupId];\n  if (group && group.groupId != item.data.group) {\n    var oldGroup = item.parent;\n    oldGroup.remove(item);\n    oldGroup.order();\n    group.add(item);\n    group.order();\n\n    item.data.group = group.groupId;\n  }\n};\n\n/**\n * End of dragging selected items\n * @param {Event} event\n * @private\n */\nItemSet.prototype._onDragEnd = function (event) {\n  this.touchParams.itemIsDragging = false;\n  if (this.touchParams.itemProps) {\n    event.stopPropagation();\n\n    var me = this;\n    var dataset = this.itemsData.getDataSet();\n    var itemProps = this.touchParams.itemProps ;\n    this.touchParams.itemProps = null;\n\n    itemProps.forEach(function (props) {\n      var id = props.item.id;\n      var exists = me.itemsData.get(id, me.itemOptions) != null;\n\n      if (!exists) {\n        // add a new item\n        me.options.onAdd(props.item.data, function (itemData) {\n          me._removeItem(props.item); // remove temporary item\n          if (itemData) {\n            me.itemsData.getDataSet().add(itemData);\n          }\n\n          // force re-stacking of all items next redraw\n          me.stackDirty = true;\n          me.body.emitter.emit('_change');\n        });\n      }\n      else {\n        // update existing item\n        var itemData = this._cloneItemData(props.item.data); // convert start and end to the correct type\n        me.options.onMove(itemData, function (itemData) {\n          if (itemData) {\n            // apply changes\n            itemData[dataset._fieldId] = id; // ensure the item contains its id (can be undefined)\n            dataset.update(itemData);\n          }\n          else {\n            // restore original values\n            props.item.setData(props.data);\n\n            me.stackDirty = true; // force re-stacking of all items next redraw\n            me.body.emitter.emit('_change');\n          }\n        });\n      }\n    }.bind(this));\n  }\n};\n\nItemSet.prototype._onGroupClick = function (event) {\n  var group = this.groupFromTarget(event);\n\n  if (!group.nestedGroups) return;\n\n  var groupsData = this.groupsData;\n  if (this.groupsData instanceof DataView) {\n    groupsData = this.groupsData.getDataSet()\n  }\n\n  group.showNested = !group.showNested;\n\n  var nestedGroups = groupsData.get(group.nestedGroups).map(function(nestedGroup) {\n    if (nestedGroup.visible == undefined) { nestedGroup.visible = true; }\n    nestedGroup.visible = !!group.showNested;\n    return nestedGroup;\n  });\n  groupsData.update(nestedGroups);\n\n  if (group.showNested) {\n    util.removeClassName(group.dom.label, 'collapsed');\n    util.addClassName(group.dom.label, 'expanded');\n  } else {\n    util.removeClassName(group.dom.label, 'expanded');\n    var collapsedDirClassName = this.options.rtl ? 'collapsed-rtl' : 'collapsed'\n    util.addClassName(group.dom.label, collapsedDirClassName);\n  }\n}\n\nItemSet.prototype._onGroupDragStart = function (event) {\n\tif (this.options.groupEditable.order) {\n\t\tthis.groupTouchParams.group = this.groupFromTarget(event);\n\t\t\n\t\tif (this.groupTouchParams.group) {\n\t\t\tevent.stopPropagation();\n\t\t\t\n\t\t\tthis.groupTouchParams.originalOrder = this.groupsData.getIds({\n\t\t\t    order: this.options.groupOrder\n\t\t    });\n\t\t}\n\t}\n}\n\nItemSet.prototype._onGroupDrag = function (event) {\n\tif (this.options.groupEditable.order && this.groupTouchParams.group) {\n\t\tevent.stopPropagation();\n\t\t\n    var groupsData = this.groupsData;\n    if (this.groupsData instanceof DataView) {\n      groupsData = this.groupsData.getDataSet()\n    }\n\t\t// drag from one group to another\n\t\tvar group = this.groupFromTarget(event);\n\t\t\n\t\t// try to avoid toggling when groups differ in height\n\t\tif (group && group.height != this.groupTouchParams.group.height) {\n\t\t\tvar movingUp = (group.top < this.groupTouchParams.group.top);\n\t\t\tvar clientY = event.center ? event.center.y : event.clientY;\n\t\t\tvar targetGroupTop = util.getAbsoluteTop(group.dom.foreground);\n\t\t\tvar draggedGroupHeight = this.groupTouchParams.group.height;\n\t\t\tif (movingUp) {\n\t\t\t\t// skip swapping the groups when the dragged group is not below clientY afterwards\n\t\t\t\tif (targetGroupTop + draggedGroupHeight < clientY) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar targetGroupHeight = group.height;\n\t\t\t\t// skip swapping the groups when the dragged group is not below clientY afterwards\n\t\t\t\tif (targetGroupTop + targetGroupHeight - draggedGroupHeight > clientY) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\tif (group && group != this.groupTouchParams.group) {\n\t\t\tvar targetGroup = groupsData.get(group.groupId);\n\t\t\tvar draggedGroup = groupsData.get(this.groupTouchParams.group.groupId);\n\t\t\t\n\t\t\t// switch groups\n\t\t\tif (draggedGroup && targetGroup) {\n\t\t\t\tthis.options.groupOrderSwap(draggedGroup, targetGroup, groupsData);\n\t\t\t\tgroupsData.update(draggedGroup);\n\t\t\t\tgroupsData.update(targetGroup);\n\t\t\t}\n\t\t\t\n\t\t\t// fetch current order of groups\n\t\t\tvar newOrder = groupsData.getIds({\n\t\t\t  order: this.options.groupOrder\n\t\t  });\n\n\t\t\t\n\t\t\t// in case of changes since _onGroupDragStart\n\t\t\tif (!util.equalArray(newOrder, this.groupTouchParams.originalOrder)) {\n\t\t\t\tvar origOrder = this.groupTouchParams.originalOrder;\n\t\t\t\tvar draggedId = this.groupTouchParams.group.groupId;\n\t\t\t\tvar numGroups = Math.min(origOrder.length, newOrder.length);\n\t\t\t\tvar curPos = 0;\n\t\t\t\tvar newOffset = 0;\n\t\t\t\tvar orgOffset = 0;\n\t\t\t\twhile (curPos < numGroups) {\n\t\t\t\t\t// as long as the groups are where they should be step down along the groups order\n\t\t\t\t\twhile ((curPos+newOffset) < numGroups \n\t\t\t\t\t\t&& (curPos+orgOffset) < numGroups \n\t\t\t\t\t\t&& newOrder[curPos+newOffset] == origOrder[curPos+orgOffset]) {\n\t\t\t\t\t\tcurPos++;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// all ok\n\t\t\t\t\tif (curPos+newOffset >= numGroups) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// not all ok\n\t\t\t\t\t// if dragged group was move upwards everything below should have an offset\n\t\t\t\t\tif (newOrder[curPos+newOffset] == draggedId) {\n\t\t\t\t\t\tnewOffset = 1;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// if dragged group was move downwards everything above should have an offset\n\t\t\t\t\telse if (origOrder[curPos+orgOffset] == draggedId) {\n\t\t\t\t\t\torgOffset = 1;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} \n\t\t\t\t\t// found a group (apart from dragged group) that has the wrong position -> switch with the \n\t\t\t\t\t// group at the position where other one should be, fix index arrays and continue\n\t\t\t\t\telse {\n\t\t\t\t\t\tvar slippedPosition = newOrder.indexOf(origOrder[curPos+orgOffset])\n\t\t\t\t\t\tvar switchGroup = groupsData.get(newOrder[curPos+newOffset]);\n\t\t\t\t\t\tvar shouldBeGroup = groupsData.get(origOrder[curPos+orgOffset]);\n\t\t\t\t\t\tthis.options.groupOrderSwap(switchGroup, shouldBeGroup, groupsData);\n\t\t\t\t\t\tgroupsData.update(switchGroup);\n\t\t\t\t\t\tgroupsData.update(shouldBeGroup);\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar switchGroupId = newOrder[curPos+newOffset];\n\t\t\t\t\t\tnewOrder[curPos+newOffset] = origOrder[curPos+orgOffset];\n\t\t\t\t\t\tnewOrder[slippedPosition] = switchGroupId;\n\t\t\t\t\t\t\n\t\t\t\t\t\tcurPos++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t}\n\t}\n}\n\nItemSet.prototype._onGroupDragEnd = function (event) {\n\tif (this.options.groupEditable.order && this.groupTouchParams.group) {\n\t\tevent.stopPropagation();\n\t\t\n\t\t// update existing group\n\t\tvar me = this;\n\t\tvar id = me.groupTouchParams.group.groupId;\n\t\tvar dataset = me.groupsData.getDataSet();\n        var groupData = util.extend({}, dataset.get(id)); // clone the data\n        me.options.onMoveGroup(groupData, function (groupData) {\n          if (groupData) {\n            // apply changes\n        \tgroupData[dataset._fieldId] = id; // ensure the group contains its id (can be undefined)\n            dataset.update(groupData);\n          }\n          else {\n        \t  \n        \t// fetch current order of groups\n  \t\t\tvar newOrder = dataset.getIds({\n  \t\t\t    order: me.options.groupOrder\n  \t\t    });\n        \t  \n            // restore original order\n        \tif (!util.equalArray(newOrder, me.groupTouchParams.originalOrder)) {\n        \t\tvar origOrder = me.groupTouchParams.originalOrder;\n  \t\t\t\tvar numGroups = Math.min(origOrder.length, newOrder.length);\n  \t\t\t\tvar curPos = 0;\n  \t\t\t\twhile (curPos < numGroups) {\n  \t\t\t\t\t// as long as the groups are where they should be step down along the groups order\n  \t\t\t\t\twhile (curPos < numGroups && newOrder[curPos] == origOrder[curPos]) {\n  \t\t\t\t\t    curPos++;\n  \t\t\t\t\t}\n  \t\t\t\t\t\n  \t\t\t\t\t// all ok\n  \t\t\t\t\tif (curPos >= numGroups) {\n  \t\t\t\t\t\tbreak;\n  \t\t\t\t\t}\n  \t\t\t\t\t\n\t\t\t\t\t\t// found a group that has the wrong position -> switch with the \n\t\t\t\t\t\t// group at the position where other one should be, fix index arrays and continue\n\t\t\t\t\t\tvar slippedPosition = newOrder.indexOf(origOrder[curPos])\n\t\t\t\t\t\tvar switchGroup = dataset.get(newOrder[curPos]);\n\t\t\t\t\t\tvar shouldBeGroup = dataset.get(origOrder[curPos]);\n\t\t\t\t\t\tme.options.groupOrderSwap(switchGroup, shouldBeGroup, dataset);\n\t\t\t\t\t\tgroupsData.update(switchGroup);\n\t\t\t\t\t\tgroupsData.update(shouldBeGroup);\n  \t\t\t\t\t\t\n  \t\t\t\t\tvar switchGroupId = newOrder[curPos];\n  \t\t\t\t\tnewOrder[curPos] = origOrder[curPos];\n  \t\t\t\t\tnewOrder[slippedPosition] = switchGroupId;\n  \t\t\t\t\t\t\n  \t\t\t\t\tcurPos++;\n  \t\t\t\t}\n  \t\t\t}\n\n          }\n        });\n        \n        me.body.emitter.emit('groupDragged', { groupId: id });\n\t}\n}\n\n/**\n * Handle selecting/deselecting an item when tapping it\n * @param {Event} event\n * @private\n */\nItemSet.prototype._onSelectItem = function (event) {\n  if (!this.options.selectable) return;\n\n  var ctrlKey  = event.srcEvent && (event.srcEvent.ctrlKey || event.srcEvent.metaKey);\n  var shiftKey = event.srcEvent && event.srcEvent.shiftKey;\n  if (ctrlKey || shiftKey) {\n    this._onMultiSelectItem(event);\n    return;\n  }\n\n  var oldSelection = this.getSelection();\n\n  var item = this.itemFromTarget(event);\n  var selection = item ? [item.id] : [];\n  this.setSelection(selection);\n\n  var newSelection = this.getSelection();\n\n  // emit a select event,\n  // except when old selection is empty and new selection is still empty\n  if (newSelection.length > 0 || oldSelection.length > 0) {\n    this.body.emitter.emit('select', {\n      items: newSelection,\n      event: util.elementsCensor(event)\n    });\n  }\n};\n\n/**\n * Handle hovering an item\n * @param {Event} event\n * @private\n */\nItemSet.prototype._onMouseOver = function (event) {\n  var item = this.itemFromTarget(event);\n  if (!item) return;\n\n  // Item we just left\n  var related = this.itemFromRelatedTarget(event);\n  if (item === related) {\n    // We haven't changed item, just element in the item\n    return;\n  }\n\n  if (item.getTitle()) {\n    if (item.popup == null) {\n      item.setPopup(new Popup(this.body.dom.root, this.options.tooltip.overflowMethod || 'flip'));\n    }\n\n    var container = this.body.dom.centerContainer;\n    item.popup.setPosition(\n      event.clientX - util.getAbsoluteLeft(container) + container.offsetLeft,\n      event.clientY - util.getAbsoluteTop(container) + container.offsetTop\n    );\n    item.popup.show();\n  }\n\n  this.body.emitter.emit('itemover', {\n    item: item.id,\n    event: util.elementsCensor(event)\n  });\n};\nItemSet.prototype._onMouseOut = function (event) {\n  var item = this.itemFromTarget(event);\n  if (!item) return;\n\n  // Item we are going to\n  var related = this.itemFromRelatedTarget(event);\n  if (item === related) {\n    // We aren't changing item, just element in the item\n    return;\n  }\n\n  if (item.popup != null) {\n    item.popup.hide();\n  }\n\n  this.body.emitter.emit('itemout', {\n    item: item.id,\n    event: util.elementsCensor(event)\n  });\n};\nItemSet.prototype._onMouseMove = function (event) {\n  var item = this.itemFromTarget(event);\n  if (!item) return;\n\n  if (this.options.tooltip.followMouse) {\n    if (item.popup) {\n      if (!item.popup.hidden) {\n        var container = this.body.dom.centerContainer;\n        item.popup.setPosition(\n          event.clientX - util.getAbsoluteLeft(container) + container.offsetLeft,\n          event.clientY - util.getAbsoluteTop(container) + container.offsetTop\n        );\n        item.popup.show(); // Redraw\n      }\n    }\n  }\n};\n\n\n/**\n * Handle updates of an item on double tap\n * @param event\n * @private\n */\nItemSet.prototype._onUpdateItem = function (item) {\n  if (!this.options.selectable) return;\n  if (!this.options.editable.add) return;\n\n  var me = this;\n \n  if (item) {\n    // execute async handler to update the item (or cancel it)\n    var itemData = me.itemsData.get(item.id); // get a clone of the data from the dataset\n    this.options.onUpdate(itemData, function (itemData) {\n      if (itemData) {\n        me.itemsData.getDataSet().update(itemData);\n      }\n    });\n  }\n}\n\n/**\n * Handle creation of an item on double tap\n * @param event\n * @private\n */\nItemSet.prototype._onAddItem = function (event) {\n  if (!this.options.selectable) return;\n  if (!this.options.editable.add) return;\n\n  var me = this;\n  var snap = this.options.snap || null;\n  var item = this.itemFromTarget(event);\n\n  if (!item) {\n    // add item\n    if (this.options.rtl) {\n      var xAbs = util.getAbsoluteRight(this.dom.frame);\n      var x = xAbs - event.center.x;\n    } else {\n      var xAbs = util.getAbsoluteLeft(this.dom.frame);\n      var x = event.center.x - xAbs; \n    }\n    // var xAbs = util.getAbsoluteLeft(this.dom.frame);\n    // var x = event.center.x - xAbs;\n    var start = this.body.util.toTime(x);\n    var scale = this.body.util.getScale();\n    var step = this.body.util.getStep();\n\n    var newItemData = {\n      start: snap ? snap(start, scale, step) : start,\n      content: 'new item'\n    };\n\n    if (event.type == 'drop') {\n      var itemData = JSON.parse(event.dataTransfer.getData(\"text\"))\n      newItemData.content = itemData.content; // content is required \n      newItemData.type = itemData.type || 'box';\n      newItemData[this.itemsData._fieldId] = itemData.id || util.randomUUID();\n\n      if (itemData.type == 'range' || (itemData.end && itemData.start)) {\n        if (!itemData.end) {\n          var end = this.body.util.toTime(x + this.props.width / 5);\n          newItemData.end = snap ? snap(end, scale, step) : end;\n        } else {\n          newItemData.end = itemData.end;\n          newItemData.start = itemData.start;\n        }\n      }\n    } else {\n      newItemData[this.itemsData._fieldId] = util.randomUUID();\n\n      // when default type is a range, add a default end date to the new item\n      if (this.options.type === 'range') {\n        var end = this.body.util.toTime(x + this.props.width / 5);\n        newItemData.end = snap ? snap(end, scale, step) : end;\n      }\n    }\n\n    var group = this.groupFromTarget(event);\n    if (group) {\n      newItemData.group = group.groupId;\n    }\n\n    // execute async handler to customize (or cancel) adding an item\n    newItemData = this._cloneItemData(newItemData);     // convert start and end to the correct type\n    this.options.onAdd(newItemData, function (item) {\n      if (item) {\n        me.itemsData.getDataSet().add(item);\n        if (event.type == 'drop') {\n          me.setSelection([item.id]);\n        }\n        // TODO: need to trigger a redraw?\n      }\n    });\n  }\n};\n\n/**\n * Handle selecting/deselecting multiple items when holding an item\n * @param {Event} event\n * @private\n */\nItemSet.prototype._onMultiSelectItem = function (event) {\n  if (!this.options.selectable) return;\n\n  var item = this.itemFromTarget(event);\n\n  if (item) {\n    // multi select items (if allowed)\n\n    var selection = this.options.multiselect\n      ? this.getSelection() // take current selection\n      : [];                 // deselect current selection\n\n    var shiftKey = event.srcEvent && event.srcEvent.shiftKey || false;\n\n    if (shiftKey && this.options.multiselect) {\n      // select all items between the old selection and the tapped item\n      var itemGroup = this.itemsData.get(item.id).group;\n    \t\n      // when filtering get the group of the last selected item\n      var lastSelectedGroup = undefined;\n      if (this.options.multiselectPerGroup) {\n        if (selection.length > 0) {\n          lastSelectedGroup = this.itemsData.get(selection[0]).group;\n        }\n      }\n    \t\n      // determine the selection range\n      if (!this.options.multiselectPerGroup || lastSelectedGroup == undefined || lastSelectedGroup == itemGroup) {\n        selection.push(item.id);\n      }\n      var range = ItemSet._getItemRange(this.itemsData.get(selection, this.itemOptions));\n      \n      if (!this.options.multiselectPerGroup || lastSelectedGroup == itemGroup) {\n        // select all items within the selection range\n        selection = [];\n        for (var id in this.items) {\n          if (this.items.hasOwnProperty(id)) {\n            var _item = this.items[id];\n            var start = _item.data.start;\n            var end = (_item.data.end !== undefined) ? _item.data.end : start;\n\n            if (start >= range.min &&\n                end <= range.max &&\n                (!this.options.multiselectPerGroup || lastSelectedGroup == this.itemsData.get(_item.id).group) &&\n                !(_item instanceof BackgroundItem)) {\n              selection.push(_item.id); // do not use id but item.id, id itself is stringified\n            }\n          }\n        }\n      }\n    }\n    else {\n      // add/remove this item from the current selection\n      var index = selection.indexOf(item.id);\n      if (index == -1) {\n        // item is not yet selected -> select it\n        selection.push(item.id);\n      }\n      else {\n        // item is already selected -> deselect it\n        selection.splice(index, 1);\n      }\n    }\n\n    this.setSelection(selection);\n\n    this.body.emitter.emit('select', {\n      items: this.getSelection(),\n      event: util.elementsCensor(event)\n    });\n  }\n};\n\n/**\n * Calculate the time range of a list of items\n * @param {Array.<Object>} itemsData\n * @return {{min: Date, max: Date}} Returns the range of the provided items\n * @private\n */\nItemSet._getItemRange = function(itemsData) {\n  var max = null;\n  var min = null;\n\n  itemsData.forEach(function (data) {\n    if (min == null || data.start < min) {\n      min = data.start;\n    }\n\n    if (data.end != undefined) {\n      if (max == null || data.end > max) {\n        max = data.end;\n      }\n    }\n    else {\n      if (max == null || data.start > max) {\n        max = data.start;\n      }\n    }\n  });\n\n  return {\n    min: min,\n    max: max\n  }\n};\n\n/**\n * Find an item from an element:\n * searches for the attribute 'timeline-item' in the element's tree\n * @param {HTMLElement} element\n * @return {Item | null} item\n */\nItemSet.prototype.itemFromElement = function(element) {\n  var cur = element;\n  while (cur) {\n    if (cur.hasOwnProperty('timeline-item')) {\n      return cur['timeline-item'];\n    }\n    cur = cur.parentNode;\n  }\n\n  return null;\n};\n\n/**\n * Find an item from an event target:\n * searches for the attribute 'timeline-item' in the event target's element tree\n * @param {Event} event\n * @return {Item | null} item\n */\nItemSet.prototype.itemFromTarget = function(event) {\n  return this.itemFromElement(event.target);\n};\n\n/**\n * Find an item from an event's related target:\n * searches for the attribute 'timeline-item' in the related target's element tree\n * @param {Event} event\n * @return {Item | null} item\n */\nItemSet.prototype.itemFromRelatedTarget = function(event) {\n  return this.itemFromElement(event.relatedTarget);\n};\n\n/**\n * Find the Group from an event target:\n * searches for the attribute 'timeline-group' in the event target's element tree\n * @param {Event} event\n * @return {Group | null} group\n */\nItemSet.prototype.groupFromTarget = function(event) {\n  var clientY = event.center ? event.center.y : event.clientY;\n  for (var i = 0; i < this.groupIds.length; i++) {\n    var groupId = this.groupIds[i];\n    var group = this.groups[groupId];\n    var foreground = group.dom.foreground;\n    var top = util.getAbsoluteTop(foreground);\n    if (clientY > top && clientY < top + foreground.offsetHeight) {\n      return group;\n    }\n\n    if (this.options.orientation.item === 'top') {\n      if (i === this.groupIds.length - 1 && clientY > top) {\n        return group;\n      }\n    }\n    else {\n      if (i === 0 && clientY < top + foreground.offset) {\n        return group;\n      }\n    }\n  }\n\n  return null;\n};\n\n/**\n * Find the ItemSet from an event target:\n * searches for the attribute 'timeline-itemset' in the event target's element tree\n * @param {Event} event\n * @return {ItemSet | null} item\n */\nItemSet.itemSetFromTarget = function(event) {\n  var target = event.target;\n  while (target) {\n    if (target.hasOwnProperty('timeline-itemset')) {\n      return target['timeline-itemset'];\n    }\n    target = target.parentNode;\n  }\n\n  return null;\n};\n\n/**\n * Clone the data of an item, and \"normalize\" it: convert the start and end date\n * to the type (Date, Moment, ...) configured in the DataSet. If not configured,\n * start and end are converted to Date.\n * @param {Object} itemData, typically `item.data`\n * @param {string} [type]  Optional Date type. If not provided, the type from the DataSet is taken\n * @return {Object} The cloned object\n * @private\n */\nItemSet.prototype._cloneItemData = function (itemData, type) {\n  var clone = util.extend({}, itemData);\n\n  if (!type) {\n    // convert start and end date to the type (Date, Moment, ...) configured in the DataSet\n    type = this.itemsData.getDataSet()._options.type;\n  }\n\n  if (clone.start != undefined) {\n    clone.start = util.convert(clone.start, type && type.start || 'Date');\n  }\n  if (clone.end != undefined) {\n    clone.end = util.convert(clone.end , type && type.end || 'Date');\n  }\n\n  return clone;\n};\n\nmodule.exports = ItemSet;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/component/ItemSet.js","/**\n * Popup is a class to create a popup window with some text\n * @param {Element} container       The container object.\n * @param {string}  overflowMethod  How the popup should act to overflowing ('flip' or 'cap')\n */\nclass Popup {\n  constructor(container, overflowMethod) {\n    this.container = container;\n    this.overflowMethod = overflowMethod || 'cap';\n\n    this.x = 0;\n    this.y = 0;\n    this.padding = 5;\n    this.hidden = false;\n\n    // create the frame\n    this.frame = document.createElement('div');\n    this.frame.className = 'vis-tooltip';\n    this.container.appendChild(this.frame);\n  }\n\n  /**\n   * @param {number} x   Horizontal position of the popup window\n   * @param {number} y   Vertical position of the popup window\n   */\n  setPosition(x, y) {\n    this.x = parseInt(x);\n    this.y = parseInt(y);\n  }\n\n  /**\n   * Set the content for the popup window. This can be HTML code or text.\n   * @param {string | Element} content\n   */\n  setText(content) {\n    if (content instanceof Element) {\n      this.frame.innerHTML = '';\n      this.frame.appendChild(content);\n    }\n    else {\n      this.frame.innerHTML = content; // string containing text or HTML\n    }\n  }\n\n  /**\n   * Show the popup window\n   * @param {boolean} [doShow]    Show or hide the window\n   */\n  show(doShow) {\n    if (doShow === undefined) {\n      doShow = true;\n    }\n\n    if (doShow === true) {\n      var height = this.frame.clientHeight;\n      var width = this.frame.clientWidth;\n      var maxHeight = this.frame.parentNode.clientHeight;\n      var maxWidth = this.frame.parentNode.clientWidth;\n\n      var left = 0, top = 0;\n\n      if (this.overflowMethod == 'flip') {\n        var isLeft = false, isTop = true; // Where around the position it's located\n\n        if (this.y - height < this.padding) {\n          isTop = false;\n        }\n\n        if (this.x + width > maxWidth - this.padding) {\n          isLeft = true;\n        }\n\n        if (isLeft) {\n          left = this.x - width;\n        } else {\n          left = this.x;\n        }\n\n        if (isTop) {\n          top = this.y - height;\n        } else {\n          top = this.y;\n        }\n      } else {\n        top = (this.y - height);\n        if (top + height + this.padding > maxHeight) {\n          top = maxHeight - height - this.padding;\n        }\n        if (top < this.padding) {\n          top = this.padding;\n        }\n\n        left = this.x;\n        if (left + width + this.padding > maxWidth) {\n          left = maxWidth - width - this.padding;\n        }\n        if (left < this.padding) {\n          left = this.padding;\n        }\n      }\n\n      this.frame.style.left = left + \"px\";\n      this.frame.style.top = top + \"px\";\n      this.frame.style.visibility = \"visible\";\n      this.hidden = false;\n    }\n    else {\n      this.hide();\n    }\n  }\n\n  /**\n   * Hide the popup window\n   */\n  hide() {\n    this.hidden = true;\n    this.frame.style.visibility = \"hidden\";\n  }\n\n  /**\n   * Remove the popup window\n   */\n  destroy() {\n    this.frame.parentNode.removeChild(this.frame); // Remove element from DOM\n  }\n}\n\nexport default Popup;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/shared/Popup.js","var moment = require('../module/moment');\nvar DateUtil = require('./DateUtil');\nvar util = require('../util');\n\n/**\n * @constructor  TimeStep\n * The class TimeStep is an iterator for dates. You provide a start date and an\n * end date. The class itself determines the best scale (step size) based on the\n * provided start Date, end Date, and minimumStep.\n *\n * If minimumStep is provided, the step size is chosen as close as possible\n * to the minimumStep but larger than minimumStep. If minimumStep is not\n * provided, the scale is set to 1 DAY.\n * The minimumStep should correspond with the onscreen size of about 6 characters\n *\n * Alternatively, you can set a scale by hand.\n * After creation, you can initialize the class by executing first(). Then you\n * can iterate from the start date to the end date via next(). You can check if\n * the end date is reached with the function hasNext(). After each step, you can\n * retrieve the current date via getCurrent().\n * The TimeStep has scales ranging from milliseconds, seconds, minutes, hours,\n * days, to years.\n *\n * Version: 1.2\n *\n * @param {Date} [start]         The start date, for example new Date(2010, 9, 21)\n *                               or new Date(2010, 9, 21, 23, 45, 00)\n * @param {Date} [end]           The end date\n * @param {Number} [minimumStep] Optional. Minimum step size in milliseconds\n */\nfunction TimeStep(start, end, minimumStep, hiddenDates) {\n  this.moment = moment;\n\n  // variables\n  this.current = this.moment();\n  this._start = this.moment();\n  this._end = this.moment();\n\n  this.autoScale  = true;\n  this.scale = 'day';\n  this.step = 1;\n\n  // initialize the range\n  this.setRange(start, end, minimumStep);\n\n  // hidden Dates options\n  this.switchedDay = false;\n  this.switchedMonth = false;\n  this.switchedYear = false;\n  if (Array.isArray(hiddenDates)) {\n    this.hiddenDates = hiddenDates;\n  }\n  else if (hiddenDates != undefined) {\n    this.hiddenDates = [hiddenDates];\n  }\n  else {\n    this.hiddenDates = [];\n  }\n\n  this.format = TimeStep.FORMAT; // default formatting\n}\n\n// Time formatting\nTimeStep.FORMAT = {\n  minorLabels: {\n    millisecond:'SSS',\n    second:     's',\n    minute:     'HH:mm',\n    hour:       'HH:mm',\n    weekday:    'ddd D',\n    day:        'D',\n    month:      'MMM',\n    year:       'YYYY'\n  },\n  majorLabels: {\n    millisecond:'HH:mm:ss',\n    second:     'D MMMM HH:mm',\n    minute:     'ddd D MMMM',\n    hour:       'ddd D MMMM',\n    weekday:    'MMMM YYYY',\n    day:        'MMMM YYYY',\n    month:      'YYYY',\n    year:       ''\n  }\n};\n\n/**\n * Set custom constructor function for moment. Can be used to set dates\n * to UTC or to set a utcOffset.\n * @param {function} moment\n */\nTimeStep.prototype.setMoment = function (moment) {\n  this.moment = moment;\n\n  // update the date properties, can have a new utcOffset\n  this.current = this.moment(this.current.valueOf());\n  this._start = this.moment(this._start.valueOf());\n  this._end = this.moment(this._end.valueOf());\n};\n\n/**\n * Set custom formatting for the minor an major labels of the TimeStep.\n * Both `minorLabels` and `majorLabels` are an Object with properties:\n * 'millisecond', 'second', 'minute', 'hour', 'weekday', 'day', 'month', 'year'.\n * @param {{minorLabels: Object, majorLabels: Object}} format\n */\nTimeStep.prototype.setFormat = function (format) {\n  var defaultFormat = util.deepExtend({}, TimeStep.FORMAT);\n  this.format = util.deepExtend(defaultFormat, format);\n};\n\n/**\n * Set a new range\n * If minimumStep is provided, the step size is chosen as close as possible\n * to the minimumStep but larger than minimumStep. If minimumStep is not\n * provided, the scale is set to 1 DAY.\n * The minimumStep should correspond with the onscreen size of about 6 characters\n * @param {Date} [start]      The start date and time.\n * @param {Date} [end]        The end date and time.\n * @param {int} [minimumStep] Optional. Minimum step size in milliseconds\n */\nTimeStep.prototype.setRange = function(start, end, minimumStep) {\n  if (!(start instanceof Date) || !(end instanceof Date)) {\n    throw  \"No legal start or end date in method setRange\";\n  }\n\n  this._start = (start != undefined) ? this.moment(start.valueOf()) : new Date();\n  this._end = (end != undefined) ? this.moment(end.valueOf()) : new Date();\n\n  if (this.autoScale) {\n    this.setMinimumStep(minimumStep);\n  }\n};\n\n/**\n * Set the range iterator to the start date.\n */\nTimeStep.prototype.start = function() {\n  this.current = this._start.clone();\n  this.roundToMinor();\n};\n\n/**\n * Round the current date to the first minor date value\n * This must be executed once when the current date is set to start Date\n */\nTimeStep.prototype.roundToMinor = function() {\n  // round to floor\n  // IMPORTANT: we have no breaks in this switch! (this is no bug)\n  // noinspection FallThroughInSwitchStatementJS\n  switch (this.scale) {\n    case 'year':\n      this.current.year(this.step * Math.floor(this.current.year() / this.step));\n      this.current.month(0);\n    case 'month':        this.current.date(1);\n    case 'day':          // intentional fall through\n    case 'weekday':      this.current.hours(0);\n    case 'hour':         this.current.minutes(0);\n    case 'minute':       this.current.seconds(0);\n    case 'second':       this.current.milliseconds(0);\n    //case 'millisecond': // nothing to do for milliseconds\n  }\n\n  if (this.step != 1) {\n    // round down to the first minor value that is a multiple of the current step size\n    switch (this.scale) {\n      case 'millisecond':  this.current.subtract(this.current.milliseconds() % this.step, 'milliseconds');  break;\n      case 'second':       this.current.subtract(this.current.seconds() % this.step, 'seconds'); break;\n      case 'minute':       this.current.subtract(this.current.minutes() % this.step, 'minutes'); break;\n      case 'hour':         this.current.subtract(this.current.hours() % this.step, 'hours'); break;\n      case 'weekday':      // intentional fall through\n      case 'day':          this.current.subtract((this.current.date() - 1) % this.step, 'day'); break;\n      case 'month':        this.current.subtract(this.current.month() % this.step, 'month');  break;\n      case 'year':         this.current.subtract(this.current.year() % this.step, 'year'); break;\n      default: break;\n    }\n  }\n};\n\n/**\n * Check if the there is a next step\n * @return {boolean}  true if the current date has not passed the end date\n */\nTimeStep.prototype.hasNext = function () {\n  return (this.current.valueOf() <= this._end.valueOf());\n};\n\n/**\n * Do the next step\n */\nTimeStep.prototype.next = function() {\n  var prev = this.current.valueOf();\n\n  // Two cases, needed to prevent issues with switching daylight savings\n  // (end of March and end of October)\n  if (this.current.month() < 6)   {\n    switch (this.scale) {\n      case 'millisecond':  this.current.add(this.step, 'millisecond'); break;\n      case 'second':       this.current.add(this.step, 'second'); break;\n      case 'minute':       this.current.add(this.step, 'minute'); break;\n      case 'hour':\n        this.current.add(this.step, 'hour');\n        // in case of skipping an hour for daylight savings, adjust the hour again (else you get: 0h 5h 9h ... instead of 0h 4h 8h ...)\n          // TODO: is this still needed now we use the function of moment.js?\n        this.current.subtract(this.current.hours() % this.step, 'hour');\n        break;\n      case 'weekday':      // intentional fall through\n      case 'day':          this.current.add(this.step, 'day'); break;\n      case 'month':        this.current.add(this.step, 'month'); break;\n      case 'year':         this.current.add(this.step, 'year'); break;\n      default: break;\n    }\n  }\n  else {\n    switch (this.scale) {\n      case 'millisecond':  this.current.add(this.step, 'millisecond'); break;\n      case 'second':       this.current.add(this.step, 'second'); break;\n      case 'minute':       this.current.add(this.step, 'minute'); break;\n      case 'hour':\n        this.current.add(this.moment.duration(this.step, 'hour'));\n\n        // correct for daylight saving\n        // FIXME: use this.current.add(moment.duration(this.step, 'hour'))\n        // see http://momentjs.com/docs/#special-considerations-for-months-and-years\n        if (this.current.hours() % this.step !== 0) {\n          this.current.add(this.step - this.current.hours() % this.step, 'hour');\n        }\n\n        break;\n      case 'weekday':      // intentional fall through\n      case 'day':          this.current.add(this.step, 'day'); break;\n      case 'month':        this.current.add(this.step, 'month'); break;\n      case 'year':         this.current.add(this.step, 'year'); break;\n      default:             break;\n    }\n  }\n\n  if (this.step != 1) {\n    // round down to the correct major value\n    switch (this.scale) {\n      case 'millisecond':  if(this.current.milliseconds() > 0 && this.current.milliseconds() < this.step) this.current.milliseconds(0);  break;\n      case 'second':       if(this.current.seconds() > 0 && this.current.seconds() < this.step) this.current.seconds(0);  break;\n      case 'minute':       if(this.current.minutes() > 0 && this.current.minutes() < this.step) this.current.minutes(0); break;\n      case 'hour':         if(this.current.hours() > 0 && this.current.hours() < this.step) this.current.hours(0);  break;\n      case 'weekday':      // intentional fall through\n      case 'day':          if(this.current.date() < this.step+1) this.current.date(1); break;\n      case 'month':        if(this.current.month() < this.step) this.current.month(0);  break;\n      case 'year':         break; // nothing to do for year\n      default:             break;\n    }\n  }\n\n  // safety mechanism: if current time is still unchanged, move to the end\n  if (this.current.valueOf() == prev) {\n    this.current = this._end.clone();\n  }\n\n  // Reset switches for year, month and day. Will get set to true where appropriate in DateUtil.stepOverHiddenDates\n  this.switchedDay = false;\n  this.switchedMonth = false;\n  this.switchedYear = false;\n\n  DateUtil.stepOverHiddenDates(this.moment, this, prev);\n};\n\n\n/**\n * Get the current datetime\n * @return {Moment}  current The current date\n */\nTimeStep.prototype.getCurrent = function() {\n  return this.current;\n};\n\n/**\n * Set a custom scale. Autoscaling will be disabled.\n * For example setScale('minute', 5) will result\n * in minor steps of 5 minutes, and major steps of an hour.\n *\n * @param {{scale: string, step: number}} params\n *                               An object containing two properties:\n *                               - A string 'scale'. Choose from 'millisecond', 'second',\n *                                 'minute', 'hour', 'weekday', 'day', 'month', 'year'.\n *                               - A number 'step'. A step size, by default 1.\n *                                 Choose for example 1, 2, 5, or 10.\n */\nTimeStep.prototype.setScale = function(params) {\n  if (params && typeof params.scale == 'string') {\n    this.scale = params.scale;\n    this.step = params.step > 0 ? params.step : 1;\n    this.autoScale = false;\n  }\n};\n\n/**\n * Enable or disable autoscaling\n * @param {boolean} enable  If true, autoascaling is set true\n */\nTimeStep.prototype.setAutoScale = function (enable) {\n  this.autoScale = enable;\n};\n\n\n/**\n * Automatically determine the scale that bests fits the provided minimum step\n * @param {Number} [minimumStep]  The minimum step size in milliseconds\n */\nTimeStep.prototype.setMinimumStep = function(minimumStep) {\n  if (minimumStep == undefined) {\n    return;\n  }\n\n  //var b = asc + ds;\n\n  var stepYear       = (1000 * 60 * 60 * 24 * 30 * 12);\n  var stepMonth      = (1000 * 60 * 60 * 24 * 30);\n  var stepDay        = (1000 * 60 * 60 * 24);\n  var stepHour       = (1000 * 60 * 60);\n  var stepMinute     = (1000 * 60);\n  var stepSecond     = (1000);\n  var stepMillisecond= (1);\n\n  // find the smallest step that is larger than the provided minimumStep\n  if (stepYear*1000 > minimumStep)        {this.scale = 'year';        this.step = 1000;}\n  if (stepYear*500 > minimumStep)         {this.scale = 'year';        this.step = 500;}\n  if (stepYear*100 > minimumStep)         {this.scale = 'year';        this.step = 100;}\n  if (stepYear*50 > minimumStep)          {this.scale = 'year';        this.step = 50;}\n  if (stepYear*10 > minimumStep)          {this.scale = 'year';        this.step = 10;}\n  if (stepYear*5 > minimumStep)           {this.scale = 'year';        this.step = 5;}\n  if (stepYear > minimumStep)             {this.scale = 'year';        this.step = 1;}\n  if (stepMonth*3 > minimumStep)          {this.scale = 'month';       this.step = 3;}\n  if (stepMonth > minimumStep)            {this.scale = 'month';       this.step = 1;}\n  if (stepDay*5 > minimumStep)            {this.scale = 'day';         this.step = 5;}\n  if (stepDay*2 > minimumStep)            {this.scale = 'day';         this.step = 2;}\n  if (stepDay > minimumStep)              {this.scale = 'day';         this.step = 1;}\n  if (stepDay/2 > minimumStep)            {this.scale = 'weekday';     this.step = 1;}\n  if (stepHour*4 > minimumStep)           {this.scale = 'hour';        this.step = 4;}\n  if (stepHour > minimumStep)             {this.scale = 'hour';        this.step = 1;}\n  if (stepMinute*15 > minimumStep)        {this.scale = 'minute';      this.step = 15;}\n  if (stepMinute*10 > minimumStep)        {this.scale = 'minute';      this.step = 10;}\n  if (stepMinute*5 > minimumStep)         {this.scale = 'minute';      this.step = 5;}\n  if (stepMinute > minimumStep)           {this.scale = 'minute';      this.step = 1;}\n  if (stepSecond*15 > minimumStep)        {this.scale = 'second';      this.step = 15;}\n  if (stepSecond*10 > minimumStep)        {this.scale = 'second';      this.step = 10;}\n  if (stepSecond*5 > minimumStep)         {this.scale = 'second';      this.step = 5;}\n  if (stepSecond > minimumStep)           {this.scale = 'second';      this.step = 1;}\n  if (stepMillisecond*200 > minimumStep)  {this.scale = 'millisecond'; this.step = 200;}\n  if (stepMillisecond*100 > minimumStep)  {this.scale = 'millisecond'; this.step = 100;}\n  if (stepMillisecond*50 > minimumStep)   {this.scale = 'millisecond'; this.step = 50;}\n  if (stepMillisecond*10 > minimumStep)   {this.scale = 'millisecond'; this.step = 10;}\n  if (stepMillisecond*5 > minimumStep)    {this.scale = 'millisecond'; this.step = 5;}\n  if (stepMillisecond > minimumStep)      {this.scale = 'millisecond'; this.step = 1;}\n};\n\n/**\n * Snap a date to a rounded value.\n * The snap intervals are dependent on the current scale and step.\n * Static function\n * @param {Date} date    the date to be snapped.\n * @param {string} scale Current scale, can be 'millisecond', 'second',\n *                       'minute', 'hour', 'weekday, 'day', 'month', 'year'.\n * @param {number} step  Current step (1, 2, 4, 5, ...\n * @return {Date} snappedDate\n */\nTimeStep.snap = function(date, scale, step) {\n  var clone = moment(date);\n\n  if (scale == 'year') {\n    var year = clone.year() + Math.round(clone.month() / 12);\n    clone.year(Math.round(year / step) * step);\n    clone.month(0);\n    clone.date(0);\n    clone.hours(0);\n    clone.minutes(0);\n    clone.seconds(0);\n    clone.milliseconds(0);\n  }\n  else if (scale == 'month') {\n    if (clone.date() > 15) {\n      clone.date(1);\n      clone.add(1, 'month');\n      // important: first set Date to 1, after that change the month.\n    }\n    else {\n      clone.date(1);\n    }\n\n    clone.hours(0);\n    clone.minutes(0);\n    clone.seconds(0);\n    clone.milliseconds(0);\n  }\n  else if (scale == 'day') {\n    //noinspection FallthroughInSwitchStatementJS\n    switch (step) {\n      case 5:\n      case 2:\n        clone.hours(Math.round(clone.hours() / 24) * 24); break;\n      default:\n        clone.hours(Math.round(clone.hours() / 12) * 12); break;\n    }\n    clone.minutes(0);\n    clone.seconds(0);\n    clone.milliseconds(0);\n  }\n  else if (scale == 'weekday') {\n    //noinspection FallthroughInSwitchStatementJS\n    switch (step) {\n      case 5:\n      case 2:\n        clone.hours(Math.round(clone.hours() / 12) * 12); break;\n      default:\n        clone.hours(Math.round(clone.hours() / 6) * 6); break;\n    }\n    clone.minutes(0);\n    clone.seconds(0);\n    clone.milliseconds(0);\n  }\n  else if (scale == 'hour') {\n    switch (step) {\n      case 4:\n        clone.minutes(Math.round(clone.minutes() / 60) * 60); break;\n      default:\n        clone.minutes(Math.round(clone.minutes() / 30) * 30); break;\n    }\n    clone.seconds(0);\n    clone.milliseconds(0);\n  } else if (scale == 'minute') {\n    //noinspection FallthroughInSwitchStatementJS\n    switch (step) {\n      case 15:\n      case 10:\n        clone.minutes(Math.round(clone.minutes() / 5) * 5);\n        clone.seconds(0);\n        break;\n      case 5:\n        clone.seconds(Math.round(clone.seconds() / 60) * 60); break;\n      default:\n        clone.seconds(Math.round(clone.seconds() / 30) * 30); break;\n    }\n    clone.milliseconds(0);\n  }\n  else if (scale == 'second') {\n    //noinspection FallthroughInSwitchStatementJS\n    switch (step) {\n      case 15:\n      case 10:\n        clone.seconds(Math.round(clone.seconds() / 5) * 5);\n        clone.milliseconds(0);\n        break;\n      case 5:\n        clone.milliseconds(Math.round(clone.milliseconds() / 1000) * 1000); break;\n      default:\n        clone.milliseconds(Math.round(clone.milliseconds() / 500) * 500); break;\n    }\n  }\n  else if (scale == 'millisecond') {\n    var _step = step > 5 ? step / 2 : 1;\n    clone.milliseconds(Math.round(clone.milliseconds() / _step) * _step);\n  }\n\n  return clone;\n};\n\n/**\n * Check if the current value is a major value (for example when the step\n * is DAY, a major value is each first day of the MONTH)\n * @return {boolean} true if current date is major, else false.\n */\nTimeStep.prototype.isMajor = function() {\n  if (this.switchedYear == true) {\n    switch (this.scale) {\n      case 'year':\n      case 'month':\n      case 'weekday':\n      case 'day':\n      case 'hour':\n      case 'minute':\n      case 'second':\n      case 'millisecond':\n        return true;\n      default:\n        return false;\n    }\n  }\n  else if (this.switchedMonth == true) {\n    switch (this.scale) {\n      case 'weekday':\n      case 'day':\n      case 'hour':\n      case 'minute':\n      case 'second':\n      case 'millisecond':\n        return true;\n      default:\n        return false;\n    }\n  }\n  else if (this.switchedDay == true) {\n    switch (this.scale) {\n      case 'millisecond':\n      case 'second':\n      case 'minute':\n      case 'hour':\n        return true;\n      default:\n        return false;\n    }\n  }\n\n  var date = this.moment(this.current);\n  switch (this.scale) {\n    case 'millisecond':\n      return (date.milliseconds() == 0);\n    case 'second':\n      return (date.seconds() == 0);\n    case 'minute':\n      return (date.hours() == 0) && (date.minutes() == 0);\n    case 'hour':\n      return (date.hours() == 0);\n    case 'weekday': // intentional fall through\n    case 'day':\n      return (date.date() == 1);\n    case 'month':\n      return (date.month() == 0);\n    case 'year':\n      return false;\n    default:\n      return false;\n  }\n};\n\n\n/**\n * Returns formatted text for the minor axislabel, depending on the current\n * date and the scale. For example when scale is MINUTE, the current time is\n * formatted as \"hh:mm\".\n * @param {Date} [date] custom date. if not provided, current date is taken\n */\nTimeStep.prototype.getLabelMinor = function(date) {\n  if (date == undefined) {\n    date = this.current;\n  }\n\n  if (typeof(this.format.minorLabels) === \"function\") {\n    return this.format.minorLabels(date, this.scale, this.step);\n  }\n\n  var format = this.format.minorLabels[this.scale];\n  return (format && format.length > 0) ? this.moment(date).format(format) : '';\n};\n\n/**\n * Returns formatted text for the major axis label, depending on the current\n * date and the scale. For example when scale is MINUTE, the major scale is\n * hours, and the hour will be formatted as \"hh\".\n * @param {Date} [date] custom date. if not provided, current date is taken\n */\nTimeStep.prototype.getLabelMajor = function(date) {\n  if (date == undefined) {\n    date = this.current;\n  }\n  \n  if (typeof(this.format.majorLabels) === \"function\") {\n    return this.format.majorLabels(date, this.scale, this.step);\n  }\n\n  var format = this.format.majorLabels[this.scale];\n  return (format && format.length > 0) ? this.moment(date).format(format) : '';\n};\n\nTimeStep.prototype.getClassName = function() {\n  var _moment = this.moment;\n  var m = this.moment(this.current);\n  var current = m.locale ? m.locale('en') : m.lang('en'); // old versions of moment have .lang() function\n  var step = this.step;\n\n  function even(value) {\n    return (value / step % 2 == 0) ? ' vis-even' : ' vis-odd';\n  }\n\n  function today(date) {\n    if (date.isSame(new Date(), 'day')) {\n      return ' vis-today';\n    }\n    if (date.isSame(_moment().add(1, 'day'), 'day')) {\n      return ' vis-tomorrow';\n    }\n    if (date.isSame(_moment().add(-1, 'day'), 'day')) {\n      return ' vis-yesterday';\n    }\n    return '';\n  }\n\n  function currentWeek(date) {\n    return date.isSame(new Date(), 'week') ? ' vis-current-week' : '';\n  }\n\n  function currentMonth(date) {\n    return date.isSame(new Date(), 'month') ? ' vis-current-month' : '';\n  }\n\n  function currentYear(date) {\n    return date.isSame(new Date(), 'year') ? ' vis-current-year' : '';\n  }\n\n  switch (this.scale) {\n    case 'millisecond':\n      return today(current) +\n        even(current.milliseconds()).trim();\n\n    case 'second':\n      return today(current) +\n        even(current.seconds()).trim();\n\n    case 'minute':\n      return today(current) +\n        even(current.minutes()).trim();\n\n    case 'hour':\n      return 'vis-h' + current.hours() + \n        (this.step == 4 ? '-h' + (current.hours() + 4) : '') +\n        today(current) +\n        even(current.hours());\n\n    case 'weekday':\n      return 'vis-' + current.format('dddd').toLowerCase() +\n        today(current) +\n        currentWeek(current) +\n        even(current.date());\n\n    case 'day':\n      return 'vis-day' + current.date() +\n        ' vis-' + current.format('MMMM').toLowerCase() +\n        today(current) +\n        currentMonth(current) +\n        (this.step <= 2 ? today(current) : '') +\n        (this.step <= 2 ? ' vis-' + current.format('dddd').toLowerCase() : '' + even(current.date() - 1));\n\n    case 'month':\n      return 'vis-' + current.format('MMMM').toLowerCase() +\n        currentMonth(current) +\n        even(current.month());\n\n    case 'year':\n      var year = current.year();\n      return 'vis-year' + year +\n        currentYear(current) +\n        even(year);\n\n    default:\n      return '';\n  }\n};\n\nmodule.exports = TimeStep;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/TimeStep.js","var util = require('../../util');\nvar stack = require('../Stack');\nvar RangeItem = require('./item/RangeItem');\n\n/**\n * @constructor Group\n * @param {Number | String} groupId\n * @param {Object} data\n * @param {ItemSet} itemSet\n */\nfunction Group (groupId, data, itemSet) {\n  this.groupId = groupId;\n  this.subgroups = {};\n  this.subgroupIndex = 0;\n  this.subgroupOrderer = data && data.subgroupOrder;\n  this.itemSet = itemSet;\n  this.isVisible = null;\n  \n  if (data && data.nestedGroups) {\n    this.nestedGroups = data.nestedGroups;\n    if (data.showNested == false) {\n      this.showNested = false;\n    } else {\n      this.showNested = true;\n    }\n  }\n\n  this.nestedInGroup = null;\n\n  this.dom = {};\n  this.props = {\n    label: {\n      width: 0,\n      height: 0\n    }\n  };\n  this.className = null;\n\n  this.items = {};        // items filtered by groupId of this group\n  this.visibleItems = []; // items currently visible in window\n  this.itemsInRange = []; // items currently in range\n  this.orderedItems = {\n    byStart: [],\n    byEnd: []\n  };\n  this.checkRangedItems = false; // needed to refresh the ranged items if the window is programatically changed with NO overlap.\n  var me = this;\n  this.itemSet.body.emitter.on(\"checkRangedItems\", function () {\n    me.checkRangedItems = true;\n  })\n\n  this._create();\n\n  this.setData(data);\n}\n\n/**\n * Create DOM elements for the group\n * @private\n */\nGroup.prototype._create = function() {\n  var label = document.createElement('div');\n  if (this.itemSet.options.groupEditable.order) {\n    label.className = 'vis-label draggable';\n  } else {\n    label.className = 'vis-label';\n  }\n  this.dom.label = label;\n\n  var inner = document.createElement('div');\n  inner.className = 'vis-inner';\n  label.appendChild(inner);\n  this.dom.inner = inner;\n\n  var foreground = document.createElement('div');\n  foreground.className = 'vis-group';\n  foreground['timeline-group'] = this;\n  this.dom.foreground = foreground;\n\n  this.dom.background = document.createElement('div');\n  this.dom.background.className = 'vis-group';\n\n  this.dom.axis = document.createElement('div');\n  this.dom.axis.className = 'vis-group';\n\n  // create a hidden marker to detect when the Timelines container is attached\n  // to the DOM, or the style of a parent of the Timeline is changed from\n  // display:none is changed to visible.\n  this.dom.marker = document.createElement('div');\n  this.dom.marker.style.visibility = 'hidden';\n  this.dom.marker.style.position = 'absolute';\n  this.dom.marker.innerHTML = '';\n  this.dom.background.appendChild(this.dom.marker);\n};\n\n/**\n * Set the group data for this group\n * @param {Object} data   Group data, can contain properties content and className\n */\nGroup.prototype.setData = function(data) {\n  // update contents\n  var content;\n  var templateFunction;\n\n  if (this.itemSet.options && this.itemSet.options.groupTemplate) {\n    templateFunction = this.itemSet.options.groupTemplate.bind(this);\n    content = templateFunction(data, this.dom.inner);\n  } else {\n    content = data && data.content;\n  }\n\n  if (content instanceof Element) {\n    this.dom.inner.appendChild(content);\n    while (this.dom.inner.firstChild) {\n      this.dom.inner.removeChild(this.dom.inner.firstChild);\n    }\n    this.dom.inner.appendChild(content);\n  } else if (content instanceof Object) {\n    templateFunction(data, this.dom.inner);\n  } else if (content !== undefined && content !== null) {\n    this.dom.inner.innerHTML = content;\n  } else {\n    this.dom.inner.innerHTML = this.groupId || ''; // groupId can be null\n  }\n\n  // update title\n  this.dom.label.title = data && data.title || '';\n  if (!this.dom.inner.firstChild) {\n    util.addClassName(this.dom.inner, 'vis-hidden');\n  }\n  else {\n    util.removeClassName(this.dom.inner, 'vis-hidden');\n  }\n\n  if (data && data.nestedGroups) {\n     if (data.showNested == false) {\n      this.showNested = false;\n    } else {\n      this.showNested = true;\n    }\n\n    util.addClassName(this.dom.label, 'vis-nesting-group');\n    if (this.showNested) {\n      util.removeClassName(this.dom.label, 'collapsed');\n      util.addClassName(this.dom.label, 'expanded');\n    } else {\n      util.removeClassName(this.dom.label, 'expanded');\n      var collapsedDirClassName = this.itemSet.options.rtl ? 'collapsed-rtl' : 'collapsed'\n      util.addClassName(this.dom.label, collapsedDirClassName);\n    }\n  }\n\n  if (data && data.nestedInGroup) {\n    util.addClassName(this.dom.label, 'vis-nested-group');\n    if (this.itemSet.options && this.itemSet.options.rtl) {\n      this.dom.inner.style.paddingRight = '30px';\n    } else {\n      this.dom.inner.style.paddingLeft = '30px';\n    }\n  }\n\n  // update className\n  var className = data && data.className || null;\n  if (className != this.className) {\n    if (this.className) {\n      util.removeClassName(this.dom.label, this.className);\n      util.removeClassName(this.dom.foreground, this.className);\n      util.removeClassName(this.dom.background, this.className);\n      util.removeClassName(this.dom.axis, this.className);\n    }\n    util.addClassName(this.dom.label, className);\n    util.addClassName(this.dom.foreground, className);\n    util.addClassName(this.dom.background, className);\n    util.addClassName(this.dom.axis, className);\n    this.className = className;\n  }\n\n  // update style\n  if (this.style) {\n    util.removeCssText(this.dom.label, this.style);\n    this.style = null;\n  }\n  if (data && data.style) {\n    util.addCssText(this.dom.label, data.style);\n    this.style = data.style;\n  }\n};\n\n/**\n * Get the width of the group label\n * @return {number} width\n */\nGroup.prototype.getLabelWidth = function() {\n  return this.props.label.width;\n};\n\n\n/**\n * Repaint this group\n * @param {{start: number, end: number}} range\n * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin\n * @param {boolean} [restack=false]  Force restacking of all items\n * @return {boolean} Returns true if the group is resized\n */\nGroup.prototype.redraw = function(range, margin, restack) {\n  var resized = false;\n\n  // force recalculation of the height of the items when the marker height changed\n  // (due to the Timeline being attached to the DOM or changed from display:none to visible)\n  var markerHeight = this.dom.marker.clientHeight;\n  if (markerHeight != this.lastMarkerHeight) {\n    this.lastMarkerHeight = markerHeight;\n    util.forEach(this.items, function (item) {\n      item.dirty = true;\n      if (item.displayed) item.redraw();\n    });\n\n    restack = true;\n  }\n\n  // recalculate the height of the subgroups\n  this._calculateSubGroupHeights(margin);\n\n  // calculate actual size and position\n  var foreground = this.dom.foreground;\n  this.top = foreground.offsetTop;\n  this.right = foreground.offsetLeft;\n  this.width = foreground.offsetWidth;\n\n  this.isVisible = this._isGroupVisible(range, margin);\n  // reposition visible items vertically\n  if (typeof this.itemSet.options.order === 'function') {\n    // a custom order function\n\n    if (restack) {\n      // brute force restack of all items\n\n      // show all items\n      var me = this;\n      var limitSize = false;\n      util.forEach(this.items, function (item) {\n        if (!item.displayed) {\n          item.redraw();\n          me.visibleItems.push(item);\n        }\n        item.repositionX(limitSize);\n      });\n\n      // order all items and force a restacking\n      var customOrderedItems = this.orderedItems.byStart.slice().sort(function (a, b) {\n        return me.itemSet.options.order(a.data, b.data);\n      });\n      stack.stack(customOrderedItems, margin, true /* restack=true */);\n    }\n\n    this.visibleItems = this._updateItemsInRange(this.orderedItems, this.visibleItems, range);\n  }\n  else {\n    // no custom order function, lazy stacking\n\n    this.visibleItems = this._updateItemsInRange(this.orderedItems, this.visibleItems, range);\n\n    if (this.itemSet.options.stack) { // TODO: ugly way to access options...\n      stack.stack(this.visibleItems, margin, restack);\n    }\n    else { // no stacking\n      stack.nostack(this.visibleItems, margin, this.subgroups, this.itemSet.options.stackSubgroups);\n    }\n  }\n\t\n  this._updateSubgroupsSizes();\n\n  // recalculate the height of the group\n  var height = this._calculateHeight(margin);\n\n  // calculate actual size and position\n  var foreground = this.dom.foreground;\n  this.top = foreground.offsetTop;\n  this.right = foreground.offsetLeft;\n  this.width = foreground.offsetWidth;\n  resized = util.updateProperty(this, 'height', height) || resized;\n  // recalculate size of label\n  resized = util.updateProperty(this.props.label, 'width', this.dom.inner.clientWidth) || resized;\n  resized = util.updateProperty(this.props.label, 'height', this.dom.inner.clientHeight) || resized;\n\n  // apply new height\n  this.dom.background.style.height  = height + 'px';\n  this.dom.foreground.style.height  = height + 'px';\n  this.dom.label.style.height = height + 'px';\n\n  // update vertical position of items after they are re-stacked and the height of the group is calculated\n  for (var i = 0, ii = this.visibleItems.length; i < ii; i++) {\n    var item = this.visibleItems[i];\n    item.repositionY(margin);\n    if (!this.isVisible && this.groupId != \"__background__\") {\n      if (item.displayed) item.hide();\n    }\n  }\n\n  if (!this.isVisible && this.height) {\n    return resized = false;\n  }\n\n  return resized;\n};\n\n/**\n * recalculate the height of the subgroups\n * @private\n */\nGroup.prototype._calculateSubGroupHeights = function (margin) {\n  if (Object.keys(this.subgroups).length > 0) {\n    var me = this;\n\n    this.resetSubgroups();\n\n    util.forEach(this.visibleItems, function (item) {\n      if (item.data.subgroup !== undefined) {\n        me.subgroups[item.data.subgroup].height = Math.max(me.subgroups[item.data.subgroup].height, item.height + margin.item.vertical);\n        me.subgroups[item.data.subgroup].visible = true;\n      }\n    });\n  }\n};\n\n/**\n * check if group is visible\n * @private\n  */\nGroup.prototype._isGroupVisible = function (range, margin) {\n  var isVisible = \n  (this.top <= range.body.domProps.centerContainer.height - range.body.domProps.scrollTop + margin.axis) \n  && (this.top + this.height + margin.axis >= - range.body.domProps.scrollTop);\n  return isVisible;\n}\n\n/**\n * recalculate the height of the group\n * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin\n * @returns {number} Returns the height\n * @private\n */\nGroup.prototype._calculateHeight = function (margin) {\n  // recalculate the height of the group\n  var height;\n  var itemsInRange = this.visibleItems;\n  if (itemsInRange.length > 0) {\n    var min = itemsInRange[0].top;\n    var max = itemsInRange[0].top + itemsInRange[0].height;\n    util.forEach(itemsInRange, function (item) {\n      min = Math.min(min, item.top);\n      max = Math.max(max, (item.top + item.height));\n    });\n    if (min > margin.axis) {\n      // there is an empty gap between the lowest item and the axis\n      var offset = min - margin.axis;\n      max -= offset;\n      util.forEach(itemsInRange, function (item) {\n        item.top -= offset;\n      });\n    }\n    height = max + margin.item.vertical / 2;\n  }\n  else {\n    height = 0;\n  }\n  height = Math.max(height, this.props.label.height);\n\n  return height;\n};\n\n/**\n * Show this group: attach to the DOM\n */\nGroup.prototype.show = function() {\n  if (!this.dom.label.parentNode) {\n    this.itemSet.dom.labelSet.appendChild(this.dom.label);\n  }\n\n  if (!this.dom.foreground.parentNode) {\n    this.itemSet.dom.foreground.appendChild(this.dom.foreground);\n  }\n\n  if (!this.dom.background.parentNode) {\n    this.itemSet.dom.background.appendChild(this.dom.background);\n  }\n\n  if (!this.dom.axis.parentNode) {\n    this.itemSet.dom.axis.appendChild(this.dom.axis);\n  }\n};\n\n/**\n * Hide this group: remove from the DOM\n */\nGroup.prototype.hide = function() {\n  var label = this.dom.label;\n  if (label.parentNode) {\n    label.parentNode.removeChild(label);\n  }\n\n  var foreground = this.dom.foreground;\n  if (foreground.parentNode) {\n    foreground.parentNode.removeChild(foreground);\n  }\n\n  var background = this.dom.background;\n  if (background.parentNode) {\n    background.parentNode.removeChild(background);\n  }\n\n  var axis = this.dom.axis;\n  if (axis.parentNode) {\n    axis.parentNode.removeChild(axis);\n  }\n};\n\n/**\n * Add an item to the group\n * @param {Item} item\n */\nGroup.prototype.add = function(item) {\n  this.items[item.id] = item;\n  item.setParent(this);\n\n  // add to\n  if (item.data.subgroup !== undefined) {\n    if (this.subgroups[item.data.subgroup] === undefined) {\n      this.subgroups[item.data.subgroup] = {\n        height:0, \n        top: 0,\n        start: item.data.start,\n        end: item.data.end,\n        visible: false, \n        index:this.subgroupIndex, \n        items: []\n      };\n      this.subgroupIndex++;\n    }\n\n\n    if (new Date(item.data.start) < new Date(this.subgroups[item.data.subgroup].start)) { \n      this.subgroups[item.data.subgroup].start = item.data.start; \n    }\n    if (new Date(item.data.end) > new Date(this.subgroups[item.data.subgroup].end)) { \n      this.subgroups[item.data.subgroup].end = item.data.end; \n    }\n\n    this.subgroups[item.data.subgroup].items.push(item);\n  }\n  this.orderSubgroups();\n\n  if (this.visibleItems.indexOf(item) == -1) {\n    var range = this.itemSet.body.range; // TODO: not nice accessing the range like this\n    this._checkIfVisible(item, this.visibleItems, range);\n  }\n};\n\nGroup.prototype._updateSubgroupsSizes = function () {\n  var me = this;\n  if (me.subgroups) {\n    for (var subgroup in me.subgroups) {\n      var newStart = me.subgroups[subgroup].items[0].data.start;\n      var newEnd = me.subgroups[subgroup].items[0].data.end;\n\n      me.subgroups[subgroup].items.forEach(function(item) {\n        if (new Date(item.data.start) < new Date(newStart)) { \n          newStart = item.data.start; \n        }\n        if (new Date(item.data.end) > new Date(newEnd)) { \n          newEnd = item.data.end; \n        }\n      })\n\n      me.subgroups[subgroup].start = newStart;\n      me.subgroups[subgroup].end = newEnd;\n\n    }\n  }\n}\n\nGroup.prototype.orderSubgroups = function() {\n  if (this.subgroupOrderer !== undefined) {\n    var sortArray = [];\n    if (typeof this.subgroupOrderer == 'string') {\n      for (var subgroup in this.subgroups) {\n        sortArray.push({subgroup: subgroup, sortField: this.subgroups[subgroup].items[0].data[this.subgroupOrderer]})\n      }\n      sortArray.sort(function (a, b) {\n        return a.sortField - b.sortField;\n      })\n    }\n    else if (typeof this.subgroupOrderer == 'function') {\n      for (var subgroup in this.subgroups) {\n        sortArray.push(this.subgroups[subgroup].items[0].data);\n      }\n      sortArray.sort(this.subgroupOrderer);\n    }\n\n    if (sortArray.length > 0) {\n      for (var i = 0; i < sortArray.length; i++) {\n        this.subgroups[sortArray[i].subgroup].index = i;\n      }\n    }\n  }\n};\n\nGroup.prototype.resetSubgroups = function() {\n  for (var subgroup in this.subgroups) {\n    if (this.subgroups.hasOwnProperty(subgroup)) {\n      this.subgroups[subgroup].visible = false;\n    }\n  }\n};\n\n/**\n * Remove an item from the group\n * @param {Item} item\n */\nGroup.prototype.remove = function(item) {\n  delete this.items[item.id];\n  item.setParent(null);\n\n  // remove from visible items\n  var index = this.visibleItems.indexOf(item);\n  if (index != -1) this.visibleItems.splice(index, 1);\n\n  if(item.data.subgroup !== undefined){\n    var subgroup = this.subgroups[item.data.subgroup];\n    if (subgroup){\n      var itemIndex = subgroup.items.indexOf(item);\n      subgroup.items.splice(itemIndex,1);\n      if (!subgroup.items.length){\n        delete this.subgroups[item.data.subgroup];\n        this.subgroupIndex--;\n      } else {\n        this._updateSubgroupsSizes();\n      }\n      this.orderSubgroups();\n    }\n  }\n};\n\n\n/**\n * Remove an item from the corresponding DataSet\n * @param {Item} item\n */\nGroup.prototype.removeFromDataSet = function(item) {\n  this.itemSet.removeItem(item.id);\n};\n\n\n/**\n * Reorder the items\n */\nGroup.prototype.order = function() {\n  var array = util.toArray(this.items);\n  var startArray = [];\n  var endArray = [];\n\n  for (var i = 0; i < array.length; i++) {\n    if (array[i].data.end !== undefined) {\n      endArray.push(array[i]);\n    }\n    startArray.push(array[i]);\n  }\n  this.orderedItems = {\n    byStart: startArray,\n    byEnd: endArray\n  };\n\n  stack.orderByStart(this.orderedItems.byStart);\n  stack.orderByEnd(this.orderedItems.byEnd);\n};\n\n\n/**\n * Update the visible items\n * @param {{byStart: Item[], byEnd: Item[]}} orderedItems   All items ordered by start date and by end date\n * @param {Item[]} visibleItems                             The previously visible items.\n * @param {{start: number, end: number}} range              Visible range\n * @return {Item[]} visibleItems                            The new visible items.\n * @private\n */\nGroup.prototype._updateItemsInRange = function(orderedItems, oldVisibleItems, range) {\n  var visibleItems = [];\n  var visibleItemsLookup = {}; // we keep this to quickly look up if an item already exists in the list without using indexOf on visibleItems\n\n  var interval = (range.end - range.start) / 4;\n  var lowerBound = range.start - interval;\n  var upperBound = range.end + interval;\n\n  // this function is used to do the binary search.\n  var searchFunction = function (value) {\n    if      (value < lowerBound)  {return -1;}\n    else if (value <= upperBound) {return  0;}\n    else                          {return  1;}\n  }\n\n  // first check if the items that were in view previously are still in view.\n  // IMPORTANT: this handles the case for the items with startdate before the window and enddate after the window!\n  // also cleans up invisible items.\n  if (oldVisibleItems.length > 0) {\n    for (var i = 0; i < oldVisibleItems.length; i++) {\n      this._checkIfVisibleWithReference(oldVisibleItems[i], visibleItems, visibleItemsLookup, range);\n    }\n  }\n\n  // we do a binary search for the items that have only start values.\n  var initialPosByStart = util.binarySearchCustom(orderedItems.byStart, searchFunction, 'data','start');\n\n  // trace the visible items from the inital start pos both ways until an invisible item is found, we only look at the start values.\n  this._traceVisible(initialPosByStart, orderedItems.byStart, visibleItems, visibleItemsLookup, function (item) {\n    return (item.data.start < lowerBound || item.data.start > upperBound);\n  });\n\n  // if the window has changed programmatically without overlapping the old window, the ranged items with start < lowerBound and end > upperbound are not shown.\n  // We therefore have to brute force check all items in the byEnd list\n  if (this.checkRangedItems == true) {\n    this.checkRangedItems = false;\n    for (i = 0; i < orderedItems.byEnd.length; i++) {\n      this._checkIfVisibleWithReference(orderedItems.byEnd[i], visibleItems, visibleItemsLookup, range);\n    }\n  }\n  else {\n    // we do a binary search for the items that have defined end times.\n    var initialPosByEnd = util.binarySearchCustom(orderedItems.byEnd, searchFunction, 'data','end');\n\n    // trace the visible items from the inital start pos both ways until an invisible item is found, we only look at the end values.\n    this._traceVisible(initialPosByEnd, orderedItems.byEnd, visibleItems, visibleItemsLookup, function (item) {\n      return (item.data.end < lowerBound || item.data.end > upperBound);\n    });\n  }\n\n  // finally, we reposition all the visible items.\n  for (var i = 0; i < visibleItems.length; i++) {\n    var item = visibleItems[i];\n    if (!item.displayed) item.show();\n    // reposition item horizontally\n    item.repositionX();\n  }\n  \n  return visibleItems;\n};\n\nGroup.prototype._traceVisible = function (initialPos, items, visibleItems, visibleItemsLookup, breakCondition) {\n  if (initialPos != -1) {\n    for (var i = initialPos; i >= 0; i--) {\n      var item = items[i];\n      if (breakCondition(item)) {\n        break;\n      }\n      else {\n        if (visibleItemsLookup[item.id] === undefined) {\n          visibleItemsLookup[item.id] = true;\n          visibleItems.push(item);\n        }\n      }\n    }\n\n    for (var i = initialPos + 1; i < items.length; i++) {\n      var item = items[i];\n      if (breakCondition(item)) {\n        break;\n      }\n      else {\n        if (visibleItemsLookup[item.id] === undefined) {\n          visibleItemsLookup[item.id] = true;\n          visibleItems.push(item);\n        }\n      }\n    }\n  }\n}\n\n\n/**\n * this function is very similar to the _checkIfInvisible() but it does not\n * return booleans, hides the item if it should not be seen and always adds to\n * the visibleItems.\n * this one is for brute forcing and hiding.\n *\n * @param {Item} item\n * @param {Array} visibleItems\n * @param {{start:number, end:number}} range\n * @private\n */\nGroup.prototype._checkIfVisible = function(item, visibleItems, range) {\n    if (item.isVisible(range)) {\n      if (!item.displayed) item.show();\n      // reposition item horizontally\n      item.repositionX();\n      visibleItems.push(item);\n    }\n    else {\n      if (item.displayed) item.hide();\n    }\n};\n\n\n/**\n * this function is very similar to the _checkIfInvisible() but it does not\n * return booleans, hides the item if it should not be seen and always adds to\n * the visibleItems.\n * this one is for brute forcing and hiding.\n *\n * @param {Item} item\n * @param {Array} visibleItems\n * @param {{start:number, end:number}} range\n * @private\n */\nGroup.prototype._checkIfVisibleWithReference = function(item, visibleItems, visibleItemsLookup, range) {\n  if (item.isVisible(range)) {\n    if (visibleItemsLookup[item.id] === undefined) {\n      visibleItemsLookup[item.id] = true;\n      visibleItems.push(item);\n    }\n  }\n  else {\n    if (item.displayed) item.hide();\n  }\n};\n\n\n\nmodule.exports = Group;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/component/Group.js","// Utility functions for ordering and stacking of items\nvar EPSILON = 0.001; // used when checking collisions, to prevent round-off errors\n\n/**\n * Order items by their start data\n * @param {Item[]} items\n */\nexports.orderByStart = function(items) {\n  items.sort(function (a, b) {\n    return a.data.start - b.data.start;\n  });\n};\n\n/**\n * Order items by their end date. If they have no end date, their start date\n * is used.\n * @param {Item[]} items\n */\nexports.orderByEnd = function(items) {\n  items.sort(function (a, b) {\n    var aTime = ('end' in a.data) ? a.data.end : a.data.start,\n        bTime = ('end' in b.data) ? b.data.end : b.data.start;\n\n    return aTime - bTime;\n  });\n};\n\n/**\n * Adjust vertical positions of the items such that they don't overlap each\n * other.\n * @param {Item[]} items\n *            All visible items\n * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin\n *            Margins between items and between items and the axis.\n * @param {boolean} [force=false]\n *            If true, all items will be repositioned. If false (default), only\n *            items having a top===null will be re-stacked\n */\nexports.stack = function(items, margin, force) {\n  if (force) {\n    // reset top position of all items\n    for (var i = 0; i < items.length; i++) {\n      items[i].top = null;\n    }\n  }\n\n  // calculate new, non-overlapping positions\n  for (var i = 0; i < items.length; i++) {\n    var item = items[i];\n    if (item.stack && item.top === null) {\n      // initialize top position\n      item.top = margin.axis;\n\n      do {\n        // TODO: optimize checking for overlap. when there is a gap without items,\n        //       you only need to check for items from the next item on, not from zero\n        var collidingItem = null;\n        for (var j = 0, jj = items.length; j < jj; j++) {\n          var other = items[j];\n          if (other.top !== null && other !== item && other.stack && exports.collision(item, other, margin.item, other.options.rtl)) {\n            collidingItem = other;\n            break;\n          }\n        }\n\n        if (collidingItem != null) {\n          // There is a collision. Reposition the items above the colliding element\n          item.top = collidingItem.top + collidingItem.height + margin.item.vertical;\n        }\n      } while (collidingItem);\n    }\n  }\n};\n\n\n/**\n * Adjust vertical positions of the items without stacking them\n * @param {Item[]} items\n *            All visible items\n * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin\n *            Margins between items and between items and the axis.\n* @param {subgroups[]} subgroups\n *            All subgroups\n */\n exports.nostack = function(items, margin, subgroups, stackSubgroups) {\n  for (var i = 0; i < items.length; i++) {\n    if (items[i].data.subgroup == undefined) {\n      items[i].top = margin.item.vertical;\n    } else if (items[i].data.subgroup !== undefined && stackSubgroups) {\n      var newTop = 0;\n      for (var subgroup in subgroups) {\n        if (subgroups.hasOwnProperty(subgroup)) {\n          if (subgroups[subgroup].visible == true && subgroups[subgroup].index < subgroups[items[i].data.subgroup].index) {\n            newTop += subgroups[subgroup].height;\n            subgroups[items[i].data.subgroup].top = newTop;\n          }\n        }\n      }\n      items[i].top = newTop + 0.5 * margin.item.vertical;\n    }\n  }\n  if (!stackSubgroups) {\n    exports.stackSubgroups(items, margin, subgroups)\n  }\n};\n\n/**\n * Adjust vertical positions of the subgroups such that they don't overlap each\n * other.\n * @param {subgroups[]} subgroups\n *            All subgroups\n * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin\n *            Margins between items and between items and the axis.\n */\nexports.stackSubgroups = function(items, margin, subgroups) {\n  for (var subgroup in subgroups) {\n    if (subgroups.hasOwnProperty(subgroup)) {\n\n\n      subgroups[subgroup].top = 0;\n      do {\n        // TODO: optimize checking for overlap. when there is a gap without items,\n        //       you only need to check for items from the next item on, not from zero\n        var collidingItem = null;\n        for (var otherSubgroup in subgroups) {\n          if (subgroups[otherSubgroup].top !== null && otherSubgroup !== subgroup && subgroups[subgroup].index > subgroups[otherSubgroup].index && exports.collisionByTimes(subgroups[subgroup], subgroups[otherSubgroup])) {\n            collidingItem = subgroups[otherSubgroup];\n            break;\n          }\n        }\n\n        if (collidingItem != null) {\n          // There is a collision. Reposition the subgroups above the colliding element\n          subgroups[subgroup].top = collidingItem.top + collidingItem.height;\n        }\n      } while (collidingItem);\n    }\n  }\n  for (var i = 0; i < items.length; i++) {\n    if (items[i].data.subgroup !== undefined) {\n      items[i].top = subgroups[items[i].data.subgroup].top + 0.5 * margin.item.vertical;\n    }\n  }\n}\n\n/**\n * Test if the two provided items collide\n * The items must have parameters left, width, top, and height.\n * @param {Item} a          The first item\n * @param {Item} b          The second item\n * @param {{horizontal: number, vertical: number}} margin\n *                          An object containing a horizontal and vertical\n *                          minimum required margin.\n * @param {boolean} rtl\n * @return {boolean}        true if a and b collide, else false\n */\nexports.collision = function(a, b, margin, rtl) {\n  if (rtl) {\n    return  ((a.right - margin.horizontal + EPSILON)  < (b.right + b.width) &&\n    (a.right + a.width + margin.horizontal - EPSILON) > b.right &&\n    (a.top - margin.vertical + EPSILON)              < (b.top + b.height) &&\n    (a.top + a.height + margin.vertical - EPSILON)   > b.top);\n  } else {\n    return ((a.left - margin.horizontal + EPSILON)   < (b.left + b.width) &&\n    (a.left + a.width + margin.horizontal - EPSILON) > b.left &&\n    (a.top - margin.vertical + EPSILON)              < (b.top + b.height) &&\n    (a.top + a.height + margin.vertical - EPSILON)   > b.top);\n  }\n};\n\n/**\n * Test if the two provided objects collide\n * The objects must have parameters start, end, top, and height.\n * @param {Object} a          The first Object\n * @param {Object} b          The second Object\n * @return {boolean}        true if a and b collide, else false\n */\nexports.collisionByTimes = function(a, b) {\n  return (\n    (a.start <= b.start && a.end >= b.start && a.top < (b.top + b.height) && (a.top + a.height) > b.top ) ||\n    (b.start <= a.start && b.end >= a.start && b.top < (a.top + a.height) && (b.top + b.height) > a.top )\n  )\n}\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/Stack.js","var Hammer = require('../../../module/hammer');\nvar Item = require('./Item');\n\n/**\n * @constructor RangeItem\n * @extends Item\n * @param {Object} data             Object containing parameters start, end\n *                                  content, className.\n * @param {{toScreen: function, toTime: function}} conversion\n *                                  Conversion functions from time to screen and vice versa\n * @param {Object} [options]        Configuration options\n *                                  // TODO: describe options\n */\nfunction RangeItem (data, conversion, options) {\n  this.props = {\n    content: {\n      width: 0\n    }\n  };\n  this.overflow = false; // if contents can overflow (css styling), this flag is set to true\n  this.options = options;\n  // validate data\n  if (data) {\n    if (data.start == undefined) {\n      throw new Error('Property \"start\" missing in item ' + data.id);\n    }\n    if (data.end == undefined) {\n      throw new Error('Property \"end\" missing in item ' + data.id);\n    }\n  }\n\n  Item.call(this, data, conversion, options);\n}\n\nRangeItem.prototype = new Item (null, null, null);\n\nRangeItem.prototype.baseClassName = 'vis-item vis-range';\n\n/**\n * Check whether this item is visible inside given range\n * @returns {{start: Number, end: Number}} range with a timestamp for start and end\n * @returns {boolean} True if visible\n */\nRangeItem.prototype.isVisible = function(range) {\n  // determine visibility\n  return (this.data.start < range.end) && (this.data.end > range.start);\n};\n\n/**\n * Repaint the item\n */\nRangeItem.prototype.redraw = function() {\n  var dom = this.dom;\n  if (!dom) {\n    // create DOM\n    this.dom = {};\n    dom = this.dom;\n\n      // background box\n    dom.box = document.createElement('div');\n    // className is updated in redraw()\n\n    // frame box (to prevent the item contents from overflowing)\n    dom.frame = document.createElement('div');\n    dom.frame.className = 'vis-item-overflow';\n    dom.box.appendChild(dom.frame);\n  \n    // visible frame box (showing the frame that is always visible)\n    dom.visibleFrame = document.createElement('div');\n    dom.visibleFrame.className = 'vis-item-visible-frame';\n    dom.box.appendChild(dom.visibleFrame);\n\n    // contents box\n    dom.content = document.createElement('div');\n    dom.content.className = 'vis-item-content';\n    dom.frame.appendChild(dom.content);\n\n    // attach this item as attribute\n    dom.box['timeline-item'] = this;\n\n    this.dirty = true;\n  }\n\n  // append DOM to parent DOM\n  if (!this.parent) {\n    throw new Error('Cannot redraw item: no parent attached');\n  }\n  if (!dom.box.parentNode) {\n    var foreground = this.parent.dom.foreground;\n    if (!foreground) {\n      throw new Error('Cannot redraw item: parent has no foreground container element');\n    }\n    foreground.appendChild(dom.box);\n  }\n  this.displayed = true;\n\n  // Update DOM when item is marked dirty. An item is marked dirty when:\n  // - the item is not yet rendered\n  // - the item's data is changed\n  // - the item is selected/deselected\n  if (this.dirty) {\n    this._updateContents(this.dom.content);\n    this._updateTitle();\n    this._updateDataAttributes(this.dom.box);\n    this._updateStyle(this.dom.box);\n\n    var editable = (this.options.editable.updateTime || \n                    this.options.editable.updateGroup ||\n                    this.editable === true) &&\n                   this.editable !== false;\n\n    // update class\n    var className = (this.data.className ? (' ' + this.data.className) : '') +\n        (this.selected ? ' vis-selected' : '') + \n        (editable ? ' vis-editable' : ' vis-readonly');\n    dom.box.className = this.baseClassName + className;\n\n    // determine from css whether this box has overflow\n    this.overflow = window.getComputedStyle(dom.frame).overflow !== 'hidden';\n\n    // recalculate size\n    // turn off max-width to be able to calculate the real width\n    // this causes an extra browser repaint/reflow, but so be it\n    this.dom.content.style.maxWidth = 'none';\n    this.props.content.width = this.dom.content.offsetWidth;\n    this.height = this.dom.box.offsetHeight;\n    this.dom.content.style.maxWidth = '';\n\n    this.dirty = false;\n  }\n\n  this._repaintOnItemUpdateTimeTooltip(dom.box);\n  this._repaintDeleteButton(dom.box);\n  this._repaintDragCenter();\n  this._repaintDragLeft();\n  this._repaintDragRight();\n};\n\n/**\n * Show the item in the DOM (when not already visible). The items DOM will\n * be created when needed.\n */\nRangeItem.prototype.show = function() {\n  if (!this.displayed) {\n    this.redraw();\n  }\n};\n\n/**\n * Hide the item from the DOM (when visible)\n * @return {Boolean} changed\n */\nRangeItem.prototype.hide = function() {\n  if (this.displayed) {\n    var box = this.dom.box;\n\n    if (box.parentNode) {\n      box.parentNode.removeChild(box);\n    }\n\n    this.displayed = false;\n  }\n};\n\n/**\n * Reposition the item horizontally\n * @param {boolean} [limitSize=true] If true (default), the width of the range\n *                                   item will be limited, as the browser cannot\n *                                   display very wide divs. This means though\n *                                   that the applied left and width may\n *                                   not correspond to the ranges start and end\n * @Override\n */\nRangeItem.prototype.repositionX = function(limitSize) {\n  var parentWidth = this.parent.width;\n  var start = this.conversion.toScreen(this.data.start);\n  var end = this.conversion.toScreen(this.data.end);\n  var contentStartPosition;\n  var contentWidth;\n\n  // limit the width of the range, as browsers cannot draw very wide divs\n  if (limitSize === undefined || limitSize === true) {\n    if (start < -parentWidth) {\n      start = -parentWidth;\n    }\n    if (end > 2 * parentWidth) {\n      end = 2 * parentWidth;\n    }\n  }\n\n  // add 0.5 to compensate floating-point values rounding\n  var boxWidth = Math.max(end - start + 0.5, 1);\n\n  if (this.overflow) {\n    if (this.options.rtl) {\n      this.right = start;\n    } else {\n      this.left = start;\n    }\n    this.width = boxWidth + this.props.content.width;\n    contentWidth = this.props.content.width;\n\n    // Note: The calculation of width is an optimistic calculation, giving\n    //       a width which will not change when moving the Timeline\n    //       So no re-stacking needed, which is nicer for the eye;\n  }\n  else {\n    if (this.options.rtl) {\n      this.right = start;\n    } else {\n      this.left = start;\n    }\n    this.width = boxWidth;\n    contentWidth = Math.min(end - start, this.props.content.width);\n  }\n\n  if (this.options.rtl) {\n    this.dom.box.style.right = this.right + 'px';\n  } else {\n    this.dom.box.style.left = this.left + 'px'; \n  }\n  this.dom.box.style.width = boxWidth + 'px';\n\n  switch (this.options.align) {\n    case 'left':\n      if (this.options.rtl) {\n        this.dom.content.style.right = '0';\n      } else {\n        this.dom.content.style.left = '0';\n      }\n      break;\n\n    case 'right':\n      if (this.options.rtl) {\n        this.dom.content.style.right = Math.max((boxWidth - contentWidth), 0) + 'px';\n      } else {\n        this.dom.content.style.left = Math.max((boxWidth - contentWidth), 0) + 'px';\n      }\n      break;\n\n    case 'center':\n      if (this.options.rtl) {\n        this.dom.content.style.right = Math.max((boxWidth - contentWidth) / 2, 0) + 'px';\n      } else {\n        this.dom.content.style.left = Math.max((boxWidth - contentWidth) / 2, 0) + 'px';\n      }\n      \n      break;\n\n    default: // 'auto'\n      // when range exceeds left of the window, position the contents at the left of the visible area\n      if (this.overflow) {\n        if (end > 0) {\n          contentStartPosition = Math.max(-start, 0);\n        }\n        else {\n          contentStartPosition = -contentWidth; // ensure it's not visible anymore\n        }\n      }\n      else {\n        if (start < 0) {\n          contentStartPosition = -start;\n        }\n        else {\n          contentStartPosition = 0;\n        }\n      }\n      if (this.options.rtl) {\n        this.dom.content.style.right = contentStartPosition + 'px';\n      } else {\n        this.dom.content.style.left = contentStartPosition + 'px';\n        this.dom.content.style.width = 'calc(100% - ' + contentStartPosition + 'px)';\n      }\n  }\n};\n\n/**\n * Reposition the item vertically\n * @Override\n */\nRangeItem.prototype.repositionY = function() {\n  var orientation = this.options.orientation.item;\n  var box = this.dom.box;\n\n  if (orientation == 'top') {\n    box.style.top = this.top + 'px';\n  }\n  else {\n    box.style.top = (this.parent.height - this.top - this.height) + 'px';\n  }\n};\n\n/**\n * Repaint a drag area on the left side of the range when the range is selected\n * @protected\n */\nRangeItem.prototype._repaintDragLeft = function () {\n  if (this.selected && this.options.editable.updateTime && !this.dom.dragLeft) {\n    // create and show drag area\n    var dragLeft = document.createElement('div');\n    dragLeft.className = 'vis-drag-left';\n    dragLeft.dragLeftItem = this;\n\n    this.dom.box.appendChild(dragLeft);\n    this.dom.dragLeft = dragLeft;\n  }\n  else if (!this.selected && this.dom.dragLeft) {\n    // delete drag area\n    if (this.dom.dragLeft.parentNode) {\n      this.dom.dragLeft.parentNode.removeChild(this.dom.dragLeft);\n    }\n    this.dom.dragLeft = null;\n  }\n};\n\n/**\n * Repaint a drag area on the right side of the range when the range is selected\n * @protected\n */\nRangeItem.prototype._repaintDragRight = function () {\n  if (this.selected && this.options.editable.updateTime && !this.dom.dragRight) {\n    // create and show drag area\n    var dragRight = document.createElement('div');\n    dragRight.className = 'vis-drag-right';\n    dragRight.dragRightItem = this;\n\n    this.dom.box.appendChild(dragRight);\n    this.dom.dragRight = dragRight;\n  }\n  else if (!this.selected && this.dom.dragRight) {\n    // delete drag area\n    if (this.dom.dragRight.parentNode) {\n      this.dom.dragRight.parentNode.removeChild(this.dom.dragRight);\n    }\n    this.dom.dragRight = null;\n  }\n};\n\nmodule.exports = RangeItem;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/component/item/RangeItem.js","var Hammer = require('../../../module/hammer');\nvar util = require('../../../util');\nvar moment = require('../../../module/moment');\n\n\n/**\n * @constructor Item\n * @param {Object} data             Object containing (optional) parameters type,\n *                                  start, end, content, group, className.\n * @param {{toScreen: function, toTime: function}} conversion\n *                                  Conversion functions from time to screen and vice versa\n * @param {Object} options          Configuration options\n *                                  // TODO: describe available options\n */\nfunction Item (data, conversion, options) {\n  this.id = null;\n  this.parent = null;\n  this.data = data;\n  this.dom = null;\n  this.conversion = conversion || {};\n  this.options = options || {};  \n  this.selected = false;\n  this.displayed = false;\n  this.groupShowing = true;\n  this.dirty = true;\n  this.popup = null;\n\n  this.top = null;\n  this.right = null;\n  this.left = null;\n  this.width = null;\n  this.height = null;\n\n  this.editable = null;\n  if (this.data && this.data.hasOwnProperty('editable')){\n    if(typeof this.data.editable === 'boolean') {\n        this.editable = {\n          updateTime: this.data.editable,\n          updateGroup: this.data.editable,\n          remove: this.data.editable\n        }\n    }\n    else if(typeof options.editable === 'object') {\n      this.editable = {};\n      util.selectiveExtend(['updateTime', 'updateGroup', 'remove'], this.editable, data.editable);\n    };\n  }\n}\n\nItem.prototype.stack = true;\n\n/**\n * Select current item\n */\nItem.prototype.select = function() {\n  this.selected = true;\n  this.dirty = true;\n  if (this.displayed) this.redraw();\n};\n\n/**\n * Unselect current item\n */\nItem.prototype.unselect = function() {\n  this.selected = false;\n  this.dirty = true;\n  if (this.displayed) this.redraw();\n};\n\n/**\n * Set data for the item. Existing data will be updated. The id should not\n * be changed. When the item is displayed, it will be redrawn immediately.\n * @param {Object} data\n */\nItem.prototype.setData = function(data) {\n  var groupChanged = data.group != undefined && this.data.group != data.group;\n  if (groupChanged) {\n    this.parent.itemSet._moveToGroup(this, data.group);\n  }\n\n  if (data.hasOwnProperty('editable')){\n    if (typeof data.editable === 'boolean') {\n      this.editable = {\n        updateTime: this.data.editable,\n        updateGroup: this.data.editable,\n        remove: this.data.editable\n      }\n    }\n    else if(typeof options.editable === 'object') {\n      this.editable = {};\n      util.selectiveExtend(['updateTime', 'updateGroup', 'remove'], this.editable, data.editable);\n    }\n  }\n\n  this.data = data;\n  this.dirty = true;\n  if (this.displayed) this.redraw();\n};\n\n/**\n * Set a parent for the item\n * @param {ItemSet | Group} parent\n */\nItem.prototype.setParent = function(parent) {\n  if (this.displayed) {\n    this.hide();\n    this.parent = parent;\n    if (this.parent) {\n      this.show();\n    }\n  }\n  else {\n    this.parent = parent;\n  }\n};\n\n/**\n * Check whether this item is visible inside given range\n * @returns {{start: Number, end: Number}} range with a timestamp for start and end\n * @returns {boolean} True if visible\n */\nItem.prototype.isVisible = function(range) {\n  return false;\n};\n\n/**\n * Show the Item in the DOM (when not already visible)\n * @return {Boolean} changed\n */\nItem.prototype.show = function() {\n  return false;\n};\n\n/**\n * Hide the Item from the DOM (when visible)\n * @return {Boolean} changed\n */\nItem.prototype.hide = function() {\n  return false;\n};\n\n/**\n * Repaint the item\n */\nItem.prototype.redraw = function() {\n  // should be implemented by the item\n};\n\n/**\n * Reposition the Item horizontally\n */\nItem.prototype.repositionX = function() {\n  // should be implemented by the item\n};\n\n/**\n * Reposition the Item vertically\n */\nItem.prototype.repositionY = function() {\n  // should be implemented by the item\n};\n\n/**\n * Repaint a drag area on the center of the item when the item is selected\n * @protected\n */\nItem.prototype._repaintDragCenter = function () {\n  if (this.selected && this.options.editable.updateTime && !this.dom.dragCenter) {\n    var me = this;\n\n    // create and show drag area\n    var dragCenter = document.createElement('div');\n    dragCenter.className = 'vis-drag-center';\n    dragCenter.dragCenterItem = this;\n\n    new Hammer(dragCenter).on('doubletap', function (event) {\n      event.stopPropagation();\n      me.parent.itemSet._onUpdateItem(me);\n    });\n\n    if (this.dom.box) {\n      this.dom.box.appendChild(dragCenter);\n    } \n    else if (this.dom.point) {\n      this.dom.point.appendChild(dragCenter);\n    }\n    \n    this.dom.dragCenter = dragCenter;\n  }\n  else if (!this.selected && this.dom.dragCenter) {\n    // delete drag area\n    if (this.dom.dragCenter.parentNode) {\n      this.dom.dragCenter.parentNode.removeChild(this.dom.dragCenter);\n    }\n    this.dom.dragCenter = null;\n  }\n};\n\n/**\n * Repaint a delete button on the top right of the item when the item is selected\n * @param {HTMLElement} anchor\n * @protected\n */\nItem.prototype._repaintDeleteButton = function (anchor) {\n  var editable = ((this.options.editable.overrideItems || this.editable == null) && this.options.editable.remove) ||\n                 (!this.options.editable.overrideItems && this.editable != null && this.editable.remove);\n\n  if (this.selected && editable && !this.dom.deleteButton) {\n    // create and show button\n    var me = this;\n\n    var deleteButton = document.createElement('div');\n\n    if (this.options.rtl) {\n      deleteButton.className = 'vis-delete-rtl';\n    } else {\n      deleteButton.className = 'vis-delete';\n    }\n    deleteButton.title = 'Delete this item';\n\n    // TODO: be able to destroy the delete button\n    new Hammer(deleteButton).on('tap', function (event) {\n      event.stopPropagation();\n      me.parent.removeFromDataSet(me);\n    });\n\n    anchor.appendChild(deleteButton);\n    this.dom.deleteButton = deleteButton;\n  }\n  else if (!this.selected && this.dom.deleteButton) {\n    // remove button\n    if (this.dom.deleteButton.parentNode) {\n      this.dom.deleteButton.parentNode.removeChild(this.dom.deleteButton);\n    }\n    this.dom.deleteButton = null;\n  }\n};\n\n/**\n * Repaint a onChange tooltip on the top right of the item when the item is selected\n * @param {HTMLElement} anchor\n * @protected\n */\nItem.prototype._repaintOnItemUpdateTimeTooltip = function (anchor) {\n  if (!this.options.tooltipOnItemUpdateTime) return;\n\n  var editable = (this.options.editable.updateTime || \n                  this.data.editable === true) &&\n                 this.data.editable !== false;\n\n  if (this.selected && editable && !this.dom.onItemUpdateTimeTooltip) {\n    // create and show tooltip\n    var me = this;\n\n    var onItemUpdateTimeTooltip = document.createElement('div');\n\n    onItemUpdateTimeTooltip.className = 'vis-onUpdateTime-tooltip';\n    anchor.appendChild(onItemUpdateTimeTooltip);\n    this.dom.onItemUpdateTimeTooltip = onItemUpdateTimeTooltip;\n\n  } else if (!this.selected && this.dom.onItemUpdateTimeTooltip) {\n    // remove button\n    if (this.dom.onItemUpdateTimeTooltip.parentNode) {\n      this.dom.onItemUpdateTimeTooltip.parentNode.removeChild(this.dom.onItemUpdateTimeTooltip);\n    }\n    this.dom.onItemUpdateTimeTooltip = null;\n  }\n\n  // position onChange tooltip\n  if (this.dom.onItemUpdateTimeTooltip) {\n\n    // only show when editing\n    this.dom.onItemUpdateTimeTooltip.style.visibility = this.parent.itemSet.touchParams.itemIsDragging ? 'visible' : 'hidden';\n    \n    // position relative to item's content\n    if (this.options.rtl) {\n      this.dom.onItemUpdateTimeTooltip.style.right = this.dom.content.style.right;\n    } else {\n      this.dom.onItemUpdateTimeTooltip.style.left = this.dom.content.style.left;\n    }\n\n    // position above or below the item depending on the item's position in the window\n    var tooltipOffset = 50; // TODO: should be tooltip height (depends on template)\n    var scrollTop = this.parent.itemSet.body.domProps.scrollTop;\n\n      // TODO: this.top for orientation:true is actually the items distance from the bottom... \n      // (should be this.bottom)\n    var itemDistanceFromTop \n    if (this.options.orientation.item == 'top') {\n      itemDistanceFromTop = this.top;\n    } else {\n      itemDistanceFromTop = (this.parent.height - this.top - this.height)\n    }\n    var isCloseToTop = itemDistanceFromTop + this.parent.top - tooltipOffset < -scrollTop;\n\n    if (isCloseToTop) {\n      this.dom.onItemUpdateTimeTooltip.style.bottom = \"\";\n      this.dom.onItemUpdateTimeTooltip.style.top = this.height + 2 + \"px\";\n    } else {\n      this.dom.onItemUpdateTimeTooltip.style.top = \"\";\n      this.dom.onItemUpdateTimeTooltip.style.bottom = this.height + 2 + \"px\";\n    }\n    \n    // handle tooltip content\n    var content;\n    var templateFunction;\n\n    if (this.options.tooltipOnItemUpdateTime && this.options.tooltipOnItemUpdateTime.template) {\n      templateFunction = this.options.tooltipOnItemUpdateTime.template.bind(this);\n      content = templateFunction(this.data);\n    } else {\n      content = 'start: ' + moment(this.data.start).format('MM/DD/YYYY hh:mm');\n      if (this.data.end) { \n        content += '<br> end: ' + moment(this.data.end).format('MM/DD/YYYY hh:mm');\n      }\n    }\n    this.dom.onItemUpdateTimeTooltip.innerHTML = content;\n  }\n};\n\n\n/**\n * Set HTML contents for the item\n * @param {Element} element   HTML element to fill with the contents\n * @private\n */\nItem.prototype._updateContents = function (element) {\n  var content;\n  var templateFunction;\n  var itemVisibleFrameContent;\n  var visibleFrameTemplateFunction; \n  var itemData = this.parent.itemSet.itemsData.get(this.id); // get a clone of the data from the dataset\n\n  var frameElement = this.dom.box || this.dom.point;\n  var itemVisibleFrameContentElement = frameElement.getElementsByClassName('vis-item-visible-frame')[0]\n\n  if (this.options.visibleFrameTemplate) {\n    visibleFrameTemplateFunction = this.options.visibleFrameTemplate.bind(this);\n    itemVisibleFrameContent = visibleFrameTemplateFunction(itemData, frameElement);\n  } else {\n    itemVisibleFrameContent = '';\n  }\n  \n  if (itemVisibleFrameContentElement) {\n    if ((itemVisibleFrameContent instanceof Object) && !(itemVisibleFrameContent instanceof Element)) {\n      visibleFrameTemplateFunction(itemData, itemVisibleFrameContentElement)\n    } else {\n       var changed = this._contentToString(this.itemVisibleFrameContent) !== this._contentToString(itemVisibleFrameContent);\n       if (changed) {\n        // only replace the content when changed\n        if (itemVisibleFrameContent instanceof Element) {\n          itemVisibleFrameContentElement.innerHTML = '';\n          itemVisibleFrameContentElement.appendChild(itemVisibleFrameContent);\n        }\n        else if (itemVisibleFrameContent != undefined) {\n          itemVisibleFrameContentElement.innerHTML = itemVisibleFrameContent;\n        }\n        else {\n          if (!(this.data.type == 'background' && this.data.content === undefined)) {\n            throw new Error('Property \"content\" missing in item ' + this.id);\n          }\n        }\n\n        this.itemVisibleFrameContent = itemVisibleFrameContent;\n       }\n    }\n  }\n\n  if (this.options.template) {\n    templateFunction = this.options.template.bind(this);\n    content = templateFunction(itemData, element);\n  } else {\n    content = this.data.content;\n  }\n\n  if ((content instanceof Object) && !(content instanceof Element)) {\n    templateFunction(itemData, element)\n  } else {\n    var changed = this._contentToString(this.content) !== this._contentToString(content);\n    if (changed) {\n      // only replace the content when changed\n      if (content instanceof Element) {\n        element.innerHTML = '';\n        element.appendChild(content);\n      }\n      else if (content != undefined) {\n        element.innerHTML = content;\n      }\n      else {\n        if (!(this.data.type == 'background' && this.data.content === undefined)) {\n          throw new Error('Property \"content\" missing in item ' + this.id);\n        }\n      }\n\n      this.content = content;\n    }\n  }\n};\n\n/**\n * Set HTML contents for the item\n * @private\n */\nItem.prototype._updateTitle = function () {\n  if (this.data.title != null) {\n    if (this.popup != null) {\n      this.popup.setText(this.data.title || '');\n    }\n  }\n};\n\n/**\n * Process dataAttributes timeline option and set as data- attributes on dom.content\n * @param {Element} element   HTML element to which the attributes will be attached\n * @private\n */\n Item.prototype._updateDataAttributes = function(element) {\n  if (this.options.dataAttributes && this.options.dataAttributes.length > 0) {\n    var attributes = [];\n\n    if (Array.isArray(this.options.dataAttributes)) {\n      attributes = this.options.dataAttributes;\n    }\n    else if (this.options.dataAttributes == 'all') {\n      attributes = Object.keys(this.data);\n    }\n    else {\n      return;\n    }\n\n    for (var i = 0; i < attributes.length; i++) {\n      var name = attributes[i];\n      var value = this.data[name];\n\n      if (value != null) {\n        element.setAttribute('data-' + name, value);\n      }\n      else {\n        element.removeAttribute('data-' + name);\n      }\n    }\n  }\n};\n\n/**\n * Update custom styles of the element\n * @param element\n * @private\n */\nItem.prototype._updateStyle = function(element) {\n  // remove old styles\n  if (this.style) {\n    util.removeCssText(element, this.style);\n    this.style = null;\n  }\n\n  // append new styles\n  if (this.data.style) {\n    util.addCssText(element, this.data.style);\n    this.style = this.data.style;\n  }\n};\n\n\n/**\n * Stringify the items contents\n * @param {string | Element | undefined} content\n * @returns {string | undefined}\n * @private\n */\nItem.prototype._contentToString = function (content) {\n  if (typeof content === 'string') return content;\n  if (content && 'outerHTML' in content) return content.outerHTML;\n  return content;\n};\n\n/**\n * Return the width of the item left from its start date\n * @return {number}\n */\nItem.prototype.getWidthLeft = function () {\n  return 0;\n};\n\n/**\n * Return the width of the item right from the max of its start and end date\n * @return {number}\n */\nItem.prototype.getWidthRight = function () {\n  return 0;\n};\n\n/**\n * Return the title of the item\n * @return {string | undefined}\n */\nItem.prototype.getTitle = function () {\n  return this.data.title;\n};\n\n/**\n * Set the popup object, and update the title\n * @param {Popup} popup\n */\nItem.prototype.setPopup = function (popup) {\n  this.popup = popup;\n  this._updateTitle();\n};\n\nmodule.exports = Item;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/component/item/Item.js","var util = require('../../util');\nvar Group = require('./Group');\n\n/**\n * @constructor BackgroundGroup\n * @param {Number | String} groupId\n * @param {Object} data\n * @param {ItemSet} itemSet\n */\nfunction BackgroundGroup (groupId, data, itemSet) {\n  Group.call(this, groupId, data, itemSet);\n\n  this.width = 0;\n  this.height = 0;\n  this.top = 0;\n  this.left = 0;\n}\n\nBackgroundGroup.prototype = Object.create(Group.prototype);\n\n/**\n * Repaint this group\n * @param {{start: number, end: number}} range\n * @param {{item: {horizontal: number, vertical: number}, axis: number}} margin\n * @param {boolean} [restack=false]  Force restacking of all items\n * @return {boolean} Returns true if the group is resized\n */\nBackgroundGroup.prototype.redraw = function(range, margin, restack) {\n  var resized = false;\n\n  this.visibleItems = this._updateItemsInRange(this.orderedItems, this.visibleItems, range);\n\n  // calculate actual size\n  this.width = this.dom.background.offsetWidth;\n\n  // apply new height (just always zero for BackgroundGroup\n  this.dom.background.style.height  = '0';\n\n  // update vertical position of items after they are re-stacked and the height of the group is calculated\n  for (var i = 0, ii = this.visibleItems.length; i < ii; i++) {\n    var item = this.visibleItems[i];\n    item.repositionY(margin);\n  }\n\n  return resized;\n};\n\n/**\n * Show this group: attach to the DOM\n */\nBackgroundGroup.prototype.show = function() {\n  if (!this.dom.background.parentNode) {\n    this.itemSet.dom.background.appendChild(this.dom.background);\n  }\n};\n\nmodule.exports = BackgroundGroup;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/component/BackgroundGroup.js","var Item = require('./Item');\nvar util = require('../../../util');\n\n/**\n * @constructor BoxItem\n * @extends Item\n * @param {Object} data             Object containing parameters start\n *                                  content, className.\n * @param {{toScreen: function, toTime: function}} conversion\n *                                  Conversion functions from time to screen and vice versa\n * @param {Object} [options]        Configuration options\n *                                  // TODO: describe available options\n */\nfunction BoxItem (data, conversion, options) {\n  this.props = {\n    dot: {\n      width: 0,\n      height: 0\n    },\n    line: {\n      width: 0,\n      height: 0\n    }\n  };\n  this.options = options;\n  // validate data\n  if (data) {\n    if (data.start == undefined) {\n      throw new Error('Property \"start\" missing in item ' + data);\n    }\n  }\n\n  Item.call(this, data, conversion, options);\n}\n\nBoxItem.prototype = new Item (null, null, null);\n\n/**\n * Check whether this item is visible inside given range\n * @returns {{start: Number, end: Number}} range with a timestamp for start and end\n * @returns {boolean} True if visible\n */\nBoxItem.prototype.isVisible = function(range) {\n  // determine visibility\n  var isVisible;\n  var align = this.options.align;\n  var msPerPixel = (range.end - range.start) / range.body.dom.center.clientWidth;\n  var widthInMs = this.width * msPerPixel;\n\n  if (align == 'right') {\n    isVisible = (this.data.start.getTime() > range.start ) && (this.data.start.getTime() - widthInMs < range.end);\n  }\n  else if (align == 'left') {\n    isVisible = (this.data.start.getTime() + widthInMs > range.start ) && (this.data.start.getTime() < range.end);\n  }\n  else {\n    // default or 'center'\n    isVisible = (this.data.start.getTime() + widthInMs/2 > range.start ) && (this.data.start.getTime() - widthInMs/2 < range.end);\n  }\n  return isVisible;\n};\n\n/**\n * Repaint the item\n */\nBoxItem.prototype.redraw = function() {\n  var dom = this.dom;\n  if (!dom) {\n    // create DOM\n    this.dom = {};\n    dom = this.dom;\n\n    // create main box\n    dom.box = document.createElement('DIV');\n\n    // contents box (inside the background box). used for making margins\n    dom.content = document.createElement('DIV');\n    dom.content.className = 'vis-item-content';\n    dom.box.appendChild(dom.content);\n\n    // line to axis\n    dom.line = document.createElement('DIV');\n    dom.line.className = 'vis-line';\n\n    // dot on axis\n    dom.dot = document.createElement('DIV');\n    dom.dot.className = 'vis-dot';\n\n    // attach this item as attribute\n    dom.box['timeline-item'] = this;\n\n    this.dirty = true;\n  }\n\n  // append DOM to parent DOM\n  if (!this.parent) {\n    throw new Error('Cannot redraw item: no parent attached');\n  }\n  if (!dom.box.parentNode) {\n    var foreground = this.parent.dom.foreground;\n    if (!foreground) throw new Error('Cannot redraw item: parent has no foreground container element');\n    foreground.appendChild(dom.box);\n  }\n  if (!dom.line.parentNode) {\n    var background = this.parent.dom.background;\n    if (!background) throw new Error('Cannot redraw item: parent has no background container element');\n    background.appendChild(dom.line);\n  }\n  if (!dom.dot.parentNode) {\n    var axis = this.parent.dom.axis;\n    if (!background) throw new Error('Cannot redraw item: parent has no axis container element');\n    axis.appendChild(dom.dot);\n  }\n  this.displayed = true;\n\n  // Update DOM when item is marked dirty. An item is marked dirty when:\n  // - the item is not yet rendered\n  // - the item's data is changed\n  // - the item is selected/deselected\n  if (this.dirty) {\n    this._updateContents(this.dom.content);\n    this._updateTitle();\n    this._updateDataAttributes(this.dom.box);\n    this._updateStyle(this.dom.box);\n\n    var editable = (this.options.editable.updateTime ||\n                    this.options.editable.updateGroup ||\n                    this.editable === true) &&\n                   this.editable !== false;\n\n    // update class\n    var className = (this.data.className? ' ' + this.data.className : '') +\n        (this.selected ? ' vis-selected' : '') +\n        (editable ? ' vis-editable' : ' vis-readonly');\n    dom.box.className = 'vis-item vis-box' + className;\n    dom.line.className = 'vis-item vis-line' + className;\n    dom.dot.className  = 'vis-item vis-dot' + className;\n\n    // set initial position in the visible range of the grid so that the\n    // rendered box size can be determinated correctly, even the content\n    // has a dynamic width (fixes #2032).\n    var previousRight = dom.box.style.right;\n    var previousLeft = dom.box.style.left;\n    if (this.options.rtl) {\n      dom.box.style.right = \"0px\";\n    } else {\n      dom.box.style.left = \"0px\";\n    }\n\n    // recalculate size\n    this.props.dot.height = dom.dot.offsetHeight;\n    this.props.dot.width = dom.dot.offsetWidth;\n    this.props.line.width = dom.line.offsetWidth;\n    this.width = dom.box.offsetWidth;\n    this.height = dom.box.offsetHeight;\n\n    // restore previous position\n    if (this.options.rtl) {\n      dom.box.style.right = previousRight;\n    } else {\n      dom.box.style.left = previousLeft;\n    }\n\n    this.dirty = false;\n  }\n\n  this._repaintOnItemUpdateTimeTooltip(dom.box);\n  this._repaintDragCenter();\n  this._repaintDeleteButton(dom.box);\n};\n\n/**\n * Show the item in the DOM (when not already displayed). The items DOM will\n * be created when needed.\n */\nBoxItem.prototype.show = function() {\n  if (!this.displayed) {\n    this.redraw();\n  }\n};\n\n/**\n * Hide the item from the DOM (when visible)\n */\nBoxItem.prototype.hide = function() {\n  if (this.displayed) {\n    var dom = this.dom;\n\n    if (dom.box.parentNode)   dom.box.parentNode.removeChild(dom.box);\n    if (dom.line.parentNode)  dom.line.parentNode.removeChild(dom.line);\n    if (dom.dot.parentNode)   dom.dot.parentNode.removeChild(dom.dot);\n\n    this.displayed = false;\n  }\n};\n\n/**\n * Reposition the item horizontally\n * @Override\n */\nBoxItem.prototype.repositionX = function() {\n  var start = this.conversion.toScreen(this.data.start);\n  var align = this.options.align;\n\n  // calculate left position of the box\n  if (align == 'right') {\n    if (this.options.rtl) {\n      this.right = start - this.width;\n\n      // reposition box, line, and dot\n      this.dom.box.style.right = this.right + 'px';\n      this.dom.line.style.right = (start - this.props.line.width) + 'px';\n      this.dom.dot.style.right = (start - this.props.line.width / 2 - this.props.dot.width / 2) + 'px';\n    } else {\n      this.left = start - this.width;\n\n      // reposition box, line, and dot\n      this.dom.box.style.left = this.left + 'px';\n      this.dom.line.style.left = (start - this.props.line.width) + 'px';\n      this.dom.dot.style.left = (start - this.props.line.width / 2 - this.props.dot.width / 2) + 'px';\n    }\n  }\n  else if (align == 'left') {\n    if (this.options.rtl) {\n      this.right = start;\n\n      // reposition box, line, and dot\n      this.dom.box.style.right = this.right + 'px';\n      this.dom.line.style.right = start + 'px';\n      this.dom.dot.style.right = (start + this.props.line.width / 2 - this.props.dot.width / 2) + 'px';\n    } else {\n      this.left = start;\n\n      // reposition box, line, and dot\n      this.dom.box.style.left = this.left + 'px';\n      this.dom.line.style.left = start + 'px';\n      this.dom.dot.style.left = (start + this.props.line.width / 2 - this.props.dot.width / 2) + 'px';\n    }\n  }\n  else {\n    // default or 'center'\n    if (this.options.rtl) {\n      this.right = start - this.width / 2;\n\n      // reposition box, line, and dot\n      this.dom.box.style.right = this.right + 'px';\n      this.dom.line.style.right = (start - this.props.line.width) + 'px';\n      this.dom.dot.style.right = (start - this.props.dot.width / 2) + 'px';\n    } else {\n      this.left = start - this.width / 2;\n\n      // reposition box, line, and dot\n      this.dom.box.style.left = this.left + 'px';\n      this.dom.line.style.left = (start - this.props.line.width / 2) + 'px';\n      this.dom.dot.style.left = (start - this.props.dot.width / 2) + 'px';\n    }\n  }\n};\n\n/**\n * Reposition the item vertically\n * @Override\n */\nBoxItem.prototype.repositionY = function() {\n  var orientation = this.options.orientation.item;\n  var box = this.dom.box;\n  var line = this.dom.line;\n  var dot = this.dom.dot;\n\n  if (orientation == 'top') {\n    box.style.top     = (this.top || 0) + 'px';\n\n    line.style.top    = '0';\n    line.style.height = (this.parent.top + this.top + 1) + 'px';\n    line.style.bottom = '';\n  }\n  else { // orientation 'bottom'\n    var itemSetHeight = this.parent.itemSet.props.height; // TODO: this is nasty\n    var lineHeight = itemSetHeight - this.parent.top - this.parent.height + this.top;\n\n    box.style.top     = (this.parent.height - this.top - this.height || 0) + 'px';\n    line.style.top    = (itemSetHeight - lineHeight) + 'px';\n    line.style.bottom = '0';\n  }\n\n  dot.style.top = (-this.props.dot.height / 2) + 'px';\n};\n\n/**\n * Return the width of the item left from its start date\n * @return {number}\n */\nBoxItem.prototype.getWidthLeft = function () {\n  return this.width / 2;\n};\n\n/**\n * Return the width of the item right from its start date\n * @return {number}\n */\nBoxItem.prototype.getWidthRight = function () {\n  return this.width / 2;\n};\n\nmodule.exports = BoxItem;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/component/item/BoxItem.js","var Item = require('./Item');\n\n/**\n * @constructor PointItem\n * @extends Item\n * @param {Object} data             Object containing parameters start\n *                                  content, className.\n * @param {{toScreen: function, toTime: function}} conversion\n *                                  Conversion functions from time to screen and vice versa\n * @param {Object} [options]        Configuration options\n *                                  // TODO: describe available options\n */\nfunction PointItem (data, conversion, options) {\n  this.props = {\n    dot: {\n      top: 0,\n      width: 0,\n      height: 0\n    },\n    content: {\n      height: 0,\n      marginLeft: 0,\n      marginRight: 0\n    }\n  };\n  this.options = options;\n  // validate data\n  if (data) {\n    if (data.start == undefined) {\n      throw new Error('Property \"start\" missing in item ' + data);\n    }\n  }\n\n  Item.call(this, data, conversion, options);\n}\n\nPointItem.prototype = new Item (null, null, null);\n\n/**\n * Check whether this item is visible inside given range\n * @returns {{start: Number, end: Number}} range with a timestamp for start and end\n * @returns {boolean} True if visible\n */\nPointItem.prototype.isVisible = function(range) {\n  // determine visibility\n  var msPerPixel = (range.end - range.start) / range.body.dom.center.clientWidth;\n  var widthInMs = this.width * msPerPixel;\n  \n  return (this.data.start.getTime() + widthInMs > range.start ) && (this.data.start < range.end);\n};\n\n/**\n * Repaint the item\n */\nPointItem.prototype.redraw = function() {\n  var dom = this.dom;\n  if (!dom) {\n    // create DOM\n    this.dom = {};\n    dom = this.dom;\n\n    // background box\n    dom.point = document.createElement('div');\n    // className is updated in redraw()\n\n    // contents box, right from the dot\n    dom.content = document.createElement('div');\n    dom.content.className = 'vis-item-content';\n    dom.point.appendChild(dom.content);\n\n    // dot at start\n    dom.dot = document.createElement('div');\n    dom.point.appendChild(dom.dot);\n\n    // attach this item as attribute\n    dom.point['timeline-item'] = this;\n\n    this.dirty = true;\n  }\n\n  // append DOM to parent DOM\n  if (!this.parent) {\n    throw new Error('Cannot redraw item: no parent attached');\n  }\n  if (!dom.point.parentNode) {\n    var foreground = this.parent.dom.foreground;\n    if (!foreground) {\n      throw new Error('Cannot redraw item: parent has no foreground container element');\n    }\n    foreground.appendChild(dom.point);\n  }\n  this.displayed = true;\n\n  // Update DOM when item is marked dirty. An item is marked dirty when:\n  // - the item is not yet rendered\n  // - the item's data is changed\n  // - the item is selected/deselected\n  if (this.dirty) {\n    this._updateContents(this.dom.content);\n    this._updateTitle();\n    this._updateDataAttributes(this.dom.point);\n    this._updateStyle(this.dom.point);\n\n    var editable = (this.options.editable.updateTime || \n                    this.options.editable.updateGroup ||\n                    this.editable === true) &&\n                   this.editable !== false;\n\n    // update class\n    var className = (this.data.className ? ' ' + this.data.className : '') +\n        (this.selected ? ' vis-selected' : '') +\n        (editable ? ' vis-editable' : ' vis-readonly');\n    dom.point.className  = 'vis-item vis-point' + className;\n    dom.dot.className  = 'vis-item vis-dot' + className;\n\n    // recalculate size of dot and contents\n    this.props.dot.width = dom.dot.offsetWidth;\n    this.props.dot.height = dom.dot.offsetHeight;\n    this.props.content.height = dom.content.offsetHeight;\n\n    // resize contents\n    if (this.options.rtl) {\n      dom.content.style.marginRight = 2 * this.props.dot.width + 'px';\n    } else {\n      dom.content.style.marginLeft = 2 * this.props.dot.width + 'px';\n    }\n    //dom.content.style.marginRight = ... + 'px'; // TODO: margin right\n\n    // recalculate size\n    this.width = dom.point.offsetWidth;\n    this.height = dom.point.offsetHeight;\n\n    // reposition the dot\n    dom.dot.style.top = ((this.height - this.props.dot.height) / 2) + 'px';\n    if (this.options.rtl) {\n      dom.dot.style.right = (this.props.dot.width / 2) + 'px';\n    } else {\n      dom.dot.style.left = (this.props.dot.width / 2) + 'px';\n    }\n\n    this.dirty = false;\n  }\n  \n  this._repaintOnItemUpdateTimeTooltip(dom.point);\n  this._repaintDragCenter();\n  this._repaintDeleteButton(dom.point);\n};\n\n/**\n * Show the item in the DOM (when not already visible). The items DOM will\n * be created when needed.\n */\nPointItem.prototype.show = function() {\n  if (!this.displayed) {\n    this.redraw();\n  }\n};\n\n/**\n * Hide the item from the DOM (when visible)\n */\nPointItem.prototype.hide = function() {\n  if (this.displayed) {\n    if (this.dom.point.parentNode) {\n      this.dom.point.parentNode.removeChild(this.dom.point);\n    }\n\n    this.displayed = false;\n  }\n};\n\n/**\n * Reposition the item horizontally\n * @Override\n */\nPointItem.prototype.repositionX = function() {\n  var start = this.conversion.toScreen(this.data.start);\n\n  if (this.options.rtl) {\n    this.right = start - this.props.dot.width;\n\n    // reposition point\n    this.dom.point.style.right = this.right + 'px';\n  } else {\n    this.left = start - this.props.dot.width;\n\n    // reposition point\n    this.dom.point.style.left = this.left + 'px';\n  }\n};\n\n/**\n * Reposition the item vertically\n * @Override\n */\nPointItem.prototype.repositionY = function() {\n  var orientation = this.options.orientation.item;\n  var point = this.dom.point;\n  if (orientation == 'top') {\n    point.style.top = this.top + 'px';\n  }\n  else {\n    point.style.top = (this.parent.height - this.top - this.height) + 'px';\n  }\n};\n\n/**\n * Return the width of the item left from its start date\n * @return {number}\n */\nPointItem.prototype.getWidthLeft = function () {\n  return this.props.dot.width;\n};\n\n/**\n * Return the width of the item right from  its start date\n * @return {number}\n */\nPointItem.prototype.getWidthRight = function () {\n  return this.props.dot.width;\n};\n\nmodule.exports = PointItem;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/component/item/PointItem.js","var Hammer = require('../../../module/hammer');\nvar Item = require('./Item');\nvar BackgroundGroup = require('../BackgroundGroup');\nvar RangeItem = require('./RangeItem');\n\n/**\n * @constructor BackgroundItem\n * @extends Item\n * @param {Object} data             Object containing parameters start, end\n *                                  content, className.\n * @param {{toScreen: function, toTime: function}} conversion\n *                                  Conversion functions from time to screen and vice versa\n * @param {Object} [options]        Configuration options\n *                                  // TODO: describe options\n */\n// TODO: implement support for the BackgroundItem just having a start, then being displayed as a sort of an annotation\nfunction BackgroundItem (data, conversion, options) {\n  this.props = {\n    content: {\n      width: 0\n    }\n  };\n  this.overflow = false; // if contents can overflow (css styling), this flag is set to true\n\n  // validate data\n  if (data) {\n    if (data.start == undefined) {\n      throw new Error('Property \"start\" missing in item ' + data.id);\n    }\n    if (data.end == undefined) {\n      throw new Error('Property \"end\" missing in item ' + data.id);\n    }\n  }\n\n  Item.call(this, data, conversion, options);\n}\n\nBackgroundItem.prototype = new Item (null, null, null);\n\nBackgroundItem.prototype.baseClassName = 'vis-item vis-background';\nBackgroundItem.prototype.stack = false;\n\n/**\n * Check whether this item is visible inside given range\n * @returns {{start: Number, end: Number}} range with a timestamp for start and end\n * @returns {boolean} True if visible\n */\nBackgroundItem.prototype.isVisible = function(range) {\n  // determine visibility\n  return (this.data.start < range.end) && (this.data.end > range.start); \n};\n\n/**\n * Repaint the item\n */\nBackgroundItem.prototype.redraw = function() {\n  var dom = this.dom;\n  if (!dom) {\n    // create DOM\n    this.dom = {};\n    dom = this.dom;\n\n    // background box\n    dom.box = document.createElement('div');\n    // className is updated in redraw()\n\n    // frame box (to prevent the item contents from overflowing\n    dom.frame = document.createElement('div');\n    dom.frame.className = 'vis-item-overflow';\n    dom.box.appendChild(dom.frame);\n\n    // contents box\n    dom.content = document.createElement('div');\n    dom.content.className = 'vis-item-content';\n    dom.frame.appendChild(dom.content);\n\n    // Note: we do NOT attach this item as attribute to the DOM,\n    //       such that background items cannot be selected\n    //dom.box['timeline-item'] = this;\n\n    this.dirty = true;\n  }\n\n  // append DOM to parent DOM\n  if (!this.parent) {\n    throw new Error('Cannot redraw item: no parent attached');\n  }\n  if (!dom.box.parentNode) {\n    var background = this.parent.dom.background;\n    if (!background) {\n      throw new Error('Cannot redraw item: parent has no background container element');\n    }\n    background.appendChild(dom.box);\n  }\n  this.displayed = true;\n\n  // Update DOM when item is marked dirty. An item is marked dirty when:\n  // - the item is not yet rendered\n  // - the item's data is changed\n  // - the item is selected/deselected\n  if (this.dirty) {\n    this._updateContents(this.dom.content);\n    this._updateTitle();\n    this._updateDataAttributes(this.dom.content);\n    this._updateStyle(this.dom.box);\n\n    // update class\n    var className = (this.data.className ? (' ' + this.data.className) : '') +\n        (this.selected ? ' vis-selected' : '');\n    dom.box.className = this.baseClassName + className;\n\n    // determine from css whether this box has overflow\n    this.overflow = window.getComputedStyle(dom.content).overflow !== 'hidden';\n\n    // recalculate size\n    this.props.content.width = this.dom.content.offsetWidth;\n    this.height = 0; // set height zero, so this item will be ignored when stacking items\n\n    this.dirty = false;\n  }\n};\n\n/**\n * Show the item in the DOM (when not already visible). The items DOM will\n * be created when needed.\n */\nBackgroundItem.prototype.show = RangeItem.prototype.show;\n\n/**\n * Hide the item from the DOM (when visible)\n * @return {Boolean} changed\n */\nBackgroundItem.prototype.hide = RangeItem.prototype.hide;\n\n/**\n * Reposition the item horizontally\n * @Override\n */\nBackgroundItem.prototype.repositionX = RangeItem.prototype.repositionX;\n\n/**\n * Reposition the item vertically\n * @Override\n */\nBackgroundItem.prototype.repositionY = function(margin) {\n  var height;\n\n  // special positioning for subgroups\n  if (this.data.subgroup !== undefined) {\n    // TODO: instead of calculating the top position of the subgroups here for every BackgroundItem, calculate the top of the subgroup once in Itemset\n\n    var itemSubgroup = this.data.subgroup;\n    var subgroups = this.parent.subgroups;\n    var subgroupIndex = subgroups[itemSubgroup].index;\n\n    this.dom.box.style.height = this.parent.subgroups[itemSubgroup].height + 'px';\n\n    var orientation = this.options.orientation.item;\n    if (orientation == 'top') { \n      this.dom.box.style.top = this.parent.top + this.parent.subgroups[itemSubgroup].top + 'px';\n    } else {\n      this.dom.box.style.top = (this.parent.top + this.parent.height - this.parent.subgroups[itemSubgroup].top - this.parent.subgroups[itemSubgroup].height) + 'px';\n    }\n    this.dom.box.style.bottom = '';\n  }\n  // and in the case of no subgroups:\n  else {\n    // we want backgrounds with groups to only show in groups.\n    if (this.parent instanceof BackgroundGroup) {\n      // if the item is not in a group:\n      height = Math.max(this.parent.height,\n          this.parent.itemSet.body.domProps.center.height,\n          this.parent.itemSet.body.domProps.centerContainer.height);\n      this.dom.box.style.top = orientation == 'top' ? '0' : '';\n      this.dom.box.style.bottom = orientation == 'top' ? '' : '0';\n    }\n    else {\n      height = this.parent.height;\n      // same alignment for items when orientation is top or bottom\n      this.dom.box.style.top = this.parent.top + 'px';\n      this.dom.box.style.bottom = '';\n    }\n  }\n  this.dom.box.style.height = height + 'px';\n};\n\nmodule.exports = BackgroundItem;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/component/item/BackgroundItem.js","var util = require('../../util');\nvar Component = require('./Component');\nvar TimeStep = require('../TimeStep');\nvar DateUtil = require('../DateUtil');\nvar moment = require('../../module/moment');\n\n/**\n * A horizontal time axis\n * @param {{dom: Object, domProps: Object, emitter: Emitter, range: Range}} body\n * @param {Object} [options]        See TimeAxis.setOptions for the available\n *                                  options.\n * @constructor TimeAxis\n * @extends Component\n */\nfunction TimeAxis (body, options) {\n  this.dom = {\n    foreground: null,\n    lines: [],\n    majorTexts: [],\n    minorTexts: [],\n    redundant: {\n      lines: [],\n      majorTexts: [],\n      minorTexts: []\n    }\n  };\n  this.props = {\n    range: {\n      start: 0,\n      end: 0,\n      minimumStep: 0\n    },\n    lineTop: 0\n  };\n\n  this.defaultOptions = {\n    orientation: {\n      axis: 'bottom'\n    },  // axis orientation: 'top' or 'bottom'\n    showMinorLabels: true,\n    showMajorLabels: true,\n    maxMinorChars: 7,\n    format: TimeStep.FORMAT,\n    moment: moment,\n    timeAxis: null\n  };\n  this.options = util.extend({}, this.defaultOptions);\n\n  this.body = body;\n\n  // create the HTML DOM\n  this._create();\n\n  this.setOptions(options);\n}\n\nTimeAxis.prototype = new Component();\n\n/**\n * Set options for the TimeAxis.\n * Parameters will be merged in current options.\n * @param {Object} options  Available options:\n *                          {string} [orientation.axis]\n *                          {boolean} [showMinorLabels]\n *                          {boolean} [showMajorLabels]\n */\nTimeAxis.prototype.setOptions = function(options) {\n  if (options) {\n    // copy all options that we know\n    util.selectiveExtend([\n      'showMinorLabels',\n      'showMajorLabels',\n      'maxMinorChars',\n      'hiddenDates',\n      'timeAxis',\n      'moment',\n      'rtl'\n    ], this.options, options);\n\n    // deep copy the format options\n    util.selectiveDeepExtend(['format'], this.options, options);\n\n    if ('orientation' in options) {\n      if (typeof options.orientation === 'string') {\n        this.options.orientation.axis = options.orientation;\n      }\n      else if (typeof options.orientation === 'object' && 'axis' in options.orientation) {\n        this.options.orientation.axis = options.orientation.axis;\n      }\n    }\n\n    // apply locale to moment.js\n    // TODO: not so nice, this is applied globally to moment.js\n    if ('locale' in options) {\n      if (typeof moment.locale === 'function') {\n        // moment.js 2.8.1+\n        moment.locale(options.locale);\n      }\n      else {\n        moment.lang(options.locale);\n      }\n    }\n  }\n};\n\n/**\n * Create the HTML DOM for the TimeAxis\n */\nTimeAxis.prototype._create = function() {\n  this.dom.foreground = document.createElement('div');\n  this.dom.background = document.createElement('div');\n\n  this.dom.foreground.className = 'vis-time-axis vis-foreground';\n  this.dom.background.className = 'vis-time-axis vis-background';\n};\n\n/**\n * Destroy the TimeAxis\n */\nTimeAxis.prototype.destroy = function() {\n  // remove from DOM\n  if (this.dom.foreground.parentNode) {\n    this.dom.foreground.parentNode.removeChild(this.dom.foreground);\n  }\n  if (this.dom.background.parentNode) {\n    this.dom.background.parentNode.removeChild(this.dom.background);\n  }\n\n  this.body = null;\n};\n\n/**\n * Repaint the component\n * @return {boolean} Returns true if the component is resized\n */\nTimeAxis.prototype.redraw = function () {\n  var props = this.props;\n  var foreground = this.dom.foreground;\n  var background = this.dom.background;\n\n  // determine the correct parent DOM element (depending on option orientation)\n  var parent = (this.options.orientation.axis == 'top') ? this.body.dom.top : this.body.dom.bottom;\n  var parentChanged = (foreground.parentNode !== parent);\n\n  // calculate character width and height\n  this._calculateCharSize();\n\n  // TODO: recalculate sizes only needed when parent is resized or options is changed\n  var showMinorLabels = this.options.showMinorLabels && this.options.orientation.axis !== 'none';\n  var showMajorLabels = this.options.showMajorLabels && this.options.orientation.axis !== 'none';\n\n  // determine the width and height of the elemens for the axis\n  props.minorLabelHeight = showMinorLabels ? props.minorCharHeight : 0;\n  props.majorLabelHeight = showMajorLabels ? props.majorCharHeight : 0;\n  props.height = props.minorLabelHeight + props.majorLabelHeight;\n  props.width = foreground.offsetWidth;\n\n  props.minorLineHeight = this.body.domProps.root.height - props.majorLabelHeight -\n      (this.options.orientation.axis == 'top' ? this.body.domProps.bottom.height : this.body.domProps.top.height);\n  props.minorLineWidth = 1; // TODO: really calculate width\n  props.majorLineHeight = props.minorLineHeight + props.majorLabelHeight;\n  props.majorLineWidth = 1; // TODO: really calculate width\n\n  //  take foreground and background offline while updating (is almost twice as fast)\n  var foregroundNextSibling = foreground.nextSibling;\n  var backgroundNextSibling = background.nextSibling;\n  foreground.parentNode && foreground.parentNode.removeChild(foreground);\n  background.parentNode && background.parentNode.removeChild(background);\n\n  foreground.style.height = this.props.height + 'px';\n\n  this._repaintLabels();\n\n  // put DOM online again (at the same place)\n  if (foregroundNextSibling) {\n    parent.insertBefore(foreground, foregroundNextSibling);\n  }\n  else {\n    parent.appendChild(foreground)\n  }\n  if (backgroundNextSibling) {\n    this.body.dom.backgroundVertical.insertBefore(background, backgroundNextSibling);\n  }\n  else {\n    this.body.dom.backgroundVertical.appendChild(background)\n  }\n  return this._isResized() || parentChanged;\n};\n\n/**\n * Repaint major and minor text labels and vertical grid lines\n * @private\n */\nTimeAxis.prototype._repaintLabels = function () {\n  var orientation = this.options.orientation.axis;\n\n  // calculate range and step (step such that we have space for 7 characters per label)\n  var start = util.convert(this.body.range.start, 'Number');\n  var end = util.convert(this.body.range.end, 'Number');\n  var timeLabelsize = this.body.util.toTime((this.props.minorCharWidth || 10) * this.options.maxMinorChars).valueOf();\n  var minimumStep = timeLabelsize - DateUtil.getHiddenDurationBefore(this.options.moment, this.body.hiddenDates, this.body.range, timeLabelsize);\n  minimumStep -= this.body.util.toTime(0).valueOf();\n\n  var step = new TimeStep(new Date(start), new Date(end), minimumStep, this.body.hiddenDates);\n  step.setMoment(this.options.moment);\n  if (this.options.format) {\n    step.setFormat(this.options.format);\n  }\n  if (this.options.timeAxis) {\n    step.setScale(this.options.timeAxis);\n  }\n  this.step = step;\n\n  // Move all DOM elements to a \"redundant\" list, where they\n  // can be picked for re-use, and clear the lists with lines and texts.\n  // At the end of the function _repaintLabels, left over elements will be cleaned up\n  var dom = this.dom;\n  dom.redundant.lines = dom.lines;\n  dom.redundant.majorTexts = dom.majorTexts;\n  dom.redundant.minorTexts = dom.minorTexts;\n  dom.lines = [];\n  dom.majorTexts = [];\n  dom.minorTexts = [];\n\n  var current;\n  var next;\n  var x;\n  var xNext;\n  var isMajor, nextIsMajor;\n  var width = 0, prevWidth;\n  var line;\n  var labelMinor;\n  var xFirstMajorLabel = undefined;\n  var count = 0;\n  const MAX = 1000;\n  var className;\n\n  step.start();\n  next = step.getCurrent();\n  xNext = this.body.util.toScreen(next);\n  while (step.hasNext() && count < MAX) {\n    count++;\n\n    isMajor = step.isMajor();\n    className = step.getClassName();\n    labelMinor = step.getLabelMinor();\n\n    current = next;\n    x = xNext;\n\n    step.next();\n    next = step.getCurrent();\n    nextIsMajor = step.isMajor();\n    xNext = this.body.util.toScreen(next);\n\n    prevWidth = width;\n    width = xNext - x;\n    var showMinorGrid = (width >= prevWidth * 0.4); // prevent displaying of the 31th of the month on a scale of 5 days\n\n    if (this.options.showMinorLabels && showMinorGrid) {\n      var label = this._repaintMinorText(x, labelMinor, orientation, className);\n      label.style.width = width + 'px'; // set width to prevent overflow\n    }\n\n    if (isMajor && this.options.showMajorLabels) {\n      if (x > 0) {\n        if (xFirstMajorLabel == undefined) {\n          xFirstMajorLabel = x;\n        }\n        label = this._repaintMajorText(x, step.getLabelMajor(), orientation, className);\n      }\n      line = this._repaintMajorLine(x, width, orientation, className);\n    }\n    else { // minor line\n      if (showMinorGrid) {\n        line = this._repaintMinorLine(x, width, orientation, className);\n      }\n      else {\n        if (line) {\n          // adjust the width of the previous grid\n          line.style.width = (parseInt (line.style.width) + width) + 'px';\n        }\n      }\n    }\n  }\n\n  if (count === MAX && !warnedForOverflow) {\n      console.warn(`Something is wrong with the Timeline scale. Limited drawing of grid lines to ${MAX} lines.`);\n      warnedForOverflow = true;\n  }\n\n  // create a major label on the left when needed\n  if (this.options.showMajorLabels) {\n    var leftTime = this.body.util.toTime(0),\n        leftText = step.getLabelMajor(leftTime),\n        widthText = leftText.length * (this.props.majorCharWidth || 10) + 10; // upper bound estimation\n\n    if (xFirstMajorLabel == undefined || widthText < xFirstMajorLabel) {\n      this._repaintMajorText(0, leftText, orientation, className);\n    }\n  }\n\n  // Cleanup leftover DOM elements from the redundant list\n  util.forEach(this.dom.redundant, function (arr) {\n    while (arr.length) {\n      var elem = arr.pop();\n      if (elem && elem.parentNode) {\n        elem.parentNode.removeChild(elem);\n      }\n    }\n  });\n};\n\n/**\n * Create a minor label for the axis at position x\n * @param {Number} x\n * @param {String} text\n * @param {String} orientation   \"top\" or \"bottom\" (default)\n * @param {String} className\n * @return {Element} Returns the HTML element of the created label\n * @private\n */\nTimeAxis.prototype._repaintMinorText = function (x, text, orientation, className) {\n  // reuse redundant label\n  var label = this.dom.redundant.minorTexts.shift();\n\n  if (!label) {\n    // create new label\n    var content = document.createTextNode('');\n    label = document.createElement('div');\n    label.appendChild(content);\n    this.dom.foreground.appendChild(label);\n  }\n  this.dom.minorTexts.push(label);\n  label.innerHTML = text;\n\n  label.style.top = (orientation == 'top') ? (this.props.majorLabelHeight + 'px') : '0';\n\n  if (this.options.rtl) {\n    label.style.left = \"\";\n    label.style.right = x + 'px';\n  } else {\n    label.style.left = x + 'px';\n  };\n  label.className = 'vis-text vis-minor ' + className;\n  //label.title = title;  // TODO: this is a heavy operation\n\n  return label;\n};\n\n/**\n * Create a Major label for the axis at position x\n * @param {Number} x\n * @param {String} text\n * @param {String} orientation   \"top\" or \"bottom\" (default)\n * @param {String} className\n * @return {Element} Returns the HTML element of the created label\n * @private\n */\nTimeAxis.prototype._repaintMajorText = function (x, text, orientation, className) {\n  // reuse redundant label\n  var label = this.dom.redundant.majorTexts.shift();\n\n  if (!label) {\n    // create label\n    var content = document.createElement('div');\n    label = document.createElement('div');\n    label.appendChild(content);\n    this.dom.foreground.appendChild(label);\n  }\n\n  label.childNodes[0].innerHTML = text;\n  label.className = 'vis-text vis-major ' + className;\n  //label.title = title; // TODO: this is a heavy operation\n\n  label.style.top = (orientation == 'top') ? '0' : (this.props.minorLabelHeight  + 'px');\n  if (this.options.rtl) {\n    label.style.left = \"\";\n    label.style.right = x + 'px';\n  } else {\n    label.style.left = x + 'px';\n  };\n\n  this.dom.majorTexts.push(label);\n  return label;\n};\n\n/**\n * Create a minor line for the axis at position x\n * @param {Number} x\n * @param {Number} width\n * @param {String} orientation   \"top\" or \"bottom\" (default)\n * @param {String} className\n * @return {Element} Returns the created line\n * @private\n */\nTimeAxis.prototype._repaintMinorLine = function (x, width, orientation, className) {\n  // reuse redundant line\n  var line = this.dom.redundant.lines.shift();\n  if (!line) {\n    // create vertical line\n    line = document.createElement('div');\n    this.dom.background.appendChild(line);\n  }\n  this.dom.lines.push(line);\n\n  var props = this.props;\n  if (orientation == 'top') {\n    line.style.top = props.majorLabelHeight + 'px';\n  }\n  else {\n    line.style.top = this.body.domProps.top.height + 'px';\n  }\n  line.style.height = props.minorLineHeight + 'px';\n  if (this.options.rtl) {\n    line.style.left = \"\";\n    line.style.right = (x - props.minorLineWidth / 2) + 'px';\n    line.className = 'vis-grid vis-vertical-rtl vis-minor ' + className;\n  } else {\n    line.style.left = (x - props.minorLineWidth / 2) + 'px';\n    line.className = 'vis-grid vis-vertical vis-minor ' + className;\n  };\n  line.style.width = width + 'px';\n\n  \n\n  return line;\n};\n\n/**\n * Create a Major line for the axis at position x\n * @param {Number} x\n * @param {Number} width\n * @param {String} orientation   \"top\" or \"bottom\" (default)\n * @param {String} className\n * @return {Element} Returns the created line\n * @private\n */\nTimeAxis.prototype._repaintMajorLine = function (x, width, orientation, className) {\n  // reuse redundant line\n  var line = this.dom.redundant.lines.shift();\n  if (!line) {\n    // create vertical line\n    line = document.createElement('div');\n    this.dom.background.appendChild(line);\n  }\n  this.dom.lines.push(line);\n\n  var props = this.props;\n  if (orientation == 'top') {\n    line.style.top = '0';\n  }\n  else {\n    line.style.top = this.body.domProps.top.height + 'px';\n  }\n\n  if (this.options.rtl) {\n    line.style.left = \"\";\n    line.style.right = (x - props.majorLineWidth / 2) + 'px';\n    line.className = 'vis-grid vis-vertical-rtl vis-major ' + className;\n  } else {\n    line.style.left = (x - props.majorLineWidth / 2) + 'px';\n    line.className = 'vis-grid vis-vertical vis-major ' + className;\n  }\n\n  line.style.height = props.majorLineHeight + 'px';\n  line.style.width = width  + 'px';\n\n  return line;\n};\n\n/**\n * Determine the size of text on the axis (both major and minor axis).\n * The size is calculated only once and then cached in this.props.\n * @private\n */\nTimeAxis.prototype._calculateCharSize = function () {\n  // Note: We calculate char size with every redraw. Size may change, for\n  // example when any of the timelines parents had display:none for example.\n\n  // determine the char width and height on the minor axis\n  if (!this.dom.measureCharMinor) {\n    this.dom.measureCharMinor = document.createElement('DIV');\n    this.dom.measureCharMinor.className = 'vis-text vis-minor vis-measure';\n    this.dom.measureCharMinor.style.position = 'absolute';\n\n    this.dom.measureCharMinor.appendChild(document.createTextNode('0'));\n    this.dom.foreground.appendChild(this.dom.measureCharMinor);\n  }\n  this.props.minorCharHeight = this.dom.measureCharMinor.clientHeight;\n  this.props.minorCharWidth = this.dom.measureCharMinor.clientWidth;\n\n  // determine the char width and height on the major axis\n  if (!this.dom.measureCharMajor) {\n    this.dom.measureCharMajor = document.createElement('DIV');\n    this.dom.measureCharMajor.className = 'vis-text vis-major vis-measure';\n    this.dom.measureCharMajor.style.position = 'absolute';\n\n    this.dom.measureCharMajor.appendChild(document.createTextNode('0'));\n    this.dom.foreground.appendChild(this.dom.measureCharMajor);\n  }\n  this.props.majorCharHeight = this.dom.measureCharMajor.clientHeight;\n  this.props.majorCharWidth = this.dom.measureCharMajor.clientWidth;\n};\n\n\nvar warnedForOverflow = false;\n\nmodule.exports = TimeAxis;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/component/TimeAxis.js","var keycharm = require('keycharm');\nvar Emitter = require('emitter-component');\nvar Hammer = require('../module/hammer');\nvar util = require('../util');\n\n/**\n * Turn an element into an clickToUse element.\n * When not active, the element has a transparent overlay. When the overlay is\n * clicked, the mode is changed to active.\n * When active, the element is displayed with a blue border around it, and\n * the interactive contents of the element can be used. When clicked outside\n * the element, the elements mode is changed to inactive.\n * @param {Element} container\n * @constructor\n */\nfunction Activator(container) {\n  this.active = false;\n\n  this.dom = {\n    container: container\n  };\n\n  this.dom.overlay = document.createElement('div');\n  this.dom.overlay.className = 'vis-overlay';\n\n  this.dom.container.appendChild(this.dom.overlay);\n\n  this.hammer = Hammer(this.dom.overlay);\n  this.hammer.on('tap', this._onTapOverlay.bind(this));\n\n  // block all touch events (except tap)\n  var me = this;\n  var events = [\n    'tap', 'doubletap', 'press',\n    'pinch',\n    'pan', 'panstart', 'panmove', 'panend'\n  ];\n  events.forEach(function (event) {\n    me.hammer.on(event, function (event) {\n      event.stopPropagation();\n    });\n  });\n\n  // attach a click event to the window, in order to deactivate when clicking outside the timeline\n  if (document && document.body) {\n    this.onClick = function (event) {\n      if (!_hasParent(event.target, container)) {\n        me.deactivate();\n      }\n    };\n    document.body.addEventListener('click', this.onClick);\n  }\n\n  if (this.keycharm !== undefined) {\n    this.keycharm.destroy();\n  }\n  this.keycharm = keycharm();\n\n  // keycharm listener only bounded when active)\n  this.escListener = this.deactivate.bind(this);\n}\n\n// turn into an event emitter\nEmitter(Activator.prototype);\n\n// The currently active activator\nActivator.current = null;\n\n/**\n * Destroy the activator. Cleans up all created DOM and event listeners\n */\nActivator.prototype.destroy = function () {\n  this.deactivate();\n\n  // remove dom\n  this.dom.overlay.parentNode.removeChild(this.dom.overlay);\n\n  // remove global event listener\n  if (this.onClick) {\n    document.body.removeEventListener('click', this.onClick);\n  }\n\n  // cleanup hammer instances\n  this.hammer.destroy();\n  this.hammer = null;\n  // FIXME: cleaning up hammer instances doesn't work (Timeline not removed from memory)\n};\n\n/**\n * Activate the element\n * Overlay is hidden, element is decorated with a blue shadow border\n */\nActivator.prototype.activate = function () {\n  // we allow only one active activator at a time\n  if (Activator.current) {\n    Activator.current.deactivate();\n  }\n  Activator.current = this;\n\n  this.active = true;\n  this.dom.overlay.style.display = 'none';\n  util.addClassName(this.dom.container, 'vis-active');\n\n  this.emit('change');\n  this.emit('activate');\n\n  // ugly hack: bind ESC after emitting the events, as the Network rebinds all\n  // keyboard events on a 'change' event\n  this.keycharm.bind('esc', this.escListener);\n};\n\n/**\n * Deactivate the element\n * Overlay is displayed on top of the element\n */\nActivator.prototype.deactivate = function () {\n  this.active = false;\n  this.dom.overlay.style.display = '';\n  util.removeClassName(this.dom.container, 'vis-active');\n  this.keycharm.unbind('esc', this.escListener);\n\n  this.emit('change');\n  this.emit('deactivate');\n};\n\n/**\n * Handle a tap event: activate the container\n * @param event\n * @private\n */\nActivator.prototype._onTapOverlay = function (event) {\n  // activate the container\n  this.activate();\n  event.stopPropagation();\n};\n\n/**\n * Test whether the element has the requested parent element somewhere in\n * its chain of parent nodes.\n * @param {HTMLElement} element\n * @param {HTMLElement} parent\n * @returns {boolean} Returns true when the parent is found somewhere in the\n *                    chain of parent nodes.\n * @private\n */\nfunction _hasParent(element, parent) {\n  while (element) {\n    if (element === parent) {\n      return true\n    }\n    element = element.parentNode;\n  }\n  return false;\n}\n\nmodule.exports = Activator;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/shared/Activator.js","var Hammer = require('../../module/hammer');\nvar util = require('../../util');\nvar Component = require('./Component');\nvar moment = require('../../module/moment');\nvar locales = require('../locales');\n\n/**\n * A custom time bar\n * @param {{range: Range, dom: Object}} body\n * @param {Object} [options]        Available parameters:\n *                                  {number | string} id\n *                                  {string} locales\n *                                  {string} locale\n * @constructor CustomTime\n * @extends Component\n */\n\nfunction CustomTime (body, options) {\n  this.body = body;\n\n  // default options\n  this.defaultOptions = {\n    moment: moment,\n    locales: locales,\n    locale: 'en',\n    id: undefined,\n    title: undefined\n  };\n  this.options = util.extend({}, this.defaultOptions);\n\n  if (options && options.time) {\n    this.customTime = options.time;\n  } else {\n    this.customTime = new Date();\n  }\n\n  this.eventParams = {}; // stores state parameters while dragging the bar\n\n  this.setOptions(options);\n\n  // create the DOM\n  this._create();\n}\n\nCustomTime.prototype = new Component();\n\n/**\n * Set options for the component. Options will be merged in current options.\n * @param {Object} options  Available parameters:\n *                                  {number | string} id\n *                                  {string} locales\n *                                  {string} locale\n */\nCustomTime.prototype.setOptions = function(options) {\n  if (options) {\n    // copy all options that we know\n    util.selectiveExtend(['moment', 'locale', 'locales', 'id'], this.options, options);\n  }\n};\n\n/**\n * Create the DOM for the custom time\n * @private\n */\nCustomTime.prototype._create = function() {\n  var bar = document.createElement('div');\n  bar['custom-time'] = this;\n  bar.className = 'vis-custom-time ' + (this.options.id || '');\n  bar.style.position = 'absolute';\n  bar.style.top = '0px';\n  bar.style.height = '100%';\n  this.bar = bar;\n\n  var drag = document.createElement('div');\n  drag.style.position = 'relative';\n  drag.style.top = '0px';\n  drag.style.left = '-10px';\n  drag.style.height = '100%';\n  drag.style.width = '20px';\n\n  function onMouseWheel (e) {\n    this.body.range._onMouseWheel(e);\n  }\n\n  if (drag.addEventListener) {\n    // IE9, Chrome, Safari, Opera\n    drag.addEventListener(\"mousewheel\", onMouseWheel.bind(this), false);\n    // Firefox\n    drag.addEventListener(\"DOMMouseScroll\", onMouseWheel.bind(this), false);\n  } else {\n    // IE 6/7/8\n    drag.attachEvent(\"onmousewheel\", onMouseWheel.bind(this));\n  }\n\n  bar.appendChild(drag);\n  // attach event listeners\n  this.hammer = new Hammer(drag);\n  this.hammer.on('panstart', this._onDragStart.bind(this));\n  this.hammer.on('panmove',  this._onDrag.bind(this));\n  this.hammer.on('panend',   this._onDragEnd.bind(this));\n  this.hammer.get('pan').set({threshold:5, direction: Hammer.DIRECTION_HORIZONTAL});\n};\n\n/**\n * Destroy the CustomTime bar\n */\nCustomTime.prototype.destroy = function () {\n  this.hide();\n\n  this.hammer.destroy();\n  this.hammer = null;\n\n  this.body = null;\n};\n\n/**\n * Repaint the component\n * @return {boolean} Returns true if the component is resized\n */\nCustomTime.prototype.redraw = function () {\n  var parent = this.body.dom.backgroundVertical;\n  if (this.bar.parentNode != parent) {\n    // attach to the dom\n    if (this.bar.parentNode) {\n      this.bar.parentNode.removeChild(this.bar);\n    }\n    parent.appendChild(this.bar);\n  }\n\n  var x = this.body.util.toScreen(this.customTime);\n\n  var locale = this.options.locales[this.options.locale];\n  if (!locale) {\n    if (!this.warned) {\n      console.log('WARNING: options.locales[\\'' + this.options.locale + '\\'] not found. See http://visjs.org/docs/timeline/#Localization');\n      this.warned = true;\n    }\n    locale = this.options.locales['en']; // fall back on english when not available\n  }\n\n  var title = this.options.title;\n  // To hide the title completely use empty string ''.\n  if (title === undefined) {\n    title = locale.time + ': ' + this.options.moment(this.customTime).format('dddd, MMMM Do YYYY, H:mm:ss');\n    title = title.charAt(0).toUpperCase() + title.substring(1);\n  }\n\n  this.bar.style.left = x + 'px';\n  this.bar.title = title;\n\n  return false;\n};\n\n/**\n * Remove the CustomTime from the DOM\n */\nCustomTime.prototype.hide = function () {\n  // remove the line from the DOM\n  if (this.bar.parentNode) {\n    this.bar.parentNode.removeChild(this.bar);\n  }\n};\n\n/**\n * Set custom time.\n * @param {Date | number | string} time\n */\nCustomTime.prototype.setCustomTime = function(time) {\n  this.customTime = util.convert(time, 'Date');\n  this.redraw();\n};\n\n/**\n * Retrieve the current custom time.\n * @return {Date} customTime\n */\nCustomTime.prototype.getCustomTime = function() {\n  return new Date(this.customTime.valueOf());\n};\n\n/**\n  * Set custom title.\n  * @param {Date | number | string} title\n  */\nCustomTime.prototype.setCustomTitle = function(title) {\n  this.options.title = title;\n};\n\n/**\n * Start moving horizontally\n * @param {Event} event\n * @private\n */\nCustomTime.prototype._onDragStart = function(event) {\n  this.eventParams.dragging = true;\n  this.eventParams.customTime = this.customTime;\n\n  event.stopPropagation();\n};\n\n/**\n * Perform moving operating.\n * @param {Event} event\n * @private\n */\nCustomTime.prototype._onDrag = function (event) {\n  if (!this.eventParams.dragging) return;\n\n  var x = this.body.util.toScreen(this.eventParams.customTime) + event.deltaX;\n  var time = this.body.util.toTime(x);\n\n  this.setCustomTime(time);\n\n  // fire a timechange event\n  this.body.emitter.emit('timechange', {\n    id: this.options.id,\n    time: new Date(this.customTime.valueOf()),\n    event: util.elementsCensor(event)\n  });\n\n  event.stopPropagation();\n};\n\n/**\n * Stop moving operating.\n * @param {Event} event\n * @private\n */\nCustomTime.prototype._onDragEnd = function (event) {\n  if (!this.eventParams.dragging) return;\n\n  // fire a timechanged event\n  this.body.emitter.emit('timechanged', {\n    id: this.options.id,\n    time: new Date(this.customTime.valueOf()),\n    event: util.elementsCensor(event)\n  });\n\n  event.stopPropagation();\n};\n\n/**\n * Find a custom time from an event target:\n * searches for the attribute 'custom-time' in the event target's element tree\n * @param {Event} event\n * @return {CustomTime | null} customTime\n */\nCustomTime.customTimeFromTarget = function(event) {\n  var target = event.target;\n  while (target) {\n    if (target.hasOwnProperty('custom-time')) {\n      return target['custom-time'];\n    }\n    target = target.parentNode;\n  }\n\n  return null;\n};\n\nmodule.exports = CustomTime;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/component/CustomTime.js","// English\nexports['en'] = {\n  current: 'current',\n  time: 'time'\n};\nexports['en_EN'] = exports['en'];\nexports['en_US'] = exports['en'];\n\n// Italiano\nexports['it'] = {\n  current: 'attuale',\n  time: 'tempo'\n};\nexports['it_IT'] = exports['it'];\nexports['it_CH'] = exports['it'];\n\n// Dutch\nexports['nl'] = {\n  current: 'huidige',\n  time: 'tijd'\n};\nexports['nl_NL'] = exports['nl'];\nexports['nl_BE'] = exports['nl'];\n\n// German\nexports['de'] = {\n  current: 'Aktuelle',\n  time: 'Zeit'\n};\nexports['de_DE'] = exports['de'];\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/locales.js","var util = require('../../util');\nvar Component = require('./Component');\nvar moment = require('../../module/moment');\nvar locales = require('../locales');\n\n/**\n * A current time bar\n * @param {{range: Range, dom: Object, domProps: Object}} body\n * @param {Object} [options]        Available parameters:\n *                                  {Boolean} [showCurrentTime]\n * @constructor CurrentTime\n * @extends Component\n */\nfunction CurrentTime (body, options) {\n  this.body = body;\n\n  // default options\n  this.defaultOptions = {\n    rtl: false,\n    showCurrentTime: true,\n\n    moment: moment,\n    locales: locales,\n    locale: 'en'\n  };\n  this.options = util.extend({}, this.defaultOptions);\n  this.offset = 0;\n\n  this._create();\n\n  this.setOptions(options);\n}\n\nCurrentTime.prototype = new Component();\n\n/**\n * Create the HTML DOM for the current time bar\n * @private\n */\nCurrentTime.prototype._create = function() {\n  var bar = document.createElement('div');\n  bar.className = 'vis-current-time';\n  bar.style.position = 'absolute';\n  bar.style.top = '0px';\n  bar.style.height = '100%';\n\n  this.bar = bar;\n};\n\n/**\n * Destroy the CurrentTime bar\n */\nCurrentTime.prototype.destroy = function () {\n  this.options.showCurrentTime = false;\n  this.redraw(); // will remove the bar from the DOM and stop refreshing\n\n  this.body = null;\n};\n\n/**\n * Set options for the component. Options will be merged in current options.\n * @param {Object} options  Available parameters:\n *                          {boolean} [showCurrentTime]\n */\nCurrentTime.prototype.setOptions = function(options) {\n  if (options) {\n    // copy all options that we know\n    util.selectiveExtend(['rtl', 'showCurrentTime', 'moment', 'locale', 'locales'], this.options, options);\n  }\n};\n\n/**\n * Repaint the component\n * @return {boolean} Returns true if the component is resized\n */\nCurrentTime.prototype.redraw = function() {\n  if (this.options.showCurrentTime) {\n    var parent = this.body.dom.backgroundVertical;\n    if (this.bar.parentNode != parent) {\n      // attach to the dom\n      if (this.bar.parentNode) {\n        this.bar.parentNode.removeChild(this.bar);\n      }\n      parent.appendChild(this.bar);\n\n      this.start();\n    }\n\n    var now = this.options.moment(new Date().valueOf() + this.offset);\n    var x = this.body.util.toScreen(now);\n\n    var locale = this.options.locales[this.options.locale];\n    if (!locale) {\n      if (!this.warned) {\n        console.log('WARNING: options.locales[\\'' + this.options.locale + '\\'] not found. See http://visjs.org/docs/timeline/#Localization');\n        this.warned = true;\n      }\n      locale = this.options.locales['en']; // fall back on english when not available\n    }\n    var title = locale.current + ' ' + locale.time + ': ' + now.format('dddd, MMMM Do YYYY, H:mm:ss');\n    title = title.charAt(0).toUpperCase() + title.substring(1);\n\n    if (this.options.rtl) {\n      this.bar.style.right = x + 'px';\n    } else {\n      this.bar.style.left = x + 'px';\n    }\n    this.bar.title = title;\n  }\n  else {\n    // remove the line from the DOM\n    if (this.bar.parentNode) {\n      this.bar.parentNode.removeChild(this.bar);\n    }\n    this.stop();\n  }\n\n  return false;\n};\n\n/**\n * Start auto refreshing the current time bar\n */\nCurrentTime.prototype.start = function() {\n  var me = this;\n\n  function update () {\n    me.stop();\n\n    // determine interval to refresh\n    var scale = me.body.range.conversion(me.body.domProps.center.width).scale;\n    var interval = 1 / scale / 10;\n    if (interval < 30)   interval = 30;\n    if (interval > 1000) interval = 1000;\n\n    me.redraw();\n    me.body.emitter.emit('currentTimeTick');\n\n    // start a renderTimer to adjust for the new time\n    me.currentTimeTimer = setTimeout(update, interval);\n  }\n\n  update();\n};\n\n/**\n * Stop auto refreshing the current time bar\n */\nCurrentTime.prototype.stop = function() {\n  if (this.currentTimeTimer !== undefined) {\n    clearTimeout(this.currentTimeTimer);\n    delete this.currentTimeTimer;\n  }\n};\n\n/**\n * Set a current time. This can be used for example to ensure that a client's\n * time is synchronized with a shared server time.\n * @param {Date | String | Number} time     A Date, unix timestamp, or\n *                                          ISO date string.\n */\nCurrentTime.prototype.setCurrentTime = function(time) {\n  var t = util.convert(time, 'Date').valueOf();\n  var now = new Date().valueOf();\n  this.offset = t - now;\n  this.redraw();\n};\n\n/**\n * Get the current time.\n * @return {Date} Returns the current time.\n */\nCurrentTime.prototype.getCurrentTime = function() {\n  return new Date(new Date().valueOf() + this.offset);\n};\n\nmodule.exports = CurrentTime;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/component/CurrentTime.js","/**\n * This object contains all possible options. It will check if the types are correct, if required if the option is one\n * of the allowed values.\n *\n * __any__ means that the name of the property does not matter.\n * __type__ is a required field for all objects and contains the allowed types of all objects\n */\nlet string = 'string';\nlet bool = 'boolean';\nlet number = 'number';\nlet array = 'array';\nlet date = 'date';\nlet object = 'object'; // should only be in a __type__ property\nlet dom = 'dom';\nlet moment = 'moment';\nlet any = 'any';\n\nlet allOptions = {\n  configure: {\n    enabled: { 'boolean': bool},\n    filter: { 'boolean': bool,'function': 'function'},\n    container: {dom},\n    __type__: {object, 'boolean': bool,'function': 'function'}\n  },\n\n  //globals :\n  align: {string},\n  rtl: { 'boolean': bool, 'undefined': 'undefined'},\n  rollingMode: { 'boolean': bool, 'undefined': 'undefined'},\n  verticalScroll: { 'boolean': bool, 'undefined': 'undefined'},\n  horizontalScroll: { 'boolean': bool, 'undefined': 'undefined'},\n  autoResize: { 'boolean': bool},\n  throttleRedraw: {number}, // TODO: DEPRICATED see https://github.com/almende/vis/issues/2511\n  clickToUse: { 'boolean': bool},\n  dataAttributes: {string, array},\n  editable: {\n    add: { 'boolean': bool, 'undefined': 'undefined'},\n    remove: { 'boolean': bool, 'undefined': 'undefined'},\n    updateGroup: { 'boolean': bool, 'undefined': 'undefined'},\n    updateTime: { 'boolean': bool, 'undefined': 'undefined'},\n    overrideItems: { 'boolean': bool, 'undefined': 'undefined'},\n    __type__: { 'boolean': bool, object}\n  },\n  end: {number, date, string, moment},\n  format: {\n    minorLabels: {\n      millisecond: {string,'undefined': 'undefined'},\n      second: {string,'undefined': 'undefined'},\n      minute: {string,'undefined': 'undefined'},\n      hour: {string,'undefined': 'undefined'},\n      weekday: {string,'undefined': 'undefined'},\n      day: {string,'undefined': 'undefined'},\n      month: {string,'undefined': 'undefined'},\n      year: {string,'undefined': 'undefined'},\n      __type__: {object, 'function': 'function'}\n    },\n    majorLabels: {\n      millisecond: {string,'undefined': 'undefined'},\n      second: {string,'undefined': 'undefined'},\n      minute: {string,'undefined': 'undefined'},\n      hour: {string,'undefined': 'undefined'},\n      weekday: {string,'undefined': 'undefined'},\n      day: {string,'undefined': 'undefined'},\n      month: {string,'undefined': 'undefined'},\n      year: {string,'undefined': 'undefined'},\n      __type__: {object, 'function': 'function'}\n    },\n    __type__: {object}\n  },\n  moment: {'function': 'function'},\n  groupOrder: {string, 'function': 'function'},\n  groupEditable: {\n\t add: { 'boolean': bool, 'undefined': 'undefined'},\n\t remove: { 'boolean': bool, 'undefined': 'undefined'},\n\t order: { 'boolean': bool, 'undefined': 'undefined'},\n\t __type__: { 'boolean': bool, object}\n  },\n  groupOrderSwap: {'function': 'function'},\n  height: {string, number},\n  hiddenDates: {\n    start: {date, number, string, moment},\n    end: {date, number, string, moment},\n    repeat: {string},\n    __type__: {object, array}\n  },\n  itemsAlwaysDraggable: { 'boolean': bool},\n  locale:{string},\n  locales:{\n    __any__: {any},\n    __type__: {object}\n  },\n  margin: {\n    axis: {number},\n    item: {\n      horizontal: {number,'undefined': 'undefined'},\n      vertical: {number,'undefined': 'undefined'},\n      __type__: {object,number}\n    },\n    __type__: {object,number}\n  },\n  max: {date, number, string, moment},\n  maxHeight: {number, string},\n  maxMinorChars: {number},\n  min: {date, number, string, moment},\n  minHeight: {number, string},\n  moveable: { 'boolean': bool},\n  multiselect: { 'boolean': bool},\n  multiselectPerGroup: { 'boolean': bool},\n  onAdd: {'function': 'function'},\n  onUpdate: {'function': 'function'},\n  onMove: {'function': 'function'},\n  onMoving: {'function': 'function'},\n  onRemove: {'function': 'function'},\n  onAddGroup: {'function': 'function'},\n  onMoveGroup: {'function': 'function'},\n  onRemoveGroup: {'function': 'function'},\n  order: {'function': 'function'},\n  orientation: {\n    axis: {string,'undefined': 'undefined'},\n    item: {string,'undefined': 'undefined'},\n    __type__: {string, object}\n  },\n  selectable: { 'boolean': bool},\n  showCurrentTime: { 'boolean': bool},\n  showMajorLabels: { 'boolean': bool},\n  showMinorLabels: { 'boolean': bool},\n  stack: { 'boolean': bool},\n  stackSubgroups: { 'boolean': bool},\n  snap: {'function': 'function', 'null': 'null'},\n  start: {date, number, string, moment},\n  template: {'function': 'function'},\n  groupTemplate: {'function': 'function'},\n  visibleFrameTemplate: {string, 'function': 'function'},\n  tooltip: {\n    followMouse: { 'boolean': bool },\n    overflowMethod: { 'string': ['cap', 'flip'] },\n    __type__: {object}\n  },\n  tooltipOnItemUpdateTime: {\n    template: {'function': 'function'},\n    __type__: { 'boolean': bool, object}\n  },\n  timeAxis: {\n    scale: {string,'undefined': 'undefined'},\n    step: {number,'undefined': 'undefined'},\n    __type__: {object}\n  },\n  type: {string},\n  width: {string, number},\n  zoomable: { 'boolean': bool},\n  zoomKey: {string: ['ctrlKey', 'altKey', 'metaKey', '']},\n  zoomMax: {number},\n  zoomMin: {number},\n\n  __type__: {object}\n};\n\nlet configureOptions = {\n  global: {\n    align:  ['center', 'left', 'right'],\n    direction:  false,\n    autoResize: true,\n    clickToUse: false,\n    // dataAttributes: ['all'], // FIXME: can be 'all' or string[]\n    editable: {\n      add: false,\n      remove: false,\n      updateGroup: false,\n      updateTime: false\n    },\n    end: '',\n    format: {\n      minorLabels: {\n        millisecond:'SSS',\n        second:     's',\n        minute:     'HH:mm',\n        hour:       'HH:mm',\n        weekday:    'ddd D',\n        day:        'D',\n        month:      'MMM',\n        year:       'YYYY'\n      },\n      majorLabels: {\n        millisecond:'HH:mm:ss',\n        second:     'D MMMM HH:mm',\n        minute:     'ddd D MMMM',\n        hour:       'ddd D MMMM',\n        weekday:    'MMMM YYYY',\n        day:        'MMMM YYYY',\n        month:      'YYYY',\n        year:       ''\n      }\n    },\n\n    //groupOrder: {string, 'function': 'function'},\n    groupsDraggable: false,\n    height: '',\n    //hiddenDates: {object, array},\n    locale: '',\n    margin: {\n      axis: [20, 0, 100, 1],\n      item: {\n        horizontal: [10, 0, 100, 1],\n        vertical: [10, 0, 100, 1]\n      }\n    },\n    max: '',\n    maxHeight: '',\n    maxMinorChars: [7, 0, 20, 1],\n    min: '',\n    minHeight: '',\n    moveable: false,\n    multiselect: false,\n    multiselectPerGroup: false,\n    //onAdd: {'function': 'function'},\n    //onUpdate: {'function': 'function'},\n    //onMove: {'function': 'function'},\n    //onMoving: {'function': 'function'},\n    //onRename: {'function': 'function'},\n    //order: {'function': 'function'},\n    orientation: {\n      axis: ['both', 'bottom', 'top'],\n      item: ['bottom', 'top']\n    },\n    selectable: true,\n    showCurrentTime: false,\n    showMajorLabels: true,\n    showMinorLabels: true,\n    stack: true,\n    stackSubgroups: true,\n    //snap: {'function': 'function', nada},\n    start: '',\n    //template: {'function': 'function'},\n    //timeAxis: {\n    //  scale: ['millisecond', 'second', 'minute', 'hour', 'weekday', 'day', 'month', 'year'],\n    //  step: [1, 1, 10, 1]\n    //},\n    tooltip: {\n      followMouse: false,\n      overflowMethod: 'flip'\n    },\n    tooltipOnItemUpdateTime: false,\n    type: ['box', 'point', 'range', 'background'],\n    width: '100%',\n    zoomable: true,\n    zoomKey: ['ctrlKey', 'altKey', 'metaKey', ''],\n    zoomMax: [315360000000000, 10, 315360000000000, 1],\n    zoomMin: [10, 10, 315360000000000, 1]\n  }\n};\n\nexport {allOptions, configureOptions};\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/optionsTimeline.js","var Emitter = require('emitter-component');\nvar Hammer = require('../module/hammer');\nvar moment = require('../module/moment');\nvar util = require('../util');\nvar DataSet = require('../DataSet');\nvar DataView = require('../DataView');\nvar Range = require('./Range');\nvar Core = require('./Core');\nvar TimeAxis = require('./component/TimeAxis');\nvar CurrentTime = require('./component/CurrentTime');\nvar CustomTime = require('./component/CustomTime');\nvar LineGraph = require('./component/LineGraph');\n\nvar printStyle = require('../shared/Validator').printStyle;\nvar allOptions = require('./optionsGraph2d').allOptions;\nvar configureOptions = require('./optionsGraph2d').configureOptions;\n\nimport Configurator from '../shared/Configurator';\nimport Validator from '../shared/Validator';\n\n/**\n * Create a timeline visualization\n * @param {HTMLElement} container\n * @param {vis.DataSet | Array} [items]\n * @param {Object} [options]  See Graph2d.setOptions for the available options.\n * @constructor\n * @extends Core\n */\nfunction Graph2d (container, items, groups, options) {\n  // if the third element is options, the forth is groups (optionally);\n  if (!(Array.isArray(groups) || groups instanceof DataSet || groups instanceof DataView) && groups instanceof Object) {\n    var forthArgument = options;\n    options = groups;\n    groups = forthArgument;\n  }\n\n  // TODO: REMOVE THIS in the next MAJOR release\n  // see https://github.com/almende/vis/issues/2511\n  if (options && options.throttleRedraw) {\n    console.warn(\"Graph2d option \\\"throttleRedraw\\\" is DEPRICATED and no longer supported. It will be removed in the next MAJOR release.\");\n  }\n\n  var me = this;\n  this.defaultOptions = {\n    start: null,\n    end:   null,\n\n    autoResize: true,\n\n    orientation: {\n      axis: 'bottom',   // axis orientation: 'bottom', 'top', or 'both'\n      item: 'bottom'    // not relevant for Graph2d\n    },\n\n    moment: moment,\n\n    width: null,\n    height: null,\n    maxHeight: null,\n    minHeight: null\n  };\n  this.options = util.deepExtend({}, this.defaultOptions);\n\n  // Create the DOM, props, and emitter\n  this._create(container);\n\n  // all components listed here will be repainted automatically\n  this.components = [];\n\n  this.body = {\n    dom: this.dom,\n    domProps: this.props,\n    emitter: {\n      on: this.on.bind(this),\n      off: this.off.bind(this),\n      emit: this.emit.bind(this)\n    },\n    hiddenDates: [],\n    util: {\n      toScreen: me._toScreen.bind(me),\n      toGlobalScreen: me._toGlobalScreen.bind(me), // this refers to the root.width\n      toTime: me._toTime.bind(me),\n      toGlobalTime : me._toGlobalTime.bind(me)\n    }\n  };\n\n  // range\n  this.range = new Range(this.body);\n  this.components.push(this.range);\n  this.body.range = this.range;\n\n  // time axis\n  this.timeAxis = new TimeAxis(this.body);\n  this.components.push(this.timeAxis);\n  //this.body.util.snap = this.timeAxis.snap.bind(this.timeAxis);\n\n  // current time bar\n  this.currentTime = new CurrentTime(this.body);\n  this.components.push(this.currentTime);\n\n  // item set\n  this.linegraph = new LineGraph(this.body);\n\n  this.components.push(this.linegraph);\n\n  this.itemsData = null;      // DataSet\n  this.groupsData = null;     // DataSet\n\n\n  this.on('tap', function (event) {\n    me.emit('click', me.getEventProperties(event))\n  });\n  this.on('doubletap', function (event) {\n    me.emit('doubleClick', me.getEventProperties(event))\n  });\n  this.dom.root.oncontextmenu = function (event) {\n    me.emit('contextmenu', me.getEventProperties(event))\n  };\n\n  // apply options\n  if (options) {\n    this.setOptions(options);\n  }\n\n  // IMPORTANT: THIS HAPPENS BEFORE SET ITEMS!\n  if (groups) {\n    this.setGroups(groups);\n  }\n\n  // create itemset\n  if (items) {\n    this.setItems(items);\n  }\n\n  // draw for the first time\n  this._redraw();\n}\n\n// Extend the functionality from Core\nGraph2d.prototype = new Core();\n\nGraph2d.prototype.setOptions = function (options) {\n  // validate options\n  let errorFound = Validator.validate(options, allOptions);\n  if (errorFound === true) {\n    console.log('%cErrors have been found in the supplied options object.', printStyle);\n  }\n\n  Core.prototype.setOptions.call(this, options);\n};\n\n/**\n * Set items\n * @param {vis.DataSet | Array | null} items\n */\nGraph2d.prototype.setItems = function(items) {\n  var initialLoad = (this.itemsData == null);\n\n  // convert to type DataSet when needed\n  var newDataSet;\n  if (!items) {\n    newDataSet = null;\n  }\n  else if (items instanceof DataSet || items instanceof DataView) {\n    newDataSet = items;\n  }\n  else {\n    // turn an array into a dataset\n    newDataSet = new DataSet(items, {\n      type: {\n        start: 'Date',\n        end: 'Date'\n      }\n    });\n  }\n\n  // set items\n  this.itemsData = newDataSet;\n  this.linegraph && this.linegraph.setItems(newDataSet);\n\n  if (initialLoad) {\n    if (this.options.start != undefined || this.options.end != undefined) {\n      var start = this.options.start != undefined ? this.options.start : null;\n      var end   = this.options.end != undefined   ? this.options.end : null;\n      this.setWindow(start, end, {animation: false});\n    }\n    else {\n      this.fit({animation: false});\n    }\n  }\n};\n\n/**\n * Set groups\n * @param {vis.DataSet | Array} groups\n */\nGraph2d.prototype.setGroups = function(groups) {\n  // convert to type DataSet when needed\n  var newDataSet;\n  if (!groups) {\n    newDataSet = null;\n  }\n  else if (groups instanceof DataSet || groups instanceof DataView) {\n    newDataSet = groups;\n  }\n  else {\n    // turn an array into a dataset\n    newDataSet = new DataSet(groups);\n  }\n\n  this.groupsData = newDataSet;\n  this.linegraph.setGroups(newDataSet);\n};\n\n/**\n * Returns an object containing an SVG element with the icon of the group (size determined by iconWidth and iconHeight), the label of the group (content) and the yAxisOrientation of the group (left or right).\n * @param groupId\n * @param width\n * @param height\n */\nGraph2d.prototype.getLegend = function(groupId, width, height) {\n  if (width  === undefined) {width  = 15;}\n  if (height === undefined) {height = 15;}\n  if (this.linegraph.groups[groupId] !== undefined) {\n    return this.linegraph.groups[groupId].getLegend(width,height);\n  }\n  else {\n    return \"cannot find group:'\" +  groupId + \"'\";\n  }\n};\n\n/**\n * This checks if the visible option of the supplied group (by ID) is true or false.\n * @param groupId\n * @returns {*}\n */\nGraph2d.prototype.isGroupVisible = function(groupId) {\n  if (this.linegraph.groups[groupId] !== undefined) {\n    return (this.linegraph.groups[groupId].visible && (this.linegraph.options.groups.visibility[groupId] === undefined || this.linegraph.options.groups.visibility[groupId] == true));\n  }\n  else {\n    return false;\n  }\n};\n\n\n/**\n * Get the data range of the item set.\n * @returns {{min: Date, max: Date}} range  A range with a start and end Date.\n *                                          When no minimum is found, min==null\n *                                          When no maximum is found, max==null\n */\nGraph2d.prototype.getDataRange = function() {\n  var min = null;\n  var max = null;\n\n  // calculate min from start filed\n  for (var groupId in this.linegraph.groups) {\n    if (this.linegraph.groups.hasOwnProperty(groupId)) {\n      if (this.linegraph.groups[groupId].visible == true) {\n        for (var i = 0; i < this.linegraph.groups[groupId].itemsData.length; i++) {\n          var item = this.linegraph.groups[groupId].itemsData[i];\n          var value = util.convert(item.x, 'Date').valueOf();\n          min = min == null ? value : min > value ? value : min;\n          max = max == null ? value : max < value ? value : max;\n        }\n      }\n    }\n  }\n\n  return {\n    min: (min != null) ? new Date(min) : null,\n    max: (max != null) ? new Date(max) : null\n  };\n};\n\n\n/**\n * Generate Timeline related information from an event\n * @param {Event} event\n * @return {Object} An object with related information, like on which area\n *                  The event happened, whether clicked on an item, etc.\n */\nGraph2d.prototype.getEventProperties = function (event) {\n  var clientX = event.center ? event.center.x : event.clientX;\n  var clientY = event.center ? event.center.y : event.clientY;\n  var x = clientX - util.getAbsoluteLeft(this.dom.centerContainer);\n  var y = clientY - util.getAbsoluteTop(this.dom.centerContainer);\n  var time = this._toTime(x);\n\n  var customTime = CustomTime.customTimeFromTarget(event);\n\n  var element = util.getTarget(event);\n  var what = null;\n  if (util.hasParent(element, this.timeAxis.dom.foreground))              {what = 'axis';}\n  else if (this.timeAxis2 && util.hasParent(element, this.timeAxis2.dom.foreground)) {what = 'axis';}\n  else if (util.hasParent(element, this.linegraph.yAxisLeft.dom.frame))   {what = 'data-axis';}\n  else if (util.hasParent(element, this.linegraph.yAxisRight.dom.frame))  {what = 'data-axis';}\n  else if (util.hasParent(element, this.linegraph.legendLeft.dom.frame))  {what = 'legend';}\n  else if (util.hasParent(element, this.linegraph.legendRight.dom.frame)) {what = 'legend';}\n  else if (customTime != null)                {what = 'custom-time';}\n  else if (util.hasParent(element, this.currentTime.bar))                 {what = 'current-time';}\n  else if (util.hasParent(element, this.dom.center))                      {what = 'background';}\n\n  var value = [];\n  var yAxisLeft = this.linegraph.yAxisLeft;\n  var yAxisRight = this.linegraph.yAxisRight;\n  if (!yAxisLeft.hidden && this.itemsData.length > 0) {\n    value.push(yAxisLeft.screenToValue(y));\n  }\n  if (!yAxisRight.hidden && this.itemsData.length > 0) {\n    value.push(yAxisRight.screenToValue(y));\n  }\n\n  return {\n    event: event,\n    what: what,\n    pageX: event.srcEvent ? event.srcEvent.pageX : event.pageX,\n    pageY: event.srcEvent ? event.srcEvent.pageY : event.pageY,\n    x: x,\n    y: y,\n    time: time,\n    value: value\n  }\n};\n\n/**\n * Load a configurator\n * @return {Object}\n * @private\n */\nGraph2d.prototype._createConfigurator = function () {\n  return new Configurator(this, this.dom.container, configureOptions);\n};\n\n\nmodule.exports = Graph2d;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/Graph2d.js","var util = require('../../util');\nvar DOMutil = require('../../DOMutil');\nvar DataSet = require('../../DataSet');\nvar DataView = require('../../DataView');\nvar Component = require('./Component');\nvar DataAxis = require('./DataAxis');\nvar GraphGroup = require('./GraphGroup');\nvar Legend = require('./Legend');\nvar Bars = require('./graph2d_types/bar');\nvar Lines = require('./graph2d_types/line');\nvar Points = require('./graph2d_types/points');\n\nvar UNGROUPED = '__ungrouped__'; // reserved group id for ungrouped items\n\n/**\n * This is the constructor of the LineGraph. It requires a Timeline body and options.\n *\n * @param body\n * @param options\n * @constructor\n */\nfunction LineGraph(body, options) {\n  this.id = util.randomUUID();\n  this.body = body;\n\n  this.defaultOptions = {\n    yAxisOrientation: 'left',\n    defaultGroup: 'default',\n    sort: true,\n    sampling: true,\n    stack: false,\n    graphHeight: '400px',\n    shaded: {\n      enabled: false,\n      orientation: 'bottom' // top, bottom, zero\n    },\n    style: 'line', // line, bar\n    barChart: {\n      width: 50,\n      sideBySide: false,\n      align: 'center' // left, center, right\n    },\n    interpolation: {\n      enabled: true,\n      parametrization: 'centripetal', // uniform (alpha = 0.0), chordal (alpha = 1.0), centripetal (alpha = 0.5)\n      alpha: 0.5\n    },\n    drawPoints: {\n      enabled: true,\n      size: 6,\n      style: 'square' // square, circle\n    },\n    dataAxis: {}, //Defaults are done on DataAxis level\n    legend: {}, //Defaults are done on Legend level\n    groups: {\n      visibility: {}\n    }\n  };\n\n  // options is shared by this lineGraph and all its items\n  this.options = util.extend({}, this.defaultOptions);\n  this.dom = {};\n  this.props = {};\n  this.hammer = null;\n  this.groups = {};\n  this.abortedGraphUpdate = false;\n  this.updateSVGheight = false;\n  this.updateSVGheightOnResize = false;\n  this.forceGraphUpdate = true;\n\n  var me = this;\n  this.itemsData = null;    // DataSet\n  this.groupsData = null;   // DataSet\n\n  // listeners for the DataSet of the items\n  this.itemListeners = {\n    'add': function (event, params, senderId) {\n      me._onAdd(params.items);\n    },\n    'update': function (event, params, senderId) {\n      me._onUpdate(params.items);\n    },\n    'remove': function (event, params, senderId) {\n      me._onRemove(params.items);\n    }\n  };\n\n  // listeners for the DataSet of the groups\n  this.groupListeners = {\n    'add': function (event, params, senderId) {\n      me._onAddGroups(params.items);\n    },\n    'update': function (event, params, senderId) {\n      me._onUpdateGroups(params.items);\n    },\n    'remove': function (event, params, senderId) {\n      me._onRemoveGroups(params.items);\n    }\n  };\n\n  this.items = {};      // object with an Item for every data item\n  this.selection = [];  // list with the ids of all selected nodes\n  this.lastStart = this.body.range.start;\n  this.touchParams = {}; // stores properties while dragging\n\n  this.svgElements = {};\n  this.setOptions(options);\n  this.groupsUsingDefaultStyles = [0];\n  this.body.emitter.on('rangechanged', function () {\n    me.lastStart = me.body.range.start;\n    me.svg.style.left = util.option.asSize(-me.props.width);\n\n    me.forceGraphUpdate = true;\n    //Is this local redraw necessary? (Core also does a change event!)\n    me.redraw.call(me);\n  });\n\n  // create the HTML DOM\n  this._create();\n  this.framework = {svg: this.svg, svgElements: this.svgElements, options: this.options, groups: this.groups};\n}\n\nLineGraph.prototype = new Component();\n\n/**\n * Create the HTML DOM for the ItemSet\n */\nLineGraph.prototype._create = function () {\n  var frame = document.createElement('div');\n  frame.className = 'vis-line-graph';\n  this.dom.frame = frame;\n\n  // create svg element for graph drawing.\n  this.svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n  this.svg.style.position = 'relative';\n  this.svg.style.height = ('' + this.options.graphHeight).replace('px', '') + 'px';\n  this.svg.style.display = 'block';\n  frame.appendChild(this.svg);\n\n  // data axis\n  this.options.dataAxis.orientation = 'left';\n  this.yAxisLeft = new DataAxis(this.body, this.options.dataAxis, this.svg, this.options.groups);\n\n  this.options.dataAxis.orientation = 'right';\n  this.yAxisRight = new DataAxis(this.body, this.options.dataAxis, this.svg, this.options.groups);\n  delete this.options.dataAxis.orientation;\n\n  // legends\n  this.legendLeft = new Legend(this.body, this.options.legend, 'left', this.options.groups);\n  this.legendRight = new Legend(this.body, this.options.legend, 'right', this.options.groups);\n\n  this.show();\n};\n\n/**\n * set the options of the LineGraph. the mergeOptions is used for subObjects that have an enabled element.\n * @param {object} options\n */\nLineGraph.prototype.setOptions = function (options) {\n  if (options) {\n    var fields = ['sampling', 'defaultGroup', 'stack', 'height', 'graphHeight', 'yAxisOrientation', 'style', 'barChart', 'dataAxis', 'sort', 'groups'];\n    if (options.graphHeight === undefined && options.height !== undefined) {\n      this.updateSVGheight = true;\n      this.updateSVGheightOnResize = true;\n    }\n    else if (this.body.domProps.centerContainer.height !== undefined && options.graphHeight !== undefined) {\n      if (parseInt((options.graphHeight + '').replace(\"px\", '')) < this.body.domProps.centerContainer.height) {\n        this.updateSVGheight = true;\n      }\n    }\n    util.selectiveDeepExtend(fields, this.options, options);\n    util.mergeOptions(this.options, options, 'interpolation');\n    util.mergeOptions(this.options, options, 'drawPoints');\n    util.mergeOptions(this.options, options, 'shaded');\n    util.mergeOptions(this.options, options, 'legend');\n\n    if (options.interpolation) {\n      if (typeof options.interpolation == 'object') {\n        if (options.interpolation.parametrization) {\n          if (options.interpolation.parametrization == 'uniform') {\n            this.options.interpolation.alpha = 0;\n          }\n          else if (options.interpolation.parametrization == 'chordal') {\n            this.options.interpolation.alpha = 1.0;\n          }\n          else {\n            this.options.interpolation.parametrization = 'centripetal';\n            this.options.interpolation.alpha = 0.5;\n          }\n        }\n      }\n    }\n\n    if (this.yAxisLeft) {\n      if (options.dataAxis !== undefined) {\n        this.yAxisLeft.setOptions(this.options.dataAxis);\n        this.yAxisRight.setOptions(this.options.dataAxis);\n      }\n    }\n\n    if (this.legendLeft) {\n      if (options.legend !== undefined) {\n        this.legendLeft.setOptions(this.options.legend);\n        this.legendRight.setOptions(this.options.legend);\n      }\n    }\n\n    if (this.groups.hasOwnProperty(UNGROUPED)) {\n      this.groups[UNGROUPED].setOptions(options);\n    }\n  }\n\n  // this is used to redraw the graph if the visibility of the groups is changed.\n  if (this.dom.frame) { //not on initial run?\n    this.forceGraphUpdate=true;\n    this.body.emitter.emit(\"_change\",{queue: true});\n  }\n};\n\n/**\n * Hide the component from the DOM\n */\nLineGraph.prototype.hide = function () {\n  // remove the frame containing the items\n  if (this.dom.frame.parentNode) {\n    this.dom.frame.parentNode.removeChild(this.dom.frame);\n  }\n};\n\n\n/**\n * Show the component in the DOM (when not already visible).\n * @return {Boolean} changed\n */\nLineGraph.prototype.show = function () {\n  // show frame containing the items\n  if (!this.dom.frame.parentNode) {\n    this.body.dom.center.appendChild(this.dom.frame);\n  }\n};\n\n\n/**\n * Set items\n * @param {vis.DataSet | null} items\n */\nLineGraph.prototype.setItems = function (items) {\n  var me = this,\n    ids,\n    oldItemsData = this.itemsData;\n\n  // replace the dataset\n  if (!items) {\n    this.itemsData = null;\n  }\n  else if (items instanceof DataSet || items instanceof DataView) {\n    this.itemsData = items;\n  }\n  else {\n    throw new TypeError('Data must be an instance of DataSet or DataView');\n  }\n\n  if (oldItemsData) {\n    // unsubscribe from old dataset\n    util.forEach(this.itemListeners, function (callback, event) {\n      oldItemsData.off(event, callback);\n    });\n\n    // remove all drawn items\n    ids = oldItemsData.getIds();\n    this._onRemove(ids);\n  }\n\n  if (this.itemsData) {\n    // subscribe to new dataset\n    var id = this.id;\n    util.forEach(this.itemListeners, function (callback, event) {\n      me.itemsData.on(event, callback, id);\n    });\n\n    // add all new items\n    ids = this.itemsData.getIds();\n    this._onAdd(ids);\n  }\n};\n\n\n/**\n * Set groups\n * @param {vis.DataSet} groups\n */\nLineGraph.prototype.setGroups = function (groups) {\n  var me = this;\n  var ids;\n\n  // unsubscribe from current dataset\n  if (this.groupsData) {\n    util.forEach(this.groupListeners, function (callback, event) {\n      me.groupsData.off(event, callback);\n    });\n\n    // remove all drawn groups\n    ids = this.groupsData.getIds();\n    this.groupsData = null;\n    for (var i = 0; i < ids.length; i++) {\n      this._removeGroup(ids[i]);\n    }\n  }\n\n  // replace the dataset\n  if (!groups) {\n    this.groupsData = null;\n  }\n  else if (groups instanceof DataSet || groups instanceof DataView) {\n    this.groupsData = groups;\n  }\n  else {\n    throw new TypeError('Data must be an instance of DataSet or DataView');\n  }\n\n  if (this.groupsData) {\n    // subscribe to new dataset\n    var id = this.id;\n    util.forEach(this.groupListeners, function (callback, event) {\n      me.groupsData.on(event, callback, id);\n    });\n\n    // draw all ms\n    ids = this.groupsData.getIds();\n    this._onAddGroups(ids);\n  }\n};\n\nLineGraph.prototype._onUpdate = function (ids) {\n  this._updateAllGroupData(ids);\n};\nLineGraph.prototype._onAdd = function (ids) {\n  this._onUpdate(ids);\n};\nLineGraph.prototype._onRemove = function (ids) {\n  this._onUpdate(ids);\n};\nLineGraph.prototype._onUpdateGroups = function (groupIds) {\n  this._updateAllGroupData(null, groupIds);\n};\nLineGraph.prototype._onAddGroups = function (groupIds) {\n  this._onUpdateGroups(groupIds);\n};\n\n/**\n * this cleans the group out off the legends and the dataaxis, updates the ungrouped and updates the graph\n * @param {Array} groupIds\n * @private\n */\nLineGraph.prototype._onRemoveGroups = function (groupIds) {\n  for (var i = 0; i < groupIds.length; i++) {\n    this._removeGroup(groupIds[i]);\n  }\n  this.forceGraphUpdate = true;\n  this.body.emitter.emit(\"_change\",{queue: true});\n};\n\n/**\n * this cleans the group out off the legends and the dataaxis\n * @param groupId\n * @private\n */\nLineGraph.prototype._removeGroup = function (groupId) {\n  if (this.groups.hasOwnProperty(groupId)) {\n    if (this.groups[groupId].options.yAxisOrientation == 'right') {\n      this.yAxisRight.removeGroup(groupId);\n      this.legendRight.removeGroup(groupId);\n      this.legendRight.redraw();\n    }\n    else {\n      this.yAxisLeft.removeGroup(groupId);\n      this.legendLeft.removeGroup(groupId);\n      this.legendLeft.redraw();\n    }\n    delete this.groups[groupId];\n  }\n}\n\n/**\n * update a group object with the group dataset entree\n *\n * @param group\n * @param groupId\n * @private\n */\nLineGraph.prototype._updateGroup = function (group, groupId) {\n  if (!this.groups.hasOwnProperty(groupId)) {\n    this.groups[groupId] = new GraphGroup(group, groupId, this.options, this.groupsUsingDefaultStyles);\n    if (this.groups[groupId].options.yAxisOrientation == 'right') {\n      this.yAxisRight.addGroup(groupId, this.groups[groupId]);\n      this.legendRight.addGroup(groupId, this.groups[groupId]);\n    }\n    else {\n      this.yAxisLeft.addGroup(groupId, this.groups[groupId]);\n      this.legendLeft.addGroup(groupId, this.groups[groupId]);\n    }\n  }\n  else {\n    this.groups[groupId].update(group);\n    if (this.groups[groupId].options.yAxisOrientation == 'right') {\n      this.yAxisRight.updateGroup(groupId, this.groups[groupId]);\n      this.legendRight.updateGroup(groupId, this.groups[groupId]);\n      //If yAxisOrientation changed, clean out the group from the other axis.\n      this.yAxisLeft.removeGroup(groupId);\n      this.legendLeft.removeGroup(groupId);\n    }\n    else {\n      this.yAxisLeft.updateGroup(groupId, this.groups[groupId]);\n      this.legendLeft.updateGroup(groupId, this.groups[groupId]);\n      //If yAxisOrientation changed, clean out the group from the other axis.\n      this.yAxisRight.removeGroup(groupId);\n      this.legendRight.removeGroup(groupId);\n    }\n  }\n  this.legendLeft.redraw();\n  this.legendRight.redraw();\n};\n\n\n/**\n * this updates all groups, it is used when there is an update the the itemset.\n *\n * @param  {Array} ids\n * @param  {Array} groupIds\n * @private\n */\nLineGraph.prototype._updateAllGroupData = function (ids, groupIds) {\n  if (this.itemsData != null) {\n    var groupsContent = {};\n    var items = this.itemsData.get();\n    var fieldId = this.itemsData._fieldId;\n    var idMap = {};\n    if (ids){\n      ids.map(function (id) {\n        idMap[id] = id;\n      });\n    }\n\n    //pre-Determine array sizes, for more efficient memory claim\n    var groupCounts = {};\n    for (var i = 0; i < items.length; i++) {\n      var item = items[i];\n      var groupId = item.group;\n      if (groupId === null || groupId === undefined) {\n        groupId = UNGROUPED;\n      }\n      groupCounts.hasOwnProperty(groupId) ? groupCounts[groupId]++ : groupCounts[groupId] = 1;\n    }\n\n    //Pre-load arrays from existing groups if items are not changed (not in ids)\n    if (!groupIds && ids) {\n      for (var groupId in this.groups) {\n        if (this.groups.hasOwnProperty(groupId)) {\n          var group = this.groups[groupId];\n          var existing_items = group.getItems();\n\n          groupsContent[groupId] = existing_items.filter(function (item) {\n            return (item[fieldId] !== idMap[item[fieldId]]);\n          });\n          var newLength = groupCounts[groupId];\n          groupCounts[groupId] -= groupsContent[groupId].length;\n          if (groupsContent[groupId].length < newLength) {\n            groupsContent[groupId][newLength - 1] = {};\n          }\n        }\n      }\n    }\n\n    //Now insert data into the arrays.\n    for (var i = 0; i < items.length; i++) {\n      var item = items[i];\n      var groupId = item.group;\n      if (groupId === null || groupId === undefined) {\n        groupId = UNGROUPED;\n      }\n      if (!groupIds && ids && (item[fieldId] !== idMap[item[fieldId]])) {\n        continue;\n      }\n      if (!groupsContent.hasOwnProperty(groupId)) {\n        groupsContent[groupId] = new Array(groupCounts[groupId]);\n      }\n      //Copy data (because of unmodifiable DataView input.\n      var extended = util.bridgeObject(item);\n      extended.x = util.convert(item.x, 'Date');\n      extended.orginalY = item.y; //real Y\n      extended.y = Number(item.y);\n      extended[fieldId] = item[fieldId];\n\n      var index= groupsContent[groupId].length - groupCounts[groupId]--;\n      groupsContent[groupId][index] = extended;\n    }\n\n    //Make sure all groups are present, to allow removal of old groups\n    for (var groupId in this.groups){\n      if (this.groups.hasOwnProperty(groupId)){\n        if (!groupsContent.hasOwnProperty(groupId)) {\n          groupsContent[groupId] = new Array(0);\n        }\n      }\n    }\n\n    //Update legendas, style and axis\n    for (var groupId in groupsContent) {\n      if (groupsContent.hasOwnProperty(groupId)) {\n        if (groupsContent[groupId].length == 0) {\n          if (this.groups.hasOwnProperty(groupId)) {\n            this._removeGroup(groupId);\n          }\n        } else {\n          var group = undefined;\n          if (this.groupsData != undefined) {\n            group = this.groupsData.get(groupId);\n          }\n          if (group == undefined) {\n            group = {id: groupId, content: this.options.defaultGroup + groupId};\n          }\n          this._updateGroup(group, groupId);\n          this.groups[groupId].setItems(groupsContent[groupId]);\n        }\n      }\n    }\n    this.forceGraphUpdate = true;\n    this.body.emitter.emit(\"_change\",{queue: true});\n  }\n};\n\n/**\n * Redraw the component, mandatory function\n * @return {boolean} Returns true if the component is resized\n */\nLineGraph.prototype.redraw = function () {\n  var resized = false;\n\n  // calculate actual size and position\n  this.props.width = this.dom.frame.offsetWidth;\n  this.props.height = this.body.domProps.centerContainer.height\n    - this.body.domProps.border.top\n    - this.body.domProps.border.bottom;\n\n  // check if this component is resized\n  resized = this._isResized() || resized;\n\n  // check whether zoomed (in that case we need to re-stack everything)\n  var visibleInterval = this.body.range.end - this.body.range.start;\n  var zoomed = (visibleInterval != this.lastVisibleInterval);\n  this.lastVisibleInterval = visibleInterval;\n\n\n  // the svg element is three times as big as the width, this allows for fully dragging left and right\n  // without reloading the graph. the controls for this are bound to events in the constructor\n  if (resized == true) {\n    this.svg.style.width = util.option.asSize(3 * this.props.width);\n    this.svg.style.left = util.option.asSize(-this.props.width);\n\n    // if the height of the graph is set as proportional, change the height of the svg\n    if ((this.options.height + '').indexOf(\"%\") != -1 || this.updateSVGheightOnResize == true) {\n      this.updateSVGheight = true;\n    }\n  }\n\n  // update the height of the graph on each redraw of the graph.\n  if (this.updateSVGheight == true) {\n    if (this.options.graphHeight != this.props.height + 'px') {\n      this.options.graphHeight = this.props.height + 'px';\n      this.svg.style.height = this.props.height + 'px';\n    }\n    this.updateSVGheight = false;\n  }\n  else {\n    this.svg.style.height = ('' + this.options.graphHeight).replace('px', '') + 'px';\n  }\n\n  // zoomed is here to ensure that animations are shown correctly.\n  if (resized == true || zoomed == true || this.abortedGraphUpdate == true || this.forceGraphUpdate == true) {\n    resized = this._updateGraph() || resized;\n    this.forceGraphUpdate = false;\n  }\n  else {\n    // move the whole svg while dragging\n    if (this.lastStart != 0) {\n      var offset = this.body.range.start - this.lastStart;\n      var range = this.body.range.end - this.body.range.start;\n      if (this.props.width != 0) {\n        var rangePerPixelInv = this.props.width / range;\n        var xOffset = offset * rangePerPixelInv;\n        this.svg.style.left = (-this.props.width - xOffset) + 'px';\n      }\n    }\n  }\n  this.legendLeft.redraw();\n  this.legendRight.redraw();\n  return resized;\n};\n\n\nLineGraph.prototype._getSortedGroupIds = function(){\n  // getting group Ids\n  var grouplist = [];\n  for (var groupId in this.groups) {\n    if (this.groups.hasOwnProperty(groupId)) {\n      var group = this.groups[groupId];\n      if (group.visible == true && (this.options.groups.visibility[groupId] === undefined || this.options.groups.visibility[groupId] == true)) {\n        grouplist.push({id:groupId,zIndex:group.options.zIndex});\n      }\n    }\n  }\n  util.insertSort(grouplist,function(a,b){\n    var az = a.zIndex;\n    var bz = b.zIndex;\n    if (az === undefined) az=0;\n    if (bz === undefined) bz=0;\n    return az==bz? 0: (az<bz ? -1: 1);\n  });\n  var groupIds = new Array(grouplist.length);\n  for (var i=0; i< grouplist.length; i++){\n    groupIds[i] = grouplist[i].id;\n  }\n  return groupIds;\n}\n\n/**\n * Update and redraw the graph.\n *\n */\nLineGraph.prototype._updateGraph = function () {\n  // reset the svg elements\n  DOMutil.prepareElements(this.svgElements);\n  if (this.props.width != 0 && this.itemsData != null) {\n    var group, i;\n    var groupRanges = {};\n    var changeCalled = false;\n    // this is the range of the SVG canvas\n    var minDate = this.body.util.toGlobalTime(-this.body.domProps.root.width);\n    var maxDate = this.body.util.toGlobalTime(2 * this.body.domProps.root.width);\n\n    // getting group Ids\n    var groupIds = this._getSortedGroupIds();\n    if (groupIds.length > 0) {\n      var groupsData = {};\n\n      // fill groups data, this only loads the data we require based on the timewindow\n      this._getRelevantData(groupIds, groupsData, minDate, maxDate);\n\n      // apply sampling, if disabled, it will pass through this function.\n      this._applySampling(groupIds, groupsData);\n\n      // we transform the X coordinates to detect collisions\n      for (i = 0; i < groupIds.length; i++) {\n        this._convertXcoordinates(groupsData[groupIds[i]]);\n      }\n\n      // now all needed data has been collected we start the processing.\n      this._getYRanges(groupIds, groupsData, groupRanges);\n\n      // update the Y axis first, we use this data to draw at the correct Y points\n      changeCalled = this._updateYAxis(groupIds, groupRanges);\n\n      //  at changeCalled, abort this update cycle as the graph needs another update with new Width input from the Redraw container.\n      //  Cleanup SVG elements on abort.\n      if (changeCalled == true) {\n        DOMutil.cleanupElements(this.svgElements);\n        this.abortedGraphUpdate = true;\n        return true;\n      }\n      this.abortedGraphUpdate = false;\n\n      // With the yAxis scaled correctly, use this to get the Y values of the points.\n      var below = undefined;\n      for (i = 0; i < groupIds.length; i++) {\n        group = this.groups[groupIds[i]];\n        if (this.options.stack === true && this.options.style === 'line') {\n          if (group.options.excludeFromStacking == undefined || !group.options.excludeFromStacking) {\n            if (below != undefined) {\n              this._stack(groupsData[group.id], groupsData[below.id]);\n              if (group.options.shaded.enabled == true && group.options.shaded.orientation !== \"group\"){\n                if (group.options.shaded.orientation == \"top\" && below.options.shaded.orientation !== \"group\"){\n                  below.options.shaded.orientation=\"group\";\n                  below.options.shaded.groupId=group.id;\n                } else {\n                  group.options.shaded.orientation=\"group\";\n                  group.options.shaded.groupId=below.id;\n                }\n              }\n            }\n            below = group;\n          }\n        }\n        this._convertYcoordinates(groupsData[groupIds[i]], group);\n      }\n\n      //Precalculate paths and draw shading if appropriate. This will make sure the shading is always behind any lines.\n      var paths = {};\n      for (i = 0; i < groupIds.length; i++) {\n        group = this.groups[groupIds[i]];\n        if (group.options.style === 'line' && group.options.shaded.enabled == true) {\n          var dataset = groupsData[groupIds[i]];\n          if (dataset == null || dataset.length == 0) {\n            continue;\n          }\n          if (!paths.hasOwnProperty(groupIds[i])) {\n            paths[groupIds[i]] = Lines.calcPath(dataset, group);\n          }\n          if (group.options.shaded.orientation === \"group\") {\n            var subGroupId = group.options.shaded.groupId;\n            if (groupIds.indexOf(subGroupId) === -1) {\n              console.log(group.id + \": Unknown shading group target given:\" + subGroupId);\n              continue;\n            }\n            if (!paths.hasOwnProperty(subGroupId)) {\n              paths[subGroupId] = Lines.calcPath(groupsData[subGroupId], this.groups[subGroupId]);\n            }\n            Lines.drawShading(paths[groupIds[i]], group, paths[subGroupId], this.framework);\n          }\n          else {\n            Lines.drawShading(paths[groupIds[i]], group, undefined, this.framework);\n          }\n        }\n      }\n\n      // draw the groups, calculating paths if still necessary.\n      Bars.draw(groupIds, groupsData, this.framework);\n      for (i = 0; i < groupIds.length; i++) {\n        group = this.groups[groupIds[i]];\n        if (groupsData[groupIds[i]].length > 0) {\n          switch (group.options.style) {\n            case \"line\":\n              if (!paths.hasOwnProperty(groupIds[i])) {\n                paths[groupIds[i]] = Lines.calcPath(groupsData[groupIds[i]], group);\n              }\n              Lines.draw(paths[groupIds[i]], group, this.framework);\n            //explicit no break;\n            case \"point\":\n            //explicit no break;\n            case \"points\":\n              if (group.options.style == \"point\" || group.options.style == \"points\" || group.options.drawPoints.enabled == true) {\n                Points.draw(groupsData[groupIds[i]], group, this.framework);\n              }\n              break;\n            case \"bar\":\n            // bar needs to be drawn enmasse\n            //explicit no break\n            default:\n            //do nothing...\n          }\n        }\n\n      }\n    }\n  }\n\n  // cleanup unused svg elements\n  DOMutil.cleanupElements(this.svgElements);\n  return false;\n};\n\nLineGraph.prototype._stack = function (data, subData) {\n  var index, dx, dy, subPrevPoint, subNextPoint;\n  index = 0;\n  // for each data point we look for a matching on in the set below\n  for (var j = 0; j < data.length; j++) {\n    subPrevPoint = undefined;\n    subNextPoint = undefined;\n    // we look for time matches or a before-after point\n    for (var k = index; k < subData.length; k++) {\n      // if times match exactly\n      if (subData[k].x === data[j].x) {\n        subPrevPoint = subData[k];\n        subNextPoint = subData[k];\n        index = k;\n        break;\n      }\n      else if (subData[k].x > data[j].x) { // overshoot\n        subNextPoint = subData[k];\n        if (k == 0) {\n          subPrevPoint = subNextPoint;\n        }\n        else {\n          subPrevPoint = subData[k - 1];\n        }\n        index = k;\n        break;\n      }\n    }\n    // in case the last data point has been used, we assume it stays like this.\n    if (subNextPoint === undefined) {\n      subPrevPoint = subData[subData.length - 1];\n      subNextPoint = subData[subData.length - 1];\n    }\n    // linear interpolation\n    dx = subNextPoint.x - subPrevPoint.x;\n    dy = subNextPoint.y - subPrevPoint.y;\n    if (dx == 0) {\n      data[j].y = data[j].orginalY + subNextPoint.y;\n    }\n    else {\n      data[j].y = data[j].orginalY + (dy / dx) * (data[j].x - subPrevPoint.x) + subPrevPoint.y; // ax + b where b is data[j].y\n    }\n  }\n}\n\n\n/**\n * first select and preprocess the data from the datasets.\n * the groups have their preselection of data, we now loop over this data to see\n * what data we need to draw. Sorted data is much faster.\n * more optimization is possible by doing the sampling before and using the binary search\n * to find the end date to determine the increment.\n *\n * @param {array}  groupIds\n * @param {object} groupsData\n * @param {date}   minDate\n * @param {date}   maxDate\n * @private\n */\nLineGraph.prototype._getRelevantData = function (groupIds, groupsData, minDate, maxDate) {\n  var group, i, j, item;\n  if (groupIds.length > 0) {\n    for (i = 0; i < groupIds.length; i++) {\n      group = this.groups[groupIds[i]];\n      var itemsData = group.getItems();\n      // optimization for sorted data\n      if (group.options.sort == true) {\n        var dateComparator = function (a, b) {\n          return a.getTime() == b.getTime() ? 0 : a < b ? -1 : 1\n        };\n        var first = Math.max(0, util.binarySearchValue(itemsData, minDate, 'x', 'before', dateComparator));\n        var last = Math.min(itemsData.length, util.binarySearchValue(itemsData, maxDate, 'x', 'after', dateComparator) + 1);\n        if (last <= 0) {\n          last = itemsData.length;\n        }\n        var dataContainer = new Array(last-first);\n        for (j = first; j < last; j++) {\n          item = group.itemsData[j];\n          dataContainer[j-first] = item;\n        }\n        groupsData[groupIds[i]] = dataContainer;\n      }\n      else {\n        // If unsorted data, all data is relevant, just returning entire structure\n        groupsData[groupIds[i]] = group.itemsData;\n      }\n    }\n  }\n};\n\n\n/**\n *\n * @param groupIds\n * @param groupsData\n * @private\n */\nLineGraph.prototype._applySampling = function (groupIds, groupsData) {\n  var group;\n  if (groupIds.length > 0) {\n    for (var i = 0; i < groupIds.length; i++) {\n      group = this.groups[groupIds[i]];\n      if (group.options.sampling == true) {\n        var dataContainer = groupsData[groupIds[i]];\n        if (dataContainer.length > 0) {\n          var increment = 1;\n          var amountOfPoints = dataContainer.length;\n\n          // the global screen is used because changing the width of the yAxis may affect the increment, resulting in an endless loop\n          // of width changing of the yAxis.\n          //TODO: This assumes sorted data, but that's not guaranteed!\n          var xDistance = this.body.util.toGlobalScreen(dataContainer[dataContainer.length - 1].x) - this.body.util.toGlobalScreen(dataContainer[0].x);\n          var pointsPerPixel = amountOfPoints / xDistance;\n          increment = Math.min(Math.ceil(0.2 * amountOfPoints), Math.max(1, Math.round(pointsPerPixel)));\n\n          var sampledData = new Array(amountOfPoints);\n          for (var j = 0; j < amountOfPoints; j += increment) {\n            var idx = Math.round(j/increment);\n            sampledData[idx]=dataContainer[j];\n          }\n          groupsData[groupIds[i]] = sampledData.splice(0,Math.round(amountOfPoints/increment));\n        }\n      }\n    }\n  }\n};\n\n\n/**\n *\n *\n * @param {array}  groupIds\n * @param {object} groupsData\n * @param {object} groupRanges  | this is being filled here\n * @private\n */\nLineGraph.prototype._getYRanges = function (groupIds, groupsData, groupRanges) {\n  var groupData, group, i;\n  var combinedDataLeft = [];\n  var combinedDataRight = [];\n  var options;\n  if (groupIds.length > 0) {\n    for (i = 0; i < groupIds.length; i++) {\n      groupData = groupsData[groupIds[i]];\n      options = this.groups[groupIds[i]].options;\n      if (groupData.length > 0) {\n        group = this.groups[groupIds[i]];\n        // if bar graphs are stacked, their range need to be handled differently and accumulated over all groups.\n        if (options.stack === true && options.style === 'bar') {\n          if (options.yAxisOrientation === 'left') {\n            combinedDataLeft = combinedDataLeft.concat(group.getItems());\n          }\n          else {\n            combinedDataRight = combinedDataRight.concat(group.getItems());\n          }\n        }\n        else {\n          groupRanges[groupIds[i]] = group.getYRange(groupData, groupIds[i]);\n        }\n      }\n    }\n\n    // if bar graphs are stacked, their range need to be handled differently and accumulated over all groups.\n    Bars.getStackedYRange(combinedDataLeft, groupRanges, groupIds, '__barStackLeft', 'left');\n    Bars.getStackedYRange(combinedDataRight, groupRanges, groupIds, '__barStackRight', 'right');\n  }\n};\n\n\n/**\n * this sets the Y ranges for the Y axis. It also determines which of the axis should be shown or hidden.\n * @param {Array} groupIds\n * @param {Object} groupRanges\n * @private\n */\nLineGraph.prototype._updateYAxis = function (groupIds, groupRanges) {\n  var resized = false;\n  var yAxisLeftUsed = false;\n  var yAxisRightUsed = false;\n  var minLeft = 1e9, minRight = 1e9, maxLeft = -1e9, maxRight = -1e9, minVal, maxVal;\n  // if groups are present\n  if (groupIds.length > 0) {\n    // this is here to make sure that if there are no items in the axis but there are groups, that there is no infinite draw/redraw loop.\n    for (var i = 0; i < groupIds.length; i++) {\n      var group = this.groups[groupIds[i]];\n      if (group && group.options.yAxisOrientation != 'right') {\n        yAxisLeftUsed = true;\n        minLeft = 1e9;\n        maxLeft = -1e9;\n      }\n      else if (group && group.options.yAxisOrientation) {\n        yAxisRightUsed = true;\n        minRight = 1e9;\n        maxRight = -1e9;\n      }\n    }\n\n    // if there are items:\n    for (var i = 0; i < groupIds.length; i++) {\n      if (groupRanges.hasOwnProperty(groupIds[i])) {\n        if (groupRanges[groupIds[i]].ignore !== true) {\n          minVal = groupRanges[groupIds[i]].min;\n          maxVal = groupRanges[groupIds[i]].max;\n\n          if (groupRanges[groupIds[i]].yAxisOrientation != 'right') {\n            yAxisLeftUsed = true;\n            minLeft = minLeft > minVal ? minVal : minLeft;\n            maxLeft = maxLeft < maxVal ? maxVal : maxLeft;\n          }\n          else {\n            yAxisRightUsed = true;\n            minRight = minRight > minVal ? minVal : minRight;\n            maxRight = maxRight < maxVal ? maxVal : maxRight;\n          }\n        }\n      }\n    }\n\n    if (yAxisLeftUsed == true) {\n      this.yAxisLeft.setRange(minLeft, maxLeft);\n    }\n    if (yAxisRightUsed == true) {\n      this.yAxisRight.setRange(minRight, maxRight);\n    }\n  }\n  resized = this._toggleAxisVisiblity(yAxisLeftUsed, this.yAxisLeft) || resized;\n  resized = this._toggleAxisVisiblity(yAxisRightUsed, this.yAxisRight) || resized;\n\n  if (yAxisRightUsed == true && yAxisLeftUsed == true) {\n    this.yAxisLeft.drawIcons = true;\n    this.yAxisRight.drawIcons = true;\n  }\n  else {\n    this.yAxisLeft.drawIcons = false;\n    this.yAxisRight.drawIcons = false;\n  }\n  this.yAxisRight.master = !yAxisLeftUsed;\n  this.yAxisRight.masterAxis = this.yAxisLeft;\n\n  if (this.yAxisRight.master == false) {\n    if (yAxisRightUsed == true) {\n      this.yAxisLeft.lineOffset = this.yAxisRight.width;\n    }\n    else {\n      this.yAxisLeft.lineOffset = 0;\n    }\n\n    resized = this.yAxisLeft.redraw() || resized;\n    resized = this.yAxisRight.redraw() || resized;\n  }\n  else {\n    resized = this.yAxisRight.redraw() || resized;\n  }\n\n  // clean the accumulated lists\n  var tempGroups = ['__barStackLeft', '__barStackRight', '__lineStackLeft', '__lineStackRight'];\n  for (var i = 0; i < tempGroups.length; i++) {\n    if (groupIds.indexOf(tempGroups[i]) != -1) {\n      groupIds.splice(groupIds.indexOf(tempGroups[i]), 1);\n    }\n  }\n\n  return resized;\n};\n\n\n/**\n * This shows or hides the Y axis if needed. If there is a change, the changed event is emitted by the updateYAxis function\n *\n * @param {boolean} axisUsed\n * @returns {boolean}\n * @private\n * @param axis\n */\nLineGraph.prototype._toggleAxisVisiblity = function (axisUsed, axis) {\n  var changed = false;\n  if (axisUsed == false) {\n    if (axis.dom.frame.parentNode && axis.hidden == false) {\n      axis.hide();\n      changed = true;\n    }\n  }\n  else {\n    if (!axis.dom.frame.parentNode && axis.hidden == true) {\n      axis.show();\n      changed = true;\n    }\n  }\n  return changed;\n};\n\n\n/**\n * This uses the DataAxis object to generate the correct X coordinate on the SVG window. It uses the\n * util function toScreen to get the x coordinate from the timestamp. It also pre-filters the data and get the minMax ranges for\n * the yAxis.\n *\n * @param datapoints\n * @returns {Array}\n * @private\n */\nLineGraph.prototype._convertXcoordinates = function (datapoints) {\n  var toScreen = this.body.util.toScreen;\n  for (var i = 0; i < datapoints.length; i++) {\n    datapoints[i].screen_x = toScreen(datapoints[i].x) + this.props.width;\n    datapoints[i].screen_y = datapoints[i].y; //starting point for range calculations\n  }\n};\n\n\n/**\n * This uses the DataAxis object to generate the correct X coordinate on the SVG window. It uses the\n * util function toScreen to get the x coordinate from the timestamp. It also pre-filters the data and get the minMax ranges for\n * the yAxis.\n *\n * @param datapoints\n * @param group\n * @returns {Array}\n * @private\n */\nLineGraph.prototype._convertYcoordinates = function (datapoints, group) {\n  var axis = this.yAxisLeft;\n  var svgHeight = Number(this.svg.style.height.replace('px', ''));\n  if (group.options.yAxisOrientation == 'right') {\n    axis = this.yAxisRight;\n  }\n  for (var i = 0; i < datapoints.length; i++) {\n    datapoints[i].screen_y = Math.round(axis.convertValue(datapoints[i].y));\n  }\n  group.setZeroPosition(Math.min(svgHeight, axis.convertValue(0)));\n};\n\n\nmodule.exports = LineGraph;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/component/LineGraph.js","var util = require('../../util');\nvar DOMutil = require('../../DOMutil');\nvar Component = require('./Component');\nvar DataScale = require('./DataScale');\n/**\n * A horizontal time axis\n * @param {Object} [options]        See DataAxis.setOptions for the available\n *                                  options.\n * @constructor DataAxis\n * @extends Component\n * @param body\n */\nfunction DataAxis(body, options, svg, linegraphOptions) {\n  this.id = util.randomUUID();\n  this.body = body;\n\n  this.defaultOptions = {\n    orientation: 'left',  // supported: 'left', 'right'\n    showMinorLabels: true,\n    showMajorLabels: true,\n    icons: false,\n    majorLinesOffset: 7,\n    minorLinesOffset: 4,\n    labelOffsetX: 10,\n    labelOffsetY: 2,\n    iconWidth: 20,\n    width: '40px',\n    visible: true,\n    alignZeros: true,\n    left: {\n      range: {min: undefined, max: undefined},\n      format: function (value) {\n        return '' + parseFloat(value.toPrecision(3));\n      },\n      title: {text: undefined, style: undefined}\n    },\n    right: {\n      range: {min: undefined, max: undefined},\n      format: function (value) {\n        return '' + parseFloat(value.toPrecision(3));\n      },\n      title: {text: undefined, style: undefined}\n    }\n  };\n\n  this.linegraphOptions = linegraphOptions;\n  this.linegraphSVG = svg;\n  this.props = {};\n  this.DOMelements = { // dynamic elements\n    lines: {},\n    labels: {},\n    title: {}\n  };\n\n  this.dom = {};\n  this.scale = undefined;\n  this.range = {start: 0, end: 0};\n\n  this.options = util.extend({}, this.defaultOptions);\n  this.conversionFactor = 1;\n\n  this.setOptions(options);\n  this.width = Number(('' + this.options.width).replace(\"px\", \"\"));\n  this.minWidth = this.width;\n  this.height = this.linegraphSVG.getBoundingClientRect().height;\n  this.hidden = false;\n\n  this.stepPixels = 25;\n  this.zeroCrossing = -1;\n  this.amountOfSteps = -1;\n\n  this.lineOffset = 0;\n  this.master = true;\n  this.masterAxis = null;\n  this.svgElements = {};\n  this.iconsRemoved = false;\n\n  this.groups = {};\n  this.amountOfGroups = 0;\n\n  // create the HTML DOM\n  this._create();\n  this.framework = {svg: this.svg, svgElements: this.svgElements, options: this.options, groups: this.groups};\n\n  var me = this;\n  this.body.emitter.on(\"verticalDrag\", function () {\n    me.dom.lineContainer.style.top = me.body.domProps.scrollTop + 'px';\n  });\n}\n\nDataAxis.prototype = new Component();\n\n\nDataAxis.prototype.addGroup = function (label, graphOptions) {\n  if (!this.groups.hasOwnProperty(label)) {\n    this.groups[label] = graphOptions;\n  }\n  this.amountOfGroups += 1;\n};\n\nDataAxis.prototype.updateGroup = function (label, graphOptions) {\n  if (!this.groups.hasOwnProperty(label)) {\n    this.amountOfGroups += 1;\n  }\n  this.groups[label] = graphOptions;\n};\n\nDataAxis.prototype.removeGroup = function (label) {\n  if (this.groups.hasOwnProperty(label)) {\n    delete this.groups[label];\n    this.amountOfGroups -= 1;\n  }\n};\n\n\nDataAxis.prototype.setOptions = function (options) {\n  if (options) {\n    var redraw = false;\n    if (this.options.orientation != options.orientation && options.orientation !== undefined) {\n      redraw = true;\n    }\n    var fields = [\n      'orientation',\n      'showMinorLabels',\n      'showMajorLabels',\n      'icons',\n      'majorLinesOffset',\n      'minorLinesOffset',\n      'labelOffsetX',\n      'labelOffsetY',\n      'iconWidth',\n      'width',\n      'visible',\n      'left',\n      'right',\n      'alignZeros'\n    ];\n    util.selectiveDeepExtend(fields, this.options, options);\n\n    this.minWidth = Number(('' + this.options.width).replace(\"px\", \"\"));\n    if (redraw === true && this.dom.frame) {\n      this.hide();\n      this.show();\n    }\n  }\n};\n\n\n/**\n * Create the HTML DOM for the DataAxis\n */\nDataAxis.prototype._create = function () {\n  this.dom.frame = document.createElement('div');\n  this.dom.frame.style.width = this.options.width;\n  this.dom.frame.style.height = this.height;\n\n  this.dom.lineContainer = document.createElement('div');\n  this.dom.lineContainer.style.width = '100%';\n  this.dom.lineContainer.style.height = this.height;\n  this.dom.lineContainer.style.position = 'relative';\n\n  // create svg element for graph drawing.\n  this.svg = document.createElementNS('http://www.w3.org/2000/svg', \"svg\");\n  this.svg.style.position = \"absolute\";\n  this.svg.style.top = '0px';\n  this.svg.style.height = '100%';\n  this.svg.style.width = '100%';\n  this.svg.style.display = \"block\";\n  this.dom.frame.appendChild(this.svg);\n};\n\nDataAxis.prototype._redrawGroupIcons = function () {\n  DOMutil.prepareElements(this.svgElements);\n\n  var x;\n  var iconWidth = this.options.iconWidth;\n  var iconHeight = 15;\n  var iconOffset = 4;\n  var y = iconOffset + 0.5 * iconHeight;\n\n  if (this.options.orientation === 'left') {\n    x = iconOffset;\n  }\n  else {\n    x = this.width - iconWidth - iconOffset;\n  }\n\n  var groupArray = Object.keys(this.groups);\n  groupArray.sort(function (a, b) {\n    return (a < b ? -1 : 1);\n  })\n\n  for (var i = 0; i < groupArray.length; i++) {\n    var groupId = groupArray[i];\n    if (this.groups[groupId].visible === true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] === true)) {\n      this.groups[groupId].getLegend(iconWidth, iconHeight, this.framework, x, y);\n      y += iconHeight + iconOffset;\n    }\n  }\n\n  DOMutil.cleanupElements(this.svgElements);\n  this.iconsRemoved = false;\n};\n\nDataAxis.prototype._cleanupIcons = function () {\n  if (this.iconsRemoved === false) {\n    DOMutil.prepareElements(this.svgElements);\n    DOMutil.cleanupElements(this.svgElements);\n    this.iconsRemoved = true;\n  }\n}\n\n/**\n * Create the HTML DOM for the DataAxis\n */\nDataAxis.prototype.show = function () {\n  this.hidden = false;\n  if (!this.dom.frame.parentNode) {\n    if (this.options.orientation === 'left') {\n      this.body.dom.left.appendChild(this.dom.frame);\n    }\n    else {\n      this.body.dom.right.appendChild(this.dom.frame);\n    }\n  }\n\n  if (!this.dom.lineContainer.parentNode) {\n    this.body.dom.backgroundHorizontal.appendChild(this.dom.lineContainer);\n  }\n};\n\n/**\n * Create the HTML DOM for the DataAxis\n */\nDataAxis.prototype.hide = function () {\n  this.hidden = true;\n  if (this.dom.frame.parentNode) {\n    this.dom.frame.parentNode.removeChild(this.dom.frame);\n  }\n\n  if (this.dom.lineContainer.parentNode) {\n    this.dom.lineContainer.parentNode.removeChild(this.dom.lineContainer);\n  }\n};\n\n/**\n * Set a range (start and end)\n * @param end\n * @param start\n * @param end\n */\nDataAxis.prototype.setRange = function (start, end) {\n  this.range.start = start;\n  this.range.end = end;\n};\n\n/**\n * Repaint the component\n * @return {boolean} Returns true if the component is resized\n */\nDataAxis.prototype.redraw = function () {\n  var resized = false;\n  var activeGroups = 0;\n\n  // Make sure the line container adheres to the vertical scrolling.\n  this.dom.lineContainer.style.top = this.body.domProps.scrollTop + 'px';\n\n  for (var groupId in this.groups) {\n    if (this.groups.hasOwnProperty(groupId)) {\n      if (this.groups[groupId].visible === true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] === true)) {\n        activeGroups++;\n      }\n    }\n  }\n  if (this.amountOfGroups === 0 || activeGroups === 0) {\n    this.hide();\n  }\n  else {\n    this.show();\n    this.height = Number(this.linegraphSVG.style.height.replace(\"px\", \"\"));\n\n    // svg offsetheight did not work in firefox and explorer...\n    this.dom.lineContainer.style.height = this.height + 'px';\n    this.width = this.options.visible === true ? Number(('' + this.options.width).replace(\"px\", \"\")) : 0;\n\n    var props = this.props;\n    var frame = this.dom.frame;\n\n    // update classname\n    frame.className = 'vis-data-axis';\n\n    // calculate character width and height\n    this._calculateCharSize();\n\n    var orientation = this.options.orientation;\n    var showMinorLabels = this.options.showMinorLabels;\n    var showMajorLabels = this.options.showMajorLabels;\n\n    // determine the width and height of the elements for the axis\n    props.minorLabelHeight = showMinorLabels ? props.minorCharHeight : 0;\n    props.majorLabelHeight = showMajorLabels ? props.majorCharHeight : 0;\n\n    props.minorLineWidth = this.body.dom.backgroundHorizontal.offsetWidth - this.lineOffset - this.width + 2 * this.options.minorLinesOffset;\n    props.minorLineHeight = 1;\n    props.majorLineWidth = this.body.dom.backgroundHorizontal.offsetWidth - this.lineOffset - this.width + 2 * this.options.majorLinesOffset;\n    props.majorLineHeight = 1;\n\n    //  take frame offline while updating (is almost twice as fast)\n    if (orientation === 'left') {\n      frame.style.top = '0';\n      frame.style.left = '0';\n      frame.style.bottom = '';\n      frame.style.width = this.width + 'px';\n      frame.style.height = this.height + \"px\";\n      this.props.width = this.body.domProps.left.width;\n      this.props.height = this.body.domProps.left.height;\n    }\n    else { // right\n      frame.style.top = '';\n      frame.style.bottom = '0';\n      frame.style.left = '0';\n      frame.style.width = this.width + 'px';\n      frame.style.height = this.height + \"px\";\n      this.props.width = this.body.domProps.right.width;\n      this.props.height = this.body.domProps.right.height;\n    }\n\n    resized = this._redrawLabels();\n    resized = this._isResized() || resized;\n\n    if (this.options.icons === true) {\n      this._redrawGroupIcons();\n    }\n    else {\n      this._cleanupIcons();\n    }\n\n    this._redrawTitle(orientation);\n  }\n  return resized;\n};\n\n/**\n * Repaint major and minor text labels and vertical grid lines\n * @private\n */\nDataAxis.prototype._redrawLabels = function () {\n  var resized = false;\n  DOMutil.prepareElements(this.DOMelements.lines);\n  DOMutil.prepareElements(this.DOMelements.labels);\n  var orientation = this.options['orientation'];\n  var customRange = this.options[orientation].range != undefined ? this.options[orientation].range : {};\n\n  //Override range with manual options:\n  var autoScaleEnd = true;\n  if (customRange.max != undefined) {\n    this.range.end = customRange.max;\n    autoScaleEnd = false;\n  }\n  var autoScaleStart = true;\n  if (customRange.min != undefined) {\n    this.range.start = customRange.min;\n    autoScaleStart = false;\n  }\n\n  this.scale = new DataScale(\n    this.range.start,\n    this.range.end,\n    autoScaleStart,\n    autoScaleEnd,\n    this.dom.frame.offsetHeight,\n    this.props.majorCharHeight,\n    this.options.alignZeros,\n    this.options[orientation].format\n  );\n\n  if (this.master === false && this.masterAxis != undefined) {\n    this.scale.followScale(this.masterAxis.scale);\n  }\n\n  //Is updated in side-effect of _redrawLabel():\n  this.maxLabelSize = 0;\n\n  var lines = this.scale.getLines();\n  lines.forEach(\n    line=> {\n      var y = line.y;\n      var isMajor = line.major;\n      if (this.options['showMinorLabels'] && isMajor === false) {\n        this._redrawLabel(y - 2, line.val, orientation, 'vis-y-axis vis-minor', this.props.minorCharHeight);\n      }\n      if (isMajor) {\n        if (y >= 0) {\n          this._redrawLabel(y - 2, line.val, orientation, 'vis-y-axis vis-major', this.props.majorCharHeight);\n        }\n      }\n      if (this.master === true) {\n        if (isMajor) {\n          this._redrawLine(y, orientation, 'vis-grid vis-horizontal vis-major', this.options.majorLinesOffset, this.props.majorLineWidth);\n        }\n        else {\n          this._redrawLine(y, orientation, 'vis-grid vis-horizontal vis-minor', this.options.minorLinesOffset, this.props.minorLineWidth);\n        }\n      }\n    });\n\n  // Note that title is rotated, so we're using the height, not width!\n  var titleWidth = 0;\n  if (this.options[orientation].title !== undefined && this.options[orientation].title.text !== undefined) {\n    titleWidth = this.props.titleCharHeight;\n  }\n  var offset = this.options.icons === true ? Math.max(this.options.iconWidth, titleWidth) + this.options.labelOffsetX + 15 : titleWidth + this.options.labelOffsetX + 15;\n\n  // this will resize the yAxis to accommodate the labels.\n  if (this.maxLabelSize > (this.width - offset) && this.options.visible === true) {\n    this.width = this.maxLabelSize + offset;\n    this.options.width = this.width + \"px\";\n    DOMutil.cleanupElements(this.DOMelements.lines);\n    DOMutil.cleanupElements(this.DOMelements.labels);\n    this.redraw();\n    resized = true;\n  }\n  // this will resize the yAxis if it is too big for the labels.\n  else if (this.maxLabelSize < (this.width - offset) && this.options.visible === true && this.width > this.minWidth) {\n    this.width = Math.max(this.minWidth, this.maxLabelSize + offset);\n    this.options.width = this.width + \"px\";\n    DOMutil.cleanupElements(this.DOMelements.lines);\n    DOMutil.cleanupElements(this.DOMelements.labels);\n    this.redraw();\n    resized = true;\n  }\n  else {\n    DOMutil.cleanupElements(this.DOMelements.lines);\n    DOMutil.cleanupElements(this.DOMelements.labels);\n    resized = false;\n  }\n\n  return resized;\n};\n\nDataAxis.prototype.convertValue = function (value) {\n  return this.scale.convertValue(value);\n};\n\nDataAxis.prototype.screenToValue = function (x) {\n  return this.scale.screenToValue(x);\n};\n\n/**\n * Create a label for the axis at position x\n * @private\n * @param y\n * @param text\n * @param orientation\n * @param className\n * @param characterHeight\n */\nDataAxis.prototype._redrawLabel = function (y, text, orientation, className, characterHeight) {\n  // reuse redundant label\n  var label = DOMutil.getDOMElement('div', this.DOMelements.labels, this.dom.frame); //this.dom.redundant.labels.shift();\n  label.className = className;\n  label.innerHTML = text;\n  if (orientation === 'left') {\n    label.style.left = '-' + this.options.labelOffsetX + 'px';\n    label.style.textAlign = \"right\";\n  }\n  else {\n    label.style.right = '-' + this.options.labelOffsetX + 'px';\n    label.style.textAlign = \"left\";\n  }\n\n  label.style.top = y - 0.5 * characterHeight + this.options.labelOffsetY + 'px';\n\n  text += '';\n\n  var largestWidth = Math.max(this.props.majorCharWidth, this.props.minorCharWidth);\n  if (this.maxLabelSize < text.length * largestWidth) {\n    this.maxLabelSize = text.length * largestWidth;\n  }\n};\n\n/**\n * Create a minor line for the axis at position y\n * @param y\n * @param orientation\n * @param className\n * @param offset\n * @param width\n */\nDataAxis.prototype._redrawLine = function (y, orientation, className, offset, width) {\n  if (this.master === true) {\n    var line = DOMutil.getDOMElement('div', this.DOMelements.lines, this.dom.lineContainer);//this.dom.redundant.lines.shift();\n    line.className = className;\n    line.innerHTML = '';\n\n    if (orientation === 'left') {\n      line.style.left = (this.width - offset) + 'px';\n    }\n    else {\n      line.style.right = (this.width - offset) + 'px';\n    }\n\n    line.style.width = width + 'px';\n    line.style.top = y + 'px';\n  }\n};\n\n/**\n * Create a title for the axis\n * @private\n * @param orientation\n */\nDataAxis.prototype._redrawTitle = function (orientation) {\n  DOMutil.prepareElements(this.DOMelements.title);\n\n  // Check if the title is defined for this axes\n  if (this.options[orientation].title !== undefined && this.options[orientation].title.text !== undefined) {\n    var title = DOMutil.getDOMElement('div', this.DOMelements.title, this.dom.frame);\n    title.className = 'vis-y-axis vis-title vis-' + orientation;\n    title.innerHTML = this.options[orientation].title.text;\n\n    // Add style - if provided\n    if (this.options[orientation].title.style !== undefined) {\n      util.addCssText(title, this.options[orientation].title.style);\n    }\n\n    if (orientation === 'left') {\n      title.style.left = this.props.titleCharHeight + 'px';\n    }\n    else {\n      title.style.right = this.props.titleCharHeight + 'px';\n    }\n\n    title.style.width = this.height + 'px';\n  }\n\n  // we need to clean up in case we did not use all elements.\n  DOMutil.cleanupElements(this.DOMelements.title);\n};\n\n\n/**\n * Determine the size of text on the axis (both major and minor axis).\n * The size is calculated only once and then cached in this.props.\n * @private\n */\nDataAxis.prototype._calculateCharSize = function () {\n  // determine the char width and height on the minor axis\n  if (!('minorCharHeight' in this.props)) {\n    var textMinor = document.createTextNode('0');\n    var measureCharMinor = document.createElement('div');\n    measureCharMinor.className = 'vis-y-axis vis-minor vis-measure';\n    measureCharMinor.appendChild(textMinor);\n    this.dom.frame.appendChild(measureCharMinor);\n\n    this.props.minorCharHeight = measureCharMinor.clientHeight;\n    this.props.minorCharWidth = measureCharMinor.clientWidth;\n\n    this.dom.frame.removeChild(measureCharMinor);\n  }\n\n  if (!('majorCharHeight' in this.props)) {\n    var textMajor = document.createTextNode('0');\n    var measureCharMajor = document.createElement('div');\n    measureCharMajor.className = 'vis-y-axis vis-major vis-measure';\n    measureCharMajor.appendChild(textMajor);\n    this.dom.frame.appendChild(measureCharMajor);\n\n    this.props.majorCharHeight = measureCharMajor.clientHeight;\n    this.props.majorCharWidth = measureCharMajor.clientWidth;\n\n    this.dom.frame.removeChild(measureCharMajor);\n  }\n\n  if (!('titleCharHeight' in this.props)) {\n    var textTitle = document.createTextNode('0');\n    var measureCharTitle = document.createElement('div');\n    measureCharTitle.className = 'vis-y-axis vis-title vis-measure';\n    measureCharTitle.appendChild(textTitle);\n    this.dom.frame.appendChild(measureCharTitle);\n\n    this.props.titleCharHeight = measureCharTitle.clientHeight;\n    this.props.titleCharWidth = measureCharTitle.clientWidth;\n\n    this.dom.frame.removeChild(measureCharTitle);\n  }\n};\n\nmodule.exports = DataAxis;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/component/DataAxis.js","/**\n * Created by ludo on 25-1-16.\n */\n\nfunction DataScale(start, end, autoScaleStart, autoScaleEnd, containerHeight, majorCharHeight, zeroAlign = false, formattingFunction=false) {\n  this.majorSteps = [1, 2, 5, 10];\n  this.minorSteps = [0.25, 0.5, 1, 2];\n  this.customLines = null;\n\n  this.containerHeight = containerHeight;\n  this.majorCharHeight = majorCharHeight;\n  this._start = start;\n  this._end = end;\n\n  this.scale = 1;\n  this.minorStepIdx = -1;\n  this.magnitudefactor = 1;\n  this.determineScale();\n\n  this.zeroAlign = zeroAlign;\n  this.autoScaleStart = autoScaleStart;\n  this.autoScaleEnd = autoScaleEnd;\n\n  this.formattingFunction = formattingFunction;\n\n  if (autoScaleStart || autoScaleEnd) {\n    var me = this;\n    var roundToMinor = function (value) {\n      var rounded = value - (value % (me.magnitudefactor * me.minorSteps[me.minorStepIdx]));\n      if (value % (me.magnitudefactor * me.minorSteps[me.minorStepIdx]) > 0.5 * (me.magnitudefactor * me.minorSteps[me.minorStepIdx])) {\n        return rounded + (me.magnitudefactor * me.minorSteps[me.minorStepIdx]);\n      }\n      else {\n        return rounded;\n      }\n    };\n    if (autoScaleStart) {\n      this._start -= this.magnitudefactor * 2 * this.minorSteps[this.minorStepIdx];\n      this._start = roundToMinor(this._start);\n    }\n\n    if (autoScaleEnd) {\n      this._end += this.magnitudefactor * this.minorSteps[this.minorStepIdx];\n      this._end = roundToMinor(this._end);\n    }\n    this.determineScale();\n  }\n}\n\nDataScale.prototype.setCharHeight = function (majorCharHeight) {\n  this.majorCharHeight = majorCharHeight;\n};\n\nDataScale.prototype.setHeight = function (containerHeight) {\n  this.containerHeight = containerHeight;\n};\n\nDataScale.prototype.determineScale = function () {\n  var range = this._end - this._start;\n  this.scale = this.containerHeight / range;\n  var minimumStepValue = this.majorCharHeight / this.scale;\n  var orderOfMagnitude = (range > 0)\n      ? Math.round(Math.log(range) / Math.LN10)\n      : 0;\n\n  this.minorStepIdx = -1;\n  this.magnitudefactor = Math.pow(10, orderOfMagnitude);\n\n  var start = 0;\n  if (orderOfMagnitude < 0) {\n    start = orderOfMagnitude;\n  }\n\n  var solutionFound = false;\n  for (var l = start; Math.abs(l) <= Math.abs(orderOfMagnitude); l++) {\n    this.magnitudefactor = Math.pow(10, l);\n    for (var j = 0; j < this.minorSteps.length; j++) {\n      var stepSize = this.magnitudefactor * this.minorSteps[j];\n      if (stepSize >= minimumStepValue) {\n        solutionFound = true;\n        this.minorStepIdx = j;\n        break;\n      }\n    }\n    if (solutionFound === true) {\n      break;\n    }\n  }\n};\n\nDataScale.prototype.is_major = function (value) {\n  return (value % (this.magnitudefactor * this.majorSteps[this.minorStepIdx]) === 0);\n};\n\nDataScale.prototype.getStep = function(){\n  return this.magnitudefactor * this.minorSteps[this.minorStepIdx];\n};\n\nDataScale.prototype.getFirstMajor = function(){\n  var majorStep = this.magnitudefactor * this.majorSteps[this.minorStepIdx];\n  return this.convertValue(this._start + ((majorStep - (this._start % majorStep)) % majorStep));\n};\n\nDataScale.prototype.formatValue = function(current) {\n  var returnValue = current.toPrecision(5);\n  if (typeof this.formattingFunction === 'function') {\n    returnValue = this.formattingFunction(current);\n  }\n\n  if (typeof returnValue === 'number') {\n    return '' + returnValue;\n  }\n  else if (typeof returnValue === 'string') {\n    return returnValue;\n  }\n  else {\n    return current.toPrecision(5);\n  }\n\n};\n\nDataScale.prototype.getLines = function () {\n  var lines = [];\n  var step = this.getStep();\n  var bottomOffset = (step - (this._start % step)) % step;\n  for (var i = (this._start + bottomOffset); this._end-i > 0.00001; i += step) {\n    if (i != this._start) { //Skip the bottom line\n      lines.push({major: this.is_major(i), y: this.convertValue(i), val: this.formatValue(i)});\n    }\n  }\n  return lines;\n};\n\nDataScale.prototype.followScale = function (other) {\n  var oldStepIdx = this.minorStepIdx;\n  var oldStart = this._start;\n  var oldEnd = this._end;\n\n  var me = this;\n  var increaseMagnitude = function () {\n    me.magnitudefactor *= 2;\n  };\n  var decreaseMagnitude = function () {\n    me.magnitudefactor /= 2;\n  };\n\n  if ((other.minorStepIdx <= 1 && this.minorStepIdx <= 1) || (other.minorStepIdx > 1 && this.minorStepIdx > 1)) {\n    //easy, no need to change stepIdx nor multiplication factor\n  } else if (other.minorStepIdx < this.minorStepIdx) {\n    //I'm 5, they are 4 per major.\n    this.minorStepIdx = 1;\n    if (oldStepIdx == 2) {\n      increaseMagnitude();\n    } else {\n      increaseMagnitude();\n      increaseMagnitude();\n    }\n  } else {\n    //I'm 4, they are 5 per major\n    this.minorStepIdx = 2;\n    if (oldStepIdx == 1) {\n      decreaseMagnitude();\n    } else {\n      decreaseMagnitude();\n      decreaseMagnitude();\n    }\n  }\n\n  //Get masters stats:\n  var lines = other.getLines();\n  var otherZero = other.convertValue(0);\n  var otherStep = other.getStep() * other.scale;\n\n  var done = false;\n  var count = 0;\n  //Loop until magnitude is correct for given constrains.\n  while (!done && count++ <5) {\n\n    //Get my stats:\n    this.scale = otherStep / (this.minorSteps[this.minorStepIdx] * this.magnitudefactor);\n    var newRange = this.containerHeight / this.scale;\n\n    //For the case the magnitudefactor has changed:\n    this._start = oldStart;\n    this._end = this._start + newRange;\n\n    var myOriginalZero = this._end * this.scale;\n    var majorStep = this.magnitudefactor * this.majorSteps[this.minorStepIdx];\n    var majorOffset = this.getFirstMajor() - other.getFirstMajor();\n\n    if (this.zeroAlign) {\n      var zeroOffset = otherZero - myOriginalZero;\n      this._end += (zeroOffset / this.scale);\n      this._start = this._end - newRange;\n    } else {\n      if (!this.autoScaleStart) {\n        this._start += majorStep - (majorOffset / this.scale);\n        this._end = this._start + newRange;\n      } else {\n        this._start -= majorOffset / this.scale;\n        this._end = this._start + newRange;\n      }\n    }\n    if (!this.autoScaleEnd && this._end > oldEnd+0.00001) {\n      //Need to decrease magnitude to prevent scale overshoot! (end)\n      decreaseMagnitude();\n      done = false;\n      continue;\n    }\n    if (!this.autoScaleStart && this._start < oldStart-0.00001) {\n      if (this.zeroAlign && oldStart >= 0) {\n        console.warn(\"Can't adhere to given 'min' range, due to zeroalign\");\n      } else {\n        //Need to decrease magnitude to prevent scale overshoot! (start)\n        decreaseMagnitude();\n        done = false;\n        continue;\n      }\n    }\n    if (this.autoScaleStart && this.autoScaleEnd && newRange < (oldEnd-oldStart)){\n      increaseMagnitude();\n      done = false;\n      continue;\n    }\n    done = true;\n  }\n};\n\nDataScale.prototype.convertValue = function (value) {\n  return this.containerHeight - ((value - this._start) * this.scale);\n};\n\nDataScale.prototype.screenToValue = function (pixels) {\n  return ((this.containerHeight - pixels) / this.scale) + this._start;\n};\n\nmodule.exports = DataScale;\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/component/DataScale.js","var util = require('../../util');\nvar DOMutil = require('../../DOMutil');\nvar Bars = require('./graph2d_types/bar');\nvar Lines = require('./graph2d_types/line');\nvar Points = require('./graph2d_types/points');\n\n/**\n * /**\n * @param {object} group            | the object of the group from the dataset\n * @param {string} groupId          | ID of the group\n * @param {object} options          | the default options\n * @param {array} groupsUsingDefaultStyles  | this array has one entree.\n *                                            It is passed as an array so it is passed by reference.\n *                                            It enumerates through the default styles\n * @constructor\n */\nfunction GraphGroup(group, groupId, options, groupsUsingDefaultStyles) {\n  this.id = groupId;\n  var fields = ['sampling', 'style', 'sort', 'yAxisOrientation', 'barChart', 'drawPoints', 'shaded', 'interpolation', 'zIndex','excludeFromStacking', 'excludeFromLegend'];\n  this.options = util.selectiveBridgeObject(fields, options);\n  this.usingDefaultStyle = group.className === undefined;\n  this.groupsUsingDefaultStyles = groupsUsingDefaultStyles;\n  this.zeroPosition = 0;\n  this.update(group);\n  if (this.usingDefaultStyle == true) {\n    this.groupsUsingDefaultStyles[0] += 1;\n  }\n  this.itemsData = [];\n  this.visible = group.visible === undefined ? true : group.visible;\n}\n\n/**\n * this loads a reference to all items in this group into this group.\n * @param {array} items\n */\nGraphGroup.prototype.setItems = function (items) {\n  if (items != null) {\n    this.itemsData = items;\n    if (this.options.sort == true) {\n      util.insertSort(this.itemsData,function (a, b) {\n        return a.x > b.x ? 1 : -1;\n      });\n    }\n  }\n  else {\n    this.itemsData = [];\n  }\n};\n\nGraphGroup.prototype.getItems = function () {\n  return this.itemsData;\n}\n\n/**\n * this is used for barcharts and shading, this way, we only have to calculate it once.\n * @param pos\n */\nGraphGroup.prototype.setZeroPosition = function (pos) {\n  this.zeroPosition = pos;\n};\n\n/**\n * set the options of the graph group over the default options.\n * @param options\n */\nGraphGroup.prototype.setOptions = function (options) {\n  if (options !== undefined) {\n    var fields = ['sampling', 'style', 'sort', 'yAxisOrientation', 'barChart', 'zIndex','excludeFromStacking', 'excludeFromLegend'];\n    util.selectiveDeepExtend(fields, this.options, options);\n\n    // if the group's drawPoints is a function delegate the callback to the onRender property\n    if (typeof options.drawPoints == 'function') {\n      options.drawPoints = {\n        onRender: options.drawPoints\n      }\n    }\n\n    util.mergeOptions(this.options, options, 'interpolation');\n    util.mergeOptions(this.options, options, 'drawPoints');\n    util.mergeOptions(this.options, options, 'shaded');\n\n    if (options.interpolation) {\n      if (typeof options.interpolation == 'object') {\n        if (options.interpolation.parametrization) {\n          if (options.interpolation.parametrization == 'uniform') {\n            this.options.interpolation.alpha = 0;\n          }\n          else if (options.interpolation.parametrization == 'chordal') {\n            this.options.interpolation.alpha = 1.0;\n          }\n          else {\n            this.options.interpolation.parametrization = 'centripetal';\n            this.options.interpolation.alpha = 0.5;\n          }\n        }\n      }\n    }\n  }\n};\n\n\n/**\n * this updates the current group class with the latest group dataset entree, used in _updateGroup in linegraph\n * @param group\n */\nGraphGroup.prototype.update = function (group) {\n  this.group = group;\n  this.content = group.content || 'graph';\n  this.className = group.className || this.className || 'vis-graph-group' + this.groupsUsingDefaultStyles[0] % 10;\n  this.visible = group.visible === undefined ? true : group.visible;\n  this.style = group.style;\n  this.setOptions(group.options);\n};\n\n/**\n * return the legend entree for this group.\n *\n * @param iconWidth\n * @param iconHeight\n * @returns {{icon: HTMLElement, label: (group.content|*|string), orientation: (.options.yAxisOrientation|*)}}\n */\nGraphGroup.prototype.getLegend = function (iconWidth, iconHeight, framework, x, y) {\n  if (framework == undefined || framework == null) {\n    var svg = document.createElementNS('http://www.w3.org/2000/svg', \"svg\");\n    framework = {svg: svg, svgElements:{}, options: this.options, groups: [this]}\n  }\n  if (x == undefined || x == null){\n    x = 0;\n  }\n  if (y == undefined || y == null){\n    y = 0.5 * iconHeight;\n  }\n  switch (this.options.style){\n    case \"line\":\n      Lines.drawIcon(this, x, y, iconWidth, iconHeight, framework);\n      break;\n    case \"points\": //explicit no break\n    case \"point\":\n      Points.drawIcon(this, x, y, iconWidth, iconHeight, framework);\n      break;\n    case \"bar\":\n      Bars.drawIcon(this, x, y, iconWidth, iconHeight, framework);\n      break;\n  }\n  return {icon: framework.svg, label: this.content, orientation: this.options.yAxisOrientation};\n};\n\nGraphGroup.prototype.getYRange = function (groupData) {\n  var yMin = groupData[0].y;\n  var yMax = groupData[0].y;\n  for (var j = 0; j < groupData.length; j++) {\n    yMin = yMin > groupData[j].y ? groupData[j].y : yMin;\n    yMax = yMax < groupData[j].y ? groupData[j].y : yMax;\n  }\n  return {min: yMin, max: yMax, yAxisOrientation: this.options.yAxisOrientation};\n};\n\nmodule.exports = GraphGroup;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/component/GraphGroup.js","var DOMutil = require('../../../DOMutil');\nvar Points = require('./points');\n\nfunction Bargraph(groupId, options) {\n}\n\nBargraph.drawIcon = function (group, x, y, iconWidth, iconHeight, framework) {\n  var fillHeight = iconHeight * 0.5;\n  var path, fillPath;\n\n  var outline = DOMutil.getSVGElement(\"rect\", framework.svgElements, framework.svg);\n  outline.setAttributeNS(null, \"x\", x);\n  outline.setAttributeNS(null, \"y\", y - fillHeight);\n  outline.setAttributeNS(null, \"width\", iconWidth);\n  outline.setAttributeNS(null, \"height\", 2 * fillHeight);\n  outline.setAttributeNS(null, \"class\", \"vis-outline\");\n\n  var barWidth = Math.round(0.3 * iconWidth);\n  var originalWidth = group.options.barChart.width;\n  var scale = originalWidth / barWidth;\n  var bar1Height = Math.round(0.4 * iconHeight);\n  var bar2Height = Math.round(0.75 * iconHeight);\n\n  var offset = Math.round((iconWidth - (2 * barWidth)) / 3);\n\n  DOMutil.drawBar(x + 0.5 * barWidth + offset, y + fillHeight - bar1Height - 1, barWidth, bar1Height, group.className + ' vis-bar', framework.svgElements, framework.svg, group.style);\n  DOMutil.drawBar(x + 1.5 * barWidth + offset + 2, y + fillHeight - bar2Height - 1, barWidth, bar2Height, group.className + ' vis-bar', framework.svgElements, framework.svg, group.style);\n\n  if (group.options.drawPoints.enabled == true) {\n    var groupTemplate = {\n      style: group.options.drawPoints.style,\n      styles: group.options.drawPoints.styles,\n      size: (group.options.drawPoints.size / scale),\n      className: group.className\n    };\n    DOMutil.drawPoint(x + 0.5 * barWidth + offset, y + fillHeight - bar1Height - 1, groupTemplate, framework.svgElements, framework.svg);\n    DOMutil.drawPoint(x + 1.5 * barWidth + offset + 2, y + fillHeight - bar2Height - 1, groupTemplate, framework.svgElements, framework.svg);\n  }\n\n}\n\n/**\n * draw a bar graph\n *\n * @param groupIds\n * @param processedGroupData\n */\nBargraph.draw = function (groupIds, processedGroupData, framework) {\n  var combinedData = [];\n  var intersections = {};\n  var coreDistance;\n  var key, drawData;\n  var group;\n  var i, j;\n  var barPoints = 0;\n\n  // combine all barchart data\n  for (i = 0; i < groupIds.length; i++) {\n    group = framework.groups[groupIds[i]];\n    if (group.options.style === 'bar') {\n      if (group.visible === true && (framework.options.groups.visibility[groupIds[i]] === undefined || framework.options.groups.visibility[groupIds[i]] === true)) {\n        for (j = 0; j < processedGroupData[groupIds[i]].length; j++) {\n          combinedData.push({\n            screen_x: processedGroupData[groupIds[i]][j].screen_x,\n            screen_y: processedGroupData[groupIds[i]][j].screen_y,\n            x: processedGroupData[groupIds[i]][j].x,\n            y: processedGroupData[groupIds[i]][j].y,\n            groupId: groupIds[i],\n            label: processedGroupData[groupIds[i]][j].label\n          });\n          barPoints += 1;\n        }\n      }\n    }\n  }\n\n  if (barPoints === 0) {\n    return;\n  }\n\n  // sort by time and by group\n  combinedData.sort(function (a, b) {\n    if (a.screen_x === b.screen_x) {\n      return a.groupId < b.groupId ? -1 : 1;\n    }\n    else {\n      return a.screen_x - b.screen_x;\n    }\n  });\n\n  // get intersections\n  Bargraph._getDataIntersections(intersections, combinedData);\n\n  // plot barchart\n  for (i = 0; i < combinedData.length; i++) {\n    group = framework.groups[combinedData[i].groupId];\n    var minWidth = group.options.barChart.minWidth != undefined ? group.options.barChart.minWidth : 0.1 * group.options.barChart.width;\n\n    key = combinedData[i].screen_x;\n    var heightOffset = 0;\n    if (intersections[key] === undefined) {\n      if (i + 1 < combinedData.length) {\n        coreDistance = Math.abs(combinedData[i + 1].screen_x - key);\n      }\n      drawData = Bargraph._getSafeDrawData(coreDistance, group, minWidth);\n    }\n    else {\n      var nextKey = i + (intersections[key].amount - intersections[key].resolved);\n      var prevKey = i - (intersections[key].resolved + 1);\n      if (nextKey < combinedData.length) {\n        coreDistance = Math.abs(combinedData[nextKey].screen_x - key);\n      }\n      drawData = Bargraph._getSafeDrawData(coreDistance, group, minWidth);\n      intersections[key].resolved += 1;\n\n      if (group.options.stack === true && group.options.excludeFromStacking !== true) {\n        if (combinedData[i].screen_y < group.zeroPosition) {\n          heightOffset = intersections[key].accumulatedNegative;\n          intersections[key].accumulatedNegative += group.zeroPosition - combinedData[i].screen_y;\n        }\n        else {\n          heightOffset = intersections[key].accumulatedPositive;\n          intersections[key].accumulatedPositive += group.zeroPosition - combinedData[i].screen_y;\n        }\n      }\n      else if (group.options.barChart.sideBySide === true) {\n        drawData.width = drawData.width / intersections[key].amount;\n        drawData.offset += (intersections[key].resolved) * drawData.width - (0.5 * drawData.width * (intersections[key].amount + 1));\n      }\n    }\n    DOMutil.drawBar(combinedData[i].screen_x + drawData.offset, combinedData[i].screen_y - heightOffset, drawData.width, group.zeroPosition - combinedData[i].screen_y, group.className + ' vis-bar', framework.svgElements, framework.svg, group.style);\n    // draw points\n    if (group.options.drawPoints.enabled === true) {\n      let pointData = {\n        screen_x: combinedData[i].screen_x,\n        screen_y: combinedData[i].screen_y - heightOffset,\n        x: combinedData[i].x,\n        y: combinedData[i].y,\n        groupId: combinedData[i].groupId,\n        label: combinedData[i].label\n      };\n      Points.draw([pointData], group, framework, drawData.offset);\n      //DOMutil.drawPoint(combinedData[i].x + drawData.offset, combinedData[i].y, group, framework.svgElements, framework.svg);\n    }\n  }\n};\n\n\n/**\n * Fill the intersections object with counters of how many datapoints share the same x coordinates\n * @param intersections\n * @param combinedData\n * @private\n */\nBargraph._getDataIntersections = function (intersections, combinedData) {\n  // get intersections\n  var coreDistance;\n  for (var i = 0; i < combinedData.length; i++) {\n    if (i + 1 < combinedData.length) {\n      coreDistance = Math.abs(combinedData[i + 1].screen_x - combinedData[i].screen_x);\n    }\n    if (i > 0) {\n      coreDistance = Math.min(coreDistance, Math.abs(combinedData[i - 1].screen_x - combinedData[i].screen_x));\n    }\n    if (coreDistance === 0) {\n      if (intersections[combinedData[i].screen_x] === undefined) {\n        intersections[combinedData[i].screen_x] = {\n          amount: 0,\n          resolved: 0,\n          accumulatedPositive: 0,\n          accumulatedNegative: 0\n        };\n      }\n      intersections[combinedData[i].screen_x].amount += 1;\n    }\n  }\n};\n\n\n/**\n * Get the width and offset for bargraphs based on the coredistance between datapoints\n *\n * @param coreDistance\n * @param group\n * @param minWidth\n * @returns {{width: Number, offset: Number}}\n * @private\n */\nBargraph._getSafeDrawData = function (coreDistance, group, minWidth) {\n  var width, offset;\n  if (coreDistance < group.options.barChart.width && coreDistance > 0) {\n    width = coreDistance < minWidth ? minWidth : coreDistance\n\n    offset = 0; // recalculate offset with the new width;\n    if (group.options.barChart.align === 'left') {\n      offset -= 0.5 * coreDistance;\n    }\n    else if (group.options.barChart.align === 'right') {\n      offset += 0.5 * coreDistance;\n    }\n  }\n  else {\n    // default settings\n    width = group.options.barChart.width;\n    offset = 0;\n    if (group.options.barChart.align === 'left') {\n      offset -= 0.5 * group.options.barChart.width;\n    }\n    else if (group.options.barChart.align === 'right') {\n      offset += 0.5 * group.options.barChart.width;\n    }\n  }\n\n  return {width: width, offset: offset};\n};\n\nBargraph.getStackedYRange = function (combinedData, groupRanges, groupIds, groupLabel, orientation) {\n  if (combinedData.length > 0) {\n    // sort by time and by group\n    combinedData.sort(function (a, b) {\n      if (a.screen_x === b.screen_x) {\n        return a.groupId < b.groupId ? -1 : 1;\n      }\n      else {\n        return a.screen_x - b.screen_x;\n      }\n    });\n    var intersections = {};\n\n    Bargraph._getDataIntersections(intersections, combinedData);\n    groupRanges[groupLabel] = Bargraph._getStackedYRange(intersections, combinedData);\n    groupRanges[groupLabel].yAxisOrientation = orientation;\n    groupIds.push(groupLabel);\n  }\n}\n\nBargraph._getStackedYRange = function (intersections, combinedData) {\n  var key;\n  var yMin = combinedData[0].screen_y;\n  var yMax = combinedData[0].screen_y;\n  for (var i = 0; i < combinedData.length; i++) {\n    key = combinedData[i].screen_x;\n    if (intersections[key] === undefined) {\n      yMin = yMin > combinedData[i].screen_y ? combinedData[i].screen_y : yMin;\n      yMax = yMax < combinedData[i].screen_y ? combinedData[i].screen_y : yMax;\n    }\n    else {\n      if (combinedData[i].screen_y < 0) {\n        intersections[key].accumulatedNegative += combinedData[i].screen_y;\n      }\n      else {\n        intersections[key].accumulatedPositive += combinedData[i].screen_y;\n      }\n    }\n  }\n  for (var xpos in intersections) {\n    if (intersections.hasOwnProperty(xpos)) {\n      yMin = yMin > intersections[xpos].accumulatedNegative ? intersections[xpos].accumulatedNegative : yMin;\n      yMin = yMin > intersections[xpos].accumulatedPositive ? intersections[xpos].accumulatedPositive : yMin;\n      yMax = yMax < intersections[xpos].accumulatedNegative ? intersections[xpos].accumulatedNegative : yMax;\n      yMax = yMax < intersections[xpos].accumulatedPositive ? intersections[xpos].accumulatedPositive : yMax;\n    }\n  }\n\n  return {min: yMin, max: yMax};\n};\n\nmodule.exports = Bargraph;\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/component/graph2d_types/bar.js","var DOMutil = require('../../../DOMutil');\n\nfunction Points(groupId, options) {\n}\n\n/**\n * draw the data points\n *\n * @param {Array} dataset\n * @param {Object} JSONcontainer\n * @param {Object} svg            | SVG DOM element\n * @param {GraphGroup} group\n * @param {Number} [offset]\n */\nPoints.draw = function (dataset, group, framework, offset) {\n  offset = offset || 0;\n  var callback = getCallback(framework, group);\n\n  for (var i = 0; i < dataset.length; i++) {\n    if (!callback) {\n      // draw the point the simple way.\n      DOMutil.drawPoint(dataset[i].screen_x + offset, dataset[i].screen_y, getGroupTemplate(group), framework.svgElements, framework.svg, dataset[i].label);\n    }\n    else {\n      var callbackResult = callback(dataset[i], group); // result might be true, false or an object\n      if (callbackResult === true || typeof callbackResult === 'object') {\n        DOMutil.drawPoint(dataset[i].screen_x + offset, dataset[i].screen_y, getGroupTemplate(group, callbackResult), framework.svgElements, framework.svg, dataset[i].label);\n      }\n    }\n  }\n};\n\nPoints.drawIcon = function (group, x, y, iconWidth, iconHeight, framework) {\n  var fillHeight = iconHeight * 0.5;\n  var path, fillPath;\n\n  var outline = DOMutil.getSVGElement(\"rect\", framework.svgElements, framework.svg);\n  outline.setAttributeNS(null, \"x\", x);\n  outline.setAttributeNS(null, \"y\", y - fillHeight);\n  outline.setAttributeNS(null, \"width\", iconWidth);\n  outline.setAttributeNS(null, \"height\", 2 * fillHeight);\n  outline.setAttributeNS(null, \"class\", \"vis-outline\");\n\n  //Don't call callback on icon\n  DOMutil.drawPoint(x + 0.5 * iconWidth, y, getGroupTemplate(group), framework.svgElements, framework.svg);\n};\n\nfunction getGroupTemplate(group, callbackResult) {\n  callbackResult = (typeof callbackResult === 'undefined') ? {} : callbackResult;\n  return {\n    style: callbackResult.style || group.options.drawPoints.style,\n    styles: callbackResult.styles || group.options.drawPoints.styles,\n    size: callbackResult.size || group.options.drawPoints.size,\n    className: callbackResult.className || group.className\n  };\n}\n\nfunction getCallback(framework, group) {\n  var callback = undefined;\n  // check for the graph2d onRender\n  if (framework.options && framework.options.drawPoints && framework.options.drawPoints.onRender && typeof framework.options.drawPoints.onRender == 'function') {\n    callback = framework.options.drawPoints.onRender;\n  }\n\n  // override it with the group onRender if defined\n  if (group.group.options && group.group.options.drawPoints && group.group.options.drawPoints.onRender && typeof group.group.options.drawPoints.onRender == 'function') {\n    callback = group.group.options.drawPoints.onRender;\n  }\n  return callback;\n}\n\n\nmodule.exports = Points;\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/component/graph2d_types/points.js","var DOMutil = require('../../../DOMutil');\n\nfunction Line(groupId, options) {\n}\n\nLine.calcPath = function (dataset, group) {\n    if (dataset != null) {\n        if (dataset.length > 0) {\n            var d = [];\n\n            // construct path from dataset\n            if (group.options.interpolation.enabled == true) {\n                d = Line._catmullRom(dataset, group);\n            }\n            else {\n                d = Line._linear(dataset);\n            }\n            return d;\n        }\n    }\n}\n\nLine.drawIcon = function (group, x, y, iconWidth, iconHeight, framework) {\n    var fillHeight = iconHeight * 0.5;\n    var path, fillPath;\n\n    var outline = DOMutil.getSVGElement(\"rect\", framework.svgElements, framework.svg);\n    outline.setAttributeNS(null, \"x\", x);\n    outline.setAttributeNS(null, \"y\", y - fillHeight);\n    outline.setAttributeNS(null, \"width\", iconWidth);\n    outline.setAttributeNS(null, \"height\", 2 * fillHeight);\n    outline.setAttributeNS(null, \"class\", \"vis-outline\");\n\n    path = DOMutil.getSVGElement(\"path\", framework.svgElements, framework.svg);\n    path.setAttributeNS(null, \"class\", group.className);\n    if (group.style !== undefined) {\n        path.setAttributeNS(null, \"style\", group.style);\n    }\n\n    path.setAttributeNS(null, \"d\", \"M\" + x + \",\" + y + \" L\" + (x + iconWidth) + \",\" + y + \"\");\n    if (group.options.shaded.enabled == true) {\n        fillPath = DOMutil.getSVGElement(\"path\", framework.svgElements, framework.svg);\n        if (group.options.shaded.orientation == 'top') {\n            fillPath.setAttributeNS(null, \"d\", \"M\" + x + \", \" + (y - fillHeight) +\n              \"L\" + x + \",\" + y + \" L\" + (x + iconWidth) + \",\" + y + \" L\" + (x + iconWidth) + \",\" + (y - fillHeight));\n        }\n        else {\n            fillPath.setAttributeNS(null, \"d\", \"M\" + x + \",\" + y + \" \" +\n              \"L\" + x + \",\" + (y + fillHeight) + \" \" +\n              \"L\" + (x + iconWidth) + \",\" + (y + fillHeight) +\n              \"L\" + (x + iconWidth) + \",\" + y);\n        }\n        fillPath.setAttributeNS(null, \"class\", group.className + \" vis-icon-fill\");\n        if (group.options.shaded.style !== undefined && group.options.shaded.style !== \"\") {\n            fillPath.setAttributeNS(null, \"style\", group.options.shaded.style);\n        }\n    }\n\n    if (group.options.drawPoints.enabled == true) {\n        var groupTemplate = {\n            style: group.options.drawPoints.style,\n            styles: group.options.drawPoints.styles,\n            size: group.options.drawPoints.size,\n            className: group.className\n        };\n        DOMutil.drawPoint(x + 0.5 * iconWidth, y, groupTemplate, framework.svgElements, framework.svg);\n    }\n}\n\nLine.drawShading = function (pathArray, group, subPathArray, framework) {\n    // append shading to the path\n    if (group.options.shaded.enabled == true) {\n        var svgHeight = Number(framework.svg.style.height.replace('px',''));\n        var fillPath = DOMutil.getSVGElement('path', framework.svgElements, framework.svg);\n        var type = \"L\";\n        if (group.options.interpolation.enabled == true){\n            type = \"C\";\n        }\n        var dFill;\n        var zero = 0;\n        if (group.options.shaded.orientation == 'top') {\n            zero = 0;\n        }\n        else if (group.options.shaded.orientation == 'bottom') {\n            zero = svgHeight;\n        }\n        else {\n            zero = Math.min(Math.max(0, group.zeroPosition), svgHeight);\n        }\n        if (group.options.shaded.orientation == 'group' && (subPathArray != null && subPathArray != undefined)) {\n            dFill = 'M' + pathArray[0][0]+ \",\"+pathArray[0][1] + \" \" +\n                    this.serializePath(pathArray,type,false) +\n                    ' L'+ subPathArray[subPathArray.length-1][0]+ \",\" + subPathArray[subPathArray.length-1][1] + \" \" +\n                    this.serializePath(subPathArray,type,true) +\n                    subPathArray[0][0]+ \",\"+subPathArray[0][1] + \" Z\";\n        }\n        else {\n            dFill = 'M' + pathArray[0][0]+ \",\"+pathArray[0][1] + \" \" +\n                    this.serializePath(pathArray,type,false) +\n                    ' V' + zero + ' H'+ pathArray[0][0] + \" Z\";\n        }\n\n        fillPath.setAttributeNS(null, 'class', group.className + ' vis-fill');\n        if (group.options.shaded.style !== undefined) {\n            fillPath.setAttributeNS(null, 'style', group.options.shaded.style);\n        }\n        fillPath.setAttributeNS(null, 'd', dFill);\n    }\n}\n\n/**\n * draw a line graph\n *\n * @param dataset\n * @param group\n */\nLine.draw = function (pathArray, group, framework) {\n    if (pathArray != null && pathArray != undefined) {\n        var path = DOMutil.getSVGElement('path', framework.svgElements, framework.svg);\n        path.setAttributeNS(null, \"class\", group.className);\n        if (group.style !== undefined) {\n            path.setAttributeNS(null, \"style\", group.style);\n        }\n\n        var type = \"L\";\n        if (group.options.interpolation.enabled == true){\n            type = \"C\";\n        }\n        // copy properties to path for drawing.\n        path.setAttributeNS(null, 'd', 'M' + pathArray[0][0]+ \",\"+pathArray[0][1] + \" \" + this.serializePath(pathArray,type,false));\n    }\n};\n\nLine.serializePath = function(pathArray,type,inverse){\n    if (pathArray.length < 2){\n        //Too little data to create a path.\n        return \"\";\n    }\n    var d = type;\n    if (inverse){\n        for (var i = pathArray.length-2; i > 0; i--){\n            d += pathArray[i][0] + \",\" + pathArray[i][1] + \" \";\n        }\n    }\n    else {\n        for (var i = 1; i < pathArray.length; i++){\n            d += pathArray[i][0] + \",\" + pathArray[i][1] + \" \";\n        }\n    }\n    return d;\n}\n\n/**\n * This uses an uniform parametrization of the interpolation algorithm:\n * 'On the Parameterization of Catmull-Rom Curves' by Cem Yuksel et al.\n * @param data\n * @returns {string}\n * @private\n */\nLine._catmullRomUniform = function (data) {\n    // catmull rom\n    var p0, p1, p2, p3, bp1, bp2;\n    var d = [];\n    d.push( [ Math.round(data[0].screen_x) , Math.round(data[0].screen_y) ]);\n    var normalization = 1 / 6;\n    var length = data.length;\n    for (var i = 0; i < length - 1; i++) {\n\n        p0 = (i == 0) ? data[0] : data[i - 1];\n        p1 = data[i];\n        p2 = data[i + 1];\n        p3 = (i + 2 < length) ? data[i + 2] : p2;\n\n\n        // Catmull-Rom to Cubic Bezier conversion matrix\n        //    0       1       0       0\n        //  -1/6      1      1/6      0\n        //    0      1/6      1     -1/6\n        //    0       0       1       0\n\n        //    bp0 = { x: p1.x,                               y: p1.y };\n        bp1 = {\n            screen_x: ((-p0.screen_x + 6 * p1.screen_x + p2.screen_x) * normalization),\n            screen_y: ((-p0.screen_y + 6 * p1.screen_y + p2.screen_y) * normalization)\n        };\n        bp2 = {\n            screen_x: (( p1.screen_x + 6 * p2.screen_x - p3.screen_x) * normalization),\n            screen_y: (( p1.screen_y + 6 * p2.screen_y - p3.screen_y) * normalization)\n        };\n        //    bp0 = { x: p2.x,                               y: p2.y };\n\n        d.push( [ bp1.screen_x , bp1.screen_y ]);\n        d.push( [ bp2.screen_x , bp2.screen_y ]);\n        d.push( [ p2.screen_x  , p2.screen_y  ]);\n    }\n\n    return d;\n};\n\n/**\n * This uses either the chordal or centripetal parameterization of the catmull-rom algorithm.\n * By default, the centripetal parameterization is used because this gives the nicest results.\n * These parameterizations are relatively heavy because the distance between 4 points have to be calculated.\n *\n * One optimization can be used to reuse distances since this is a sliding window approach.\n * @param data\n * @param group\n * @returns {string}\n * @private\n */\nLine._catmullRom = function (data, group) {\n    var alpha = group.options.interpolation.alpha;\n    if (alpha == 0 || alpha === undefined) {\n        return this._catmullRomUniform(data);\n    }\n    else {\n        var p0, p1, p2, p3, bp1, bp2, d1, d2, d3, A, B, N, M;\n        var d3powA, d2powA, d3pow2A, d2pow2A, d1pow2A, d1powA;\n        var d = [];\n        d.push( [ Math.round(data[0].screen_x) , Math.round(data[0].screen_y) ]);\n        var length = data.length;\n        for (var i = 0; i < length - 1; i++) {\n\n            p0 = (i == 0) ? data[0] : data[i - 1];\n            p1 = data[i];\n            p2 = data[i + 1];\n            p3 = (i + 2 < length) ? data[i + 2] : p2;\n\n            d1 = Math.sqrt(Math.pow(p0.screen_x - p1.screen_x, 2) + Math.pow(p0.screen_y - p1.screen_y, 2));\n            d2 = Math.sqrt(Math.pow(p1.screen_x - p2.screen_x, 2) + Math.pow(p1.screen_y - p2.screen_y, 2));\n            d3 = Math.sqrt(Math.pow(p2.screen_x - p3.screen_x, 2) + Math.pow(p2.screen_y - p3.screen_y, 2));\n\n            // Catmull-Rom to Cubic Bezier conversion matrix\n\n            // A = 2d1^2a + 3d1^a * d2^a + d3^2a\n            // B = 2d3^2a + 3d3^a * d2^a + d2^2a\n\n            // [   0             1            0          0          ]\n            // [   -d2^2a /N     A/N          d1^2a /N   0          ]\n            // [   0             d3^2a /M     B/M        -d2^2a /M  ]\n            // [   0             0            1          0          ]\n\n            d3powA = Math.pow(d3, alpha);\n            d3pow2A = Math.pow(d3, 2 * alpha);\n            d2powA = Math.pow(d2, alpha);\n            d2pow2A = Math.pow(d2, 2 * alpha);\n            d1powA = Math.pow(d1, alpha);\n            d1pow2A = Math.pow(d1, 2 * alpha);\n\n            A = 2 * d1pow2A + 3 * d1powA * d2powA + d2pow2A;\n            B = 2 * d3pow2A + 3 * d3powA * d2powA + d2pow2A;\n            N = 3 * d1powA * (d1powA + d2powA);\n            if (N > 0) {\n                N = 1 / N;\n            }\n            M = 3 * d3powA * (d3powA + d2powA);\n            if (M > 0) {\n                M = 1 / M;\n            }\n\n            bp1 = {\n                screen_x: ((-d2pow2A * p0.screen_x + A * p1.screen_x + d1pow2A * p2.screen_x) * N),\n                screen_y: ((-d2pow2A * p0.screen_y + A * p1.screen_y + d1pow2A * p2.screen_y) * N)\n            };\n\n            bp2 = {\n                screen_x: (( d3pow2A * p1.screen_x + B * p2.screen_x - d2pow2A * p3.screen_x) * M),\n                screen_y: (( d3pow2A * p1.screen_y + B * p2.screen_y - d2pow2A * p3.screen_y) * M)\n            };\n\n            if (bp1.screen_x == 0 && bp1.screen_y == 0) {\n                bp1 = p1;\n            }\n            if (bp2.screen_x == 0 && bp2.screen_y == 0) {\n                bp2 = p2;\n            }\n            d.push( [ bp1.screen_x , bp1.screen_y ]);\n            d.push( [ bp2.screen_x , bp2.screen_y ]);\n            d.push( [ p2.screen_x  , p2.screen_y  ]);\n        }\n\n        return d;\n    }\n};\n\n/**\n * this generates the SVG path for a linear drawing between datapoints.\n * @param data\n * @returns {string}\n * @private\n */\nLine._linear = function (data) {\n    // linear\n    var d = [];\n    for (var i = 0; i < data.length; i++) {\n        d.push([ data[i].screen_x , data[i].screen_y ]);\n    }\n    return d;\n};\n\nmodule.exports = Line;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/component/graph2d_types/line.js","var util = require('../../util');\nvar DOMutil = require('../../DOMutil');\nvar Component = require('./Component');\n\n/**\n * Legend for Graph2d\n */\nfunction Legend(body, options, side, linegraphOptions) {\n  this.body = body;\n  this.defaultOptions = {\n    enabled: false,\n    icons: true,\n    iconSize: 20,\n    iconSpacing: 6,\n    left: {\n      visible: true,\n      position: 'top-left' // top/bottom - left,center,right\n    },\n    right: {\n      visible: true,\n      position: 'top-right' // top/bottom - left,center,right\n    }\n  }\n\n  this.side = side;\n  this.options = util.extend({},this.defaultOptions);\n  this.linegraphOptions = linegraphOptions;\n\n  this.svgElements = {};\n  this.dom = {};\n  this.groups = {};\n  this.amountOfGroups = 0;\n  this._create();\n  this.framework = {svg: this.svg, svgElements: this.svgElements, options: this.options, groups: this.groups};\n\n  this.setOptions(options);\n}\n\nLegend.prototype = new Component();\n\nLegend.prototype.clear = function() {\n  this.groups = {};\n  this.amountOfGroups = 0;\n};\n\nLegend.prototype.addGroup = function(label, graphOptions) {\n\n  // Include a group only if the group option 'excludeFromLegend: false' is not set.\n  if (graphOptions.options.excludeFromLegend != true) {\n    if (!this.groups.hasOwnProperty(label)) {\n      this.groups[label] = graphOptions;\n    }\n    this.amountOfGroups += 1;\n  }\n};\n\nLegend.prototype.updateGroup = function(label, graphOptions) {\n  this.groups[label] = graphOptions;\n};\n\nLegend.prototype.removeGroup = function(label) {\n  if (this.groups.hasOwnProperty(label)) {\n    delete this.groups[label];\n    this.amountOfGroups -= 1;\n  }\n};\n\nLegend.prototype._create = function() {\n  this.dom.frame = document.createElement('div');\n  this.dom.frame.className = 'vis-legend';\n  this.dom.frame.style.position = \"absolute\";\n  this.dom.frame.style.top = \"10px\";\n  this.dom.frame.style.display = \"block\";\n\n  this.dom.textArea = document.createElement('div');\n  this.dom.textArea.className = 'vis-legend-text';\n  this.dom.textArea.style.position = \"relative\";\n  this.dom.textArea.style.top = \"0px\";\n\n  this.svg = document.createElementNS('http://www.w3.org/2000/svg',\"svg\");\n  this.svg.style.position = 'absolute';\n  this.svg.style.top = 0 +'px';\n  this.svg.style.width = this.options.iconSize + 5 + 'px';\n  this.svg.style.height = '100%';\n\n  this.dom.frame.appendChild(this.svg);\n  this.dom.frame.appendChild(this.dom.textArea);\n};\n\n/**\n * Hide the component from the DOM\n */\nLegend.prototype.hide = function() {\n  // remove the frame containing the items\n  if (this.dom.frame.parentNode) {\n    this.dom.frame.parentNode.removeChild(this.dom.frame);\n  }\n};\n\n/**\n * Show the component in the DOM (when not already visible).\n * @return {Boolean} changed\n */\nLegend.prototype.show = function() {\n  // show frame containing the items\n  if (!this.dom.frame.parentNode) {\n    this.body.dom.center.appendChild(this.dom.frame);\n  }\n};\n\nLegend.prototype.setOptions = function(options) {\n  var fields = ['enabled','orientation','icons','left','right'];\n  util.selectiveDeepExtend(fields, this.options, options);\n};\n\nLegend.prototype.redraw = function() {\n  var activeGroups = 0;\n  var groupArray = Object.keys(this.groups);\n  groupArray.sort(function (a,b) {\n    return (a < b ? -1 : 1);\n  })\n\n  for (var i = 0; i < groupArray.length; i++) {\n    var groupId = groupArray[i];\n    if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) {\n      activeGroups++;\n    }\n  }\n\n  if (this.options[this.side].visible == false || this.amountOfGroups == 0 || this.options.enabled == false || activeGroups == 0) {\n    this.hide();\n  }\n  else {\n    this.show();\n    if (this.options[this.side].position == 'top-left' || this.options[this.side].position == 'bottom-left') {\n      this.dom.frame.style.left = '4px';\n      this.dom.frame.style.textAlign = \"left\";\n      this.dom.textArea.style.textAlign = \"left\";\n      this.dom.textArea.style.left = (this.options.iconSize + 15) + 'px';\n      this.dom.textArea.style.right = '';\n      this.svg.style.left = 0 +'px';\n      this.svg.style.right = '';\n    }\n    else {\n      this.dom.frame.style.right = '4px';\n      this.dom.frame.style.textAlign = \"right\";\n      this.dom.textArea.style.textAlign = \"right\";\n      this.dom.textArea.style.right = (this.options.iconSize + 15) + 'px';\n      this.dom.textArea.style.left = '';\n      this.svg.style.right = 0 +'px';\n      this.svg.style.left = '';\n    }\n\n    if (this.options[this.side].position == 'top-left' || this.options[this.side].position == 'top-right') {\n      this.dom.frame.style.top = 4 - Number(this.body.dom.center.style.top.replace(\"px\",\"\")) + 'px';\n      this.dom.frame.style.bottom = '';\n    }\n    else {\n      var scrollableHeight = this.body.domProps.center.height - this.body.domProps.centerContainer.height;\n      this.dom.frame.style.bottom = 4 + scrollableHeight + Number(this.body.dom.center.style.top.replace(\"px\",\"\")) + 'px';\n      this.dom.frame.style.top = '';\n    }\n\n    if (this.options.icons == false) {\n      this.dom.frame.style.width = this.dom.textArea.offsetWidth + 10 + 'px';\n      this.dom.textArea.style.right = '';\n      this.dom.textArea.style.left = '';\n      this.svg.style.width = '0px';\n    }\n    else {\n      this.dom.frame.style.width = this.options.iconSize + 15 + this.dom.textArea.offsetWidth + 10 + 'px'\n      this.drawLegendIcons();\n    }\n\n    var content = '';\n    for (var i = 0; i < groupArray.length; i++) {\n      var groupId = groupArray[i];\n      if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) {\n        content += this.groups[groupId].content + '<br />';\n      }\n    }\n    this.dom.textArea.innerHTML = content;\n    this.dom.textArea.style.lineHeight = ((0.75 * this.options.iconSize) + this.options.iconSpacing) + 'px';\n  }\n};\n\nLegend.prototype.drawLegendIcons = function() {\n  if (this.dom.frame.parentNode) {\n    var groupArray = Object.keys(this.groups);\n    groupArray.sort(function (a,b) {\n      return (a < b ? -1 : 1);\n    });\n\n    // this resets the elements so the order is maintained\n    DOMutil.resetElements(this.svgElements);\n\n    var padding = window.getComputedStyle(this.dom.frame).paddingTop;\n    var iconOffset = Number(padding.replace('px',''));\n    var x = iconOffset;\n    var iconWidth = this.options.iconSize;\n    var iconHeight = 0.75 * this.options.iconSize;\n    var y = iconOffset + 0.5 * iconHeight + 3;\n\n    this.svg.style.width = iconWidth + 5 + iconOffset + 'px';\n\n    for (var i = 0; i < groupArray.length; i++) {\n      var groupId = groupArray[i];\n      if (this.groups[groupId].visible == true && (this.linegraphOptions.visibility[groupId] === undefined || this.linegraphOptions.visibility[groupId] == true)) {\n        this.groups[groupId].getLegend(iconWidth, iconHeight, this.framework, x, y);\n        y += iconHeight + this.options.iconSpacing;\n      }\n    }\n  }\n};\n\nmodule.exports = Legend;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/component/Legend.js","/**\n * This object contains all possible options. It will check if the types are correct, if required if the option is one\n * of the allowed values.\n *\n * __any__ means that the name of the property does not matter.\n * __type__ is a required field for all objects and contains the allowed types of all objects\n */\nlet string = 'string';\nlet bool = 'boolean';\nlet number = 'number';\nlet array = 'array';\nlet date = 'date';\nlet object = 'object'; // should only be in a __type__ property\nlet dom = 'dom';\nlet moment = 'moment';\nlet any = 'any';\n\n\nlet allOptions = {\n  configure: {\n    enabled: {'boolean': bool},\n    filter: {'boolean': bool,'function': 'function'},\n    container: {dom},\n    __type__: {object,'boolean': bool,'function': 'function'}\n  },\n\n  //globals :\n  yAxisOrientation: {string:['left','right']},\n  defaultGroup: {string},\n  sort: {'boolean': bool},\n  sampling: {'boolean': bool},\n  stack:{'boolean': bool},\n  graphHeight: {string, number},\n  shaded: {\n    enabled: {'boolean': bool},\n    orientation: {string:['bottom','top','zero','group']}, // top, bottom, zero, group\n    groupId: {object},\n    __type__: {'boolean': bool,object}\n  },\n  style: {string:['line','bar','points']}, // line, bar\n  barChart: {\n    width: {number},\n    minWidth: {number},\n    sideBySide: {'boolean': bool},\n    align: {string:['left','center','right']},\n    __type__: {object}\n  },\n  interpolation: {\n    enabled: {'boolean': bool},\n    parametrization: {string:['centripetal', 'chordal','uniform']}, // uniform (alpha = 0.0), chordal (alpha = 1.0), centripetal (alpha = 0.5)\n    alpha: {number},\n    __type__: {object,'boolean': bool}\n  },\n  drawPoints: {\n    enabled: {'boolean': bool},\n    onRender: { 'function': 'function' },\n    size: {number},\n    style: {string:['square','circle']}, // square, circle\n    __type__: {object,'boolean': bool,'function': 'function'}\n  },\n  dataAxis: {\n    showMinorLabels: {'boolean': bool},\n    showMajorLabels: {'boolean': bool},\n    icons: {'boolean': bool},\n    width: {string, number},\n    visible: {'boolean': bool},\n    alignZeros: {'boolean': bool},\n    left:{\n      range: {min:{number},max:{number},__type__: {object}},\n      format: {'function': 'function'},\n      title: {text:{string,number},style:{string},__type__: {object}},\n      __type__: {object}\n    },\n    right:{\n      range: {min:{number},max:{number},__type__: {object}},\n      format: {'function': 'function'},\n      title: {text:{string,number},style:{string},__type__: {object}},\n      __type__: {object}\n    },\n    __type__: {object}\n  },\n  legend: {\n    enabled: {'boolean': bool},\n    icons: {'boolean': bool},\n    left: {\n      visible: {'boolean': bool},\n      position: {string:['top-right','bottom-right','top-left','bottom-left']},\n      __type__: {object}\n    },\n    right: {\n      visible: {'boolean': bool},\n      position: {string:['top-right','bottom-right','top-left','bottom-left']},\n      __type__: {object}\n    },\n    __type__: {object,'boolean': bool}\n  },\n  groups: {\n    visibility: {any},\n    __type__: {object}\n  },\n\n  autoResize: {'boolean': bool},\n  throttleRedraw: {number}, // TODO: DEPRICATED see https://github.com/almende/vis/issues/2511\n  clickToUse: {'boolean': bool},\n  end: {number, date, string, moment},\n  format: {\n    minorLabels: {\n      millisecond: {string,'undefined': 'undefined'},\n      second: {string,'undefined': 'undefined'},\n      minute: {string,'undefined': 'undefined'},\n      hour: {string,'undefined': 'undefined'},\n      weekday: {string,'undefined': 'undefined'},\n      day: {string,'undefined': 'undefined'},\n      month: {string,'undefined': 'undefined'},\n      year: {string,'undefined': 'undefined'},\n      __type__: {object}\n    },\n    majorLabels: {\n      millisecond: {string,'undefined': 'undefined'},\n      second: {string,'undefined': 'undefined'},\n      minute: {string,'undefined': 'undefined'},\n      hour: {string,'undefined': 'undefined'},\n      weekday: {string,'undefined': 'undefined'},\n      day: {string,'undefined': 'undefined'},\n      month: {string,'undefined': 'undefined'},\n      year: {string,'undefined': 'undefined'},\n      __type__: {object}\n    },\n    __type__: {object}\n  },\n  moment: {'function': 'function'},\n  height: {string, number},\n  hiddenDates: {\n    start: {date, number, string, moment},\n    end: {date, number, string, moment},\n    repeat: {string},\n    __type__: {object, array}\n  },\n  locale:{string},\n  locales:{\n    __any__: {any},\n    __type__: {object}\n  },\n  max: {date, number, string, moment},\n  maxHeight: {number, string},\n  maxMinorChars: {number},\n  min: {date, number, string, moment},\n  minHeight: {number, string},\n  moveable: {'boolean': bool},\n  multiselect: {'boolean': bool},\n  orientation: {string},\n  showCurrentTime: {'boolean': bool},\n  showMajorLabels: {'boolean': bool},\n  showMinorLabels: {'boolean': bool},\n  start: {date, number, string, moment},\n  timeAxis: {\n    scale: {string,'undefined': 'undefined'},\n    step: {number,'undefined': 'undefined'},\n    __type__: {object}\n  },\n  width: {string, number},\n  zoomable: {'boolean': bool},\n  zoomKey: {string: ['ctrlKey', 'altKey', 'metaKey', '']},\n  zoomMax: {number},\n  zoomMin: {number},\n  zIndex: {number},\n  __type__: {object}\n};\n\nlet configureOptions = {\n  global: {\n    //yAxisOrientation: ['left','right'], // TDOO: enable as soon as Grahp2d doesn't crash when changing this on the fly\n    sort: true,\n    sampling: true,\n    stack:false,\n    shaded: {\n      enabled: false,\n      orientation: ['zero','top','bottom','group'] // zero, top, bottom\n    },\n    style: ['line','bar','points'], // line, bar\n    barChart: {\n      width: [50,5,100,5],\n      minWidth: [50,5,100,5],\n      sideBySide: false,\n      align: ['left','center','right'] // left, center, right\n    },\n    interpolation: {\n      enabled: true,\n      parametrization: ['centripetal','chordal','uniform'] // uniform (alpha = 0.0), chordal (alpha = 1.0), centripetal (alpha = 0.5)\n    },\n    drawPoints: {\n      enabled: true,\n      size: [6,2,30,1],\n      style: ['square', 'circle'] // square, circle\n    },\n    dataAxis: {\n      showMinorLabels: true,\n      showMajorLabels: true,\n      icons: false,\n      width: [40,0,200,1],\n      visible: true,\n      alignZeros: true,\n      left:{\n        //range: {min:'undefined': 'undefined'ined,max:'undefined': 'undefined'ined},\n        //format: function (value) {return value;},\n        title: {text:'',style:''}\n      },\n      right:{\n        //range: {min:'undefined': 'undefined'ined,max:'undefined': 'undefined'ined},\n        //format: function (value) {return value;},\n        title: {text:'',style:''}\n      }\n    },\n    legend: {\n      enabled: false,\n      icons: true,\n      left: {\n        visible: true,\n        position: ['top-right','bottom-right','top-left','bottom-left'] // top/bottom - left,right\n      },\n      right: {\n        visible: true,\n        position: ['top-right','bottom-right','top-left','bottom-left'] // top/bottom - left,right\n      }\n    },\n\n    autoResize: true,\n    clickToUse: false,\n    end: '',\n    format: {\n      minorLabels: {\n        millisecond:'SSS',\n        second:     's',\n        minute:     'HH:mm',\n        hour:       'HH:mm',\n        weekday:    'ddd D',\n        day:        'D',\n        month:      'MMM',\n        year:       'YYYY'\n      },\n      majorLabels: {\n        millisecond:'HH:mm:ss',\n        second:     'D MMMM HH:mm',\n        minute:     'ddd D MMMM',\n        hour:       'ddd D MMMM',\n        weekday:    'MMMM YYYY',\n        day:        'MMMM YYYY',\n        month:      'YYYY',\n        year:       ''\n      }\n    },\n\n    height: '',\n    locale: '',\n    max: '',\n    maxHeight: '',\n    maxMinorChars: [7, 0, 20, 1],\n    min: '',\n    minHeight: '',\n    moveable:true,\n    orientation: ['both', 'bottom', 'top'],\n    showCurrentTime: false,\n    showMajorLabels: true,\n    showMinorLabels: true,\n    start: '',\n    width: '100%',\n    zoomable: true,\n    zoomKey: ['ctrlKey', 'altKey', 'metaKey', ''],\n    zoomMax: [315360000000000, 10, 315360000000000, 1],\n    zoomMin: [10, 10, 315360000000000, 1],\n    zIndex: 0\n  }\n};\n\nexport {allOptions, configureOptions};\n\n\n\n// WEBPACK FOOTER //\n// ./lib/timeline/optionsGraph2d.js","// utils\nexports.util = require('./lib/util');\nexports.DOMutil = require('./lib/DOMutil');\n\n// data\nexports.DataSet = require('./lib/DataSet');\nexports.DataView = require('./lib/DataView');\nexports.Queue = require('./lib/Queue');\n\n// Network\nexports.Network = require('./lib/network/Network');\nexports.network = {\n  Images: require('./lib/network/Images'),\n  dotparser: require('./lib/network/dotparser'),\n  gephiParser: require('./lib/network/gephiParser'),\n  allOptions: require('./lib/network/options')\n};\nexports.network.convertDot   = function (input) {return exports.network.dotparser.DOTToGraph(input)};\nexports.network.convertGephi = function (input,options) {return exports.network.gephiParser.parseGephi(input,options)};\n\n// bundled external libraries\nexports.moment = require('./lib/module/moment');\nexports.Hammer = require('./lib/module/hammer');\nexports.keycharm = require('keycharm');\n\n\n// WEBPACK FOOTER //\n// ./index-network.js","// Load custom shapes into CanvasRenderingContext2D\nrequire('./shapes');\n\nlet Emitter = require('emitter-component');\nlet util = require('../util');\nlet DataSet = require('../DataSet');\nlet DataView = require('../DataView');\nlet dotparser = require('./dotparser');\nlet gephiParser = require('./gephiParser');\nlet Activator = require('../shared/Activator');\nlet locales = require('./locales');\n\nimport  Images              from './Images';\nimport  Groups              from './modules/Groups';\nimport  NodesHandler        from './modules/NodesHandler';\nimport  EdgesHandler        from './modules/EdgesHandler';\nimport  PhysicsEngine       from './modules/PhysicsEngine';\nimport  ClusterEngine       from './modules/Clustering';\nimport  CanvasRenderer      from './modules/CanvasRenderer';\nimport  Canvas              from './modules/Canvas';\nimport  View                from './modules/View';\nimport  InteractionHandler  from './modules/InteractionHandler';\nimport  SelectionHandler    from \"./modules/SelectionHandler\";\nimport  LayoutEngine        from \"./modules/LayoutEngine\";\nimport  ManipulationSystem  from \"./modules/ManipulationSystem\";\nimport  Configurator        from \"./../shared/Configurator\";\nimport  Validator           from \"./../shared/Validator\";\nimport  {printStyle}        from \"./../shared/Validator\";\nimport  {allOptions, configureOptions} from './options.js';\nimport  KamadaKawai         from \"./modules/KamadaKawai.js\"\n\n\n/**\n * @constructor Network\n * Create a network visualization, displaying nodes and edges.\n *\n * @param {Element} container   The DOM element in which the Network will\n *                                  be created. Normally a div element.\n * @param {Object} data         An object containing parameters\n *                              {Array} nodes\n *                              {Array} edges\n * @param {Object} options      Options\n */\nfunction Network(container, data, options) {\n  if (!(this instanceof Network)) {\n    throw new SyntaxError('Constructor must be called with the new operator');\n  }\n\n  // set constant values\n  this.options = {};\n  this.defaultOptions = {\n    locale: 'en',\n    locales: locales,\n    clickToUse: false\n  };\n  util.extend(this.options, this.defaultOptions);\n\n  // containers for nodes and edges\n  this.body = {\n    container: container,\n    nodes: {},\n    nodeIndices: [],\n    edges: {},\n    edgeIndices: [],\n    emitter: {\n      on:   this.on.bind(this),\n      off:  this.off.bind(this),\n      emit: this.emit.bind(this),\n      once: this.once.bind(this)\n    },\n    eventListeners: {\n      onTap:        function() {},\n      onTouch:      function() {},\n      onDoubleTap:  function() {},\n      onHold:       function() {},\n      onDragStart:  function() {},\n      onDrag:       function() {},\n      onDragEnd:    function() {},\n      onMouseWheel: function() {},\n      onPinch:      function() {},\n      onMouseMove:  function() {},\n      onRelease:    function() {},\n      onContext:    function() {}\n    },\n    data: {\n      nodes: null,      // A DataSet or DataView\n      edges: null       // A DataSet or DataView\n    },\n    functions: {\n      createNode: function() {},\n      createEdge: function() {},\n      getPointer: function() {}\n    },\n    modules: {},\n    view: {\n      scale: 1,\n      translation: {x: 0, y: 0}\n    }\n  };\n\n\n\n  // bind the event listeners\n  this.bindEventListeners();\n\n  // setting up all modules\n  this.images              = new Images(() => this.body.emitter.emit(\"_requestRedraw\")); // object with images\n  this.groups              = new Groups(); // object with groups\n  this.canvas              = new Canvas(this.body);                         // DOM handler\n  this.selectionHandler    = new SelectionHandler(this.body, this.canvas);  // Selection handler\n  this.interactionHandler  = new InteractionHandler(this.body, this.canvas, this.selectionHandler);  // Interaction handler handles all the hammer bindings (that are bound by canvas), key\n  this.view                = new View(this.body, this.canvas);              // camera handler, does animations and zooms\n  this.renderer            = new CanvasRenderer(this.body, this.canvas);    // renderer, starts renderloop, has events that modules can hook into\n  this.physics             = new PhysicsEngine(this.body);                  // physics engine, does all the simulations\n  this.layoutEngine        = new LayoutEngine(this.body);                   // layout engine for inital layout and hierarchical layout\n  this.clustering          = new ClusterEngine(this.body);                  // clustering api\n  this.manipulation        = new ManipulationSystem(this.body, this.canvas, this.selectionHandler); // data manipulation system\n\n  this.nodesHandler        = new NodesHandler(this.body, this.images, this.groups, this.layoutEngine);   // Handle adding, deleting and updating of nodes as well as global options\n  this.edgesHandler        = new EdgesHandler(this.body, this.images, this.groups);   // Handle adding, deleting and updating of edges as well as global options\n\n  this.body.modules[\"kamadaKawai\"] = new KamadaKawai(this.body,150,0.05);   // Layouting algorithm.\n  this.body.modules[\"clustering\"] = this.clustering;\n\n  // create the DOM elements\n  this.canvas._create();\n\n  // apply options\n  this.setOptions(options);\n\n  // load data (the disable start variable will be the same as the enabled clustering)\n  this.setData(data);\n\n}\n\n// Extend Network with an Emitter mixin\nEmitter(Network.prototype);\n\n\n/**\n * Set options\n * @param {Object} options\n */\nNetwork.prototype.setOptions = function (options) {\n  if (options !== undefined) {\n    let errorFound = Validator.validate(options, allOptions);\n    if (errorFound === true) {\n      console.log('%cErrors have been found in the supplied options object.', printStyle);\n    }\n\n    // copy the global fields over\n    let fields = ['locale','locales','clickToUse'];\n    util.selectiveDeepExtend(fields,this.options, options);\n\n    // the hierarchical system can adapt the edges and the physics to it's own options because not all combinations work with the hierarichical system.\n    options = this.layoutEngine.setOptions(options.layout, options);\n\n    this.canvas.setOptions(options); // options for canvas are in globals\n\n    // pass the options to the modules\n    this.groups.setOptions(options.groups);\n    this.nodesHandler.setOptions(options.nodes);\n    this.edgesHandler.setOptions(options.edges);\n    this.physics.setOptions(options.physics);\n    this.manipulation.setOptions(options.manipulation, options, this.options); // manipulation uses the locales in the globals\n\n    this.interactionHandler.setOptions(options.interaction);\n    this.renderer.setOptions(options.interaction);            // options for rendering are in interaction\n    this.selectionHandler.setOptions(options.interaction);    // options for selection are in interaction\n\n    // reload the settings of the nodes to apply changes in groups that are not referenced by pointer.\n    if (options.groups !== undefined) {\n      this.body.emitter.emit(\"refreshNodes\");\n    }\n    // these two do not have options at the moment, here for completeness\n    //this.view.setOptions(options.view);\n    //this.clustering.setOptions(options.clustering);\n\n    if ('configure' in options) {\n      if (!this.configurator) {\n        this.configurator = new Configurator(this, this.body.container, configureOptions, this.canvas.pixelRatio);\n      }\n\n      this.configurator.setOptions(options.configure);\n    }\n\n    // if the configuration system is enabled, copy all options and put them into the config system\n    if (this.configurator && this.configurator.options.enabled === true) {\n      let networkOptions = {nodes:{},edges:{},layout:{},interaction:{},manipulation:{},physics:{},global:{}};\n      util.deepExtend(networkOptions.nodes,        this.nodesHandler.options);\n      util.deepExtend(networkOptions.edges,        this.edgesHandler.options);\n      util.deepExtend(networkOptions.layout,       this.layoutEngine.options);\n      // load the selectionHandler and render default options in to the interaction group\n      util.deepExtend(networkOptions.interaction,  this.selectionHandler.options);\n      util.deepExtend(networkOptions.interaction,  this.renderer.options);\n\n      util.deepExtend(networkOptions.interaction,  this.interactionHandler.options);\n      util.deepExtend(networkOptions.manipulation, this.manipulation.options);\n      util.deepExtend(networkOptions.physics,      this.physics.options);\n\n      // load globals into the global object\n      util.deepExtend(networkOptions.global,       this.canvas.options);\n      util.deepExtend(networkOptions.global,       this.options);\n\n      this.configurator.setModuleOptions(networkOptions);\n    }\n\n    // handle network global options\n    if (options.clickToUse !== undefined) {\n      if (options.clickToUse === true) {\n        if (this.activator === undefined) {\n          this.activator = new Activator(this.canvas.frame);\n          this.activator.on('change', () => {this.body.emitter.emit(\"activate\")});\n        }\n      }\n      else {\n        if (this.activator !== undefined) {\n          this.activator.destroy();\n          delete this.activator;\n        }\n        this.body.emitter.emit(\"activate\");\n      }\n    }\n    else {\n      this.body.emitter.emit(\"activate\");\n    }\n\n    this.canvas.setSize();\n    // start the physics simulation. Can be safely called multiple times.\n    this.body.emitter.emit(\"startSimulation\");\n  }\n};\n\n\n/**\n * Update the this.body.nodeIndices with the most recent node index list\n * @private\n */\nNetwork.prototype._updateVisibleIndices = function () {\n  let nodes = this.body.nodes;\n  let edges = this.body.edges;\n  this.body.nodeIndices = [];\n  this.body.edgeIndices = [];\n\n  for (let nodeId in nodes) {\n    if (nodes.hasOwnProperty(nodeId)) {\n      if (nodes[nodeId].options.hidden === false) {\n        this.body.nodeIndices.push(nodes[nodeId].id);\n      }\n    }\n  }\n\n  for (let edgeId in edges) {\n    if (edges.hasOwnProperty(edgeId)) {\n      if (edges[edgeId].options.hidden === false) {\n        this.body.edgeIndices.push(edges[edgeId].id);\n      }\n    }\n  }\n};\n\n\n/**\n * Bind all events\n */\nNetwork.prototype.bindEventListeners = function () {\n  // this event will trigger a rebuilding of the cache everything. Used when nodes or edges have been added or removed.\n  this.body.emitter.on(\"_dataChanged\", () => {\n    // update shortcut lists\n    this._updateVisibleIndices();\n    this.body.emitter.emit(\"_requestRedraw\");\n    // call the dataUpdated event because the only difference between the two is the updating of the indices\n    this.body.emitter.emit(\"_dataUpdated\");\n  });\n\n  // this is called when options of EXISTING nodes or edges have changed.\n  this.body.emitter.on(\"_dataUpdated\", () => {\n    // update values\n    this._updateValueRange(this.body.nodes);\n    this._updateValueRange(this.body.edges);\n    // start simulation (can be called safely, even if already running)\n    this.body.emitter.emit(\"startSimulation\");\n    this.body.emitter.emit(\"_requestRedraw\");\n  });\n};\n\n\n/**\n * Set nodes and edges, and optionally options as well.\n *\n * @param {Object} data              Object containing parameters:\n *                                   {Array | DataSet | DataView} [nodes] Array with nodes\n *                                   {Array | DataSet | DataView} [edges] Array with edges\n *                                   {String} [dot] String containing data in DOT format\n *                                   {String} [gephi] String containing data in gephi JSON format\n *                                   {Options} [options] Object with options\n */\nNetwork.prototype.setData = function (data) {\n  // reset the physics engine.\n  this.body.emitter.emit(\"resetPhysics\");\n  this.body.emitter.emit(\"_resetData\");\n\n  // unselect all to ensure no selections from old data are carried over.\n  this.selectionHandler.unselectAll();\n\n  if (data && data.dot && (data.nodes || data.edges)) {\n    throw new SyntaxError('Data must contain either parameter \"dot\" or ' +\n      ' parameter pair \"nodes\" and \"edges\", but not both.');\n  }\n\n  // set options\n  this.setOptions(data && data.options);\n  // set all data\n  if (data && data.dot) {\n    console.log('The dot property has been deprecated. Please use the static convertDot method to convert DOT into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertDot(dotString);');\n    // parse DOT file\n    var dotData = dotparser.DOTToGraph(data.dot);\n    this.setData(dotData);\n    return;\n  }\n  else if (data && data.gephi) {\n    // parse DOT file\n    console.log('The gephi property has been deprecated. Please use the static convertGephi method to convert gephi into vis.network format and use the normal data format with nodes and edges. This converter is used like this: var data = vis.network.convertGephi(gephiJson);');\n    var gephiData = gephiParser.parseGephi(data.gephi);\n    this.setData(gephiData);\n    return;\n  }\n  else {\n    this.nodesHandler.setData(data && data.nodes, true);\n    this.edgesHandler.setData(data && data.edges, true);\n  }\n\n  // emit change in data\n  this.body.emitter.emit(\"_dataChanged\");\n\n  // emit data loaded\n  this.body.emitter.emit(\"_dataLoaded\");\n\n  // find a stable position or start animating to a stable position\n  this.body.emitter.emit(\"initPhysics\");\n};\n\n\n/**\n * Cleans up all bindings of the network, removing it fully from the memory IF the variable is set to null after calling this function.\n * var network = new vis.Network(..);\n * network.destroy();\n * network = null;\n */\nNetwork.prototype.destroy = function () {\n  this.body.emitter.emit(\"destroy\");\n  // clear events\n  this.body.emitter.off();\n  this.off();\n\n  // delete modules\n  delete this.groups;\n  delete this.canvas;\n  delete this.selectionHandler;\n  delete this.interactionHandler;\n  delete this.view;\n  delete this.renderer;\n  delete this.physics;\n  delete this.layoutEngine;\n  delete this.clustering;\n  delete this.manipulation;\n  delete this.nodesHandler;\n  delete this.edgesHandler;\n  delete this.configurator;\n  delete this.images;\n\n  for (var nodeId in this.body.nodes) {\n    delete this.body.nodes[nodeId];\n  }\n  for (var edgeId in this.body.edges) {\n    delete this.body.edges[edgeId];\n  }\n\n  // remove the container and everything inside it recursively\n  util.recursiveDOMDelete(this.body.container);\n};\n\n\n/**\n * Update the values of all object in the given array according to the current\n * value range of the objects in the array.\n * @param {Object} obj    An object containing a set of Edges or Nodes\n *                        The objects must have a method getValue() and\n *                        setValueRange(min, max).\n * @private\n */\nNetwork.prototype._updateValueRange = function (obj) {\n  var id;\n\n  // determine the range of the objects\n  var valueMin = undefined;\n  var valueMax = undefined;\n  var valueTotal = 0;\n  for (id in obj) {\n    if (obj.hasOwnProperty(id)) {\n      var value = obj[id].getValue();\n      if (value !== undefined) {\n        valueMin = (valueMin === undefined) ? value : Math.min(value, valueMin);\n        valueMax = (valueMax === undefined) ? value : Math.max(value, valueMax);\n        valueTotal += value;\n      }\n    }\n  }\n\n  // adjust the range of all objects\n  if (valueMin !== undefined && valueMax !== undefined) {\n    for (id in obj) {\n      if (obj.hasOwnProperty(id)) {\n        obj[id].setValueRange(valueMin, valueMax, valueTotal);\n      }\n    }\n  }\n};\n\n\n/**\n * Returns true when the Network is active.\n * @returns {boolean}\n */\nNetwork.prototype.isActive = function () {\n  return !this.activator || this.activator.active;\n};\n\n\nNetwork.prototype.setSize             = function() {return this.canvas.setSize.apply(this.canvas,arguments);};\nNetwork.prototype.canvasToDOM         = function() {return this.canvas.canvasToDOM.apply(this.canvas,arguments);};\nNetwork.prototype.DOMtoCanvas         = function() {return this.canvas.DOMtoCanvas.apply(this.canvas,arguments);};\nNetwork.prototype.findNode            = function() {return this.clustering.findNode.apply(this.clustering,arguments);};\nNetwork.prototype.isCluster           = function() {return this.clustering.isCluster.apply(this.clustering,arguments);};\nNetwork.prototype.openCluster         = function() {return this.clustering.openCluster.apply(this.clustering,arguments);};\nNetwork.prototype.cluster             = function() {return this.clustering.cluster.apply(this.clustering,arguments);};\nNetwork.prototype.getNodesInCluster   = function() {return this.clustering.getNodesInCluster.apply(this.clustering,arguments);};\nNetwork.prototype.clusterByConnection = function() {return this.clustering.clusterByConnection.apply(this.clustering,arguments);};\nNetwork.prototype.clusterByHubsize    = function() {return this.clustering.clusterByHubsize.apply(this.clustering,arguments);};\nNetwork.prototype.clusterOutliers     = function() {return this.clustering.clusterOutliers.apply(this.clustering,arguments);};\nNetwork.prototype.getSeed             = function() {return this.layoutEngine.getSeed.apply(this.layoutEngine,arguments);};\nNetwork.prototype.enableEditMode      = function() {return this.manipulation.enableEditMode.apply(this.manipulation,arguments);};\nNetwork.prototype.disableEditMode     = function() {return this.manipulation.disableEditMode.apply(this.manipulation,arguments);};\nNetwork.prototype.addNodeMode         = function() {return this.manipulation.addNodeMode.apply(this.manipulation,arguments);};\nNetwork.prototype.editNode            = function() {return this.manipulation.editNode.apply(this.manipulation,arguments);};\nNetwork.prototype.editNodeMode        = function() {console.log(\"Deprecated: Please use editNode instead of editNodeMode.\"); return this.manipulation.editNode.apply(this.manipulation,arguments);};\nNetwork.prototype.addEdgeMode         = function() {return this.manipulation.addEdgeMode.apply(this.manipulation,arguments);};\nNetwork.prototype.editEdgeMode        = function() {return this.manipulation.editEdgeMode.apply(this.manipulation,arguments);};\nNetwork.prototype.deleteSelected      = function() {return this.manipulation.deleteSelected.apply(this.manipulation,arguments);};\nNetwork.prototype.getPositions        = function() {return this.nodesHandler.getPositions.apply(this.nodesHandler,arguments);};\nNetwork.prototype.storePositions      = function() {return this.nodesHandler.storePositions.apply(this.nodesHandler,arguments);};\nNetwork.prototype.moveNode            = function() {return this.nodesHandler.moveNode.apply(this.nodesHandler,arguments);};\nNetwork.prototype.getBoundingBox      = function() {return this.nodesHandler.getBoundingBox.apply(this.nodesHandler,arguments);};\nNetwork.prototype.getConnectedNodes   = function(objectId) {\n  if (this.body.nodes[objectId] !== undefined) {\n    return this.nodesHandler.getConnectedNodes.apply(this.nodesHandler,arguments);\n  }\n  else {\n    return this.edgesHandler.getConnectedNodes.apply(this.edgesHandler,arguments);\n  }\n};\nNetwork.prototype.getConnectedEdges   = function() {return this.nodesHandler.getConnectedEdges.apply(this.nodesHandler,arguments);};\nNetwork.prototype.startSimulation     = function() {return this.physics.startSimulation.apply(this.physics,arguments);};\nNetwork.prototype.stopSimulation      = function() {return this.physics.stopSimulation.apply(this.physics,arguments);};\nNetwork.prototype.stabilize           = function() {return this.physics.stabilize.apply(this.physics,arguments);};\nNetwork.prototype.getSelection        = function() {return this.selectionHandler.getSelection.apply(this.selectionHandler,arguments);};\nNetwork.prototype.setSelection        = function() {return this.selectionHandler.setSelection.apply(this.selectionHandler,arguments);};\nNetwork.prototype.getSelectedNodes    = function() {return this.selectionHandler.getSelectedNodes.apply(this.selectionHandler,arguments);};\nNetwork.prototype.getSelectedEdges    = function() {return this.selectionHandler.getSelectedEdges.apply(this.selectionHandler,arguments);};\nNetwork.prototype.getNodeAt           = function() {\n  var node = this.selectionHandler.getNodeAt.apply(this.selectionHandler,arguments);\n  if (node !== undefined && node.id !== undefined) {\n    return node.id;\n  }\n  return node;\n};\nNetwork.prototype.getEdgeAt           = function() {\n    var edge = this.selectionHandler.getEdgeAt.apply(this.selectionHandler,arguments);\n    if (edge !== undefined && edge.id !== undefined) {\n      return edge.id;\n    }\n    return edge;\n  };\nNetwork.prototype.selectNodes         = function() {return this.selectionHandler.selectNodes.apply(this.selectionHandler,arguments);};\nNetwork.prototype.selectEdges         = function() {return this.selectionHandler.selectEdges.apply(this.selectionHandler,arguments);};\nNetwork.prototype.unselectAll         = function() {\n  this.selectionHandler.unselectAll.apply(this.selectionHandler,arguments);\n  this.redraw();\n};\nNetwork.prototype.redraw              = function() {return this.renderer.redraw.apply(this.renderer,arguments);};\nNetwork.prototype.getScale            = function() {return this.view.getScale.apply(this.view,arguments);};\nNetwork.prototype.getViewPosition     = function() {return this.view.getViewPosition.apply(this.view,arguments);};\nNetwork.prototype.fit                 = function() {return this.view.fit.apply(this.view,arguments);};\nNetwork.prototype.moveTo              = function() {return this.view.moveTo.apply(this.view,arguments);};\nNetwork.prototype.focus               = function() {return this.view.focus.apply(this.view,arguments);};\nNetwork.prototype.releaseNode         = function() {return this.view.releaseNode.apply(this.view,arguments);};\nNetwork.prototype.getOptionsFromConfigurator = function() {\n  let options = {};\n  if (this.configurator) {\n    options = this.configurator.getOptions.apply(this.configurator);\n  }\n  return options;\n};\n\n\n\nmodule.exports = Network;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/Network.js","/**\n * @class Images\n * This class loads images and keeps them stored.\n */\nclass Images{\n    constructor(callback){\n        this.images = {};\n        this.imageBroken = {};\n        this.callback = callback;\n    }\n    \n    /**\n     * @param {string} url                      The Url to cache the image as \n      * @return {Image} imageToLoadBrokenUrlOn  The image object\n     */    \n    _addImageToCache (url, imageToCache) {\n        // IE11 fix -- thanks dponch!\n        if (imageToCache.width === 0) {\n            document.body.appendChild(imageToCache);\n            imageToCache.width = imageToCache.offsetWidth;\n            imageToCache.height = imageToCache.offsetHeight;\n            document.body.removeChild(imageToCache);\n        }\n    \n        this.images[url] = imageToCache;\n    }  \n    \n    /**\n     * @param {string} url                      The original Url that failed to load, if the broken image is successfully loaded it will be added to the cache using this Url as the key so that subsequent requests for this Url will return the broken image\n     * @param {string} brokenUrl                Url the broken image to try and load\n     * @return {Image} imageToLoadBrokenUrlOn   The image object\n     */    \n    _tryloadBrokenUrl (url, brokenUrl, imageToLoadBrokenUrlOn) {\n        //If any of the parameters aren't specified then exit the function because nothing constructive can be done\n        if (url === undefined || brokenUrl === undefined || imageToLoadBrokenUrlOn === undefined)  return;\n    \n        //Clear the old subscription to the error event and put a new in place that only handle errors in loading the brokenImageUrl\n        imageToLoadBrokenUrlOn.onerror = () => {\n            console.error(\"Could not load brokenImage:\", brokenUrl);\n            //Add an empty image to the cache so that when subsequent load calls are made for the url we don't try load the image and broken image again\n            this._addImageToCache(url, new Image());\n        };\n        \n        //Set the source of the image to the brokenUrl, this is actually what kicks off the loading of the broken image\n        imageToLoadBrokenUrlOn.src = brokenUrl;\n    }\n    \n    /**\n     * @return {Image} imageToRedrawWith The images that will be passed to the callback when it is invoked\n     */    \n    _redrawWithImage (imageToRedrawWith) {\n        if (this.callback) {\n            this.callback(imageToRedrawWith);\n        }\n    }\n    \n    /**\n     * @param {string} url          Url of the image\n     * @param {string} brokenUrl    Url of an image to use if the url image is not found\n     * @return {Image} img          The image object\n     */     \n    load (url, brokenUrl, id) {\n        //Try and get the image from the cache, if successful then return the cached image   \n        var cachedImage = this.images[url]; \n        if (cachedImage) return cachedImage;\n        \n        //Create a new image\n        var img = new Image();\n        \n        //Subscribe to the event that is raised if the image loads successfully \n        img.onload = () => {\n            //Add the image to the cache and then request a redraw\n            this._addImageToCache(url, img);\n            this._redrawWithImage(img);\n        };\n        \n        //Subscribe to the event that is raised if the image fails to load\n        img.onerror = () => {\n            console.error(\"Could not load image:\", url);\n            //Try and load the image specified by the brokenUrl using\n            this._tryloadBrokenUrl(url, brokenUrl, img);\n        }\n        \n        //Set the source of the image to the url, this is actuall what kicks off the loading of the image\n        img.src = url;\n        \n        //Return the new image\n        return img;\n    }          \n}\n\nexport default Images;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/Images.js","let util = require('../../util');\n\n/**\n * @class Groups\n * This class can store groups and options specific for groups.\n */\nclass Groups {\n  constructor() {\n    this.clear();\n    this.defaultIndex = 0;\n    this.groupsArray = [];\n    this.groupIndex = 0;\n\n    this.defaultGroups = [\n      {border: \"#2B7CE9\", background: \"#97C2FC\", highlight: {border: \"#2B7CE9\", background: \"#D2E5FF\"}, hover: {border: \"#2B7CE9\", background: \"#D2E5FF\"}}, // 0: blue\n      {border: \"#FFA500\", background: \"#FFFF00\", highlight: {border: \"#FFA500\", background: \"#FFFFA3\"}, hover: {border: \"#FFA500\", background: \"#FFFFA3\"}}, // 1: yellow\n      {border: \"#FA0A10\", background: \"#FB7E81\", highlight: {border: \"#FA0A10\", background: \"#FFAFB1\"}, hover: {border: \"#FA0A10\", background: \"#FFAFB1\"}}, // 2: red\n      {border: \"#41A906\", background: \"#7BE141\", highlight: {border: \"#41A906\", background: \"#A1EC76\"}, hover: {border: \"#41A906\", background: \"#A1EC76\"}}, // 3: green\n      {border: \"#E129F0\", background: \"#EB7DF4\", highlight: {border: \"#E129F0\", background: \"#F0B3F5\"}, hover: {border: \"#E129F0\", background: \"#F0B3F5\"}}, // 4: magenta\n      {border: \"#7C29F0\", background: \"#AD85E4\", highlight: {border: \"#7C29F0\", background: \"#D3BDF0\"}, hover: {border: \"#7C29F0\", background: \"#D3BDF0\"}}, // 5: purple\n      {border: \"#C37F00\", background: \"#FFA807\", highlight: {border: \"#C37F00\", background: \"#FFCA66\"}, hover: {border: \"#C37F00\", background: \"#FFCA66\"}}, // 6: orange\n      {border: \"#4220FB\", background: \"#6E6EFD\", highlight: {border: \"#4220FB\", background: \"#9B9BFD\"}, hover: {border: \"#4220FB\", background: \"#9B9BFD\"}}, // 7: darkblue\n      {border: \"#FD5A77\", background: \"#FFC0CB\", highlight: {border: \"#FD5A77\", background: \"#FFD1D9\"}, hover: {border: \"#FD5A77\", background: \"#FFD1D9\"}}, // 8: pink\n      {border: \"#4AD63A\", background: \"#C2FABC\", highlight: {border: \"#4AD63A\", background: \"#E6FFE3\"}, hover: {border: \"#4AD63A\", background: \"#E6FFE3\"}}, // 9: mint\n\n      {border: \"#990000\", background: \"#EE0000\", highlight: {border: \"#BB0000\", background: \"#FF3333\"}, hover: {border: \"#BB0000\", background: \"#FF3333\"}}, // 10:bright red\n\n      {border: \"#FF6000\", background: \"#FF6000\", highlight: {border: \"#FF6000\", background: \"#FF6000\"}, hover: {border: \"#FF6000\", background: \"#FF6000\"}}, // 12: real orange\n      {border: \"#97C2FC\", background: \"#2B7CE9\", highlight: {border: \"#D2E5FF\", background: \"#2B7CE9\"}, hover: {border: \"#D2E5FF\", background: \"#2B7CE9\"}}, // 13: blue\n      {border: \"#399605\", background: \"#255C03\", highlight: {border: \"#399605\", background: \"#255C03\"}, hover: {border: \"#399605\", background: \"#255C03\"}}, // 14: green\n      {border: \"#B70054\", background: \"#FF007E\", highlight: {border: \"#B70054\", background: \"#FF007E\"}, hover: {border: \"#B70054\", background: \"#FF007E\"}}, // 15: magenta\n      {border: \"#AD85E4\", background: \"#7C29F0\", highlight: {border: \"#D3BDF0\", background: \"#7C29F0\"}, hover: {border: \"#D3BDF0\", background: \"#7C29F0\"}}, // 16: purple\n      {border: \"#4557FA\", background: \"#000EA1\", highlight: {border: \"#6E6EFD\", background: \"#000EA1\"}, hover: {border: \"#6E6EFD\", background: \"#000EA1\"}}, // 17: darkblue\n      {border: \"#FFC0CB\", background: \"#FD5A77\", highlight: {border: \"#FFD1D9\", background: \"#FD5A77\"}, hover: {border: \"#FFD1D9\", background: \"#FD5A77\"}}, // 18: pink\n      {border: \"#C2FABC\", background: \"#74D66A\", highlight: {border: \"#E6FFE3\", background: \"#74D66A\"}, hover: {border: \"#E6FFE3\", background: \"#74D66A\"}}, // 19: mint\n\n      {border: \"#EE0000\", background: \"#990000\", highlight: {border: \"#FF3333\", background: \"#BB0000\"}, hover: {border: \"#FF3333\", background: \"#BB0000\"}} // 20:bright red\n    ];\n\n    this.options = {};\n    this.defaultOptions = {\n      useDefaultGroups: true\n    };\n    util.extend(this.options, this.defaultOptions);\n  }\n\n\n  setOptions(options) {\n    let optionFields = ['useDefaultGroups'];\n\n    if (options !== undefined) {\n      for (let groupName in options) {\n        if (options.hasOwnProperty(groupName)) {\n          if (optionFields.indexOf(groupName) === -1) {\n            let group = options[groupName];\n            this.add(groupName, group);\n          }\n        }\n      }\n    }\n  }\n\n  \n  /**\n   * Clear all groups\n   */\n  clear() {\n    this.groups = {};\n    this.groupsArray = [];\n  }\n  \n  /**\n   * get group options of a groupname. If groupname is not found, a new group\n   * is added.\n   * @param {*} groupname        Can be a number, string, Date, etc.\n   * @return {Object} group      The created group, containing all group options\n   */\n  get(groupname) {\n    let group = this.groups[groupname];\n    if (group === undefined) {\n      if (this.options.useDefaultGroups === false && this.groupsArray.length > 0) {\n        // create new group\n        let index = this.groupIndex % this.groupsArray.length;\n        this.groupIndex++;\n        group = {};\n        group.color = this.groups[this.groupsArray[index]];\n        this.groups[groupname] = group;\n      }\n      else {\n        // create new group\n        let index = this.defaultIndex % this.defaultGroups.length;\n        this.defaultIndex++;\n        group = {};\n        group.color = this.defaultGroups[index];\n        this.groups[groupname] = group;\n      }\n    }\n  \n    return group;\n  }\n  \n  /**\n   * Add a custom group style\n   * @param {String} groupName\n   * @param {Object} style       An object containing borderColor,\n   *                             backgroundColor, etc.\n   * @return {Object} group      The created group object\n   */\n  add(groupName, style) {\n    this.groups[groupName] = style;\n    this.groupsArray.push(groupName);\n    return style;\n  }\n}\n\nexport default Groups;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/Groups.js","let util = require(\"../../util\");\nlet DataSet = require('../../DataSet');\nlet DataView = require('../../DataView');\n\nimport Node  from \"./components/Node\";\nimport Label from \"./components/shared/Label\";\n\nclass NodesHandler {\n  constructor(body, images, groups, layoutEngine) {\n    this.body = body;\n    this.images = images;\n    this.groups = groups;\n    this.layoutEngine = layoutEngine;\n\n    // create the node API in the body container\n    this.body.functions.createNode = this.create.bind(this);\n\n    this.nodesListeners = {\n      add: (event, params) => { this.add(params.items); },\n      update: (event, params) => { this.update(params.items, params.data); },\n      remove: (event, params) => { this.remove(params.items); }\n    };\n\n    this.options = {};\n    this.defaultOptions = {\n      borderWidth: 1,\n      borderWidthSelected: 2,\n      brokenImage: undefined,\n      color: {\n        border: '#2B7CE9',\n        background: '#97C2FC',\n        highlight: {\n          border: '#2B7CE9',\n          background: '#D2E5FF'\n        },\n        hover: {\n          border: '#2B7CE9',\n          background: '#D2E5FF'\n        }\n      },\n      fixed: {\n        x: false,\n        y: false\n      },\n      font: {\n        color: '#343434',\n        size: 14, // px\n        face: 'arial',\n        background: 'none',\n        strokeWidth: 0, // px\n        strokeColor: '#ffffff',\n        align: 'center',\n        vadjust: 0,\n        multi: false,\n        bold: {\n          mod: 'bold'\n        },\n        boldital: {\n          mod: 'bold italic'\n        },\n        ital: {\n          mod: 'italic'\n        },\n        mono: {\n          mod: '',\n          size: 15, // px\n          face: 'courier new',\n          vadjust: 2\n        }\n      },\n      group: undefined,\n      hidden: false,\n      icon: {\n        face: 'FontAwesome',  //'FontAwesome',\n        code: undefined,  //'\\uf007',\n        size: 50,  //50,\n        color: '#2B7CE9'   //'#aa00ff'\n      },\n      image: undefined, // --> URL\n      label: undefined,\n      labelHighlightBold: true,\n      level: undefined,\n      margin: {\n        top: 5,\n        right: 5,\n        bottom: 5,\n        left: 5\n      },\n      mass: 1,\n      physics: true,\n      scaling: {\n        min: 10,\n        max: 30,\n        label: {\n          enabled: false,\n          min: 14,\n          max: 30,\n          maxVisible: 30,\n          drawThreshold: 5\n        },\n        customScalingFunction: function (min, max, total, value) {\n          if (max === min) {\n            return 0.5;\n          }\n          else {\n            let scale = 1 / (max - min);\n            return Math.max(0, (value - min) * scale);\n          }\n        }\n      },\n      shadow: {\n        enabled: false,\n        color: 'rgba(0,0,0,0.5)',\n        size: 10,\n        x: 5,\n        y: 5\n      },\n      shape: 'ellipse',\n      shapeProperties: {\n        borderDashes: false, // only for borders\n        borderRadius: 6,     // only for box shape\n        interpolation: true,  // only for image and circularImage shapes\n        useImageSize: false,  // only for image and circularImage shapes\n        useBorderWithImage: false  // only for image shape\n      },\n      size: 25,\n      title: undefined,\n      value: undefined,\n      x: undefined,\n      y: undefined\n    };\n    util.extend(this.options, this.defaultOptions);\n\n    this.bindEventListeners();\n  }\n\n  bindEventListeners() {\n    // refresh the nodes. Used when reverting from hierarchical layout\n    this.body.emitter.on('refreshNodes', this.refresh.bind(this));\n    this.body.emitter.on('refresh', this.refresh.bind(this));\n    this.body.emitter.on('destroy', () => {\n      util.forEach(this.nodesListeners, (callback, event) => {\n        if (this.body.data.nodes)\n          this.body.data.nodes.off(event, callback);\n      });\n      delete this.body.functions.createNode;\n      delete this.nodesListeners.add;\n      delete this.nodesListeners.update;\n      delete this.nodesListeners.remove;\n      delete this.nodesListeners;\n    });\n  }\n\n  setOptions(options) {\n    this.nodeOptions = options;\n    if (options !== undefined) {\n      Node.parseOptions(this.options, options);\n\n      // update the shape in all nodes\n      if (options.shape !== undefined) {\n        for (let nodeId in this.body.nodes) {\n          if (this.body.nodes.hasOwnProperty(nodeId)) {\n            this.body.nodes[nodeId].updateShape();\n          }\n        }\n      }\n\n      // update the font in all nodes\n      if (options.font !== undefined) {\n        Label.parseOptions(this.options.font, options);\n        for (let nodeId in this.body.nodes) {\n          if (this.body.nodes.hasOwnProperty(nodeId)) {\n            this.body.nodes[nodeId].updateLabelModule();\n            this.body.nodes[nodeId]._reset();\n          }\n        }\n      }\n\n      // update the shape size in all nodes\n      if (options.size !== undefined) {\n        for (let nodeId in this.body.nodes) {\n          if (this.body.nodes.hasOwnProperty(nodeId)) {\n            this.body.nodes[nodeId]._reset();\n          }\n        }\n      }\n\n      // update the state of the letiables if needed\n      if (options.hidden !== undefined || options.physics !== undefined) {\n        this.body.emitter.emit('_dataChanged');\n      }\n    }\n  }\n\n  /**\n   * Set a data set with nodes for the network\n   * @param {Array | DataSet | DataView} nodes         The data containing the nodes.\n   * @private\n   */\n  setData(nodes, doNotEmit = false) {\n    let oldNodesData = this.body.data.nodes;\n\n    if (nodes instanceof DataSet || nodes instanceof DataView) {\n      this.body.data.nodes = nodes;\n    }\n    else if (Array.isArray(nodes)) {\n      this.body.data.nodes = new DataSet();\n      this.body.data.nodes.add(nodes);\n    }\n    else if (!nodes) {\n      this.body.data.nodes = new DataSet();\n    }\n    else {\n      throw new TypeError('Array or DataSet expected');\n    }\n\n    if (oldNodesData) {\n      // unsubscribe from old dataset\n      util.forEach(this.nodesListeners, function (callback, event) {\n        oldNodesData.off(event, callback);\n      });\n    }\n\n    // remove drawn nodes\n    this.body.nodes = {};\n\n    if (this.body.data.nodes) {\n      // subscribe to new dataset\n      let me = this;\n      util.forEach(this.nodesListeners, function (callback, event) {\n        me.body.data.nodes.on(event, callback);\n      });\n\n      // draw all new nodes\n      let ids = this.body.data.nodes.getIds();\n      this.add(ids, true);\n    }\n\n    if (doNotEmit === false) {\n      this.body.emitter.emit(\"_dataChanged\");\n    }\n  }\n\n\n  /**\n   * Add nodes\n   * @param {Number[] | String[]} ids\n   * @private\n   */\n  add(ids, doNotEmit = false) {\n    let id;\n    let newNodes = [];\n    for (let i = 0; i < ids.length; i++) {\n      id = ids[i];\n      let properties = this.body.data.nodes.get(id);\n      let node = this.create(properties);\n      newNodes.push(node);\n      this.body.nodes[id] = node; // note: this may replace an existing node\n    }\n\n    this.layoutEngine.positionInitially(newNodes);\n\n    if (doNotEmit === false) {\n      this.body.emitter.emit(\"_dataChanged\");\n    }\n  }\n\n  /**\n   * Update existing nodes, or create them when not yet existing\n   * @param {Number[] | String[]} ids\n   * @private\n   */\n  update(ids, changedData) {\n    let nodes = this.body.nodes;\n    let dataChanged = false;\n    for (let i = 0; i < ids.length; i++) {\n      let id = ids[i];\n      let node = nodes[id];\n      let data = changedData[i];\n      if (node !== undefined) {\n        // update node\n        dataChanged = node.setOptions(data);\n      }\n      else {\n        dataChanged = true;\n        // create node\n        node = this.create(data);\n        nodes[id] = node;\n      }\n    }\n    if (dataChanged === true) {\n      this.body.emitter.emit(\"_dataChanged\");\n    }\n    else {\n      this.body.emitter.emit(\"_dataUpdated\");\n    }\n  }\n\n  /**\n   * Remove existing nodes. If nodes do not exist, the method will just ignore it.\n   * @param {Number[] | String[]} ids\n   * @private\n   */\n  remove(ids) {\n    let nodes = this.body.nodes;\n\n    for (let i = 0; i < ids.length; i++) {\n      let id = ids[i];\n      delete nodes[id];\n    }\n\n    this.body.emitter.emit(\"_dataChanged\");\n  }\n\n\n  /**\n   * create a node\n   * @param properties\n   * @param constructorClass\n   */\n  create(properties, constructorClass = Node) {\n    return new constructorClass(properties, this.body, this.images, this.groups, this.options, this.defaultOptions, this.nodeOptions)\n  }\n\n\n  refresh(clearPositions = false) {\n    let nodes = this.body.nodes;\n    for (let nodeId in nodes) {\n      let node = undefined;\n      if (nodes.hasOwnProperty(nodeId)) {\n        node = nodes[nodeId];\n      }\n      let data = this.body.data.nodes._data[nodeId];\n      if (node !== undefined && data !== undefined) {\n        if (clearPositions === true) {\n          node.setOptions({x:null, y:null});\n        }\n        node.setOptions({ fixed: false });\n        node.setOptions(data);\n      }\n    }\n  }\n\n  /**\n   * Returns the positions of the nodes.\n   * @param ids  --> optional, can be array of nodeIds, can be string\n   * @returns {{}}\n   */\n  getPositions(ids) {\n    let dataArray = {};\n    if (ids !== undefined) {\n      if (Array.isArray(ids) === true) {\n        for (let i = 0; i < ids.length; i++) {\n          if (this.body.nodes[ids[i]] !== undefined) {\n            let node = this.body.nodes[ids[i]];\n            dataArray[ids[i]] = { x: Math.round(node.x), y: Math.round(node.y) };\n          }\n        }\n      }\n      else {\n        if (this.body.nodes[ids] !== undefined) {\n          let node = this.body.nodes[ids];\n          dataArray[ids] = { x: Math.round(node.x), y: Math.round(node.y) };\n        }\n      }\n    }\n    else {\n      for (let i = 0; i < this.body.nodeIndices.length; i++) {\n        let node = this.body.nodes[this.body.nodeIndices[i]];\n        dataArray[this.body.nodeIndices[i]] = { x: Math.round(node.x), y: Math.round(node.y) };\n      }\n    }\n    return dataArray;\n  }\n\n\n  /**\n   * Load the XY positions of the nodes into the dataset.\n   */\n  storePositions() {\n    // todo: add support for clusters and hierarchical.\n    let dataArray = [];\n    var dataset = this.body.data.nodes.getDataSet();\n\n    for (let nodeId in dataset._data) {\n      if (dataset._data.hasOwnProperty(nodeId)) {\n        let node = this.body.nodes[nodeId];\n        if (dataset._data[nodeId].x != Math.round(node.x) || dataset._data[nodeId].y != Math.round(node.y)) {\n          dataArray.push({ id: node.id, x: Math.round(node.x), y: Math.round(node.y) });\n        }\n      }\n    }\n    dataset.update(dataArray);\n  }\n\n  /**\n   * get the bounding box of a node.\n   * @param nodeId\n   * @returns {j|*}\n   */\n  getBoundingBox(nodeId) {\n    if (this.body.nodes[nodeId] !== undefined) {\n      return this.body.nodes[nodeId].shape.boundingBox;\n    }\n  }\n\n\n  /**\n   * Get the Ids of nodes connected to this node.\n   * @param nodeId\n   * @returns {Array}\n   */\n  getConnectedNodes(nodeId) {\n    let nodeList = [];\n    if (this.body.nodes[nodeId] !== undefined) {\n      let node = this.body.nodes[nodeId];\n      let nodeObj = {}; // used to quickly check if node already exists\n      for (let i = 0; i < node.edges.length; i++) {\n        let edge = node.edges[i];\n        if (edge.toId == node.id) { // these are double equals since ids can be numeric or string\n          if (nodeObj[edge.fromId] === undefined) {\n            nodeList.push(edge.fromId);\n            nodeObj[edge.fromId] = true;\n          }\n        }\n        else if (edge.fromId == node.id) { // these are double equals since ids can be numeric or string\n          if (nodeObj[edge.toId] === undefined) {\n            nodeList.push(edge.toId);\n            nodeObj[edge.toId] = true;\n          }\n        }\n      }\n    }\n    return nodeList;\n  }\n\n  /**\n   * Get the ids of the edges connected to this node.\n   * @param nodeId\n   * @returns {*}\n   */\n  getConnectedEdges(nodeId) {\n    let edgeList = [];\n    if (this.body.nodes[nodeId] !== undefined) {\n      let node = this.body.nodes[nodeId];\n      for (let i = 0; i < node.edges.length; i++) {\n        edgeList.push(node.edges[i].id)\n      }\n    }\n    else {\n      console.log(\"NodeId provided for getConnectedEdges does not exist. Provided: \", nodeId);\n    }\n    return edgeList;\n  }\n\n\n  /**\n   * Move a node.\n   * @param String nodeId\n   * @param Number x\n   * @param Number y\n   */\n  moveNode(nodeId, x, y) {\n    if (this.body.nodes[nodeId] !== undefined) {\n      this.body.nodes[nodeId].x = Number(x);\n      this.body.nodes[nodeId].y = Number(y);\n      setTimeout(() => {this.body.emitter.emit(\"startSimulation\")},0);\n    }\n    else {\n      console.log(\"Node id supplied to moveNode does not exist. Provided: \", nodeId);\n    }\n  }\n}\n\nexport default NodesHandler;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/NodesHandler.js","var util = require('../../../util');\n\nimport Label from './shared/Label'\n\nimport Box           from './nodes/shapes/Box'\nimport Circle        from './nodes/shapes/Circle'\nimport CircularImage from './nodes/shapes/CircularImage'\nimport Database      from './nodes/shapes/Database'\nimport Diamond       from './nodes/shapes/Diamond'\nimport Dot           from './nodes/shapes/Dot'\nimport Ellipse       from './nodes/shapes/Ellipse'\nimport Icon          from './nodes/shapes/Icon'\nimport Image         from './nodes/shapes/Image'\nimport Square        from './nodes/shapes/Square'\nimport Star          from './nodes/shapes/Star'\nimport Text          from './nodes/shapes/Text'\nimport Triangle      from './nodes/shapes/Triangle'\nimport TriangleDown  from './nodes/shapes/TriangleDown'\nimport  Validator    from \"../../../shared/Validator\";\nimport  {printStyle} from \"../../../shared/Validator\";\n\n\n/**\n * @class Node\n * A node. A node can be connected to other nodes via one or multiple edges.\n * @param {object} options An object containing options for the node. All\n *                            options are optional, except for the id.\n *                              {number} id     Id of the node. Required\n *                              {string} label  Text label for the node\n *                              {number} x      Horizontal position of the node\n *                              {number} y      Vertical position of the node\n *                              {string} shape  Node shape, available:\n *                                              \"database\", \"circle\", \"ellipse\",\n *                                              \"box\", \"image\", \"text\", \"dot\",\n *                                              \"star\", \"triangle\", \"triangleDown\",\n *                                              \"square\", \"icon\"\n *                              {string} image  An image url\n *                              {string} title  An title text, can be HTML\n *                              {anytype} group A group name or number\n * @param {Network.Images} imagelist    A list with images. Only needed\n *                                            when the node has an image\n * @param {Network.Groups} grouplist    A list with groups. Needed for\n *                                            retrieving group options\n * @param {Object}               constants    An object with default values for\n *                                            example for the color\n *\n */\nclass Node {\n  constructor(options, body, imagelist, grouplist, globalOptions, defaultOptions, nodeOptions) {\n    this.options = util.bridgeObject(globalOptions);\n    this.globalOptions = globalOptions;\n    this.defaultOptions = defaultOptions;\n    this.nodeOptions = nodeOptions;\n    this.body = body;\n\n    this.edges = []; // all edges connected to this node\n\n    // set defaults for the options\n    this.id = undefined;\n    this.imagelist = imagelist;\n    this.grouplist = grouplist;\n\n    // state options\n    this.x = undefined;\n    this.y = undefined;\n    this.baseSize = this.options.size;\n    this.baseFontSize = this.options.font.size;\n    this.predefinedPosition = false; // used to check if initial fit should just take the range or approximate\n    this.selected = false;\n    this.hover = false;\n\n    this.labelModule = new Label(this.body, this.options, false /* Not edge label */);\n    this.setOptions(options);\n  }\n\n\n  /**\n   * Attach a edge to the node\n   * @param {Edge} edge\n   */\n  attachEdge(edge) {\n    if (this.edges.indexOf(edge) === -1) {\n      this.edges.push(edge);\n    }\n  }\n\n\n  /**\n   * Detach a edge from the node\n   * @param {Edge} edge\n   */\n  detachEdge(edge) {\n    var index = this.edges.indexOf(edge);\n    if (index != -1) {\n      this.edges.splice(index, 1);\n    }\n  }\n\n\n  /**\n   * Set or overwrite options for the node\n   * @param {Object} options an object with options\n   * @param {Object} constants  and object with default, global options\n   */\n  setOptions(options) {\n    let currentShape = this.options.shape;\n    if (!options) {\n      return;\n    }\n    // basic options\n    if (options.id !== undefined)    {this.id = options.id;}\n\n    if (this.id === undefined) {\n      throw \"Node must have an id\";\n    }\n\n\n    // set these options locally\n    // clear x and y positions\n    if (options.x !== undefined) {\n      if (options.x === null) {this.x = undefined; this.predefinedPosition = false;}\n      else                    {this.x = parseInt(options.x); this.predefinedPosition = true;}\n    }\n    if (options.y !== undefined) {\n      if (options.y === null) {this.y = undefined; this.predefinedPosition = false;}\n      else                    {this.y = parseInt(options.y); this.predefinedPosition = true;}\n    }\n    if (options.size !== undefined)  {this.baseSize = options.size;}\n    if (options.value !== undefined) {options.value = parseFloat(options.value);}\n\n    // copy group options\n    if (typeof options.group === 'number' || (typeof options.group === 'string' && options.group != '')) {\n      var groupObj = this.grouplist.get(options.group);\n      util.deepExtend(this.options, groupObj);\n      // the color object needs to be completely defined. Since groups can partially overwrite the colors, we parse it again, just in case.\n      this.options.color = util.parseColor(this.options.color);\n    }\n\n    // this transforms all shorthands into fully defined options\n    Node.parseOptions(this.options, options, true, this.globalOptions);\n\n    this.choosify(options);\n\n    // load the images\n    if (this.options.image !== undefined) {\n      if (this.imagelist) {\n        this.imageObj = this.imagelist.load(this.options.image, this.options.brokenImage, this.id);\n      }\n      else {\n        throw \"No imagelist provided\";\n      }\n    }\n\n    this.updateLabelModule(options);\n    this.updateShape(currentShape);\n    this.labelModule.propagateFonts(this.nodeOptions, options, this.defaultOptions);\n\n    if (options.hidden !== undefined || options.physics !== undefined) {\n      return true;\n    }\n    return false;\n  }\n\n\n  /**\n   * This process all possible shorthands in the new options and makes sure that the parentOptions are fully defined.\n   * Static so it can also be used by the handler.\n   * @param parentOptions\n   * @param newOptions\n   * @param allowDeletion\n   * @param globalOptions\n   */\n  static parseOptions(parentOptions, newOptions, allowDeletion = false, globalOptions = {}) {\n    var fields = [\n      'color',\n      'font',\n      'fixed',\n      'shadow'\n    ];\n    util.selectiveNotDeepExtend(fields, parentOptions, newOptions, allowDeletion);\n\n    // merge the shadow options into the parent.\n    util.mergeOptions(parentOptions, newOptions, 'shadow', allowDeletion, globalOptions);\n\n    // individual shape newOptions\n    if (newOptions.color !== undefined && newOptions.color !== null) {\n      let parsedColor = util.parseColor(newOptions.color);\n      util.fillIfDefined(parentOptions.color, parsedColor);\n    }\n    else if (allowDeletion === true && newOptions.color === null) {\n      parentOptions.color = util.bridgeObject(globalOptions.color); // set the object back to the global options\n    }\n\n    // handle the fixed options\n    if (newOptions.fixed !== undefined && newOptions.fixed !== null) {\n      if (typeof newOptions.fixed === 'boolean') {\n        parentOptions.fixed.x = newOptions.fixed;\n        parentOptions.fixed.y = newOptions.fixed;\n      }\n      else {\n        if (newOptions.fixed.x !== undefined && typeof newOptions.fixed.x === 'boolean') {\n          parentOptions.fixed.x = newOptions.fixed.x;\n        }\n        if (newOptions.fixed.y !== undefined && typeof newOptions.fixed.y === 'boolean') {\n          parentOptions.fixed.y = newOptions.fixed.y;\n        }\n      }\n    }\n\n    // handle the font options\n    if (newOptions.font !== undefined && newOptions.font !== null) {\n      Label.parseOptions(parentOptions.font, newOptions);\n    }\n    else if (allowDeletion === true && newOptions.font === null) {\n      parentOptions.font =  util.bridgeObject(globalOptions.font); // set the object back to the global options\n    }\n\n    // handle the scaling options, specifically the label part\n    if (newOptions.scaling !== undefined) {\n      util.mergeOptions(parentOptions.scaling, newOptions.scaling, 'label', allowDeletion, globalOptions.scaling);\n    }\n  }\n\n  choosify(options) {\n    this.chooser = true;\n\n    let pile = [options, this.options, this.defaultOptions];\n\n    let chosen = util.topMost(pile, 'chosen');\n    if (typeof chosen === 'boolean') {\n      this.chooser = chosen;\n    } else if (typeof chosen === 'object') {\n      let chosenNode = util.topMost(pile, ['chosen', 'node']);\n      if ((typeof chosenNode === 'boolean') || (typeof chosenNode === 'function')) {\n        this.chooser = chosenNode;\n      }\n    }\n  }\n\n  getFormattingValues() {\n    let values = {\n      color: this.options.color.background,\n      borderWidth: this.options.borderWidth,\n      borderColor: this.options.color.border,\n      size: this.options.size,\n      borderDashes: this.options.shapeProperties.borderDashes,\n      borderRadius: this.options.shapeProperties.borderRadius,\n      shadow: this.options.shadow.enabled,\n      shadowColor: this.options.shadow.color,\n      shadowSize: this.options.shadow.size,\n      shadowX: this.options.shadow.x,\n      shadowY: this.options.shadow.y\n    };\n    if (this.selected || this.hover) {\n      if (this.chooser === true) {\n        if (this.selected) {\n          values.borderWidth *= 2;\n          values.color = this.options.color.highlight.background;\n          values.borderColor = this.options.color.highlight.border;\n          values.shadow = this.options.shadow.enabled;\n        } else if (this.hover) {\n          values.color = this.options.color.hover.background;\n          values.borderColor = this.options.color.hover.border;\n          values.shadow = this.options.shadow.enabled;\n        }\n      } else if (typeof this.chooser === 'function') {\n        this.chooser(values, this.options.id, this.selected, this.hover);\n        if (values.shadow === false) {\n          if ((values.shadowColor !== this.options.shadow.color) ||\n              (values.shadowSize !== this.options.shadow.size) ||\n              (values.shadowX !== this.options.shadow.x) ||\n              (values.shadowY !== this.options.shadow.y)) {\n            values.shadow = true;\n          }\n        }\n      }\n    } else {\n      values.shadow = this.options.shadow.enabled;\n    }\n    return values;\n  }\n\n\n  updateLabelModule(options) {\n    if (this.options.label === undefined || this.options.label === null) {\n      this.options.label = '';\n    }\n    this.labelModule.setOptions(this.options, true);\n    if (this.labelModule.baseSize !== undefined) {\n      this.baseFontSize = this.labelModule.baseSize;\n    }\n    this.labelModule.constrain(this.nodeOptions, options, this.defaultOptions);\n    this.labelModule.choosify(this.nodeOptions, options, this.defaultOptions);\n  }\n\n  updateShape(currentShape) {\n    if (currentShape === this.options.shape && this.shape) {\n      this.shape.setOptions(this.options, this.imageObj);\n    }\n    else {\n      // choose draw method depending on the shape\n      switch (this.options.shape) {\n        case 'box':\n          this.shape = new Box(this.options, this.body, this.labelModule);\n          break;\n        case 'circle':\n          this.shape = new Circle(this.options, this.body, this.labelModule);\n          break;\n        case 'circularImage':\n          this.shape = new CircularImage(this.options, this.body, this.labelModule, this.imageObj);\n          break;\n        case 'database':\n          this.shape = new Database(this.options, this.body, this.labelModule);\n          break;\n        case 'diamond':\n          this.shape = new Diamond(this.options, this.body, this.labelModule);\n          break;\n        case 'dot':\n          this.shape = new Dot(this.options, this.body, this.labelModule);\n          break;\n        case 'ellipse':\n          this.shape = new Ellipse(this.options, this.body, this.labelModule);\n          break;\n        case 'icon':\n          this.shape = new Icon(this.options, this.body, this.labelModule);\n          break;\n        case 'image':\n          this.shape = new Image(this.options, this.body, this.labelModule, this.imageObj);\n          break;\n        case 'square':\n          this.shape = new Square(this.options, this.body, this.labelModule);\n          break;\n        case 'star':\n          this.shape = new Star(this.options, this.body, this.labelModule);\n          break;\n        case 'text':\n          this.shape = new Text(this.options, this.body, this.labelModule);\n          break;\n        case 'triangle':\n          this.shape = new Triangle(this.options, this.body, this.labelModule);\n          break;\n        case 'triangleDown':\n          this.shape = new TriangleDown(this.options, this.body, this.labelModule);\n          break;\n        default:\n          this.shape = new Ellipse(this.options, this.body, this.labelModule);\n          break;\n      }\n    }\n    this._reset();\n  }\n\n\n  /**\n   * select this node\n   */\n  select() {\n    this.selected = true;\n    this._reset();\n  }\n\n\n  /**\n   * unselect this node\n   */\n  unselect() {\n    this.selected = false;\n    this._reset();\n  }\n\n\n\n  /**\n   * Reset the calculated size of the node, forces it to recalculate its size\n   * @private\n   */\n  _reset() {\n    this.shape.width = undefined;\n    this.shape.height = undefined;\n  }\n\n\n  /**\n   * get the title of this node.\n   * @return {string} title    The title of the node, or undefined when no title\n   *                           has been set.\n   */\n  getTitle() {\n    return this.options.title;\n  }\n\n\n  /**\n   * Calculate the distance to the border of the Node\n   * @param {CanvasRenderingContext2D}   ctx\n   * @param {Number} angle        Angle in radians\n   * @returns {number} distance   Distance to the border in pixels\n   */\n  distanceToBorder(ctx, angle) {\n    return this.shape.distanceToBorder(ctx,angle);\n  }\n\n\n  /**\n   * Check if this node has a fixed x and y position\n   * @return {boolean}      true if fixed, false if not\n   */\n  isFixed() {\n    return (this.options.fixed.x && this.options.fixed.y);\n  }\n\n\n  /**\n   * check if this node is selecte\n   * @return {boolean} selected   True if node is selected, else false\n   */\n  isSelected() {\n    return this.selected;\n  }\n\n\n  /**\n   * Retrieve the value of the node. Can be undefined\n   * @return {Number} value\n   */\n  getValue() {\n    return this.options.value;\n  }\n\n\n  /**\n   * Adjust the value range of the node. The node will adjust it's size\n   * based on its value.\n   * @param {Number} min\n   * @param {Number} max\n   */\n  setValueRange(min, max, total) {\n    if (this.options.value !== undefined) {\n      var scale = this.options.scaling.customScalingFunction(min, max, total, this.options.value);\n      var sizeDiff = this.options.scaling.max - this.options.scaling.min;\n      if (this.options.scaling.label.enabled === true) {\n        var fontDiff = this.options.scaling.label.max - this.options.scaling.label.min;\n        this.options.font.size = this.options.scaling.label.min + scale * fontDiff;\n      }\n      this.options.size = this.options.scaling.min + scale * sizeDiff;\n    }\n    else {\n      this.options.size = this.baseSize;\n      this.options.font.size = this.baseFontSize;\n    }\n\n    this.updateLabelModule();\n  }\n\n\n  /**\n   * Draw this node in the given canvas\n   * The 2d context of a HTML canvas can be retrieved by canvas.getContext(\"2d\");\n   * @param {CanvasRenderingContext2D}   ctx\n   */\n  draw(ctx) {\n    let values = this.getFormattingValues();\n    this.shape.draw(ctx, this.x, this.y, this.selected, this.hover, values);\n  }\n\n\n  /**\n   * Update the bounding box of the shape\n   */\n  updateBoundingBox(ctx) {\n    this.shape.updateBoundingBox(this.x,this.y,ctx);\n  }\n\n  /**\n   * Recalculate the size of this node in the given canvas\n   * The 2d context of a HTML canvas can be retrieved by canvas.getContext(\"2d\");\n   * @param {CanvasRenderingContext2D}   ctx\n   */\n  resize(ctx) {\n    let values = this.getFormattingValues();\n    this.shape.resize(ctx, this.selected, this.hover, values);\n  }\n\n\n  /**\n   * Check if this object is overlapping with the provided object\n   * @param {Object} obj   an object with parameters left, top, right, bottom\n   * @return {boolean}     True if location is located on node\n   */\n  isOverlappingWith(obj) {\n    return (\n      this.shape.left < obj.right &&\n      this.shape.left + this.shape.width > obj.left &&\n      this.shape.top < obj.bottom &&\n      this.shape.top + this.shape.height > obj.top\n    );\n  }\n\n  /**\n   * Check if this object is overlapping with the provided object\n   * @param {Object} obj   an object with parameters left, top, right, bottom\n   * @return {boolean}     True if location is located on node\n   */\n  isBoundingBoxOverlappingWith(obj) {\n    return (\n      this.shape.boundingBox.left < obj.right &&\n      this.shape.boundingBox.right > obj.left &&\n      this.shape.boundingBox.top < obj.bottom &&\n      this.shape.boundingBox.bottom > obj.top\n    );\n  }\n}\n\nexport default Node;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/Node.js","let util = require('../../../../util');\n\nclass Label {\n  constructor(body, options, edgelabel = false) {\n    this.body = body;\n\n    this.pointToSelf = false;\n    this.baseSize = undefined;\n    this.fontOptions = {};\n    this.setOptions(options);\n    this.size = {top: 0, left: 0, width: 0, height: 0, yLine: 0}; // could be cached\n    this.isEdgeLabel = edgelabel;\n  }\n\n  setOptions(options, allowDeletion = false) {\n    this.elementOptions = options;\n\n    // We want to keep the font options seperated from the node options.\n    // The node options have to mirror the globals when they are not overruled.\n    this.fontOptions = util.deepExtend({},options.font, true);\n\n    if (options.label !== undefined) {\n      this.labelDirty = true;\n    }\n\n    if (options.font !== undefined) {\n      Label.parseOptions(this.fontOptions, options, allowDeletion);\n      if (typeof options.font === 'string') {\n        this.baseSize = this.fontOptions.size;\n      }\n      else if (typeof options.font === 'object') {\n        if (options.font.size !== undefined) {\n          this.baseSize = options.font.size;\n        }\n      }\n    }\n  }\n\n  static parseOptions(parentOptions, newOptions, allowDeletion = false) {\n    if (typeof newOptions.font === 'string') {\n      let newOptionsArray = newOptions.font.split(\" \");\n      parentOptions.size    = newOptionsArray[0].replace(\"px\",'');\n      parentOptions.face    = newOptionsArray[1];\n      parentOptions.color   = newOptionsArray[2];\n      parentOptions.vadjust = 0;\n    }\n    else if (typeof newOptions.font === 'object') {\n      util.fillIfDefined(parentOptions, newOptions.font, allowDeletion);\n    }\n    parentOptions.size    = Number(parentOptions.size);\n    parentOptions.vadjust = Number(parentOptions.vadjust);\n  }\n\n  // set the width and height constraints based on 'nearest' value\n  constrain(elementOptions, options, defaultOptions) {\n    this.fontOptions.constrainWidth = false;\n    this.fontOptions.maxWdt = -1;\n    this.fontOptions.minWdt = -1;\n\n    let pile = [options, elementOptions, defaultOptions];\n\n    let widthConstraint = util.topMost(pile, 'widthConstraint');\n    if (typeof widthConstraint === 'number') {\n      this.fontOptions.maxWdt = Number(widthConstraint);\n      this.fontOptions.minWdt = Number(widthConstraint);\n    } else if (typeof widthConstraint === 'object') {\n      let widthConstraintMaximum = util.topMost(pile, ['widthConstraint', 'maximum']);\n      if (typeof widthConstraintMaximum === 'number') {\n        this.fontOptions.maxWdt = Number(widthConstraintMaximum);\n      }\n      let widthConstraintMinimum = util.topMost(pile, ['widthConstraint', 'minimum'])\n      if (typeof widthConstraintMinimum === 'number') {\n        this.fontOptions.minWdt = Number(widthConstraintMinimum);\n      }\n    }\n\n    this.fontOptions.constrainHeight = false;\n    this.fontOptions.minHgt = -1;\n    this.fontOptions.valign = 'middle';\n\n    let heightConstraint = util.topMost(pile, 'heightConstraint');\n    if (typeof heightConstraint === 'number') {\n      this.fontOptions.minHgt = Number(heightConstraint);\n    } else if (typeof heightConstraint === 'object') {\n      let heightConstraintMinimum = util.topMost(pile, ['heightConstraint', 'minimum']);\n      if (typeof heightConstraintMinimum === 'number') {\n        this.fontOptions.minHgt = Number(heightConstraintMinimum);\n      }\n      let heightConstraintValign = util.topMost(pile, ['heightConstraint', 'valign']);\n      if (typeof heightConstraintValign === 'string') {\n        if ((heightConstraintValign === 'top')||(heightConstraintValign === 'bottom')) {\n            this.fontOptions.valign = heightConstraintValign;\n        }\n      }\n    }\n  }\n\n  // set the selected functions based on 'nearest' value\n  choosify(elementOptions, options, defaultOptions) {\n    this.fontOptions.chooser = true;\n\n    let pile = [options, elementOptions, defaultOptions];\n\n    let chosen = util.topMost(pile, 'chosen');\n    if (typeof chosen === 'boolean') {\n      this.fontOptions.chooser = chosen;\n    } else if (typeof chosen === 'object') {\n      let chosenLabel = util.topMost(pile, ['chosen', 'label']);\n      if ((typeof chosenLabel === 'boolean') || (typeof chosenLabel === 'function')) {\n        this.fontOptions.chooser = chosenLabel;\n      }\n    }\n  }\n\n  // When margins are set in an element, adjust sizes is called to remove them\n  // from the width/height constraints. This must be done prior to label sizing.\n  adjustSizes(margins) {\n    let widthBias =  (margins) ? (margins.right + margins.left) : 0;\n    if (this.fontOptions.constrainWidth) {\n      this.fontOptions.maxWdt -= widthBias;\n      this.fontOptions.minWdt -= widthBias;\n    }\n    let heightBias = (margins) ? (margins.top + margins.bottom)  : 0;\n    if (this.fontOptions.constrainHeight) {\n      this.fontOptions.minHgt -= heightBias;\n    }\n  }\n\n  propagateFonts(options, groupOptions, defaultOptions) {\n    if (this.fontOptions.multi) {\n      let mods = [ 'bold', 'ital', 'boldital', 'mono' ];\n      for (const mod of mods) {\n        let optionsFontMod;\n        if (options.font) {\n          optionsFontMod = options.font[mod];\n        }\n        if (typeof optionsFontMod === 'string') {\n          let modOptionsArray = optionsFontMod.split(\" \");\n          this.fontOptions[mod].size  = modOptionsArray[0].replace(\"px\",\"\");\n          this.fontOptions[mod].face  = modOptionsArray[1];\n          this.fontOptions[mod].color = modOptionsArray[2];\n          this.fontOptions[mod].vadjust = this.fontOptions.vadjust;\n          this.fontOptions[mod].mod = defaultOptions.font[mod].mod;\n        } else {\n          // We need to be crafty about loading the modded fonts. We want as\n          // much 'natural' versatility as we can get, so a simple global\n          // change propagates in an expected way, even if not stictly logical.\n\n          // face: We want to capture any direct settings and overrides, but\n          //       fall back to the base font if there aren't any. We make a\n          //       special exception for mono, since we probably don't want to\n          //       sync to a the base font face.\n          //\n          //   if the mod face is in the node's options, use it\n          //   else if the mod face is in the global options, use it\n          //   else if the face is in the global options, use it\n          //   else use the base font's face.\n          if (optionsFontMod && optionsFontMod.hasOwnProperty('face')) {\n            this.fontOptions[mod].face = optionsFontMod.face;\n          } else if (groupOptions.font && groupOptions.font[mod] &&\n                     groupOptions.font[mod].hasOwnProperty('face')) {\n            this.fontOptions[mod].face = groupOptions.font[mod].face;\n          } else if (mod === 'mono') {\n            this.fontOptions[mod].face = defaultOptions.font[mod].face;\n          } else if (groupOptions.font &&\n                     groupOptions.font.hasOwnProperty('face')) {\n            this.fontOptions[mod].face = groupOptions.font.face;\n          } else {\n            this.fontOptions[mod].face = this.fontOptions.face;\n          }\n\n          // color: this is handled just like the face.\n          if (optionsFontMod && optionsFontMod.hasOwnProperty('color')) {\n            this.fontOptions[mod].color = optionsFontMod.color;\n          } else if (groupOptions.font && groupOptions.font[mod] &&\n                     groupOptions.font[mod].hasOwnProperty('color')) {\n            this.fontOptions[mod].color = groupOptions.font[mod].color;\n          } else if (groupOptions.font &&\n                     groupOptions.font.hasOwnProperty('color')) {\n            this.fontOptions[mod].color = groupOptions.font.color;\n          } else {\n            this.fontOptions[mod].color = this.fontOptions.color;\n          }\n\n          // mod: this is handled just like the face, except we never grab the\n          // base font's mod. We know they're in the defaultOptions, and unless\n          // we've been steered away from them, we use the default.\n          if (optionsFontMod && optionsFontMod.hasOwnProperty('mod')) {\n            this.fontOptions[mod].mod = optionsFontMod.mod;\n          } else if (groupOptions.font && groupOptions.font[mod] &&\n                     groupOptions.font[mod].hasOwnProperty('mod')) {\n            this.fontOptions[mod].mod = groupOptions.font[mod].mod;\n          } else if (groupOptions.font &&\n                     groupOptions.font.hasOwnProperty('mod')) {\n            this.fontOptions[mod].mod = groupOptions.font.mod;\n          } else {\n            this.fontOptions[mod].mod = defaultOptions.font[mod].mod;\n          }\n\n          // size: It's important that we size up defaults similarly if we're\n          //       using default faces unless overriden. We want to preserve the\n          //       ratios closely - but if faces have changed, all bets are off.\n          //\n          //   if the mod size is in the node's options, use it\n          //   else if the mod size is in the global options, use it\n          //   else if the mod face is the same as the default and the base face\n          //     is the same as the default, scale the mod size using the same\n          //     ratio\n          //   else if the size is in the global options, use it\n          //   else use the base font's size.\n          if (optionsFontMod && optionsFontMod.hasOwnProperty('size')) {\n            this.fontOptions[mod].size = optionsFontMod.size;\n          } else if (groupOptions.font && groupOptions.font[mod] &&\n                     groupOptions.font[mod].hasOwnProperty('size')) {\n            this.fontOptions[mod].size = groupOptions.font[mod].size;\n          } else if ((this.fontOptions[mod].face === defaultOptions.font[mod].face) &&\n                     (this.fontOptions.face === defaultOptions.font.face)) {\n            let ratio = this.fontOptions.size / Number(defaultOptions.font.size);\n            this.fontOptions[mod].size = defaultOptions.font[mod].size * ratio;\n          } else if (groupOptions.font &&\n                     groupOptions.font.hasOwnProperty('size')) {\n            this.fontOptions[mod].size = groupOptions.font.size;\n          } else {\n            this.fontOptions[mod].size = this.fontOptions.size;\n          }\n\n          // vadjust: this is handled just like the size.\n          if (optionsFontMod && optionsFontMod.hasOwnProperty('vadjust')) {\n            this.fontOptions[mod].vadjust = optionsFontMod.vadjust;\n          } else if (groupOptions.font &&\n                     groupOptions.font[mod] && groupOptions.font[mod].hasOwnProperty('vadjust')) {\n            this.fontOptions[mod].vadjust = groupOptions.font[mod].vadjust;\n          } else if ((this.fontOptions[mod].face === defaultOptions.font[mod].face) &&\n                     (this.fontOptions.face === defaultOptions.font.face)) {\n            let ratio = this.fontOptions.size / Number(defaultOptions.font.size);\n            this.fontOptions[mod].vadjust = defaultOptions.font[mod].vadjust * Math.round(ratio);\n          } else if (groupOptions.font &&\n                     groupOptions.font.hasOwnProperty('vadjust')) {\n            this.fontOptions[mod].vadjust = groupOptions.font.vadjust;\n          } else {\n            this.fontOptions[mod].vadjust = this.fontOptions.vadjust;\n          }\n        }\n        this.fontOptions[mod].size    = Number(this.fontOptions[mod].size);\n        this.fontOptions[mod].vadjust = Number(this.fontOptions[mod].vadjust);\n      }\n    }\n  }\n\n\n  /**\n   * Main function. This is called from anything that wants to draw a label.\n   * @param ctx\n   * @param x\n   * @param y\n   * @param selected\n   * @param baseline\n   */\n  draw(ctx, x, y, selected, hover, baseline = 'middle') {\n    // if no label, return\n    if (this.elementOptions.label === undefined)\n      return;\n\n    // check if we have to render the label\n    let viewFontSize = this.fontOptions.size * this.body.view.scale;\n    if (this.elementOptions.label && viewFontSize < this.elementOptions.scaling.label.drawThreshold - 1)\n      return;\n\n    // update the size cache if required\n    this.calculateLabelSize(ctx, selected, hover, x, y, baseline);\n\n    // create the fontfill background\n    this._drawBackground(ctx);\n    // draw text\n    this._drawText(ctx, selected, hover, x, y, baseline);\n  }\n\n  /**\n   * Draws the label background\n   * @param {CanvasRenderingContext2D} ctx\n   * @private\n   */\n  _drawBackground(ctx) {\n    if (this.fontOptions.background !== undefined && this.fontOptions.background !== \"none\") {\n      ctx.fillStyle = this.fontOptions.background;\n\n      let lineMargin = 2;\n\n      if (this.isEdgeLabel) {\n        switch (this.fontOptions.align) {\n          case 'middle':\n            ctx.fillRect(-this.size.width * 0.5, -this.size.height * 0.5, this.size.width, this.size.height);\n            break;\n          case 'top':\n            ctx.fillRect(-this.size.width * 0.5, -(this.size.height + lineMargin), this.size.width, this.size.height);\n            break;\n          case 'bottom':\n            ctx.fillRect(-this.size.width * 0.5, lineMargin, this.size.width, this.size.height);\n            break;\n          default:\n            ctx.fillRect(this.size.left, this.size.top - 0.5*lineMargin, this.size.width, this.size.height);\n            break;\n        }\n      } else {\n        ctx.fillRect(this.size.left, this.size.top - 0.5*lineMargin, this.size.width, this.size.height);\n      }\n    }\n  }\n\n\n  /**\n   *\n   * @param ctx\n   * @param x\n   * @param baseline\n   * @private\n   */\n  _drawText(ctx, selected, hover, x, y, baseline = 'middle') {\n    let fontSize = this.fontOptions.size;\n    let viewFontSize = fontSize * this.body.view.scale;\n    // this ensures that there will not be HUGE letters on screen by setting an upper limit on the visible text size (regardless of zoomLevel)\n    if (viewFontSize >= this.elementOptions.scaling.label.maxVisible) {\n      fontSize = Number(this.elementOptions.scaling.label.maxVisible) / this.body.view.scale;\n    }\n\n    let yLine = this.size.yLine;\n    [x, yLine] = this._setAlignment(ctx, x, yLine, baseline);\n\n    ctx.textAlign = 'left'\n    x = x - this.size.width / 2; // Shift label 1/2-distance to the left\n    if ((this.fontOptions.valign) && (this.size.height > this.size.labelHeight)) {\n      if (this.fontOptions.valign === 'top') {\n        yLine -= (this.size.height - this.size.labelHeight) / 2;\n      }\n      if (this.fontOptions.valign === 'bottom') {\n        yLine += (this.size.height - this.size.labelHeight) / 2;\n      }\n    }\n\n    // draw the text\n    for (let i = 0; i < this.lineCount; i++) {\n      if (this.lines[i] && this.lines[i].blocks) {\n        let width = 0;\n        if (this.isEdgeLabel || this.fontOptions.align === 'center') {\n          width += (this.size.width - this.lines[i].width) / 2\n        } else if (this.fontOptions.align === 'right') {\n          width += (this.size.width - this.lines[i].width)\n        }\n        for (let j = 0; j < this.lines[i].blocks.length; j++) {\n          let block = this.lines[i].blocks[j];\n          ctx.font = block.font;\n          let [fontColor, strokeColor] = this._getColor(block.color, viewFontSize, block.strokeColor);\n          if (block.strokeWidth > 0) {\n            ctx.lineWidth = block.strokeWidth;\n            ctx.strokeStyle = strokeColor;\n            ctx.lineJoin = 'round';\n          }\n          ctx.fillStyle = fontColor;\n\n          if (block.strokeWidth > 0) {\n            ctx.strokeText(block.text, x + width, yLine + block.vadjust);\n          }\n          ctx.fillText(block.text, x + width, yLine + block.vadjust);\n          width += block.width;\n        }\n        yLine += this.lines[i].height;\n      }\n    }\n  }\n\n  _setAlignment(ctx, x, yLine, baseline) {\n    // check for label alignment (for edges)\n    // TODO: make alignment for nodes\n    if (this.isEdgeLabel && this.fontOptions.align !== 'horizontal' && this.pointToSelf === false) {\n      x = 0;\n      yLine = 0;\n\n      let lineMargin = 2;\n      if (this.fontOptions.align === 'top') {\n        ctx.textBaseline = 'alphabetic';\n        yLine -= 2 * lineMargin; // distance from edge, required because we use alphabetic. Alphabetic has less difference between browsers\n      }\n      else if (this.fontOptions.align === 'bottom') {\n        ctx.textBaseline = 'hanging';\n        yLine += 2 * lineMargin;// distance from edge, required because we use hanging. Hanging has less difference between browsers\n      }\n      else {\n        ctx.textBaseline = 'middle';\n      }\n    }\n    else {\n      ctx.textBaseline = baseline;\n    }\n    return [x,yLine];\n  }\n\n  /**\n   * fade in when relative scale is between threshold and threshold - 1.\n   * If the relative scale would be smaller than threshold -1 the draw function would have returned before coming here.\n   *\n   * @param viewFontSize\n   * @returns {*[]}\n   * @private\n   */\n  _getColor(color, viewFontSize, initialStrokeColor) {\n    let fontColor = color || '#000000';\n    let strokeColor = initialStrokeColor || '#ffffff';\n    if (viewFontSize <= this.elementOptions.scaling.label.drawThreshold) {\n      let opacity = Math.max(0, Math.min(1, 1 - (this.elementOptions.scaling.label.drawThreshold - viewFontSize)));\n      fontColor = util.overrideOpacity(fontColor, opacity);\n      strokeColor = util.overrideOpacity(strokeColor, opacity);\n    }\n    return [fontColor, strokeColor];\n  }\n\n\n  /**\n   *\n   * @param ctx\n   * @param selected\n   * @returns {{width: number, height: number}}\n   */\n  getTextSize(ctx, selected = false, hover = false) {\n    this._processLabel(ctx, selected, hover);\n    return {\n      width: this.size.width,\n      height: this.size.height,\n      lineCount: this.lineCount\n    };\n  }\n\n\n  /**\n   *\n   * @param ctx\n   * @param selected\n   * @param x\n   * @param y\n   * @param baseline\n   */\n  calculateLabelSize(ctx, selected, hover, x = 0, y = 0, baseline = 'middle') {\n    if (this.labelDirty === true) {\n      this._processLabel(ctx, selected, hover);\n    }\n    this.size.left = x - this.size.width * 0.5;\n    this.size.top = y - this.size.height * 0.5;\n    this.size.yLine = y + (1 - this.lineCount) * 0.5 * this.fontOptions.size;\n    if (baseline === \"hanging\") {\n      this.size.top += 0.5 * this.fontOptions.size;\n      this.size.top += 4;   // distance from node, required because we use hanging. Hanging has less difference between browsers\n      this.size.yLine += 4; // distance from node\n    }\n    this.labelDirty = false;\n  }\n\n  /**\n   * normalize the markup system\n   */\n  decodeMarkupSystem(markupSystem) {\n    let system = 'none';\n    if (markupSystem === 'markdown' || markupSystem === 'md') {\n      system = 'markdown';\n    } else if (markupSystem === true || markupSystem === 'html') {\n      system = 'html'\n    }\n    return system;\n  }\n\n  /**\n   * Explodes a piece of text into single-font blocks using a given markup\n   * @param text\n   * @param markupSystem\n   * @returns [{ text, mod }]\n   */\n  splitBlocks(text, markupSystem) {\n    let system = this.decodeMarkupSystem(markupSystem);\n    if (system === 'none') {\n      return [{\n        text: text,\n        mod: 'normal'\n      }]\n    } else if (system === 'markdown') {\n      return this.splitMarkdownBlocks(text);\n    } else if (system === 'html') {\n      return this.splitHtmlBlocks(text);\n    }\n  }\n\n  splitMarkdownBlocks(text) {\n    let blocks = [];\n    let s = {\n      bold: false,\n      ital: false,\n      mono: false,\n      beginable: true,\n      spacing: false,\n      position: 0,\n      buffer: \"\",\n      modStack: []\n    };\n    s.mod = function() {\n      return (this.modStack.length === 0) ? 'normal' : this.modStack[0];\n    }\n    s.modName = function() {\n      if (this.modStack.length === 0)\n        return 'normal';\n      else if (this.modStack[0] === 'mono')\n        return 'mono';\n      else {\n        if (s.bold && s.ital) {\n          return 'boldital';\n        } else if (s.bold) {\n          return 'bold';\n        } else if (s.ital) {\n          return 'ital';\n        }\n      }\n    }\n    s.emitBlock = function(override = false) {\n      if (this.spacing) {\n        this.add(\" \");\n        this.spacing = false;\n      }\n      if (this.buffer.length > 0) {\n        blocks.push({ text: this.buffer, mod: this.modName() });\n        this.buffer = \"\";\n      }\n    }\n    s.add = function(text) {\n      if (text === \" \") {\n        s.spacing = true;\n      }\n      if (s.spacing) {\n        this.buffer += \" \";\n        this.spacing = false;\n      }\n      if (text != \" \") {\n        this.buffer += text;\n      }\n    }\n    while (s.position < text.length) {\n      let ch = text.charAt(s.position);\n      if (/[ \\t]/.test(ch)) {\n        if (!s.mono) {\n          s.spacing = true;\n        } else {\n          s.add(ch);\n        }\n        s.beginable = true\n      } else if (/\\\\/.test(ch)) {\n        if (s.position < text.length+1) {\n          s.position++;\n          ch = text.charAt(s.position);\n          if (/ \\t/.test(ch)) {\n            s.spacing = true;\n          } else {\n            s.add(ch);\n            s.beginable = false;\n          }\n        }\n      } else if (!s.mono && !s.bold && (s.beginable || s.spacing) && /\\*/.test(ch)) {\n        s.emitBlock();\n        s.bold = true;\n        s.modStack.unshift(\"bold\");\n      } else if (!s.mono && !s.ital && (s.beginable || s.spacing) && /\\_/.test(ch)) {\n        s.emitBlock();\n        s.ital = true;\n        s.modStack.unshift(\"ital\");\n      } else if (!s.mono && (s.beginable || s.spacing) && /`/.test(ch)) {\n        s.emitBlock();\n        s.mono = true;\n        s.modStack.unshift(\"mono\");\n      } else if (!s.mono && (s.mod() === \"bold\") && /\\*/.test(ch)) {\n        if ((s.position === text.length-1) || /[.,_` \\t\\n]/.test(text.charAt(s.position+1))) {\n          s.emitBlock();\n          s.bold = false;\n          s.modStack.shift();\n        } else {\n          s.add(ch);\n        }\n      } else if (!s.mono && (s.mod() === \"ital\") && /\\_/.test(ch)) {\n        if ((s.position === text.length-1) || /[.,*` \\t\\n]/.test(text.charAt(s.position+1))) {\n          s.emitBlock();\n          s.ital = false;\n          s.modStack.shift();\n        } else {\n          s.add(ch);\n        }\n      } else if (s.mono && (s.mod() === \"mono\") && /`/.test(ch)) {\n        if ((s.position === text.length-1) || (/[.,*_ \\t\\n]/.test(text.charAt(s.position+1)))) {\n          s.emitBlock();\n          s.mono = false;\n          s.modStack.shift();\n        } else {\n          s.add(ch);\n        }\n      } else {\n        s.add(ch);\n        s.beginable = false;\n      }\n      s.position++\n    }\n    s.emitBlock();\n    return blocks;\n  }\n\n  splitHtmlBlocks(text) {\n    let blocks = [];\n    let s = {\n      bold: false,\n      ital: false,\n      mono: false,\n      spacing: false,\n      position: 0,\n      buffer: \"\",\n      modStack: []\n    };\n    s.mod = function() {\n      return (this.modStack.length === 0) ? 'normal' : this.modStack[0];\n    }\n    s.modName = function() {\n      if (this.modStack.length === 0)\n        return 'normal';\n      else if (this.modStack[0] === 'mono')\n        return 'mono';\n      else {\n        if (s.bold && s.ital) {\n          return 'boldital';\n        } else if (s.bold) {\n          return 'bold';\n        } else if (s.ital) {\n          return 'ital';\n        }\n      }\n    }\n    s.emitBlock = function(override = false) {\n      if (this.spacing) {\n        this.add(\" \");\n        this.spacing = false;\n      }\n      if (this.buffer.length > 0) {\n        blocks.push({ text: this.buffer, mod: this.modName() });\n        this.buffer = \"\";\n      }\n    }\n    s.add = function(text) {\n      if (text === \" \") {\n        s.spacing = true;\n      }\n      if (s.spacing) {\n        this.buffer += \" \";\n        this.spacing = false;\n      }\n      if (text != \" \") {\n        this.buffer += text;\n      }\n    }\n    while (s.position < text.length) {\n      let ch = text.charAt(s.position);\n      if (/[ \\t]/.test(ch)) {\n        if (!s.mono) {\n          s.spacing = true;\n        } else {\n          s.add(ch);\n        }\n      } else if (/</.test(ch)) {\n        if (!s.mono && !s.bold && /<b>/.test(text.substr(s.position,3))) {\n          s.emitBlock();\n          s.bold = true;\n          s.modStack.unshift(\"bold\");\n          s.position += 2;\n        } else if (!s.mono && !s.ital && /<i>/.test(text.substr(s.position,3))) {\n          s.emitBlock();\n          s.ital = true;\n          s.modStack.unshift(\"ital\");\n          s.position += 2;\n        } else if (!s.mono && /<code>/.test(text.substr(s.position,6))) {\n          s.emitBlock();\n          s.mono = true;\n          s.modStack.unshift(\"mono\");\n          s.position += 5;\n        } else if (!s.mono && (s.mod() === 'bold') && /<\\/b>/.test(text.substr(s.position,4))) {\n          s.emitBlock();\n          s.bold = false;\n          s.modStack.shift();\n          s.position += 3;\n        } else if (!s.mono && (s.mod() === 'ital') && /<\\/i>/.test(text.substr(s.position,4))) {\n          s.emitBlock();\n          s.ital = false;\n          s.modStack.shift();\n          s.position += 3;\n        } else if ((s.mod() === 'mono') && /<\\/code>/.test(text.substr(s.position,7))) {\n          s.emitBlock();\n          s.mono = false;\n          s.modStack.shift();\n          s.position += 6;\n        } else {\n          s.add(ch);\n        }\n      } else if (/&/.test(ch)) {\n        if (/&lt;/.test(text.substr(s.position,4))) {\n          s.add(\"<\");\n          s.position += 3;\n        } else if (/&amp;/.test(text.substr(s.position,5))) {\n          s.add(\"&\");\n          s.position += 4;\n        } else {\n          s.add(\"&\");\n        }\n      } else {\n        s.add(ch);\n      }\n      s.position++\n    }\n    s.emitBlock();\n    return blocks;\n  }\n\n  getFormattingValues(ctx, selected, hover, mod) {\n    let values = {\n      color: (mod === \"normal\") ? this.fontOptions.color : this.fontOptions[mod].color,\n      size: (mod === \"normal\") ? this.fontOptions.size : this.fontOptions[mod].size,\n      face: (mod === \"normal\") ? this.fontOptions.face : this.fontOptions[mod].face,\n      mod: (mod === \"normal\") ? \"\" : this.fontOptions[mod].mod,\n      vadjust: (mod === \"normal\") ? this.fontOptions.vadjust : this.fontOptions[mod].vadjust,\n      strokeWidth: this.fontOptions.strokeWidth,\n      strokeColor: this.fontOptions.strokeColor\n    };\n    if (mod === \"normal\") {\n      if (selected || hover) {\n        if ((this.fontOptions.chooser === true) && (this.elementOptions.labelHighlightBold)) {\n          values.mod = 'bold';\n        } else if (typeof this.fontOptions.chooser === 'function') {\n          this.fontOptions.chooser(ctx, values, this.elementOptions.id, selected, hover);\n        }\n      }\n    } else {\n      if ((selected || hover) && (typeof this.fontOptions.chooser === 'function')) {\n        this.fontOptions.chooser(ctx, values, this.elementOptions.id, selected, hover);\n      }\n    }\n    ctx.font = (values.mod + \" \" + values.size + \"px \" + values.face).replace(/\"/g, \"\");\n    values.font = ctx.font;\n    values.height = values.size;\n    return values;\n  }\n\n  differentState(selected, hover) {\n    return ((selected !== this.fontOptions.selectedState) && (hover !== this.fontOptions.hoverState));\n  }\n\n  /**\n   * This explodes the label string into lines and sets the width, height and number of lines.\n   * @param ctx\n   * @param selected\n   * @private\n   */\n  _processLabel(ctx, selected, hover) {\n    let width = 0;\n    let height = 0;\n    let nlLines = [];\n    let lines = [];\n    let k = 0;\n    lines.add = function(l, text, font, color, width, height, vadjust, mod, strokeWidth, strokeColor) {\n      if (this.length == l) {\n        this[l] = { width: 0, height: 0, blocks: [] };\n      }\n      this[l].blocks.push({ text, font, color, width, height, vadjust, mod, strokeWidth, strokeColor });\n    }\n    lines.accumulate = function(l, width, height) {\n      this[l].width += width;\n      this[l].height = height > this[l].height ? height : this[l].height;\n    }\n    lines.addAndAccumulate = function(l, text, font, color, width, height, vadjust, mod, strokeWidth, strokeColor) {\n      this.add(l, text, font, color, width, height, vadjust, mod, strokeWidth, strokeColor);\n      this.accumulate(l, width, height);\n    }\n    if (this.elementOptions.label !== undefined) {\n      let nlLines = String(this.elementOptions.label).split('\\n');\n      let lineCount = nlLines.length;\n      if (this.elementOptions.font.multi) {\n        for (let i = 0; i < lineCount; i++) {\n          let blocks = this.splitBlocks(nlLines[i], this.elementOptions.font.multi);\n          let lineWidth = 0;\n          let lineHeight = 0;\n          if (blocks) {\n            if (blocks.length == 0) {\n              let values = this.getFormattingValues(ctx, selected, hover, \"normal\");\n              lines.addAndAccumulate(k, \"\", values.font, values.color, 0, values.size, values.vadjust, \"normal\", values.strokeWidth, values.strokeColor);\n              height += lines[k].height;\n              k++;\n              continue;\n            }\n            for (let j = 0; j < blocks.length; j++) {\n              if (this.fontOptions.maxWdt > 0) {\n                let values = this.getFormattingValues(ctx, selected, hover, blocks[j].mod);\n                let words = blocks[j].text.split(\" \");\n                let atStart = true\n                let text = \"\";\n                let measure;\n                let lastMeasure;\n                let w = 0;\n                while (w < words.length) {\n                  let pre = atStart ? \"\" : \" \";\n                  lastMeasure = measure;\n                  measure = ctx.measureText(text + pre + words[w]);\n                  if (lineWidth + measure.width > this.fontOptions.maxWdt) {\n                    lineHeight = (values.height > lineHeight) ? values.height : lineHeight;\n                    lines.add(k, text, values.font, values.color, lastMeasure.width, values.height, values.vadjust, blocks[j].mod, values.strokeWidth, values.strokeColor);\n                    lines.accumulate(k, lastMeasure.width, lineHeight);\n                    text = \"\";\n                    atStart = true;\n                    lineWidth = 0;\n                    width = lines[k].width > width ? lines[k].width : width;\n                    height += lines[k].height;\n                    k++;\n                  } else {\n                    text = text + pre + words[w];\n                    if (w === words.length-1) {\n                      lineHeight = (values.height > lineHeight) ? values.height : lineHeight;\n                      lineWidth += measure.width;\n                      lines.add(k, text, values.font, values.color, measure.width, values.height, values.vadjust, blocks[j].mod, values.strokeWidth, values.strokeColor);\n                      lines.accumulate(k, measure.width, lineHeight);\n                      if (j === blocks.length-1) {\n                        width = lines[k].width > width ? lines[k].width : width;\n                        height += lines[k].height;\n                        k++;\n                      }\n                    }\n                    w++;\n                    atStart = false;\n                  }\n                }\n              } else {\n                let values = this.getFormattingValues(ctx, selected, hover, blocks[j].mod);\n                let measure = ctx.measureText(blocks[j].text);\n                lines.addAndAccumulate(k, blocks[j].text, values.font, values.color, measure.width, values.height, values.vadjust, blocks[j].mod, values.strokeWidth, values.strokeColor);\n                width = lines[k].width > width ? lines[k].width : width;\n                if (blocks.length-1 === j) {\n                  height += lines[k].height;\n                  k++;\n                }\n              }\n            }\n          }\n        }\n      } else {\n        for (let i = 0; i < lineCount; i++) {\n          let values = this.getFormattingValues(ctx, selected, hover, \"normal\");\n          if (this.fontOptions.maxWdt > 0) {\n            let words = nlLines[i].split(\" \");\n            let text = \"\";\n            let measure;\n            let lastMeasure;\n            let w = 0;\n            while (w < words.length) {\n              let pre = (text === \"\") ? \"\" : \" \";\n              lastMeasure = measure;\n              measure = ctx.measureText(text + pre + words[w]);\n              if (measure.width > this.fontOptions.maxWdt) {\n                lines.addAndAccumulate(k, text, values.font, values.color, lastMeasure.width, values.size, values.vadjust, \"normal\", values.strokeWidth, values.strokeColor)\n                width = lines[k].width > width ? lines[k].width : width;\n                height += lines[k].height;\n                text = \"\";\n                k++;\n              } else {\n                text = text + pre + words[w];\n                if (w === words.length-1) {\n                  lines.addAndAccumulate(k, text, values.font, values.color, measure.width, values.size, values.vadjust, \"normal\", values.strokeWidth, values.strokeColor)\n                  width = lines[k].width > width ? lines[k].width : width;\n                  height += lines[k].height;\n                  k++;\n                }\n                w++;\n              }\n            }\n          } else {\n            let text = nlLines[i];\n            let measure = ctx.measureText(text);\n            lines.addAndAccumulate(k, text, values.font, values.color, measure.width, values.size, values.vadjust, \"normal\", values.strokeWidth, values.strokeColor);\n            width = lines[k].width > width ? lines[k].width : width;\n            height += lines[k].height;\n            k++;\n          }\n        }\n      }\n    }\n    if ((this.fontOptions.minWdt > 0) && (width < this.fontOptions.minWdt)) {\n      width = this.fontOptions.minWdt;\n    }\n    this.size.labelHeight = height;\n    if ((this.fontOptions.minHgt > 0) && (height < this.fontOptions.minHgt)) {\n      height = this.fontOptions.minHgt;\n    }\n    this.lines = lines;\n    this.lineCount = lines.length;\n    this.size.width = width;\n    this.size.height = height;\n    this.selectedState = selected;\n    this.hoverState = hover;\n  }\n}\n\nexport default Label;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/shared/Label.js","\"use strict\";\n\nexports.__esModule = true;\n\nvar _isIterable2 = require(\"../core-js/is-iterable\");\n\nvar _isIterable3 = _interopRequireDefault(_isIterable2);\n\nvar _getIterator2 = require(\"../core-js/get-iterator\");\n\nvar _getIterator3 = _interopRequireDefault(_getIterator2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function () {\n  function sliceIterator(arr, i) {\n    var _arr = [];\n    var _n = true;\n    var _d = false;\n    var _e = undefined;\n\n    try {\n      for (var _i = (0, _getIterator3.default)(arr), _s; !(_n = (_s = _i.next()).done); _n = true) {\n        _arr.push(_s.value);\n\n        if (i && _arr.length === i) break;\n      }\n    } catch (err) {\n      _d = true;\n      _e = err;\n    } finally {\n      try {\n        if (!_n && _i[\"return\"]) _i[\"return\"]();\n      } finally {\n        if (_d) throw _e;\n      }\n    }\n\n    return _arr;\n  }\n\n  return function (arr, i) {\n    if (Array.isArray(arr)) {\n      return arr;\n    } else if ((0, _isIterable3.default)(Object(arr))) {\n      return sliceIterator(arr, i);\n    } else {\n      throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n    }\n  };\n}();\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/helpers/slicedToArray.js\n// module id = 161\n// module chunks = 0","module.exports = { \"default\": require(\"core-js/library/fn/is-iterable\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/is-iterable.js\n// module id = 162\n// module chunks = 0","require('../modules/web.dom.iterable');\nrequire('../modules/es6.string.iterator');\nmodule.exports = require('../modules/core.is-iterable');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/fn/is-iterable.js\n// module id = 163\n// module chunks = 0","var classof   = require('./_classof')\n  , ITERATOR  = require('./_wks')('iterator')\n  , Iterators = require('./_iterators');\nmodule.exports = require('./_core').isIterable = function(it){\n  var O = Object(it);\n  return O[ITERATOR] !== undefined\n    || '@@iterator' in O\n    || Iterators.hasOwnProperty(classof(O));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/core.is-iterable.js\n// module id = 164\n// module chunks = 0","'use strict';\n\nimport NodeBase from '../util/NodeBase'\n\nclass Box extends NodeBase {\n  constructor (options, body, labelModule) {\n    super(options,body,labelModule);\n    this._setMargins(labelModule);\n  }\n\n  resize(ctx, selected = this.selected, hover = this.hover) {\n    if ((this.width === undefined) || this.labelModule.differentState(selected, hover)) {\n      this.textSize = this.labelModule.getTextSize(ctx, selected, hover);\n      this.width = this.textSize.width + this.margin.right + this.margin.left;\n      this.height = this.textSize.height + this.margin.top + this.margin.bottom;\n      this.radius = this.width / 2;\n    }\n  }\n\n  draw(ctx, x, y, selected, hover, values) {\n    this.resize(ctx, selected, hover);\n    this.left = x - this.width / 2;\n    this.top = y - this.height / 2;\n\n    ctx.strokeStyle = values.borderColor;\n    ctx.lineWidth = values.borderWidth;\n    ctx.lineWidth /= this.body.view.scale;\n    ctx.lineWidth = Math.min(this.width, ctx.lineWidth);\n\n    ctx.fillStyle = values.color;\n\n    ctx.roundRect(this.left, this.top, this.width, this.height, values.borderRadius);\n\n    // draw shadow if enabled\n    this.enableShadow(ctx, values);\n    // draw the background\n    ctx.fill();\n    // disable shadows for other elements.\n    this.disableShadow(ctx, values);\n\n    //draw dashed border if enabled, save and restore is required for firefox not to crash on unix.\n    ctx.save();\n    // if borders are zero width, they will be drawn with width 1 by default. This prevents that\n    if (values.borderWidth > 0) {\n      this.enableBorderDashes(ctx, values);\n      //draw the border\n      ctx.stroke();\n      //disable dashed border for other elements\n      this.disableBorderDashes(ctx, values);\n    }\n    ctx.restore();\n\n    this.updateBoundingBox(x, y, ctx, selected, hover);\n    this.labelModule.draw(ctx, this.left + this.textSize.width / 2 + this.margin.left,\n                               this.top + this.textSize.height / 2 + this.margin.top, selected, hover);\n  }\n\n  updateBoundingBox(x, y, ctx, selected, hover) {\n    this.resize(ctx, selected, hover);\n    this.left = x - this.width / 2;\n    this.top = y - this.height / 2;\n\n    let borderRadius = this.options.shapeProperties.borderRadius; // only effective for box\n    this.boundingBox.left = this.left - borderRadius;\n    this.boundingBox.top = this.top - borderRadius;\n    this.boundingBox.bottom = this.top + this.height + borderRadius;\n    this.boundingBox.right = this.left + this.width + borderRadius;\n  }\n\n  distanceToBorder(ctx, angle) {\n    this.resize(ctx);\n    let borderWidth = this.options.borderWidth;\n\n    return Math.min(\n        Math.abs((this.width) / 2 / Math.cos(angle)),\n        Math.abs((this.height)  / 2 / Math.sin(angle))) + borderWidth;\n  }\n}\n\nexport default Box;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/nodes/shapes/Box.js","module.exports = { \"default\": require(\"core-js/library/fn/object/get-prototype-of\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/object/get-prototype-of.js\n// module id = 166\n// module chunks = 0","require('../../modules/es6.object.get-prototype-of');\nmodule.exports = require('../../modules/_core').Object.getPrototypeOf;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/fn/object/get-prototype-of.js\n// module id = 167\n// module chunks = 0","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject        = require('./_to-object')\n  , $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function(){\n  return function getPrototypeOf(it){\n    return $getPrototypeOf(toObject(it));\n  };\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es6.object.get-prototype-of.js\n// module id = 168\n// module chunks = 0","\"use strict\";\n\nexports.__esModule = true;\n\nvar _typeof2 = require(\"../helpers/typeof\");\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return call && ((typeof call === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(call)) === \"object\" || typeof call === \"function\") ? call : self;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/helpers/possibleConstructorReturn.js\n// module id = 169\n// module chunks = 0","\"use strict\";\n\nexports.__esModule = true;\n\nvar _setPrototypeOf = require(\"../core-js/object/set-prototype-of\");\n\nvar _setPrototypeOf2 = _interopRequireDefault(_setPrototypeOf);\n\nvar _create = require(\"../core-js/object/create\");\n\nvar _create2 = _interopRequireDefault(_create);\n\nvar _typeof2 = require(\"../helpers/typeof\");\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === \"undefined\" ? \"undefined\" : (0, _typeof3.default)(superClass)));\n  }\n\n  subClass.prototype = (0, _create2.default)(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) _setPrototypeOf2.default ? (0, _setPrototypeOf2.default)(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/helpers/inherits.js\n// module id = 170\n// module chunks = 0","module.exports = { \"default\": require(\"core-js/library/fn/object/set-prototype-of\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/object/set-prototype-of.js\n// module id = 171\n// module chunks = 0","require('../../modules/es6.object.set-prototype-of');\nmodule.exports = require('../../modules/_core').Object.setPrototypeOf;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/fn/object/set-prototype-of.js\n// module id = 172\n// module chunks = 0","// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./_export');\n$export($export.S, 'Object', {setPrototypeOf: require('./_set-proto').set});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/es6.object.set-prototype-of.js\n// module id = 173\n// module chunks = 0","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object')\n  , anObject = require('./_an-object');\nvar check = function(O, proto){\n  anObject(O);\n  if(!isObject(proto) && proto !== null)throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n  set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n    function(test, buggy, set){\n      try {\n        set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n        set(test, []);\n        buggy = !(test instanceof Array);\n      } catch(e){ buggy = true; }\n      return function setPrototypeOf(O, proto){\n        check(O, proto);\n        if(buggy)O.__proto__ = proto;\n        else set(O, proto);\n        return O;\n      };\n    }({}, false) : undefined),\n  check: check\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/core-js/library/modules/_set-proto.js\n// module id = 174\n// module chunks = 0","class NodeBase {\n  constructor(options, body, labelModule) {\n    this.body = body;\n    this.labelModule = labelModule;\n    this.setOptions(options);\n    this.top = undefined;\n    this.left = undefined;\n    this.height = undefined;\n    this.width = undefined;\n    this.radius = undefined;\n    this.margin = undefined;\n    this.boundingBox = {top: 0, left: 0, right: 0, bottom: 0};\n  }\n\n  setOptions(options) {\n    this.options = options;\n  }\n\n  _setMargins(labelModule) {\n    this.margin = {};\n    if (this.options.margin) {\n      if (typeof this.options.margin == 'object') {\n        this.margin.top = this.options.margin.top;\n        this.margin.right = this.options.margin.right;\n        this.margin.bottom = this.options.margin.bottom;\n        this.margin.left = this.options.margin.left;\n      } else {\n        this.margin.top = this.options.margin;\n        this.margin.right = this.options.margin;\n        this.margin.bottom = this.options.margin;\n        this.margin.left = this.options.margin;\n      }\n    }\n    labelModule.adjustSizes(this.margin)\n  }\n\n  _distanceToBorder(ctx,angle) {\n    var borderWidth = this.options.borderWidth;\n    this.resize(ctx);\n    return Math.min(\n        Math.abs(this.width / 2 / Math.cos(angle)),\n        Math.abs(this.height / 2 / Math.sin(angle))) + borderWidth;\n  }\n\n  enableShadow(ctx, values) {\n    if (values.shadow) {\n      ctx.shadowColor = values.shadowColor;\n      ctx.shadowBlur = values.shadowSize;\n      ctx.shadowOffsetX = values.shadowX;\n      ctx.shadowOffsetY = values.shadowY;\n    }\n  }\n\n  disableShadow(ctx, values) {\n    if (values.shadow) {\n      ctx.shadowColor = 'rgba(0,0,0,0)';\n      ctx.shadowBlur = 0;\n      ctx.shadowOffsetX = 0;\n      ctx.shadowOffsetY = 0;\n    }\n  }\n\n  enableBorderDashes(ctx, values) {\n    if (values.borderDashes !== false) {\n      if (ctx.setLineDash !== undefined) {\n        let dashes = values.borderDashes;\n        if (dashes === true) {\n          dashes = [5,15]\n        }\n        ctx.setLineDash(dashes);\n      }\n      else {\n        console.warn(\"setLineDash is not supported in this browser. The dashed borders cannot be used.\");\n        this.options.shapeProperties.borderDashes = false;\n        values.borderDashes = false;\n      }\n    }\n  }\n\n  disableBorderDashes(ctx, values) {\n    if (values.borderDashes !== false) {\n      if (ctx.setLineDash !== undefined) {\n        ctx.setLineDash([0]);\n      }\n      else {\n        console.warn(\"setLineDash is not supported in this browser. The dashed borders cannot be used.\");\n        this.options.shapeProperties.borderDashes = false;\n        values.borderDashes = false;\n      }\n    }\n  }\n}\n\nexport default NodeBase;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/nodes/util/NodeBase.js","'use strict';\n\nimport CircleImageBase from '../util/CircleImageBase'\n\nclass Circle extends CircleImageBase {\n  constructor(options, body, labelModule) {\n    super(options, body, labelModule)\n    this._setMargins(labelModule);\n  }\n\n  resize(ctx, selected = this.selected, hover = this.hover, values = { size: this.options.size}) {\n    if ((this.width === undefined) || (this.labelModule.differentState(selected, hover))) {\n      this.textSize = this.labelModule.getTextSize(ctx, selected, hover);\n      var diameter = Math.max(this.textSize.width + this.margin.right + this.margin.left,\n                              this.textSize.height + this.margin.top + this.margin.bottom);\n      this.options.size = diameter / 2;\n\n      this.width = diameter;\n      this.height = diameter;\n      this.radius = this.width / 2;\n    }\n  }\n\n  draw(ctx, x, y, selected, hover, values) {\n    this.resize(ctx, selected, hover);\n    this.left = x - this.width / 2;\n    this.top = y - this.height / 2;\n\n    this._drawRawCircle(ctx, x, y, selected, hover, values);\n\n    this.boundingBox.top = y - values.size;\n    this.boundingBox.left = x - values.size;\n    this.boundingBox.right = x + values.size;\n    this.boundingBox.bottom = y + values.size;\n\n    this.updateBoundingBox(x,y);\n    this.labelModule.draw(ctx, this.left + this.textSize.width / 2 + this.margin.left,\n                               this.top + this.textSize.height / 2 + this.margin.top, selected, hover);\n  }\n\n  updateBoundingBox(x,y) {\n    this.boundingBox.top = y - this.options.size;\n    this.boundingBox.left = x - this.options.size;\n    this.boundingBox.right = x + this.options.size;\n    this.boundingBox.bottom = y + this.options.size;\n  }\n\n  distanceToBorder(ctx, angle) {\n    this.resize(ctx);\n    return this.width * 0.5;\n  }\n}\n\nexport default Circle;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/nodes/shapes/Circle.js","import NodeBase from '../util/NodeBase'\n\nclass CircleImageBase extends NodeBase {\n  constructor(options, body, labelModule) {\n    super(options, body, labelModule);\n    this.labelOffset = 0;\n    this.imageLoaded = false;\n  }\n\n  setOptions(options, imageObj) {\n    this.options = options;\n    if (imageObj) {\n      this.imageObj = imageObj;\n    }\n  }\n\n  /**\n   * This function resizes the image by the options size when the image has not yet loaded. If the image has loaded, we\n   * force the update of the size again.\n   *\n   * @private\n   */\n  _resizeImage() {\n    let force = false;\n    if (!this.imageObj.width || !this.imageObj.height) { // undefined or 0\n      this.imageLoaded = false;\n    }\n    else if (this.imageLoaded === false) {\n      this.imageLoaded = true;\n      force = true;\n    }\n\n    if (!this.width || !this.height || force === true) {  // undefined or 0\n      var width, height, ratio;\n      if (this.imageObj.width && this.imageObj.height) { // not undefined or 0\n        width = 0;\n        height = 0;\n      }\n      if (this.options.shapeProperties.useImageSize === false) {\n        if (this.imageObj.width > this.imageObj.height) {\n          ratio = this.imageObj.width / this.imageObj.height;\n          width = this.options.size * 2 * ratio || this.imageObj.width;\n          height = this.options.size * 2 || this.imageObj.height;\n        }\n        else {\n          if (this.imageObj.width && this.imageObj.height) { // not undefined or 0\n            ratio = this.imageObj.height / this.imageObj.width;\n          }\n          else {\n            ratio = 1;\n          }\n          width = this.options.size * 2;\n          height = this.options.size * 2 * ratio;\n        }\n      }\n      else {\n        // when not using the size property, we use the image size\n        width = this.imageObj.width;\n        height = this.imageObj.height;\n      }\n      this.width = width;\n      this.height = height;\n      this.radius = 0.5 * this.width;\n    }\n\n  }\n\n  _drawRawCircle(ctx, x, y, selected, hover, values) {\n    var borderWidth = values.borderWidth / this.body.view.scale;\n    ctx.lineWidth = Math.min(this.width, borderWidth);\n\n    ctx.strokeStyle = values.borderColor;\n    ctx.fillStyle = values.color;\n    ctx.circle(x, y, values.size);\n\n    // draw shadow if enabled\n    this.enableShadow(ctx, values);\n    // draw the background\n    ctx.fill();\n    // disable shadows for other elements.\n    this.disableShadow(ctx, values);\n\n    //draw dashed border if enabled, save and restore is required for firefox not to crash on unix.\n    ctx.save();\n    // if borders are zero width, they will be drawn with width 1 by default. This prevents that\n    if (borderWidth > 0) {\n      this.enableBorderDashes(ctx, values);\n      //draw the border\n      ctx.stroke();\n      //disable dashed border for other elements\n      this.disableBorderDashes(ctx, values);\n    }\n    ctx.restore();\n  }\n\n  _drawImageAtPosition(ctx, values) {\n    if (this.imageObj.width != 0) {\n      // draw the image\n      ctx.globalAlpha = 1.0;\n\n      // draw shadow if enabled\n      this.enableShadow(ctx, values);\n\n      let factor = (this.imageObj.width / this.width) / this.body.view.scale;\n      if (factor > 2 && this.options.shapeProperties.interpolation === true) {\n        let w = this.imageObj.width;\n        let h = this.imageObj.height;\n        var can2 = document.createElement('canvas');\n        can2.width = w;\n        can2.height = w;\n        var ctx2 = can2.getContext('2d');\n\n        factor *= 0.5;\n        w *= 0.5;\n        h *= 0.5;\n        ctx2.drawImage(this.imageObj, 0, 0, w, h);\n\n        let distance = 0;\n        let iterations = 1;\n        while (factor > 2 && iterations < 4) {\n          ctx2.drawImage(can2, distance, 0, w, h, distance+w, 0, w/2, h/2);\n          distance += w;\n          factor *= 0.5;\n          w *= 0.5;\n          h *= 0.5;\n          iterations += 1;\n        }\n        ctx.drawImage(can2, distance, 0, w, h, this.left, this.top, this.width, this.height);\n      }\n      else {\n        // draw image\n        ctx.drawImage(this.imageObj, this.left, this.top, this.width, this.height);\n      }\n\n\n      // disable shadows for other elements.\n      this.disableShadow(ctx, values);\n    }\n  }\n\n  _drawImageLabel(ctx, x, y, selected, hover) {\n    var yLabel;\n    var offset = 0;\n\n    if (this.height !== undefined) {\n      offset = this.height * 0.5;\n      var labelDimensions = this.labelModule.getTextSize(ctx, selected, hover);\n      if (labelDimensions.lineCount >= 1) {\n        offset += labelDimensions.height / 2;\n      }\n    }\n\n    yLabel = y + offset;\n\n    if (this.options.label) {\n      this.labelOffset = offset;\n    }\n    this.labelModule.draw(ctx, x, yLabel, selected, hover, 'hanging');\n  }\n}\n\nexport default CircleImageBase;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/nodes/util/CircleImageBase.js","'use strict';\n\n\nimport CircleImageBase from '../util/CircleImageBase'\n\nclass CircularImage extends CircleImageBase {\n  constructor (options, body, labelModule, imageObj) {\n    super(options, body, labelModule);\n    this.imageObj = imageObj;\n    this._swapToImageResizeWhenImageLoaded = true;\n  }\n\n  resize(ctx, selected = this.selected, hover = this.hover) {\n    if ((this.imageObj.src === undefined) ||\n        (this.imageObj.width === undefined) ||\n        (this.imageObj.height === undefined) ||\n        (this.labelModule.differentState(selected, hover))) {\n      var diameter = this.options.size * 2;\n      this.width = diameter;\n      this.height = diameter;\n      this._swapToImageResizeWhenImageLoaded = true;\n      this.radius = 0.5*this.width;\n    } else {\n      if (this._swapToImageResizeWhenImageLoaded) {\n        this.width = undefined;\n        this.height = undefined;\n        this._swapToImageResizeWhenImageLoaded = false;\n      }\n      this._resizeImage();\n    }\n  }\n\n  draw(ctx, x, y, selected, hover, values) {\n    this.resize();\n\n    this.left = x - this.width / 2;\n    this.top = y - this.height / 2;\n\n    let size = Math.min(0.5*this.height, 0.5*this.width);\n\n    // draw the background circle. IMPORTANT: the stroke in this method is used by the clip method below.\n    this._drawRawCircle(ctx, x, y, selected, hover, values);\n\n    // now we draw in the circle, we save so we can revert the clip operation after drawing.\n    ctx.save();\n    // clip is used to use the stroke in drawRawCircle as an area that we can draw in.\n    ctx.clip();\n    // draw the image\n    this._drawImageAtPosition(ctx, values);\n    // restore so we can again draw on the full canvas\n    ctx.restore();\n\n    this._drawImageLabel(ctx, x, y, selected, hover);\n\n    this.updateBoundingBox(x,y);\n  }\n\n  updateBoundingBox(x,y) {\n    this.boundingBox.top = y - this.options.size;\n    this.boundingBox.left = x - this.options.size;\n    this.boundingBox.right = x + this.options.size;\n    this.boundingBox.bottom = y + this.options.size;\n    this.boundingBox.left = Math.min(this.boundingBox.left, this.labelModule.size.left);\n    this.boundingBox.right = Math.max(this.boundingBox.right, this.labelModule.size.left + this.labelModule.size.width);\n    this.boundingBox.bottom = Math.max(this.boundingBox.bottom, this.boundingBox.bottom + this.labelOffset);\n  }\n\n\n  distanceToBorder(ctx, angle) {\n    this.resize(ctx);\n    return this.width * 0.5;\n  }\n}\n\nexport default CircularImage;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/nodes/shapes/CircularImage.js","'use strict';\n\nimport NodeBase from '../util/NodeBase'\n\nclass Database extends NodeBase {\n  constructor (options, body, labelModule) {\n    super(options, body, labelModule);\n    this._setMargins(labelModule);\n  }\n\n  resize(ctx, selected, hover) {\n    if ((this.width === undefined) || (this.labelModule.differentState(selected, hover))) {\n      this.textSize = this.labelModule.getTextSize(ctx, selected, hover);\n      var size = this.textSize.width + this.margin.right + this.margin.left;\n      this.width = size;\n      this.height = size;\n      this.radius = this.width / 2;\n    }\n  }\n\n  draw(ctx, x, y, selected, hover, values) {\n    this.resize(ctx, selected, hover);\n    this.left = x - this.width / 2;\n    this.top  = y - this.height / 2;\n\n    var borderWidth = values.borderWidth / this.body.view.scale;\n    ctx.lineWidth = Math.min(this.width, borderWidth);\n\n    ctx.strokeStyle = values.borderColor;\n\n    ctx.fillStyle = values.color;\n    ctx.database(x - this.width / 2, y - this.height / 2, this.width, this.height);\n\n    // draw shadow if enabled\n    this.enableShadow(ctx, values);\n    // draw the background\n    ctx.fill();\n    // disable shadows for other elements.\n    this.disableShadow(ctx, values);\n\n    //draw dashed border if enabled, save and restore is required for firefox not to crash on unix.\n    ctx.save();\n    // if borders are zero width, they will be drawn with width 1 by default. This prevents that\n    if (borderWidth > 0) {\n      this.enableBorderDashes(ctx, values);\n      //draw the border\n      ctx.stroke();\n      //disable dashed border for other elements\n      this.disableBorderDashes(ctx, values);\n    }\n    ctx.restore();\n\n    this.updateBoundingBox(x, y, ctx, selected, hover);\n    this.labelModule.draw(ctx, this.left + this.textSize.width / 2 + this.margin.left,\n                               this.top + this.textSize.height / 2 + this.margin.top, selected, hover);\n  }\n\n  updateBoundingBox(x, y, ctx, selected, hover) {\n    this.resize(ctx, selected, hover);\n\n    this.left = x - this.width * 0.5;\n    this.top = y - this.height * 0.5;\n\n    this.boundingBox.left = this.left;\n    this.boundingBox.top = this.top;\n    this.boundingBox.bottom = this.top + this.height;\n    this.boundingBox.right = this.left + this.width;\n  }\n\n  distanceToBorder(ctx, angle) {\n    return this._distanceToBorder(ctx,angle);\n  }\n}\n\nexport default Database;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/nodes/shapes/Database.js","'use strict';\n\nimport ShapeBase from '../util/ShapeBase'\n\nclass Diamond extends ShapeBase {\n  constructor(options, body, labelModule) {\n    super(options, body, labelModule)\n  }\n\n  resize(ctx, values, selected = this.selected, hover = this.hover) {\n    this._resizeShape(selected, hover, values);\n  }\n\n  draw(ctx, x, y, selected, hover, values) {\n    this._drawShape(ctx, 'diamond', 4, x, y, selected, hover, values);\n  }\n\n  distanceToBorder(ctx, angle) {\n    return this._distanceToBorder(ctx,angle);\n  }\n}\n\nexport default Diamond;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/nodes/shapes/Diamond.js","import NodeBase from '../util/NodeBase'\n\nclass ShapeBase extends NodeBase {\n  constructor(options, body, labelModule) {\n    super(options, body, labelModule)\n  }\n\n  _resizeShape(selected = this.selected, hover = this.hover, values = { size: this.options.size }) {\n    if ((this.width === undefined) || (this.labelModule.differentState(selected, hover))) {\n      var size = 2 * values.size;\n      this.width = size;\n      this.height = size;\n      this.radius = 0.5*this.width;\n    }\n  }\n\n  _drawShape(ctx, shape, sizeMultiplier, x, y, selected, hover, values) {\n    this._resizeShape(selected, hover, values);\n\n    this.left = x - this.width / 2;\n    this.top = y - this.height / 2;\n\n    var borderWidth = values.borderWidth / this.body.view.scale;\n    ctx.lineWidth = Math.min(this.width, borderWidth);\n\n    ctx.strokeStyle = values.borderColor;\n    ctx.fillStyle = values.color;\n    ctx[shape](x, y, values.size);\n\n    // draw shadow if enabled\n    this.enableShadow(ctx, values);\n    // draw the background\n    ctx.fill();\n    // disable shadows for other elements.\n    this.disableShadow(ctx, values);\n\n    //draw dashed border if enabled, save and restore is required for firefox not to crash on unix.\n    ctx.save();\n    // if borders are zero width, they will be drawn with width 1 by default. This prevents that\n    if (borderWidth > 0) {\n      this.enableBorderDashes(ctx, values);\n      //draw the border\n      ctx.stroke();\n      //disable dashed border for other elements\n      this.disableBorderDashes(ctx, values);\n    }\n    ctx.restore();\n\n    if (this.options.label !== undefined) {\n      let yLabel = y + 0.5 * this.height + 3; // the + 3 is to offset it a bit below the node.\n      this.labelModule.draw(ctx, x, yLabel, selected, hover, 'hanging');\n    }\n\n    this.updateBoundingBox(x,y);\n  }\n\n  updateBoundingBox(x,y) {\n    this.boundingBox.top = y - this.options.size;\n    this.boundingBox.left = x - this.options.size;\n    this.boundingBox.right = x + this.options.size;\n    this.boundingBox.bottom = y + this.options.size;\n\n    if (this.options.label !== undefined && this.labelModule.size.width > 0) {\n      this.boundingBox.left = Math.min(this.boundingBox.left, this.labelModule.size.left);\n      this.boundingBox.right = Math.max(this.boundingBox.right, this.labelModule.size.left + this.labelModule.size.width);\n      this.boundingBox.bottom = Math.max(this.boundingBox.bottom, this.boundingBox.bottom + this.labelModule.size.height + 3);\n    }\n  }\n\n\n\n}\n\nexport default ShapeBase;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/nodes/util/ShapeBase.js","'use strict';\n\nimport ShapeBase from '../util/ShapeBase'\n\nclass Dot extends ShapeBase {\n  constructor(options, body, labelModule) {\n    super(options, body, labelModule)\n  }\n\n  resize(ctx, values, selected = this.selected, hover = this.hover) {\n    this._resizeShape(selected, hover, values);\n  }\n\n  draw(ctx, x, y, selected, hover, values) {\n    this._drawShape(ctx, 'circle', 2, x, y, selected, hover, values);\n  }\n\n  distanceToBorder(ctx, angle) {\n    this.resize(ctx);\n    return this.options.size;\n  }\n}\n\nexport default Dot;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/nodes/shapes/Dot.js","'use strict';\n\nimport NodeBase from '../util/NodeBase'\n\nclass Ellipse extends NodeBase {\n  constructor(options, body, labelModule) {\n    super(options, body, labelModule);\n  }\n\n  resize(ctx, selected = this.selected, hover = this.hover) {\n    if ((this.width === undefined) || (this.labelModule.differentState(selected, hover))) {\n      var textSize = this.labelModule.getTextSize(ctx, selected, hover);\n\n      this.height = textSize.height * 2;\n      this.width = textSize.width + this.height;\n      this.radius = 0.5*this.width;\n    }\n  }\n\n  draw(ctx, x, y, selected, hover, values) {\n    this.resize(ctx, selected, hover);\n    this.left = x - this.width * 0.5;\n    this.top = y - this.height * 0.5;\n\n    var borderWidth = values.borderWidth / this.body.view.scale;\n    ctx.lineWidth = Math.min(this.width, borderWidth);\n\n    ctx.strokeStyle = values.borderColor;\n\n    ctx.fillStyle = values.color;\n    ctx.ellipse(this.left, this.top, this.width, this.height);\n\n    // draw shadow if enabled\n    this.enableShadow(ctx, values);\n    // draw the background\n    ctx.fill();\n    // disable shadows for other elements.\n    this.disableShadow(ctx, values);\n\n    //draw dashed border if enabled, save and restore is required for firefox not to crash on unix.\n    ctx.save();\n\n    // if borders are zero width, they will be drawn with width 1 by default. This prevents that\n    if (borderWidth > 0) {\n      this.enableBorderDashes(ctx, values);\n      //draw the border\n      ctx.stroke();\n      //disable dashed border for other elements\n      this.disableBorderDashes(ctx, values);\n    }\n\n    ctx.restore();\n\n    this.updateBoundingBox(x, y, ctx, selected, hover);\n    this.labelModule.draw(ctx, x, y, selected, hover);\n  }\n\n  updateBoundingBox(x, y, ctx, selected, hover) {\n    this.resize(ctx, selected, hover); // just in case\n\n    this.left = x - this.width * 0.5;\n    this.top = y - this.height * 0.5;\n\n    this.boundingBox.left = this.left;\n    this.boundingBox.top = this.top;\n    this.boundingBox.bottom = this.top + this.height;\n    this.boundingBox.right = this.left + this.width;\n  }\n\n  distanceToBorder(ctx, angle) {\n    this.resize(ctx);\n    var a = this.width * 0.5;\n    var b = this.height * 0.5;\n    var w = (Math.sin(angle) * a);\n    var h = (Math.cos(angle) * b);\n    return a * b / Math.sqrt(w * w + h * h);\n  }\n}\n\nexport default Ellipse;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/nodes/shapes/Ellipse.js","'use strict';\n\nimport NodeBase from '../util/NodeBase'\n\nclass Icon extends NodeBase {\n  constructor(options, body, labelModule) {\n    super(options, body, labelModule);\n    this._setMargins(labelModule);\n  }\n\n  resize(ctx, selected, hover) {\n    if ((this.width === undefined) || (this.labelModule.differentState(selected, hover))) {\n      this.iconSize = {\n        width: Number(this.options.icon.size),\n        height: Number(this.options.icon.size)\n      };\n      this.width = this.iconSize.width + this.margin.right + this.margin.left;\n      this.height = this.iconSize.height + this.margin.top + this.margin.bottom;\n      this.radius = 0.5*this.width;\n    }\n  }\n\n  draw(ctx, x, y, selected, hover, values) {\n    this.resize(ctx, selected, hover);\n    this.options.icon.size = this.options.icon.size || 50;\n\n    this.left = x - this.width / 2;\n    this.top  = y - this.height / 2;\n    this._icon(ctx, x, y, selected, hover, values);\n\n    if (this.options.label !== undefined) {\n      var iconTextSpacing = 5;\n      this.labelModule.draw(ctx, this.left + this.iconSize.width / 2 + this.margin.left,\n                                 y + this.height / 2 + iconTextSpacing, selected);\n    }\n\n    this.updateBoundingBox(x, y)\n  }\n\n  updateBoundingBox(x, y) {\n    this.boundingBox.top    = y - this.options.icon.size * 0.5;\n    this.boundingBox.left   = x - this.options.icon.size * 0.5;\n    this.boundingBox.right  = x + this.options.icon.size * 0.5;\n    this.boundingBox.bottom = y + this.options.icon.size * 0.5;\n\n    if (this.options.label !== undefined && this.labelModule.size.width > 0) {\n      var iconTextSpacing = 5;\n      this.boundingBox.left = Math.min(this.boundingBox.left, this.labelModule.size.left);\n      this.boundingBox.right = Math.max(this.boundingBox.right, this.labelModule.size.left + this.labelModule.size.width);\n      this.boundingBox.bottom = Math.max(this.boundingBox.bottom, this.boundingBox.bottom + this.labelModule.size.height + iconTextSpacing);\n    }\n  }\n\n  _icon(ctx, x, y, selected, hover, values) {\n    let iconSize = Number(this.options.icon.size);\n\n    if (this.options.icon.code !== undefined) {\n      ctx.font = (selected ? \"bold \" : \"\") + iconSize + \"px \" + this.options.icon.face;\n\n      // draw icon\n      ctx.fillStyle = this.options.icon.color || \"black\";\n      ctx.textAlign = \"center\";\n      ctx.textBaseline = \"middle\";\n\n      // draw shadow if enabled\n      this.enableShadow(ctx, values);\n      ctx.fillText(this.options.icon.code, x, y);\n\n      // disable shadows for other elements.\n      this.disableShadow(ctx, values);\n    } else {\n      console.error('When using the icon shape, you need to define the code in the icon options object. This can be done per node or globally.')\n    }\n\n  }\n\n  distanceToBorder(ctx, angle) {\n    return this._distanceToBorder(ctx,angle);\n  }\n}\n\nexport default Icon;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/nodes/shapes/Icon.js","'use strict';\n\nimport CircleImageBase from '../util/CircleImageBase'\n\nclass Image extends CircleImageBase {\n  constructor (options, body, labelModule, imageObj) {\n    super(options, body, labelModule);\n    this.imageObj = imageObj;\n  }\n\n  resize() {\n    this._resizeImage();\n  }\n\n  draw(ctx, x, y, selected, hover, values) {\n    this.resize();\n    this.left = x - this.width / 2;\n    this.top = y - this.height / 2;\n\n    if (this.options.shapeProperties.useBorderWithImage === true) {\n      var neutralborderWidth = this.options.borderWidth;\n      var selectionLineWidth = this.options.borderWidthSelected || 2 * this.options.borderWidth;\n      var borderWidth = (selected ? selectionLineWidth : neutralborderWidth) / this.body.view.scale;\n      ctx.lineWidth = Math.min(this.width, borderWidth);\n\n      ctx.beginPath();\n\n      // setup the line properties.\n      ctx.strokeStyle = selected ? this.options.color.highlight.border : hover ? this.options.color.hover.border : this.options.color.border;\n\n      // set a fillstyle\n      ctx.fillStyle = selected ? this.options.color.highlight.background : hover ? this.options.color.hover.background : this.options.color.background;\n\n      // draw a rectangle to form the border around. This rectangle is filled so the opacity of a picture (in future vis releases?) can be used to tint the image\n      ctx.rect(this.left - 0.5 * ctx.lineWidth,\n        this.top - 0.5 * ctx.lineWidth,\n        this.width + ctx.lineWidth,\n        this.height + ctx.lineWidth);\n      ctx.fill();\n\n      //draw dashed border if enabled, save and restore is required for firefox not to crash on unix.\n      ctx.save();\n      // if borders are zero width, they will be drawn with width 1 by default. This prevents that\n      if (borderWidth > 0) {\n        this.enableBorderDashes(ctx);\n        //draw the border\n        ctx.stroke();\n        //disable dashed border for other elements\n        this.disableBorderDashes(ctx);\n      }\n      ctx.restore();\n\n      ctx.closePath();\n    }\n\n    this._drawImageAtPosition(ctx, values);\n\n    this._drawImageLabel(ctx, x, y, selected, hover);\n\n    this.updateBoundingBox(x,y);\n  }\n\n  updateBoundingBox(x,y) {\n    this.resize();\n    this.left = x - this.width / 2;\n    this.top = y - this.height / 2;\n\n    this.boundingBox.top = this.top;\n    this.boundingBox.left = this.left;\n    this.boundingBox.right = this.left + this.width;\n    this.boundingBox.bottom = this.top + this.height;\n\n    if (this.options.label !== undefined && this.labelModule.size.width > 0) {\n      this.boundingBox.left = Math.min(this.boundingBox.left, this.labelModule.size.left);\n      this.boundingBox.right = Math.max(this.boundingBox.right, this.labelModule.size.left + this.labelModule.size.width);\n      this.boundingBox.bottom = Math.max(this.boundingBox.bottom, this.boundingBox.bottom + this.labelOffset);\n    }\n  }\n\n  distanceToBorder(ctx, angle) {\n     return this._distanceToBorder(ctx,angle);\n  }\n}\n\nexport default Image;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/nodes/shapes/Image.js","'use strict';\n\nimport ShapeBase from '../util/ShapeBase'\n\nclass Square extends ShapeBase {\n  constructor(options, body, labelModule) {\n    super(options, body, labelModule)\n  }\n\n  resize() {\n    this._resizeShape();\n  }\n\n  draw(ctx, x, y, selected, hover, values) {\n    this._drawShape(ctx, 'square', 2, x, y, selected, hover, values);\n  }\n\n  distanceToBorder(ctx, angle) {\n    return this._distanceToBorder(ctx,angle);\n  }\n}\n\nexport default Square;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/nodes/shapes/Square.js","'use strict';\n\nimport ShapeBase from '../util/ShapeBase'\n\nclass Star extends ShapeBase {\n  constructor(options, body, labelModule) {\n    super(options, body, labelModule)\n  }\n\n  resize(ctx, values, selected, hover) {\n    this._resizeShape(selected, hover, values);\n  }\n\n  draw(ctx, x, y, selected, hover, values) {\n    this._drawShape(ctx, 'star', 4, x, y, selected, hover, values);\n  }\n\n  distanceToBorder(ctx, angle) {\n    return this._distanceToBorder(ctx,angle);\n  }\n}\n\nexport default Star;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/nodes/shapes/Star.js","'use strict';\n\nimport NodeBase from '../util/NodeBase'\n\nclass Text extends NodeBase {\n  constructor(options, body, labelModule) {\n    super(options, body, labelModule);\n    this._setMargins(labelModule);\n  }\n\n  resize(ctx, selected, hover) {\n    if ((this.width === undefined) || this.labelModule.differentState(selected, hover)) {\n      this.textSize = this.labelModule.getTextSize(ctx, selected, hover);\n      this.width = this.textSize.width + this.margin.right + this.margin.left;\n      this.height = this.textSize.height + this.margin.top + this.margin.bottom;\n      this.radius = 0.5*this.width;\n    }\n  }\n\n  draw(ctx, x, y, selected, hover, values) {\n    this.resize(ctx, selected, hover);\n    this.left = x - this.width / 2;\n    this.top = y - this.height / 2;\n\n    // draw shadow if enabled\n    this.enableShadow(ctx, values);\n    this.labelModule.draw(ctx, this.left + this.textSize.width / 2 + this.margin.left,\n                               this.top + this.textSize.height / 2 + this.margin.top, selected, hover);\n\n    // disable shadows for other elements.\n    this.disableShadow(ctx, values);\n\n    this.updateBoundingBox(x, y, ctx, selected, hover);\n  }\n\n  updateBoundingBox(x, y, ctx, selected, hover) {\n    this.resize(ctx, selected, hover);\n\n    this.left = x - this.width / 2;\n    this.top = y - this.height / 2;\n\n    this.boundingBox.top = this.top;\n    this.boundingBox.left = this.left;\n    this.boundingBox.right = this.left + this.width;\n    this.boundingBox.bottom = this.top + this.height;\n  }\n\n  distanceToBorder(ctx, angle) {\n    return this._distanceToBorder(ctx,angle);\n  }\n}\n\nexport default Text;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/nodes/shapes/Text.js","'use strict';\n\nimport ShapeBase from '../util/ShapeBase'\n\nclass Triangle extends ShapeBase {\n  constructor(options, body, labelModule) {\n    super(options, body, labelModule)\n  }\n\n  resize(ctx) {\n    this._resizeShape();\n  }\n\n  draw(ctx, x, y, selected, hover, values) {\n    this._drawShape(ctx, 'triangle', 3, x, y, selected, hover, values);\n  }\n\n  distanceToBorder(ctx, angle) {\n    return this._distanceToBorder(ctx,angle);\n  }\n}\n\nexport default Triangle;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/nodes/shapes/Triangle.js","'use strict';\n\nimport ShapeBase from '../util/ShapeBase'\n\nclass TriangleDown extends ShapeBase {\n  constructor(options, body, labelModule) {\n    super(options, body, labelModule)\n  }\n\n  resize(ctx) {\n    this._resizeShape();\n  }\n\n  draw(ctx, x, y, selected, hover, values) {\n    this._drawShape(ctx, 'triangleDown', 3, x, y, selected, hover, values);\n  }\n\n  distanceToBorder(ctx, angle) {\n    return this._distanceToBorder(ctx,angle);\n  }\n}\n\nexport default TriangleDown;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/nodes/shapes/TriangleDown.js","var util = require(\"../../util\");\nvar DataSet = require('../../DataSet');\nvar DataView = require('../../DataView');\n\nimport Edge  from \"./components/Edge\"\nimport Label from \"./components/shared/Label\"\n\nclass EdgesHandler {\n  constructor(body, images, groups) {\n    this.body = body;\n    this.images = images;\n    this.groups = groups;\n\n    // create the edge API in the body container\n    this.body.functions.createEdge = this.create.bind(this);\n\n    this.edgesListeners = {\n      add:    (event, params) => {this.add(params.items);},\n      update: (event, params) => {this.update(params.items);},\n      remove: (event, params) => {this.remove(params.items);}\n    };\n\n    this.options = {};\n    this.defaultOptions = {\n      arrows: {\n        to:     {enabled: false, scaleFactor:1, type: 'arrow'}, // boolean / {arrowScaleFactor:1} / {enabled: false, arrowScaleFactor:1}\n        middle: {enabled: false, scaleFactor:1, type: 'arrow'},\n        from:   {enabled: false, scaleFactor:1, type: 'arrow'}\n      },\n      arrowStrikethrough: true,\n      color: {\n        color:'#848484',\n        highlight:'#848484',\n        hover: '#848484',\n        inherit: 'from',\n        opacity:1.0\n      },\n      dashes: false,\n      font: {\n        color: '#343434',\n        size: 14, // px\n        face: 'arial',\n        background: 'none',\n        strokeWidth: 2, // px\n        strokeColor: '#ffffff',\n        align:'horizontal',\n        multi: false,\n        vadjust: 0,\n        bold: {\n          mod: 'bold'\n        },\n        boldital: {\n          mod: 'bold italic'\n        },\n        ital: {\n          mod: 'italic'\n        },\n        mono: {\n          mod: '',\n          size: 15, // px\n          face: 'courier new',\n          vadjust: 2\n        }\n      },\n      hidden: false,\n      hoverWidth: 1.5,\n      label: undefined,\n      labelHighlightBold: true,\n      length: undefined,\n      physics: true,\n      scaling:{\n        min: 1,\n        max: 15,\n        label: {\n          enabled: true,\n          min: 14,\n          max: 30,\n          maxVisible: 30,\n          drawThreshold: 5\n        },\n        customScalingFunction: function (min,max,total,value) {\n          if (max === min) {\n            return 0.5;\n          }\n          else {\n            var scale = 1 / (max - min);\n            return Math.max(0,(value - min)*scale);\n          }\n        }\n      },\n      selectionWidth: 1.5,\n      selfReferenceSize:20,\n      shadow:{\n        enabled: false,\n        color: 'rgba(0,0,0,0.5)',\n        size:10,\n        x:5,\n        y:5\n      },\n      smooth: {\n        enabled: true,\n        type: \"dynamic\",\n        forceDirection:'none',\n        roundness: 0.5\n      },\n      title:undefined,\n      width: 1,\n      value: undefined\n    };\n\n    util.extend(this.options, this.defaultOptions);\n\n    this.bindEventListeners();\n  }\n\n  bindEventListeners() {\n    // this allows external modules to force all dynamic curves to turn static.\n    this.body.emitter.on(\"_forceDisableDynamicCurves\", (type) => {\n      if (type === 'dynamic') {\n        type = 'continuous';\n      }\n      let emitChange = false;\n      for (let edgeId in this.body.edges) {\n        if (this.body.edges.hasOwnProperty(edgeId)) {\n          let edge = this.body.edges[edgeId];\n          let edgeData = this.body.data.edges._data[edgeId];\n\n          // only forcibly remove the smooth curve if the data has been set of the edge has the smooth curves defined.\n          // this is because a change in the global would not affect these curves.\n          if (edgeData !== undefined) {\n            let edgeOptions = edgeData.smooth;\n            if (edgeOptions !== undefined) {\n              if (edgeOptions.enabled === true && edgeOptions.type === 'dynamic') {\n                if (type === undefined) {\n                  edge.setOptions({smooth: false});\n                }\n                else {\n                  edge.setOptions({smooth: {type: type}});\n                }\n                emitChange = true;\n              }\n            }\n          }\n        }\n      }\n      if (emitChange === true) {\n        this.body.emitter.emit(\"_dataChanged\");\n      }\n    });\n\n    // this is called when options of EXISTING nodes or edges have changed.\n    this.body.emitter.on(\"_dataUpdated\", () => {\n      this.reconnectEdges();\n    });\n\n    // refresh the edges. Used when reverting from hierarchical layout\n    this.body.emitter.on(\"refreshEdges\", this.refresh.bind(this));\n    this.body.emitter.on(\"refresh\",      this.refresh.bind(this));\n    this.body.emitter.on(\"destroy\",      () => {\n      util.forEach(this.edgesListeners, (callback, event) => {\n        if (this.body.data.edges)\n          this.body.data.edges.off(event, callback);\n      });\n      delete this.body.functions.createEdge;\n      delete this.edgesListeners.add;\n      delete this.edgesListeners.update;\n      delete this.edgesListeners.remove;\n      delete this.edgesListeners;\n    });\n\n  }\n\n  setOptions(options) {\n    this.edgeOptions = options;\n    if (options !== undefined) {\n      // use the parser from the Edge class to fill in all shorthand notations\n      Edge.parseOptions(this.options, options);\n\n      // update smooth settings in all edges\n      let dataChanged = false;\n      if (options.smooth !== undefined) {\n        for (let edgeId in this.body.edges) {\n          if (this.body.edges.hasOwnProperty(edgeId)) {\n            dataChanged = this.body.edges[edgeId].updateEdgeType() || dataChanged;\n          }\n        }\n      }\n\n      // update fonts in all edges\n      if (options.font !== undefined) {\n        // use the parser from the Label class to fill in all shorthand notations\n        Label.parseOptions(this.options.font, options);\n        for (let edgeId in this.body.edges) {\n          if (this.body.edges.hasOwnProperty(edgeId)) {\n            this.body.edges[edgeId].updateLabelModule();\n          }\n        }\n      }\n\n      // update the state of the variables if needed\n      if (options.hidden !== undefined || options.physics !== undefined  || dataChanged === true) {\n        this.body.emitter.emit('_dataChanged');\n      }\n    }\n  }\n\n\n  /**\n   * Load edges by reading the data table\n   * @param {Array | DataSet | DataView} edges    The data containing the edges.\n   * @private\n   * @private\n   */\n  setData(edges, doNotEmit = false) {\n    var oldEdgesData = this.body.data.edges;\n\n    if (edges instanceof DataSet || edges instanceof DataView) {\n      this.body.data.edges = edges;\n    }\n    else if (Array.isArray(edges)) {\n      this.body.data.edges = new DataSet();\n      this.body.data.edges.add(edges);\n    }\n    else if (!edges) {\n      this.body.data.edges = new DataSet();\n    }\n    else {\n      throw new TypeError('Array or DataSet expected');\n    }\n\n    // TODO: is this null or undefined or false?\n    if (oldEdgesData) {\n      // unsubscribe from old dataset\n      util.forEach(this.edgesListeners, (callback, event) => {oldEdgesData.off(event, callback);});\n    }\n\n    // remove drawn edges\n    this.body.edges = {};\n\n    // TODO: is this null or undefined or false?\n    if (this.body.data.edges) {\n      // subscribe to new dataset\n      util.forEach(this.edgesListeners, (callback, event) =>  {this.body.data.edges.on(event, callback);});\n\n      // draw all new nodes\n      var ids = this.body.data.edges.getIds();\n      this.add(ids, true);\n    }\n\n    if (doNotEmit === false) {\n      this.body.emitter.emit(\"_dataChanged\");\n    }\n  }\n\n\n  /**\n   * Add edges\n   * @param {Number[] | String[]} ids\n   * @private\n   */\n  add(ids, doNotEmit = false) {\n    var edges = this.body.edges;\n    var edgesData = this.body.data.edges;\n\n    for (let i = 0; i < ids.length; i++) {\n      var id = ids[i];\n\n      var oldEdge = edges[id];\n      if (oldEdge) {\n        oldEdge.disconnect();\n      }\n\n      var data = edgesData.get(id, {\"showInternalIds\" : true});\n      edges[id] = this.create(data);\n    }\n\n    if (doNotEmit === false) {\n      this.body.emitter.emit(\"_dataChanged\");\n    }\n  }\n\n\n\n  /**\n   * Update existing edges, or create them when not yet existing\n   * @param {Number[] | String[]} ids\n   * @private\n   */\n  update(ids) {\n    var edges = this.body.edges;\n    var edgesData = this.body.data.edges;\n    var dataChanged = false;\n    for (var i = 0; i < ids.length; i++) {\n      var id = ids[i];\n      var data = edgesData.get(id);\n      var edge = edges[id];\n      if (edge !== undefined) {\n        // update edge\n        edge.disconnect();\n        dataChanged = edge.setOptions(data) || dataChanged; // if a support node is added, data can be changed.\n        edge.connect();\n      }\n      else {\n        // create edge\n        this.body.edges[id] = this.create(data);\n        dataChanged = true;\n      }\n    }\n\n    if (dataChanged === true) {\n      this.body.emitter.emit(\"_dataChanged\");\n    }\n    else {\n      this.body.emitter.emit(\"_dataUpdated\");\n    }\n  }\n\n\n\n  /**\n   * Remove existing edges. Non existing ids will be ignored\n   * @param {Number[] | String[]} ids\n   * @private\n   */\n  remove(ids) {\n    var edges = this.body.edges;\n    for (var i = 0; i < ids.length; i++) {\n      var id = ids[i];\n      var edge = edges[id];\n      if (edge !== undefined) {\n        edge.cleanup();\n        edge.disconnect();\n        delete edges[id];\n      }\n    }\n\n    this.body.emitter.emit(\"_dataChanged\");\n  }\n\n  refresh() {\n    let edges = this.body.edges;\n    for (let edgeId in edges) {\n      let edge = undefined;\n      if (edges.hasOwnProperty(edgeId)) {\n        edge = edges[edgeId];\n      }\n      let data = this.body.data.edges._data[edgeId];\n      if (edge !== undefined && data !== undefined) {\n        edge.setOptions(data);\n      }\n    }\n  }\n\n  create(properties) {\n    return new Edge(properties, this.body, this.options, this.defaultOptions, this.edgeOptions)\n  }\n\n  /**\n   * Reconnect all edges\n   * @private\n   */\n  reconnectEdges() {\n    var id;\n    var nodes = this.body.nodes;\n    var edges = this.body.edges;\n\n    for (id in nodes) {\n      if (nodes.hasOwnProperty(id)) {\n        nodes[id].edges = [];\n      }\n    }\n\n    for (id in edges) {\n      if (edges.hasOwnProperty(id)) {\n        var edge = edges[id];\n        edge.from = null;\n        edge.to = null;\n        edge.connect();\n      }\n    }\n  }\n\n\n  getConnectedNodes(edgeId) {\n    let nodeList = [];\n    if (this.body.edges[edgeId] !== undefined) {\n      let edge = this.body.edges[edgeId];\n      if (edge.fromId) {nodeList.push(edge.fromId);}\n      if (edge.toId)   {nodeList.push(edge.toId);}\n    }\n    return nodeList;\n  }\n\n}\n\nexport default EdgesHandler;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/EdgesHandler.js","var util = require('../../../util');\n\nimport Label              from './shared/Label'\nimport CubicBezierEdge    from './edges/CubicBezierEdge'\nimport BezierEdgeDynamic  from './edges/BezierEdgeDynamic'\nimport BezierEdgeStatic   from './edges/BezierEdgeStatic'\nimport StraightEdge       from './edges/StraightEdge'\n\n/**\n * @class Edge\n *\n * A edge connects two nodes\n * @param {Object} properties     Object with options. Must contain\n *                                At least options from and to.\n *                                Available options: from (number),\n *                                to (number), label (string, color (string),\n *                                width (number), style (string),\n *                                length (number), title (string)\n * @param {Network} network       A Network object, used to find and edge to\n *                                nodes.\n * @param {Object} constants      An object with default values for\n *                                example for the color\n */\nclass Edge {\n  constructor(options, body, globalOptions, defaultOptions, edgeOptions) {\n    if (body === undefined) {\n      throw \"No body provided\";\n    }\n    this.options = util.bridgeObject(globalOptions);\n    this.globalOptions = globalOptions;\n    this.defaultOptions = defaultOptions;\n    this.edgeOptions = edgeOptions;\n    this.body = body;\n\n    // initialize variables\n    this.id = undefined;\n    this.fromId = undefined;\n    this.toId = undefined;\n    this.selected = false;\n    this.hover = false;\n    this.labelDirty = true;\n\n    this.baseWidth = this.options.width;\n    this.baseFontSize = this.options.font.size;\n\n    this.from = undefined; // a node\n    this.to   = undefined; // a node\n\n    this.edgeType = undefined;\n\n    this.connected = false;\n\n    this.labelModule = new Label(this.body, this.options, true /* It's an edge label */);\n    this.setOptions(options);\n  }\n\n\n  /**\n   * Set or overwrite options for the edge\n   * @param {Object} options  an object with options\n   * @param doNotEmit\n   */\n  setOptions(options) {\n    if (!options) {\n      return;\n    }\n\n    Edge.parseOptions(this.options, options, true, this.globalOptions);\n\n    if (options.id !== undefined) {\n      this.id = options.id;\n    }\n    if (options.from !== undefined) {\n      this.fromId = options.from;\n    }\n    if (options.to !== undefined) {\n      this.toId = options.to;\n    }\n    if (options.title !== undefined) {\n      this.title = options.title;\n    }\n    if (options.value !== undefined)  {\n      options.value = parseFloat(options.value);\n    }\n\n    this.choosify(options);\n\n    // update label Module\n    this.updateLabelModule(options);\n    this.labelModule.propagateFonts(this.edgeOptions, options, this.defaultOptions);\n\n    let dataChanged = this.updateEdgeType();\n\n    // if anything has been updates, reset the selection width and the hover width\n    this._setInteractionWidths();\n\n    // A node is connected when it has a from and to node that both exist in the network.body.nodes.\n    this.connect();\n\n    if (options.hidden !== undefined || options.physics !== undefined) {\n      dataChanged = true;\n    }\n\n    return dataChanged;\n  }\n\n  static parseOptions(parentOptions, newOptions, allowDeletion = false, globalOptions = {}) {\n    var fields = [\n      'arrowStrikethrough',\n      'id',\n      'from',\n      'hidden',\n      'hoverWidth',\n      'label',\n      'labelHighlightBold',\n      'length',\n      'line',\n      'opacity',\n      'physics',\n      'scaling',\n      'selectionWidth',\n      'selfReferenceSize',\n      'to',\n      'title',\n      'value',\n      'width'\n    ];\n\n    // only deep extend the items in the field array. These do not have shorthand.\n    util.selectiveDeepExtend(fields, parentOptions, newOptions, allowDeletion);\n\n    util.mergeOptions(parentOptions, newOptions, 'smooth', allowDeletion, globalOptions);\n    util.mergeOptions(parentOptions, newOptions, 'shadow', allowDeletion, globalOptions);\n\n    if (newOptions.dashes !== undefined && newOptions.dashes !== null) {\n      parentOptions.dashes = newOptions.dashes;\n    }\n    else if (allowDeletion === true && newOptions.dashes === null) {\n      parentOptions.dashes = Object.create(globalOptions.dashes); // this sets the pointer of the option back to the global option.\n    }\n\n    // set the scaling newOptions\n    if (newOptions.scaling !== undefined && newOptions.scaling !== null) {\n      if (newOptions.scaling.min !== undefined) {parentOptions.scaling.min = newOptions.scaling.min;}\n      if (newOptions.scaling.max !== undefined) {parentOptions.scaling.max = newOptions.scaling.max;}\n      util.mergeOptions(parentOptions.scaling, newOptions.scaling, 'label', allowDeletion, globalOptions.scaling);\n    }\n    else if (allowDeletion === true && newOptions.scaling === null) {\n      parentOptions.scaling = Object.create(globalOptions.scaling); // this sets the pointer of the option back to the global option.\n    }\n\n    // handle multiple input cases for arrows\n    if (newOptions.arrows !== undefined && newOptions.arrows !== null) {\n      if (typeof newOptions.arrows === 'string') {\n        let arrows = newOptions.arrows.toLowerCase();\n        parentOptions.arrows.to.enabled     = arrows.indexOf(\"to\")     != -1;\n        parentOptions.arrows.middle.enabled = arrows.indexOf(\"middle\") != -1;\n        parentOptions.arrows.from.enabled   = arrows.indexOf(\"from\")   != -1;\n      }\n      else if (typeof newOptions.arrows === 'object') {\n        util.mergeOptions(parentOptions.arrows, newOptions.arrows, 'to',     allowDeletion, globalOptions.arrows);\n        util.mergeOptions(parentOptions.arrows, newOptions.arrows, 'middle', allowDeletion, globalOptions.arrows);\n        util.mergeOptions(parentOptions.arrows, newOptions.arrows, 'from',   allowDeletion, globalOptions.arrows);\n      }\n      else {\n        throw new Error(\"The arrow newOptions can only be an object or a string. Refer to the documentation. You used:\" + JSON.stringify(newOptions.arrows));\n      }\n    }\n    else if (allowDeletion === true && newOptions.arrows === null) {\n      parentOptions.arrows = Object.create(globalOptions.arrows); // this sets the pointer of the option back to the global option.\n    }\n\n    // handle multiple input cases for color\n    if (newOptions.color !== undefined && newOptions.color !== null) {\n      // make a copy of the parent object in case this is referring to the global one (due to object create once, then update)\n      parentOptions.color = util.deepExtend({}, parentOptions.color, true);\n      if (util.isString(newOptions.color)) {\n        parentOptions.color.color     = newOptions.color;\n        parentOptions.color.highlight = newOptions.color;\n        parentOptions.color.hover     = newOptions.color;\n        parentOptions.color.inherit   = false;\n      }\n      else {\n        let colorsDefined = false;\n        if (newOptions.color.color     !== undefined) {parentOptions.color.color     = newOptions.color.color;     colorsDefined = true;}\n        if (newOptions.color.highlight !== undefined) {parentOptions.color.highlight = newOptions.color.highlight; colorsDefined = true;}\n        if (newOptions.color.hover     !== undefined) {parentOptions.color.hover     = newOptions.color.hover;     colorsDefined = true;}\n        if (newOptions.color.inherit   !== undefined) {parentOptions.color.inherit   = newOptions.color.inherit;}\n        if (newOptions.color.opacity   !== undefined) {parentOptions.color.opacity   = Math.min(1,Math.max(0,newOptions.color.opacity));}\n\n        if (newOptions.color.inherit === undefined && colorsDefined === true) {\n          parentOptions.color.inherit = false;\n        }\n      }\n    }\n    else if (allowDeletion === true && newOptions.color === null) {\n      parentOptions.color = util.bridgeObject(globalOptions.color); // set the object back to the global options\n    }\n\n    // handle the font settings\n    if (newOptions.font !== undefined && newOptions.font !== null) {\n      Label.parseOptions(parentOptions.font, newOptions);\n    }\n    else if (allowDeletion === true && newOptions.font === null) {\n      parentOptions.font = util.bridgeObject(globalOptions.font); // set the object back to the global options\n    }\n  }\n\n  choosify(options) {\n    this.chooser = true;\n\n    let pile = [options, this.options, this.defaultOptions];\n\n    let chosen = util.topMost(pile, 'chosen');\n    if (typeof chosen === 'boolean') {\n      this.chooser = chosen;\n    } else if (typeof chosen === 'object') {\n      let chosenEdge = util.topMost(pile, ['chosen', 'edge']);\n      if ((typeof chosenEdge === 'boolean') || (typeof chosenEdge === 'function')) {\n        this.chooser = chosenEdge;\n      }\n    }\n  }\n\n  getFormattingValues() {\n    let toArrow = (this.options.arrows.to === true) || (this.options.arrows.to.enabled === true)\n    let fromArrow = (this.options.arrows.from === true) || (this.options.arrows.from.enabled === true)\n    let middleArrow = (this.options.arrows.middle === true) || (this.options.arrows.middle.enabled === true)\n    let inheritsColor = this.options.color.inherit;\n    let values = {\n      toArrow: toArrow,\n      toArrowScale: this.options.arrows.to.scaleFactor,\n      toArrowType: this.options.arrows.to.type,\n      middleArrow: middleArrow,\n      middleArrowScale: this.options.arrows.middle.scaleFactor,\n      middleArrowType: this.options.arrows.middle.type,\n      fromArrow: fromArrow,\n      fromArrowScale: this.options.arrows.from.scaleFactor,\n      fromArrowType: this.options.arrows.from.type,\n      arrowStrikethrough: this.options.arrowStrikethrough,\n      color: (inheritsColor? undefined : this.options.color.color),\n      inheritsColor: inheritsColor,\n      opacity: this.options.color.opacity,\n      hidden: this.options.hidden,\n      length: this.options.length,\n      shadow: this.options.shadow.enabled,\n      shadowColor: this.options.shadow.color,\n      shadowSize: this.options.shadow.size,\n      shadowX: this.options.shadow.x,\n      shadowY: this.options.shadow.y,\n      dashes: this.options.dashes,\n      width: this.options.width\n    };\n    if (this.selected || this.hover) {\n      if (this.chooser === true) {\n        if (this.selected) {\n          let selectedWidth = this.options.selectionWidth;\n          if (typeof selectedWidth === 'function') {\n            values.width = selectedWidth(values.width);\n          } else if (typeof selectedWidth === 'number') {\n            values.width += selectedWidth;\n          }\n          values.width = Math.max(values.width, 0.3 / this.body.view.scale);\n          values.color = this.options.color.highlight;\n          values.shadow = this.options.shadow.enabled;\n        } else if (this.hover) {\n          let hoverWidth = this.options.hoverWidth;\n          if (typeof hoverWidth === 'function') {\n            values.width = hoverWidth(values.width);\n          } else if (typeof hoverWidth === 'number') {\n            values.width += hoverWidth;\n          }\n          values.width = Math.max(values.width, 0.3 / this.body.view.scale);\n          values.color = this.options.color.hover;\n          values.shadow = this.options.shadow.enabled;\n        }\n      } else if (typeof this.chooser === 'function') {\n        this.chooser(values, this.options.id, this.selected, this.hover);\n        if (values.color !== undefined) {\n          values.inheritsColor = false;\n        }\n        if (values.shadow === false) {\n          if ((values.shadowColor !== this.options.shadow.color) ||\n              (values.shadowSize !== this.options.shadow.size) ||\n              (values.shadowX !== this.options.shadow.x) ||\n              (values.shadowY !== this.options.shadow.y)) {\n            values.shadow = true;\n          }\n        }\n      }\n    } else {\n      values.shadow = this.options.shadow.enabled;\n      values.width = Math.max(values.width, 0.3 / this.body.view.scale);\n    }\n    return values;\n  }\n\n  /**\n   * update the options in the label module\n   */\n  updateLabelModule(options) {\n    this.labelModule.setOptions(this.options, true);\n    if (this.labelModule.baseSize !== undefined) {\n      this.baseFontSize = this.labelModule.baseSize;\n    }\n    this.labelModule.constrain(this.edgeOptions, options, this.defaultOptions);\n    this.labelModule.choosify(this.edgeOptions, options, this.defaultOptions);\n  }\n\n  /**\n   * update the edge type, set the options\n   * @returns {boolean}\n   */\n  updateEdgeType() {\n    let smooth = this.options.smooth;\n    let dataChanged = false;\n    let changeInType = true;\n    if (this.edgeType !== undefined) {\n      if ((((this.edgeType instanceof BezierEdgeDynamic) &&\n            (smooth.enabled === true) &&\n            (smooth.type === 'dynamic'))) ||\n          (((this.edgeType instanceof CubicBezierEdge) &&\n            (smooth.enabled === true) &&\n            (smooth.type === 'cubicBezier'))) ||\n          (((this.edgeType instanceof BezierEdgeStatic) &&\n            (smooth.enabled === true) &&\n            (smooth.type !== 'dynamic') &&\n            (smooth.type !== 'cubicBezier'))) ||\n          (((this.edgeType instanceof StraightEdge) &&\n            (smooth.type.enabled === false)))) {\n        changeInType = false;\n      }\n      if (changeInType === true) {\n        dataChanged = this.cleanup();\n      }\n    }\n    if (changeInType === true) {\n      if (smooth.enabled === true) {\n        if (smooth.type === 'dynamic') {\n          dataChanged = true;\n          this.edgeType = new BezierEdgeDynamic(this.options, this.body, this.labelModule);\n        } else if (smooth.type === 'cubicBezier') {\n          this.edgeType = new CubicBezierEdge(this.options, this.body, this.labelModule);\n        } else {\n          this.edgeType = new BezierEdgeStatic(this.options, this.body, this.labelModule);\n        }\n      } else {\n        this.edgeType = new StraightEdge(this.options, this.body, this.labelModule);\n      }\n    } else { // if nothing changes, we just set the options.\n      this.edgeType.setOptions(this.options);\n    }\n    return dataChanged;\n  }\n\n  /**\n   * Connect an edge to its nodes\n   */\n  connect() {\n    this.disconnect();\n\n    this.from = this.body.nodes[this.fromId] || undefined;\n    this.to = this.body.nodes[this.toId] || undefined;\n    this.connected = (this.from !== undefined && this.to !== undefined);\n\n    if (this.connected === true) {\n      this.from.attachEdge(this);\n      this.to.attachEdge(this);\n    }\n    else {\n      if (this.from) {\n        this.from.detachEdge(this);\n      }\n      if (this.to) {\n        this.to.detachEdge(this);\n      }\n    }\n\n    this.edgeType.connect();\n  }\n\n\n  /**\n   * Disconnect an edge from its nodes\n   */\n  disconnect() {\n    if (this.from) {\n      this.from.detachEdge(this);\n      this.from = undefined;\n    }\n    if (this.to) {\n      this.to.detachEdge(this);\n      this.to = undefined;\n    }\n\n    this.connected = false;\n  }\n\n\n  /**\n   * get the title of this edge.\n   * @return {string} title    The title of the edge, or undefined when no title\n   *                           has been set.\n   */\n  getTitle() {\n    return this.title;\n  }\n\n\n  /**\n   * check if this node is selecte\n   * @return {boolean} selected   True if node is selected, else false\n   */\n  isSelected() {\n    return this.selected;\n  }\n\n\n\n  /**\n   * Retrieve the value of the edge. Can be undefined\n   * @return {Number} value\n   */\n  getValue() {\n    return this.options.value;\n  }\n\n\n  /**\n   * Adjust the value range of the edge. The edge will adjust it's width\n   * based on its value.\n   * @param {Number} min\n   * @param {Number} max\n   * @param total\n   */\n  setValueRange(min, max, total) {\n    if (this.options.value !== undefined) {\n      var scale = this.options.scaling.customScalingFunction(min, max, total, this.options.value);\n      var widthDiff = this.options.scaling.max - this.options.scaling.min;\n      if (this.options.scaling.label.enabled === true) {\n        var fontDiff = this.options.scaling.label.max - this.options.scaling.label.min;\n        this.options.font.size = this.options.scaling.label.min + scale * fontDiff;\n      }\n      this.options.width = this.options.scaling.min + scale * widthDiff;\n    }\n    else {\n      this.options.width = this.baseWidth;\n      this.options.font.size = this.baseFontSize;\n    }\n\n    this._setInteractionWidths();\n    this.updateLabelModule();\n  }\n\n  _setInteractionWidths() {\n    if (typeof this.options.hoverWidth === 'function') {\n      this.edgeType.hoverWidth = this.options.hoverWidth(this.options.width);\n    } else {\n      this.edgeType.hoverWidth = this.options.hoverWidth + this.options.width;\n    }\n    if (typeof this.options.selectionWidth === 'function') {\n      this.edgeType.selectionWidth = this.options.selectionWidth(this.options.width);\n    } else {\n      this.edgeType.selectionWidth = this.options.selectionWidth + this.options.width;\n    }\n  }\n\n\n  /**\n   * Redraw a edge\n   * Draw this edge in the given canvas\n   * The 2d context of a HTML canvas can be retrieved by canvas.getContext(\"2d\");\n   * @param {CanvasRenderingContext2D}   ctx\n   */\n  draw(ctx) {\n    let values = this.getFormattingValues();\n    if (values.hidden) {\n      return;\n    }\n\n    // get the via node from the edge type\n    let viaNode = this.edgeType.getViaNode();\n    let arrowData = {};\n\n    // restore edge targets to defaults\n    this.edgeType.fromPoint = this.edgeType.from;\n    this.edgeType.toPoint = this.edgeType.to;\n\n    // from and to arrows give a different end point for edges. we set them here\n    if (values.fromArrow) {\n      arrowData.from = this.edgeType.getArrowData(ctx, 'from', viaNode, this.selected, this.hover, values);\n      if (values.arrowStrikethrough === false)\n        this.edgeType.fromPoint = arrowData.from.core;\n    }\n    if (values.toArrow) {\n      arrowData.to = this.edgeType.getArrowData(ctx, 'to', viaNode, this.selected, this.hover, values);\n      if (values.arrowStrikethrough === false)\n        this.edgeType.toPoint = arrowData.to.core;\n    }\n\n    // the middle arrow depends on the line, which can depend on the to and from arrows so we do this one lastly.\n    if (values.middleArrow) {\n      arrowData.middle = this.edgeType.getArrowData(ctx,'middle', viaNode, this.selected, this.hover, values);\n    }\n\n    // draw everything\n    this.edgeType.drawLine(ctx, values, this.selected, this.hover, viaNode);\n    this.drawArrows(ctx, arrowData, values);\n    this.drawLabel (ctx, viaNode);\n  }\n\n\n  drawArrows(ctx, arrowData, values) {\n    if (values.fromArrow) {\n      this.edgeType.drawArrowHead(ctx, values, this.selected, this.hover, arrowData.from);\n    }\n    if (values.middleArrow) {\n      this.edgeType.drawArrowHead(ctx, values, this.selected, this.hover, arrowData.middle);\n    }\n    if (values.toArrow) {\n      this.edgeType.drawArrowHead(ctx, values, this.selected, this.hover, arrowData.to);\n    }\n  }\n\n\n  drawLabel(ctx, viaNode) {\n    if (this.options.label !== undefined) {\n      // set style\n      var node1 = this.from;\n      var node2 = this.to;\n      var selected = (this.from.selected || this.to.selected || this.selected);\n      if (node1.id != node2.id) {\n        this.labelModule.pointToSelf = false;\n        var point = this.edgeType.getPoint(0.5, viaNode);\n        ctx.save();\n\n        // if the label has to be rotated:\n        if (this.options.font.align !== \"horizontal\") {\n          this.labelModule.calculateLabelSize(ctx, selected, this.hover, point.x, point.y);\n          ctx.translate(point.x, this.labelModule.size.yLine);\n          this._rotateForLabelAlignment(ctx);\n        }\n\n        // draw the label\n        this.labelModule.draw(ctx, point.x, point.y, selected, this.hover);\n        ctx.restore();\n      }\n      else {\n        // Ignore the orientations.\n        this.labelModule.pointToSelf = true;\n        var x, y;\n        var radius = this.options.selfReferenceSize;\n        if (node1.shape.width > node1.shape.height) {\n          x = node1.x + node1.shape.width * 0.5;\n          y = node1.y - radius;\n        }\n        else {\n          x = node1.x + radius;\n          y = node1.y - node1.shape.height * 0.5;\n        }\n        point = this._pointOnCircle(x, y, radius, 0.125);\n        this.labelModule.draw(ctx, point.x, point.y, selected, this.hover);\n      }\n    }\n  }\n\n\n  /**\n   * Check if this object is overlapping with the provided object\n   * @param {Object} obj   an object with parameters left, top\n   * @return {boolean}     True if location is located on the edge\n   */\n  isOverlappingWith(obj) {\n    if (this.connected) {\n      var distMax = 10;\n      var xFrom = this.from.x;\n      var yFrom = this.from.y;\n      var xTo = this.to.x;\n      var yTo = this.to.y;\n      var xObj = obj.left;\n      var yObj = obj.top;\n\n      var dist = this.edgeType.getDistanceToEdge(xFrom, yFrom, xTo, yTo, xObj, yObj);\n\n      return (dist < distMax);\n    }\n    else {\n      return false\n    }\n  }\n\n\n  /**\n   * Rotates the canvas so the text is most readable\n   * @param {CanvasRenderingContext2D} ctx\n   * @private\n   */\n  _rotateForLabelAlignment(ctx) {\n    var dy = this.from.y - this.to.y;\n    var dx = this.from.x - this.to.x;\n    var angleInDegrees = Math.atan2(dy, dx);\n\n    // rotate so label it is readable\n    if ((angleInDegrees < -1 && dx < 0) || (angleInDegrees > 0 && dx < 0)) {\n      angleInDegrees = angleInDegrees + Math.PI;\n    }\n\n    ctx.rotate(angleInDegrees);\n  }\n\n\n  /**\n   * Get a point on a circle\n   * @param {Number} x\n   * @param {Number} y\n   * @param {Number} radius\n   * @param {Number} percentage. Value between 0 (line start) and 1 (line end)\n   * @return {Object} point\n   * @private\n   */\n  _pointOnCircle(x, y, radius, percentage) {\n    var angle = percentage * 2 * Math.PI;\n    return {\n      x: x + radius * Math.cos(angle),\n      y: y - radius * Math.sin(angle)\n    }\n  }\n\n\n  select() {\n    this.selected = true;\n  }\n\n\n  unselect() {\n    this.selected = false;\n  }\n\n\n  /**\n   * cleans all required things on delete\n   * @returns {*}\n   */\n  cleanup() {\n    return this.edgeType.cleanup();\n  }\n}\n\nexport default Edge;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/Edge.js","import CubicBezierEdgeBase from './util/CubicBezierEdgeBase'\n\nclass CubicBezierEdge extends CubicBezierEdgeBase {\n  constructor(options, body, labelModule) {\n    super(options, body, labelModule);\n  }\n\n  /**\n   * Draw a line between two nodes\n   * @param {CanvasRenderingContext2D} ctx\n   * @private\n   */\n  _line(ctx, values, viaNodes) {\n    // get the coordinates of the support points.\n    let via1 = viaNodes[0];\n    let via2 = viaNodes[1];\n\n    // start drawing the line.\n    ctx.beginPath();\n    ctx.moveTo(this.fromPoint.x, this.fromPoint.y);\n\n    // fallback to normal straight edges\n    if (viaNodes === undefined || via1.x === undefined) {\n      ctx.lineTo(this.toPoint.x, this.toPoint.y);\n    }\n    else {\n      ctx.bezierCurveTo(via1.x, via1.y, via2.x, via2.y, this.toPoint.x, this.toPoint.y);\n    }\n    // draw shadow if enabled\n    this.enableShadow(ctx, values);\n    ctx.stroke();\n    this.disableShadow(ctx, values);\n  }\n\n  _getViaCoordinates() {\n    let dx = this.from.x - this.to.x;\n    let dy = this.from.y - this.to.y;\n\n    let x1, y1, x2, y2;\n    let roundness =  this.options.smooth.roundness;\n\n    // horizontal if x > y or if direction is forced or if direction is horizontal\n    if ((Math.abs(dx) > Math.abs(dy) || this.options.smooth.forceDirection === true || this.options.smooth.forceDirection === 'horizontal') && this.options.smooth.forceDirection !== 'vertical') {\n      y1 = this.from.y;\n      y2 = this.to.y;\n      x1 = this.from.x - roundness * dx;\n      x2 = this.to.x + roundness * dx;\n    }\n    else {\n      y1 = this.from.y - roundness * dy;\n      y2 = this.to.y + roundness * dy;\n      x1 = this.from.x;\n      x2 = this.to.x;\n    }\n\n    return [{x: x1, y: y1},{x: x2, y: y2}];\n  }\n\n  getViaNode() {\n    return this._getViaCoordinates();\n  }\n\n  _findBorderPosition(nearNode, ctx) {\n    return this._findBorderPositionBezier(nearNode, ctx);\n  }\n\n  _getDistanceToEdge(x1, y1, x2, y2, x3, y3, [via1, via2] = this._getViaCoordinates()) { // x3,y3 is the point\n    return this._getDistanceToBezierEdge(x1, y1, x2, y2, x3, y3, via1, via2);\n  }\n\n  /**\n   * Combined function of pointOnLine and pointOnBezier. This gives the coordinates of a point on the line at a certain percentage of the way\n   * @param percentage\n   * @param via\n   * @returns {{x: number, y: number}}\n   * @private\n   */\n  getPoint(percentage, [via1, via2] = this._getViaCoordinates()) {\n    let t = percentage;\n    let vec = [];\n    vec[0] = Math.pow(1 - t, 3);\n    vec[1] = 3 * t * Math.pow(1 - t, 2);\n    vec[2] = 3 * Math.pow(t,2) * (1 - t);\n    vec[3] = Math.pow(t, 3);\n    let x = vec[0] * this.fromPoint.x + vec[1] * via1.x + vec[2] * via2.x + vec[3] * this.toPoint.x;\n    let y = vec[0] * this.fromPoint.y + vec[1] * via1.y + vec[2] * via2.y + vec[3] * this.toPoint.y;\n\n    return {x: x, y: y};\n  }\n}\n\n\nexport default CubicBezierEdge;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/edges/CubicBezierEdge.js","import BezierEdgeBase from './BezierEdgeBase'\n\nclass CubicBezierEdgeBase extends BezierEdgeBase {\n  constructor(options, body, labelModule) {\n    super(options, body, labelModule);\n  }\n\n  /**\n   * Calculate the distance between a point (x3,y3) and a line segment from\n   * (x1,y1) to (x2,y2).\n   * http://stackoverflow.com/questions/849211/shortest-distancae-between-a-point-and-a-line-segment\n   * https://en.wikipedia.org/wiki/B%C3%A9zier_curve\n   * @param {number} x1 from x\n   * @param {number} y1 from y\n   * @param {number} x2 to x\n   * @param {number} y2 to y\n   * @param {number} x3 point to check x\n   * @param {number} y3 point to check y\n   * @private\n   */\n  _getDistanceToBezierEdge(x1, y1, x2, y2, x3, y3, via1, via2) { // x3,y3 is the point\n    let minDistance = 1e9;\n    let distance;\n    let i, t, x, y;\n    let lastX = x1;\n    let lastY = y1;\n    let vec = [0,0,0,0]\n    for (i = 1; i < 10; i++) {\n      t = 0.1 * i;\n      vec[0] = Math.pow(1 - t, 3);\n      vec[1] = 3 * t * Math.pow(1 - t, 2);\n      vec[2] = 3 * Math.pow(t,2) * (1 - t);\n      vec[3] = Math.pow(t, 3);\n      x = vec[0] * x1 + vec[1] * via1.x + vec[2] * via2.x + vec[3] * x2;\n      y = vec[0] * y1 + vec[1] * via1.y + vec[2] * via2.y + vec[3] * y2;\n      if (i > 0) {\n        distance = this._getDistanceToLine(lastX, lastY, x, y, x3, y3);\n        minDistance = distance < minDistance ? distance : minDistance;\n      }\n      lastX = x;\n      lastY = y;\n    }\n\n    return minDistance;\n  }\n}\n\nexport default CubicBezierEdgeBase;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/edges/util/CubicBezierEdgeBase.js","import EdgeBase from './EdgeBase'\n\nclass BezierEdgeBase extends EdgeBase {\n  constructor(options, body, labelModule) {\n    super(options, body, labelModule);\n  }\n\n  /**\n   * This function uses binary search to look for the point where the bezier curve crosses the border of the node.\n   *\n   * @param nearNode\n   * @param ctx\n   * @param viaNode\n   * @param nearNode\n   * @param ctx\n   * @param viaNode\n   * @param nearNode\n   * @param ctx\n   * @param viaNode\n   */\n  _findBorderPositionBezier(nearNode, ctx, viaNode = this._getViaCoordinates()) {\n    var maxIterations = 10;\n    var iteration = 0;\n    var low = 0;\n    var high = 1;\n    var pos, angle, distanceToBorder, distanceToPoint, difference;\n    var threshold = 0.2;\n    var node = this.to;\n    var from = false;\n    if (nearNode.id === this.from.id) {\n      node = this.from;\n      from = true;\n    }\n\n    while (low <= high && iteration < maxIterations) {\n      var middle = (low + high) * 0.5;\n\n      pos = this.getPoint(middle, viaNode);\n      angle = Math.atan2((node.y - pos.y), (node.x - pos.x));\n      distanceToBorder = node.distanceToBorder(ctx, angle);\n      distanceToPoint = Math.sqrt(Math.pow(pos.x - node.x, 2) + Math.pow(pos.y - node.y, 2));\n      difference = distanceToBorder - distanceToPoint;\n      if (Math.abs(difference) < threshold) {\n        break; // found\n      }\n      else if (difference < 0) { // distance to nodes is larger than distance to border --> t needs to be bigger if we're looking at the to node.\n        if (from === false) {\n          low = middle;\n        }\n        else {\n          high = middle;\n        }\n      }\n      else {\n        if (from === false) {\n          high = middle;\n        }\n        else {\n          low = middle;\n        }\n      }\n\n      iteration++;\n    }\n    pos.t = middle;\n\n    return pos;\n  }\n\n\n\n  /**\n   * Calculate the distance between a point (x3,y3) and a line segment from\n   * (x1,y1) to (x2,y2).\n   * http://stackoverflow.com/questions/849211/shortest-distancae-between-a-point-and-a-line-segment\n   * @param {number} x1 from x\n   * @param {number} y1 from y\n   * @param {number} x2 to x\n   * @param {number} y2 to y\n   * @param {number} x3 point to check x\n   * @param {number} y3 point to check y\n   * @private\n   */\n  _getDistanceToBezierEdge(x1, y1, x2, y2, x3, y3, via) { // x3,y3 is the point\n    let minDistance = 1e9;\n    let distance;\n    let i, t, x, y;\n    let lastX = x1;\n    let lastY = y1;\n    for (i = 1; i < 10; i++) {\n      t = 0.1 * i;\n      x = Math.pow(1 - t, 2) * x1 + (2 * t * (1 - t)) * via.x + Math.pow(t, 2) * x2;\n      y = Math.pow(1 - t, 2) * y1 + (2 * t * (1 - t)) * via.y + Math.pow(t, 2) * y2;\n      if (i > 0) {\n        distance = this._getDistanceToLine(lastX, lastY, x, y, x3, y3);\n        minDistance = distance < minDistance ? distance : minDistance;\n      }\n      lastX = x;\n      lastY = y;\n    }\n\n    return minDistance;\n  }\n}\n\nexport default BezierEdgeBase;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/edges/util/BezierEdgeBase.js","let util = require(\"../../../../../util\");\n\nclass EdgeBase {\n  constructor(options, body, labelModule) {\n    this.body = body;\n    this.labelModule = labelModule;\n    this.options = {};\n    this.setOptions(options);\n    this.colorDirty = true;\n    this.color = {};\n    this.selectionWidth = 2;\n    this.hoverWidth = 1.5;\n    this.fromPoint = this.from;\n    this.toPoint = this.to;\n  }\n\n  connect() {\n    this.from = this.body.nodes[this.options.from];\n    this.to = this.body.nodes[this.options.to];\n  }\n\n  cleanup() {\n    return false;\n  }\n\n  setOptions(options) {\n    this.options = options;\n    this.from = this.body.nodes[this.options.from];\n    this.to = this.body.nodes[this.options.to];\n    this.id = this.options.id;\n  }\n\n  /**\n   * Redraw a edge as a line\n   * Draw this edge in the given canvas\n   * The 2d context of a HTML canvas can be retrieved by canvas.getContext(\"2d\");\n   * @param {CanvasRenderingContext2D}   ctx\n   * @private\n   */\n  drawLine(ctx, values, selected, hover, viaNode) {\n    // set style\n    ctx.strokeStyle = this.getColor(ctx, values, selected, hover);\n    ctx.lineWidth = values.width;\n\n    if (values.dashes !== false) {\n      this._drawDashedLine(ctx, values, viaNode);\n    }\n    else {\n      this._drawLine(ctx, values, viaNode);\n    }\n  }\n\n\n  _drawLine(ctx, values, viaNode, fromPoint, toPoint) {\n    if (this.from != this.to) {\n      // draw line\n      this._line(ctx, values, viaNode, fromPoint, toPoint);\n    }\n    else {\n      let [x,y,radius] = this._getCircleData(ctx, values);\n      this._circle(ctx, values, x, y, radius);\n    }\n  }\n\n  _drawDashedLine(ctx, values, viaNode, fromPoint, toPoint) {\n    ctx.lineCap = 'round';\n    let pattern = [5,5];\n    if (Array.isArray(values.dashes) === true) {\n      pattern = values.dashes;\n    }\n\n    // only firefox and chrome support this method, else we use the legacy one.\n    if (ctx.setLineDash !== undefined) {\n      ctx.save();\n\n      // set dash settings for chrome or firefox\n      ctx.setLineDash(pattern);\n      ctx.lineDashOffset = 0;\n\n      // draw the line\n      if (this.from != this.to) {\n        // draw line\n        this._line(ctx, values, viaNode);\n      }\n      else {\n        let [x,y,radius] = this._getCircleData(ctx, values);\n        this._circle(ctx, values, x, y, radius);\n      }\n\n      // restore the dash settings.\n      ctx.setLineDash([0]);\n      ctx.lineDashOffset = 0;\n      ctx.restore();\n    }\n    else { // unsupporting smooth lines\n      if (this.from != this.to) {\n        // draw line\n        ctx.dashedLine(this.from.x, this.from.y, this.to.x, this.to.y, pattern);\n      }\n      else {\n        let [x,y,radius] = this._getCircleData(ctx, values);\n        this._circle(ctx, values, x, y, radius);\n      }\n      // draw shadow if enabled\n      this.enableShadow(ctx, values);\n\n      ctx.stroke();\n\n      // disable shadows for other elements.\n      this.disableShadow(ctx, values);\n    }\n  }\n\n\n  findBorderPosition(nearNode, ctx, options) {\n    if (this.from != this.to) {\n      return this._findBorderPosition(nearNode, ctx, options);\n    }\n    else {\n      return this._findBorderPositionCircle(nearNode, ctx, options);\n    }\n  }\n\n  findBorderPositions(ctx) {\n    let from = {};\n    let to = {};\n    if (this.from != this.to) {\n      from = this._findBorderPosition(this.from, ctx);\n      to = this._findBorderPosition(this.to, ctx);\n    }\n    else {\n      let [x,y,radius] = this._getCircleData(ctx);\n\n      from = this._findBorderPositionCircle(this.from, ctx, {x, y, low:0.25, high:0.6, direction:-1});\n      to = this._findBorderPositionCircle(this.from, ctx, {x, y, low:0.6, high:0.8, direction:1});\n    }\n    return {from, to};\n  }\n\n  _getCircleData(ctx) {\n    let x, y;\n    let node = this.from;\n    let radius = this.options.selfReferenceSize;\n\n    if (ctx !== undefined) {\n      if (node.shape.width === undefined) {\n        node.shape.resize(ctx);\n      }\n    }\n\n    // get circle coordinates\n    if (node.shape.width > node.shape.height) {\n      x = node.x + node.shape.width * 0.5;\n      y = node.y - radius;\n    }\n    else {\n      x = node.x + radius;\n      y = node.y - node.shape.height * 0.5;\n    }\n    return [x,y,radius];\n  }\n\n  /**\n   * Get a point on a circle\n   * @param {Number} x\n   * @param {Number} y\n   * @param {Number} radius\n   * @param {Number} percentage. Value between 0 (line start) and 1 (line end)\n   * @return {Object} point\n   * @private\n   */\n  _pointOnCircle(x, y, radius, percentage) {\n    let angle = percentage * 2 * Math.PI;\n    return {\n      x: x + radius * Math.cos(angle),\n      y: y - radius * Math.sin(angle)\n    }\n  }\n\n  /**\n   * This function uses binary search to look for the point where the circle crosses the border of the node.\n   * @param node\n   * @param ctx\n   * @param options\n   * @returns {*}\n   * @private\n   */\n  _findBorderPositionCircle(node, ctx, options) {\n    let x = options.x;\n    let y = options.y;\n    let low = options.low;\n    let high = options.high;\n    let direction = options.direction;\n\n    let maxIterations = 10;\n    let iteration = 0;\n    let radius = this.options.selfReferenceSize;\n    let pos, angle, distanceToBorder, distanceToPoint, difference;\n    let threshold = 0.05;\n    let middle = (low + high) * 0.5;\n\n    while (low <= high && iteration < maxIterations) {\n      middle = (low + high) * 0.5;\n\n      pos = this._pointOnCircle(x, y, radius, middle);\n      angle = Math.atan2((node.y - pos.y), (node.x - pos.x));\n      distanceToBorder = node.distanceToBorder(ctx, angle);\n      distanceToPoint = Math.sqrt(Math.pow(pos.x - node.x, 2) + Math.pow(pos.y - node.y, 2));\n      difference = distanceToBorder - distanceToPoint;\n      if (Math.abs(difference) < threshold) {\n        break; // found\n      }\n      else if (difference > 0) { // distance to nodes is larger than distance to border --> t needs to be bigger if we're looking at the to node.\n        if (direction > 0) {\n          low = middle;\n        }\n        else {\n          high = middle;\n        }\n      }\n      else {\n        if (direction > 0) {\n          high = middle;\n        }\n        else {\n          low = middle;\n        }\n      }\n      iteration++;\n\n    }\n    pos.t = middle;\n\n    return pos;\n  }\n\n  /**\n   * Get the line width of the edge. Depends on width and whether one of the\n   * connected nodes is selected.\n   * @return {Number} width\n   * @private\n   */\n  getLineWidth(selected, hover) {\n    if (selected === true) {\n      return Math.max(this.selectionWidth, 0.3 / this.body.view.scale);\n    }\n    else {\n      if (hover === true) {\n        return Math.max(this.hoverWidth, 0.3 / this.body.view.scale);\n      }\n      else {\n        return Math.max(this.options.width, 0.3 / this.body.view.scale);\n      }\n    }\n  }\n\n\n  getColor(ctx, values, selected, hover) {\n    if (values.inheritsColor !== false) {\n      // when this is a loop edge, just use the 'from' method\n      if ((values.inheritsColor === 'both') && (this.from.id !== this.to.id)) {\n        let grd = ctx.createLinearGradient(this.from.x, this.from.y, this.to.x, this.to.y);\n        let fromColor, toColor;\n        fromColor = this.from.options.color.highlight.border;\n        toColor = this.to.options.color.highlight.border;\n\n        if ((this.from.selected === false) && (this.to.selected === false)) {\n          fromColor = util.overrideOpacity(this.from.options.color.border, values.opacity);\n          toColor = util.overrideOpacity(this.to.options.color.border, values.opacity);\n        }\n        else if ((this.from.selected === true) && (this.to.selected === false)) {\n          toColor = this.to.options.color.border;\n        }\n        else if ((this.from.selected === false) && (this.to.selected === true)) {\n          fromColor = this.from.options.color.border;\n        }\n        grd.addColorStop(0, fromColor);\n        grd.addColorStop(1, toColor);\n\n        // -------------------- this returns -------------------- //\n        return grd;\n      }\n\n      if (values.inheritsColor === \"to\") {\n        return util.overrideOpacity(this.to.options.color.border, values.opacity);\n      } else { // \"from\"\n        return util.overrideOpacity(this.from.options.color.border, values.opacity);\n      }\n    } else {\n      return util.overrideOpacity(values.color, values.opacity);\n    }\n  }\n\n  /**\n   * Draw a line from a node to itself, a circle\n   * @param {CanvasRenderingContext2D} ctx\n   * @param {Number} x\n   * @param {Number} y\n   * @param {Number} radius\n   * @private\n   */\n  _circle(ctx, values, x, y, radius) {\n    // draw shadow if enabled\n    this.enableShadow(ctx, values);\n\n    // draw a circle\n    ctx.beginPath();\n    ctx.arc(x, y, radius, 0, 2 * Math.PI, false);\n    ctx.stroke();\n\n    // disable shadows for other elements.\n    this.disableShadow(ctx, values);\n  }\n\n\n  /**\n   * Calculate the distance between a point (x3,y3) and a line segment from\n   * (x1,y1) to (x2,y2).\n   * http://stackoverflow.com/questions/849211/shortest-distancae-between-a-point-and-a-line-segment\n   * @param {number} x1\n   * @param {number} y1\n   * @param {number} x2\n   * @param {number} y2\n   * @param {number} x3\n   * @param {number} y3\n   * @private\n   */\n  getDistanceToEdge(x1, y1, x2, y2, x3, y3, via, values) { // x3,y3 is the point\n    let returnValue = 0;\n    if (this.from != this.to) {\n      returnValue = this._getDistanceToEdge(x1, y1, x2, y2, x3, y3, via)\n    }\n    else {\n      let [x,y,radius] = this._getCircleData(undefined, values);\n      let dx = x - x3;\n      let dy = y - y3;\n      returnValue = Math.abs(Math.sqrt(dx * dx + dy * dy) - radius);\n    }\n\n    if (this.labelModule.size.left < x3 &&\n      this.labelModule.size.left + this.labelModule.size.width > x3 &&\n      this.labelModule.size.top < y3 &&\n      this.labelModule.size.top + this.labelModule.size.height > y3) {\n      return 0;\n    }\n    else {\n      return returnValue;\n    }\n  }\n\n  _getDistanceToLine(x1, y1, x2, y2, x3, y3) {\n    let px = x2 - x1;\n    let py = y2 - y1;\n    let something = px * px + py * py;\n    let u = ((x3 - x1) * px + (y3 - y1) * py) / something;\n\n    if (u > 1) {\n      u = 1;\n    }\n    else if (u < 0) {\n      u = 0;\n    }\n\n    let x = x1 + u * px;\n    let y = y1 + u * py;\n    let dx = x - x3;\n    let dy = y - y3;\n\n    //# Note: If the actual distance does not matter,\n    //# if you only want to compare what this function\n    //# returns to other results of this function, you\n    //# can just return the squared distance instead\n    //# (i.e. remove the sqrt) to gain a little performance\n\n    return Math.sqrt(dx * dx + dy * dy);\n  }\n\n\n  /**\n   *\n   * @param ctx\n   * @param position\n   * @param viaNode\n   */\n  getArrowData(ctx, position, viaNode, selected, hover, values) {\n    // set lets\n    let angle;\n    let arrowPoint;\n    let node1;\n    let node2;\n    let guideOffset;\n    let scaleFactor;\n    let type;\n    let lineWidth = values.width;\n\n    if (position === 'from') {\n      node1 = this.from;\n      node2 = this.to;\n      guideOffset = 0.1;\n      scaleFactor = values.fromArrowScale;\n      type = values.fromArrowType;\n    }\n    else if (position === 'to') {\n      node1 = this.to;\n      node2 = this.from;\n      guideOffset = -0.1;\n      scaleFactor = values.toArrowScale;\n      type = values.toArrowType;\n    }\n    else {\n      node1 = this.to;\n      node2 = this.from;\n      scaleFactor = values.middleArrowScale;\n      type = values.middleArrowType;\n    }\n\n    // if not connected to itself\n    if (node1 != node2) {\n      if (position !== 'middle') {\n        // draw arrow head\n        if (this.options.smooth.enabled === true) {\n          arrowPoint = this.findBorderPosition(node1, ctx, { via: viaNode });\n          let guidePos = this.getPoint(Math.max(0.0, Math.min(1.0, arrowPoint.t + guideOffset)), viaNode);\n          angle = Math.atan2((arrowPoint.y - guidePos.y), (arrowPoint.x - guidePos.x));\n        } else {\n          angle = Math.atan2((node1.y - node2.y), (node1.x - node2.x));\n          arrowPoint = this.findBorderPosition(node1, ctx);\n        }\n      } else {\n        angle = Math.atan2((node1.y - node2.y), (node1.x - node2.x));\n        arrowPoint = this.getPoint(0.5, viaNode); // this is 0.6 to account for the size of the arrow.\n      }\n    } else {\n      // draw circle\n      let [x,y,radius] = this._getCircleData(ctx);\n\n      if (position === 'from') {\n        arrowPoint = this.findBorderPosition(this.from, ctx, { x, y, low: 0.25, high: 0.6, direction: -1 });\n        angle = arrowPoint.t * -2 * Math.PI + 1.5 * Math.PI + 0.1 * Math.PI;\n      } else if (position === 'to') {\n        arrowPoint = this.findBorderPosition(this.from, ctx, { x, y, low: 0.6, high: 1.0, direction: 1 });\n        angle = arrowPoint.t * -2 * Math.PI + 1.5 * Math.PI - 1.1 * Math.PI;\n      } else {\n        arrowPoint = this._pointOnCircle(x, y, radius, 0.175);\n        angle = 3.9269908169872414; // === 0.175 * -2 * Math.PI + 1.5 * Math.PI + 0.1 * Math.PI;\n      }\n    }\n\n    let length = 15 * scaleFactor + 3 * lineWidth; // 3* lineWidth is the width of the edge.\n\n    var xi = arrowPoint.x - length * 0.9 * Math.cos(angle);\n    var yi = arrowPoint.y - length * 0.9 * Math.sin(angle);\n    let arrowCore = { x: xi, y: yi };\n\n    return { point: arrowPoint, core: arrowCore, angle: angle, length: length, type: type };\n  }\n\n  /**\n   *\n   * @param ctx\n   * @param selected\n   * @param hover\n   * @param arrowData\n   */\n  drawArrowHead(ctx, values, selected, hover, arrowData) {\n    // set style\n    ctx.strokeStyle = this.getColor(ctx, values, selected, hover);\n    ctx.fillStyle = ctx.strokeStyle;\n    ctx.lineWidth = values.width;\n\n    if (arrowData.type && arrowData.type.toLowerCase() === 'circle') {\n      // draw circle at the end of the line\n      ctx.circleEndpoint(arrowData.point.x, arrowData.point.y, arrowData.angle, arrowData.length);\n    } else {\n      // draw arrow at the end of the line\n      ctx.arrowEndpoint(arrowData.point.x, arrowData.point.y, arrowData.angle, arrowData.length);\n    }\n\n    // draw shadow if enabled\n    this.enableShadow(ctx, values);\n    ctx.fill();\n    // disable shadows for other elements.\n    this.disableShadow(ctx, values);\n  }\n\n\n  enableShadow(ctx, values) {\n    if (values.shadow === true) {\n      ctx.shadowColor = values.shadowColor;\n      ctx.shadowBlur = values.shadowSize;\n      ctx.shadowOffsetX = values.shadowX;\n      ctx.shadowOffsetY = values.shadowY;\n    }\n  }\n\n  disableShadow(ctx, values) {\n    if (values.shadow === true) {\n      ctx.shadowColor = 'rgba(0,0,0,0)';\n      ctx.shadowBlur = 0;\n      ctx.shadowOffsetX = 0;\n      ctx.shadowOffsetY = 0;\n    }\n  }\n}\n\nexport default EdgeBase;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/edges/util/EdgeBase.js","import BezierEdgeBase from './util/BezierEdgeBase'\n\nclass BezierEdgeDynamic extends BezierEdgeBase {\n  constructor(options, body, labelModule) {\n    //this.via = undefined; // Here for completeness but not allowed to defined before super() is invoked.\n    super(options, body, labelModule); // --> this calls the setOptions below\n    this._boundFunction = () => {this.positionBezierNode();};\n    this.body.emitter.on(\"_repositionBezierNodes\", this._boundFunction);\n  }\n\n  setOptions(options) {\n    // check if the physics has changed.\n    let physicsChange = false;\n    if (this.options.physics !== options.physics) {\n      physicsChange = true;\n    }\n\n    // set the options and the to and from nodes\n    this.options = options;\n    this.id = this.options.id;\n    this.from = this.body.nodes[this.options.from];\n    this.to = this.body.nodes[this.options.to];\n\n    // setup the support node and connect\n    this.setupSupportNode();\n    this.connect();\n\n    // when we change the physics state of the edge, we reposition the support node.\n    if (physicsChange === true) {\n      this.via.setOptions({physics: this.options.physics})\n      this.positionBezierNode();\n    }\n  }\n\n  connect() {\n    this.from = this.body.nodes[this.options.from];\n    this.to = this.body.nodes[this.options.to];\n    if (this.from === undefined || this.to === undefined || this.options.physics === false) {\n      this.via.setOptions({physics:false})\n    }\n    else {\n      // fix weird behaviour where a self referencing node has physics enabled\n      if (this.from.id === this.to.id) {\n        this.via.setOptions({physics: false})\n      }\n      else {\n        this.via.setOptions({physics: true})\n      }\n    }\n  }\n\n  /**\n   * remove the support nodes\n   * @returns {boolean}\n   */\n  cleanup() {\n    this.body.emitter.off(\"_repositionBezierNodes\", this._boundFunction);\n    if (this.via !== undefined) {\n      delete this.body.nodes[this.via.id];\n      this.via = undefined;\n      return true;\n    }\n    return false;\n  }\n\n  /**\n   * Bezier curves require an anchor point to calculate the smooth flow. These points are nodes. These nodes are invisible but\n   * are used for the force calculation.\n   *\n   * The changed data is not called, if needed, it is returned by the main edge constructor.\n   * @private\n   */\n  setupSupportNode() {\n    if (this.via === undefined) {\n      var nodeId = \"edgeId:\" + this.id;\n      var node = this.body.functions.createNode({\n        id: nodeId,\n        shape: 'circle',\n        physics:true,\n        hidden:true\n      });\n      this.body.nodes[nodeId] = node;\n      this.via = node;\n      this.via.parentEdgeId = this.id;\n      this.positionBezierNode();\n    }\n  }\n\n  positionBezierNode() {\n    if (this.via !== undefined && this.from !== undefined && this.to !== undefined) {\n      this.via.x = 0.5 * (this.from.x + this.to.x);\n      this.via.y = 0.5 * (this.from.y + this.to.y);\n    }\n    else if (this.via !== undefined) {\n      this.via.x = 0;\n      this.via.y = 0;\n    }\n  }\n\n  /**\n   * Draw a line between two nodes\n   * @param {CanvasRenderingContext2D} ctx\n   * @private\n   */\n  _line(ctx, values, viaNode) {\n    // draw a straight line\n    ctx.beginPath();\n    ctx.moveTo(this.fromPoint.x, this.fromPoint.y);\n    // fallback to normal straight edges\n    if (viaNode.x === undefined) {\n      ctx.lineTo(this.toPoint.x, this.toPoint.y);\n    }\n    else {\n      ctx.quadraticCurveTo(viaNode.x, viaNode.y, this.toPoint.x, this.toPoint.y);\n    }\n    // draw shadow if enabled\n    this.enableShadow(ctx, values);\n    ctx.stroke();\n    this.disableShadow(ctx, values);\n  }\n\n  getViaNode() {\n    return this.via;\n  }\n\n\n  /**\n   * Combined function of pointOnLine and pointOnBezier. This gives the coordinates of a point on the line at a certain percentage of the way\n   * @param percentage\n   * @param viaNode\n   * @returns {{x: number, y: number}}\n   * @private\n   */\n  getPoint(percentage, viaNode = this.via) {\n    let t = percentage;\n    let x, y;\n    if (this.from === this.to){\n      let [cx,cy,cr]  = this._getCircleData(this.from)\n      let a = 2 * Math.PI * (1 - t);\n      x = cx + cr * Math.sin(a);\n      y = cy + cr - cr * (1 - Math.cos(a));\n    } else {\n      x = Math.pow(1 - t, 2) * this.fromPoint.x + 2 * t * (1 - t) * viaNode.x + Math.pow(t, 2) * this.toPoint.x;\n      y = Math.pow(1 - t, 2) * this.fromPoint.y + 2 * t * (1 - t) * viaNode.y + Math.pow(t, 2) * this.toPoint.y;\n    }\n\n    return {x: x, y: y};\n  }\n\n  _findBorderPosition(nearNode, ctx) {\n    return this._findBorderPositionBezier(nearNode, ctx, this.via);\n  }\n\n  _getDistanceToEdge(x1, y1, x2, y2, x3, y3) { // x3,y3 is the point\n    return this._getDistanceToBezierEdge(x1, y1, x2, y2, x3, y3, this.via);\n  }\n\n\n}\n\n\nexport default BezierEdgeDynamic;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/edges/BezierEdgeDynamic.js","import BezierEdgeBase from './util/BezierEdgeBase'\n\nclass BezierEdgeStatic extends BezierEdgeBase {\n  constructor(options, body, labelModule) {\n    super(options, body, labelModule);\n  }\n\n  /**\n   * Draw a line between two nodes\n   * @param {CanvasRenderingContext2D} ctx\n   * @private\n   */\n  _line(ctx, values, viaNode) {\n    // draw a straight line\n    ctx.beginPath();\n    ctx.moveTo(this.fromPoint.x, this.fromPoint.y);\n\n    // fallback to normal straight edges\n    if (viaNode.x === undefined) {\n      ctx.lineTo(this.toPoint.x, this.toPoint.y);\n    }\n    else {\n      ctx.quadraticCurveTo(viaNode.x, viaNode.y, this.toPoint.x, this.toPoint.y);\n    }\n    // draw shadow if enabled\n    this.enableShadow(ctx, values);\n    ctx.stroke();\n    this.disableShadow(ctx, values);\n  }\n\n  getViaNode() {\n    return this._getViaCoordinates();\n  }\n\n\n  /**\n   * We do not use the to and fromPoints here to make the via nodes the same as edges without arrows.\n   * @returns {{x: undefined, y: undefined}}\n   * @private\n   */\n  _getViaCoordinates() {\n    let xVia = undefined;\n    let yVia = undefined;\n    let factor = this.options.smooth.roundness;\n    let type = this.options.smooth.type;\n    let dx = Math.abs(this.from.x - this.to.x);\n    let dy = Math.abs(this.from.y - this.to.y);\n    if (type === 'discrete' || type === 'diagonalCross') {\n      if (Math.abs(this.from.x - this.to.x) <= Math.abs(this.from.y - this.to.y)) {\n        if (this.from.y >= this.to.y) {\n          if (this.from.x <= this.to.x) {\n            xVia = this.from.x + factor * dy;\n            yVia = this.from.y - factor * dy;\n          }\n          else if (this.from.x > this.to.x) {\n            xVia = this.from.x - factor * dy;\n            yVia = this.from.y - factor * dy;\n          }\n        }\n        else if (this.from.y < this.to.y) {\n          if (this.from.x <= this.to.x) {\n            xVia = this.from.x + factor * dy;\n            yVia = this.from.y + factor * dy;\n          }\n          else if (this.from.x > this.to.x) {\n            xVia = this.from.x - factor * dy;\n            yVia = this.from.y + factor * dy;\n          }\n        }\n        if (type === \"discrete\") {\n          xVia = dx < factor * dy ? this.from.x : xVia;\n        }\n      }\n      else if (Math.abs(this.from.x - this.to.x) > Math.abs(this.from.y - this.to.y)) {\n        if (this.from.y >= this.to.y) {\n          if (this.from.x <= this.to.x) {\n            xVia = this.from.x + factor * dx;\n            yVia = this.from.y - factor * dx;\n          }\n          else if (this.from.x > this.to.x) {\n            xVia = this.from.x - factor * dx;\n            yVia = this.from.y - factor * dx;\n          }\n        }\n        else if (this.from.y < this.to.y) {\n          if (this.from.x <= this.to.x) {\n            xVia = this.from.x + factor * dx;\n            yVia = this.from.y + factor * dx;\n          }\n          else if (this.from.x > this.to.x) {\n            xVia = this.from.x - factor * dx;\n            yVia = this.from.y + factor * dx;\n          }\n        }\n        if (type === \"discrete\") {\n          yVia = dy < factor * dx ? this.from.y : yVia;\n        }\n      }\n    }\n    else if (type === \"straightCross\") {\n      if (Math.abs(this.from.x - this.to.x) <= Math.abs(this.from.y - this.to.y)) {  // up - down\n        xVia = this.from.x;\n        if (this.from.y < this.to.y) {\n          yVia = this.to.y - (1 - factor) * dy;\n        }\n        else {\n          yVia = this.to.y + (1 - factor) * dy;\n        }\n      }\n      else if (Math.abs(this.from.x - this.to.x) > Math.abs(this.from.y - this.to.y)) { // left - right\n        if (this.from.x < this.to.x) {\n          xVia = this.to.x - (1 - factor) * dx;\n        }\n        else {\n          xVia = this.to.x + (1 - factor) * dx;\n        }\n        yVia = this.from.y;\n      }\n    }\n    else if (type === 'horizontal') {\n      if (this.from.x < this.to.x) {\n        xVia = this.to.x - (1 - factor) * dx;\n      }\n      else {\n        xVia = this.to.x + (1 - factor) * dx;\n      }\n      yVia = this.from.y;\n    }\n    else if (type === 'vertical') {\n      xVia = this.from.x;\n      if (this.from.y < this.to.y) {\n        yVia = this.to.y - (1 - factor) * dy;\n      }\n      else {\n        yVia = this.to.y + (1 - factor) * dy;\n      }\n    }\n    else if (type === 'curvedCW') {\n      dx = this.to.x - this.from.x;\n      dy = this.from.y - this.to.y;\n      let radius = Math.sqrt(dx * dx + dy * dy);\n      let pi = Math.PI;\n\n      let originalAngle = Math.atan2(dy, dx);\n      let myAngle = (originalAngle + ((factor * 0.5) + 0.5) * pi) % (2 * pi);\n\n      xVia = this.from.x + (factor * 0.5 + 0.5) * radius * Math.sin(myAngle);\n      yVia = this.from.y + (factor * 0.5 + 0.5) * radius * Math.cos(myAngle);\n    }\n    else if (type === 'curvedCCW') {\n      dx = this.to.x - this.from.x;\n      dy = this.from.y - this.to.y;\n      let radius = Math.sqrt(dx * dx + dy * dy);\n      let pi = Math.PI;\n\n      let originalAngle = Math.atan2(dy, dx);\n      let myAngle = (originalAngle + ((-factor * 0.5) + 0.5) * pi) % (2 * pi);\n\n      xVia = this.from.x + (factor * 0.5 + 0.5) * radius * Math.sin(myAngle);\n      yVia = this.from.y + (factor * 0.5 + 0.5) * radius * Math.cos(myAngle);\n    }\n    else { // continuous\n      if (Math.abs(this.from.x - this.to.x) <= Math.abs(this.from.y - this.to.y)) {\n        if (this.from.y >= this.to.y) {\n          if (this.from.x <= this.to.x) {\n            xVia = this.from.x + factor * dy;\n            yVia = this.from.y - factor * dy;\n            xVia = this.to.x < xVia ? this.to.x : xVia;\n          }\n          else if (this.from.x > this.to.x) {\n            xVia = this.from.x - factor * dy;\n            yVia = this.from.y - factor * dy;\n            xVia = this.to.x > xVia ? this.to.x : xVia;\n          }\n        }\n        else if (this.from.y < this.to.y) {\n          if (this.from.x <= this.to.x) {\n            xVia = this.from.x + factor * dy;\n            yVia = this.from.y + factor * dy;\n            xVia = this.to.x < xVia ? this.to.x : xVia;\n          }\n          else if (this.from.x > this.to.x) {\n            xVia = this.from.x - factor * dy;\n            yVia = this.from.y + factor * dy;\n            xVia = this.to.x > xVia ? this.to.x : xVia;\n          }\n        }\n      }\n      else if (Math.abs(this.from.x - this.to.x) > Math.abs(this.from.y - this.to.y)) {\n        if (this.from.y >= this.to.y) {\n          if (this.from.x <= this.to.x) {\n            xVia = this.from.x + factor * dx;\n            yVia = this.from.y - factor * dx;\n            yVia = this.to.y > yVia ? this.to.y : yVia;\n          }\n          else if (this.from.x > this.to.x) {\n            xVia = this.from.x - factor * dx;\n            yVia = this.from.y - factor * dx;\n            yVia = this.to.y > yVia ? this.to.y : yVia;\n          }\n        }\n        else if (this.from.y < this.to.y) {\n          if (this.from.x <= this.to.x) {\n            xVia = this.from.x + factor * dx;\n            yVia = this.from.y + factor * dx;\n            yVia = this.to.y < yVia ? this.to.y : yVia;\n          }\n          else if (this.from.x > this.to.x) {\n            xVia = this.from.x - factor * dx;\n            yVia = this.from.y + factor * dx;\n            yVia = this.to.y < yVia ? this.to.y : yVia;\n          }\n        }\n      }\n    }\n    return {x: xVia, y: yVia};\n  }\n\n  _findBorderPosition(nearNode, ctx, options = {}) {\n    return this._findBorderPositionBezier(nearNode, ctx, options.via);\n  }\n\n  _getDistanceToEdge(x1, y1, x2, y2, x3, y3, viaNode = this._getViaCoordinates()) { // x3,y3 is the point\n    return this._getDistanceToBezierEdge(x1, y1, x2, y2, x3, y3, viaNode);\n  }\n\n  /**\n   * Combined function of pointOnLine and pointOnBezier. This gives the coordinates of a point on the line at a certain percentage of the way\n   * @param percentage\n   * @param viaNode\n   * @returns {{x: number, y: number}}\n   * @private\n   */\n  getPoint(percentage, viaNode = this._getViaCoordinates()) {\n    var t = percentage;\n    var x = Math.pow(1 - t, 2) * this.fromPoint.x + (2 * t * (1 - t)) * viaNode.x + Math.pow(t, 2) * this.toPoint.x;\n    var y = Math.pow(1 - t, 2) * this.fromPoint.y + (2 * t * (1 - t)) * viaNode.y + Math.pow(t, 2) * this.toPoint.y;\n\n    return {x: x, y: y};\n  }\n}\n\n\nexport default BezierEdgeStatic;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/edges/BezierEdgeStatic.js","import EdgeBase from './util/EdgeBase'\n\nclass StraightEdge extends EdgeBase {\n  constructor(options, body, labelModule) {\n    super(options, body, labelModule);\n  }\n\n  /**\n   * Draw a line between two nodes\n   * @param {CanvasRenderingContext2D} ctx\n   * @private\n   */\n  _line(ctx, values) {\n    // draw a straight line\n    ctx.beginPath();\n    ctx.moveTo(this.fromPoint.x, this.fromPoint.y);\n    ctx.lineTo(this.toPoint.x, this.toPoint.y);\n    // draw shadow if enabled\n    this.enableShadow(ctx, values);\n    ctx.stroke();\n    this.disableShadow(ctx, values);\n  }\n\n  getViaNode() {\n    return undefined;\n  }\n\n  /**\n   * Combined function of pointOnLine and pointOnBezier. This gives the coordinates of a point on the line at a certain percentage of the way\n   * @param percentage\n   * @param via\n   * @returns {{x: number, y: number}}\n   * @private\n   */\n  getPoint(percentage) {\n    return {\n      x: (1 - percentage) * this.fromPoint.x + percentage * this.toPoint.x,\n      y: (1 - percentage) * this.fromPoint.y + percentage * this.toPoint.y\n    }\n  }\n\n  _findBorderPosition(nearNode, ctx) {\n    let node1 = this.to;\n    let node2 = this.from;\n    if (nearNode.id === this.from.id) {\n      node1 = this.from;\n      node2 = this.to;\n    }\n\n    let angle = Math.atan2((node1.y - node2.y), (node1.x - node2.x));\n    let dx = (node1.x - node2.x);\n    let dy = (node1.y - node2.y);\n    let edgeSegmentLength = Math.sqrt(dx * dx + dy * dy);\n    let toBorderDist = nearNode.distanceToBorder(ctx, angle);\n    let toBorderPoint = (edgeSegmentLength - toBorderDist) / edgeSegmentLength;\n\n    let borderPos = {};\n    borderPos.x = (1 - toBorderPoint) * node2.x + toBorderPoint * node1.x;\n    borderPos.y = (1 - toBorderPoint) * node2.y + toBorderPoint * node1.y;\n\n    return borderPos;\n  }\n\n  _getDistanceToEdge(x1, y1, x2, y2, x3, y3) { // x3,y3 is the point\n    return this._getDistanceToLine(x1, y1, x2, y2, x3, y3);\n  }\n\n}\n\nexport default StraightEdge;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/edges/StraightEdge.js","import BarnesHutSolver                      from './components/physics/BarnesHutSolver';\nimport Repulsion                            from './components/physics/RepulsionSolver';\nimport HierarchicalRepulsion                from './components/physics/HierarchicalRepulsionSolver';\nimport SpringSolver                         from './components/physics/SpringSolver';\nimport HierarchicalSpringSolver             from './components/physics/HierarchicalSpringSolver';\nimport CentralGravitySolver                 from './components/physics/CentralGravitySolver';\nimport ForceAtlas2BasedRepulsionSolver      from './components/physics/FA2BasedRepulsionSolver';\nimport ForceAtlas2BasedCentralGravitySolver from './components/physics/FA2BasedCentralGravitySolver';\n\nvar util = require('../../util');\n\n\nclass PhysicsEngine {\n  constructor(body) {\n    this.body = body;\n    this.physicsBody = {physicsNodeIndices:[], physicsEdgeIndices:[], forces: {}, velocities: {}};\n\n    this.physicsEnabled = true;\n    this.simulationInterval = 1000 / 60;\n    this.requiresTimeout = true;\n    this.previousStates = {};\n    this.referenceState = {};\n    this.freezeCache = {};\n    this.renderTimer = undefined;\n\n    // parameters for the adaptive timestep\n    this.adaptiveTimestep = false;\n    this.adaptiveTimestepEnabled = false;\n    this.adaptiveCounter = 0;\n    this.adaptiveInterval = 3;\n\n    this.stabilized = false;\n    this.startedStabilization = false;\n    this.stabilizationIterations = 0;\n    this.ready = false; // will be set to true if the stabilize\n\n    // default options\n    this.options = {};\n    this.defaultOptions = {\n      enabled: true,\n      barnesHut: {\n        theta: 0.5,\n        gravitationalConstant: -2000,\n        centralGravity: 0.3,\n        springLength: 95,\n        springConstant: 0.04,\n        damping: 0.09,\n        avoidOverlap: 0\n      },\n      forceAtlas2Based: {\n        theta: 0.5,\n        gravitationalConstant: -50,\n        centralGravity: 0.01,\n        springConstant: 0.08,\n        springLength: 100,\n        damping: 0.4,\n        avoidOverlap: 0\n      },\n      repulsion: {\n        centralGravity: 0.2,\n        springLength: 200,\n        springConstant: 0.05,\n        nodeDistance: 100,\n        damping: 0.09,\n        avoidOverlap: 0\n      },\n      hierarchicalRepulsion: {\n        centralGravity: 0.0,\n        springLength: 100,\n        springConstant: 0.01,\n        nodeDistance: 120,\n        damping: 0.09\n      },\n      maxVelocity: 50,\n      minVelocity: 0.75,    // px/s\n      solver: 'barnesHut',\n      stabilization: {\n        enabled: true,\n        iterations: 1000,   // maximum number of iteration to stabilize\n        updateInterval: 50,\n        onlyDynamicEdges: false,\n        fit: true\n      },\n      timestep: 0.5,\n      adaptiveTimestep: true\n    };\n    util.extend(this.options, this.defaultOptions);\n    this.timestep = 0.5;\n    this.layoutFailed = false;\n\n    this.bindEventListeners();\n  }\n\n  bindEventListeners() {\n    this.body.emitter.on('initPhysics',     () => {this.initPhysics();});\n    this.body.emitter.on('_layoutFailed',   () => {this.layoutFailed = true;});\n    this.body.emitter.on('resetPhysics',    () => {this.stopSimulation(); this.ready = false;});\n    this.body.emitter.on('disablePhysics',  () => {this.physicsEnabled = false; this.stopSimulation();});\n    this.body.emitter.on('restorePhysics',  () => {\n      this.setOptions(this.options);\n      if (this.ready === true) {\n        this.startSimulation();\n      }\n    });\n    this.body.emitter.on('startSimulation', () => {\n      if (this.ready === true) {\n        this.startSimulation();\n      }\n    });\n    this.body.emitter.on('stopSimulation',  () => {this.stopSimulation();});\n    this.body.emitter.on('destroy',         () => {\n      this.stopSimulation(false);\n      this.body.emitter.off();\n    });\n    // this event will trigger a rebuilding of the cache everything. Used when nodes or edges have been added or removed.\n    this.body.emitter.on(\"_dataChanged\", () => {\n      // update shortcut lists\n      this.updatePhysicsData();\n    });\n\n    // debug: show forces\n    // this.body.emitter.on(\"afterDrawing\", (ctx) => {this._drawForces(ctx);});\n  }\n\n\n  /**\n   * set the physics options\n   * @param options\n   */\n  setOptions(options) {\n    if (options !== undefined) {\n      if (options === false) {\n        this.options.enabled = false;\n        this.physicsEnabled = false;\n        this.stopSimulation();\n      }\n      else {\n        this.physicsEnabled = true;\n        util.selectiveNotDeepExtend(['stabilization'], this.options, options);\n        util.mergeOptions(this.options, options, 'stabilization');\n\n        if (options.enabled === undefined) {\n          this.options.enabled = true;\n        }\n\n        if (this.options.enabled === false) {\n          this.physicsEnabled = false;\n          this.stopSimulation();\n        }\n\n        // set the timestep\n        this.timestep = this.options.timestep;\n      }\n    }\n    this.init();\n  }\n\n\n  /**\n   * configure the engine.\n   */\n  init() {\n    var options;\n    if (this.options.solver === 'forceAtlas2Based') {\n      options = this.options.forceAtlas2Based;\n      this.nodesSolver = new ForceAtlas2BasedRepulsionSolver(this.body, this.physicsBody, options);\n      this.edgesSolver = new SpringSolver(this.body, this.physicsBody, options);\n      this.gravitySolver = new ForceAtlas2BasedCentralGravitySolver(this.body, this.physicsBody, options);\n    }\n    else if (this.options.solver === 'repulsion') {\n      options = this.options.repulsion;\n      this.nodesSolver = new Repulsion(this.body, this.physicsBody, options);\n      this.edgesSolver = new SpringSolver(this.body, this.physicsBody, options);\n      this.gravitySolver = new CentralGravitySolver(this.body, this.physicsBody, options);\n    }\n    else if (this.options.solver === 'hierarchicalRepulsion') {\n      options = this.options.hierarchicalRepulsion;\n      this.nodesSolver = new HierarchicalRepulsion(this.body, this.physicsBody, options);\n      this.edgesSolver = new HierarchicalSpringSolver(this.body, this.physicsBody, options);\n      this.gravitySolver = new CentralGravitySolver(this.body, this.physicsBody, options);\n    }\n    else { // barnesHut\n      options = this.options.barnesHut;\n      this.nodesSolver = new BarnesHutSolver(this.body, this.physicsBody, options);\n      this.edgesSolver = new SpringSolver(this.body, this.physicsBody, options);\n      this.gravitySolver = new CentralGravitySolver(this.body, this.physicsBody, options);\n    }\n\n    this.modelOptions = options;\n  }\n\n\n  /**\n   * initialize the engine\n   */\n  initPhysics() {\n    if (this.physicsEnabled === true && this.options.enabled === true) {\n      if (this.options.stabilization.enabled === true) {\n        this.stabilize();\n      }\n      else {\n        this.stabilized = false;\n        this.ready = true;\n        this.body.emitter.emit('fit', {}, this.layoutFailed); // if the layout failed, we use the approximation for the zoom\n        this.startSimulation();\n      }\n    }\n    else {\n      this.ready = true;\n      this.body.emitter.emit('fit');\n    }\n  }\n\n  /**\n   * Start the simulation\n   */\n  startSimulation() {\n    if (this.physicsEnabled === true && this.options.enabled === true) {\n      this.stabilized = false;\n\n      // when visible, adaptivity is disabled.\n      this.adaptiveTimestep = false;\n\n      // this sets the width of all nodes initially which could be required for the avoidOverlap\n      this.body.emitter.emit(\"_resizeNodes\");\n      if (this.viewFunction === undefined) {\n        this.viewFunction = this.simulationStep.bind(this);\n        this.body.emitter.on('initRedraw', this.viewFunction);\n        this.body.emitter.emit('_startRendering');\n      }\n    }\n    else {\n      this.body.emitter.emit('_redraw');\n    }\n  }\n\n\n  /**\n   * Stop the simulation, force stabilization.\n   */\n  stopSimulation(emit = true) {\n    this.stabilized = true;\n    if (emit === true) {\n      this._emitStabilized();\n    }\n    if (this.viewFunction !== undefined) {\n      this.body.emitter.off('initRedraw', this.viewFunction);\n      this.viewFunction = undefined;\n      if (emit === true) {\n        this.body.emitter.emit('_stopRendering');\n      }\n    }\n  }\n\n\n  /**\n   * The viewFunction inserts this step into each render loop. It calls the physics tick and handles the cleanup at stabilized.\n   *\n   */\n  simulationStep() {\n    // check if the physics have settled\n    var startTime = Date.now();\n    this.physicsTick();\n    var physicsTime = Date.now() - startTime;\n\n    // run double speed if it is a little graph\n    if ((physicsTime < 0.4 * this.simulationInterval || this.runDoubleSpeed === true) && this.stabilized === false) {\n      this.physicsTick();\n\n      // this makes sure there is no jitter. The decision is taken once to run it at double speed.\n      this.runDoubleSpeed = true;\n    }\n\n    if (this.stabilized === true) {\n      this.stopSimulation();\n    }\n  }\n\n\n  /**\n   * trigger the stabilized event.\n   * @private\n   */\n  _emitStabilized(amountOfIterations = this.stabilizationIterations) {\n    if (this.stabilizationIterations > 1 || this.startedStabilization === true) {\n      setTimeout(() => {\n        this.body.emitter.emit('stabilized', {iterations: amountOfIterations});\n        this.startedStabilization = false;\n        this.stabilizationIterations = 0;\n      }, 0);\n    }\n  }\n\n  /**\n   * A single simulation step (or 'tick') in the physics simulation\n   *\n   * @private\n   */\n  physicsTick() {\n    // this is here to ensure that there is no start event when the network is already stable.\n    if (this.startedStabilization === false) {\n      this.body.emitter.emit('startStabilizing');\n      this.startedStabilization = true;\n    }\n\n    if (this.stabilized === false) {\n      // adaptivity means the timestep adapts to the situation, only applicable for stabilization\n      if (this.adaptiveTimestep === true && this.adaptiveTimestepEnabled === true) {\n        // this is the factor for increasing the timestep on success.\n        let factor = 1.2;\n\n        // we assume the adaptive interval is\n        if (this.adaptiveCounter % this.adaptiveInterval === 0) { // we leave the timestep stable for \"interval\" iterations.\n          // first the big step and revert. Revert saves the reference state.\n          this.timestep = 2 * this.timestep;\n          this.calculateForces();\n          this.moveNodes();\n          this.revert();\n\n          // now the normal step. Since this is the last step, it is the more stable one and we will take this.\n          this.timestep = 0.5 * this.timestep;\n\n          // since it's half the step, we do it twice.\n          this.calculateForces();\n          this.moveNodes();\n          this.calculateForces();\n          this.moveNodes();\n\n          // we compare the two steps. if it is acceptable we double the step.\n          if (this._evaluateStepQuality() === true) {\n            this.timestep = factor * this.timestep;\n          }\n          else {\n            // if not, we decrease the step to a minimum of the options timestep.\n            // if the decreased timestep is smaller than the options step, we do not reset the counter\n            // we assume that the options timestep is stable enough.\n            if (this.timestep/factor < this.options.timestep) {\n              this.timestep = this.options.timestep;\n            }\n            else {\n              // if the timestep was larger than 2 times the option one we check the adaptivity again to ensure\n              // that large instabilities do not form.\n              this.adaptiveCounter = -1; // check again next iteration\n              this.timestep = Math.max(this.options.timestep, this.timestep/factor);\n            }\n          }\n        }\n        else {\n          // normal step, keeping timestep constant\n          this.calculateForces();\n          this.moveNodes();\n        }\n\n        // increment the counter\n        this.adaptiveCounter += 1;\n      }\n      else {\n        // case for the static timestep, we reset it to the one in options and take a normal step.\n        this.timestep = this.options.timestep;\n        this.calculateForces();\n        this.moveNodes();\n      }\n\n      // determine if the network has stabilzied\n      if (this.stabilized === true) {\n        this.revert();\n      }\n\n      this.stabilizationIterations++;\n    }\n  }\n\n  /**\n   * Nodes and edges can have the physics toggles on or off. A collection of indices is created here so we can skip the check all the time.\n   *\n   * @private\n   */\n  updatePhysicsData() {\n    this.physicsBody.forces = {};\n    this.physicsBody.physicsNodeIndices = [];\n    this.physicsBody.physicsEdgeIndices = [];\n    let nodes = this.body.nodes;\n    let edges = this.body.edges;\n\n    // get node indices for physics\n    for (let nodeId in nodes) {\n      if (nodes.hasOwnProperty(nodeId)) {\n        if (nodes[nodeId].options.physics === true) {\n          this.physicsBody.physicsNodeIndices.push(nodes[nodeId].id);\n        }\n      }\n    }\n\n    // get edge indices for physics\n    for (let edgeId in edges) {\n      if (edges.hasOwnProperty(edgeId)) {\n        if (edges[edgeId].options.physics === true) {\n          this.physicsBody.physicsEdgeIndices.push(edges[edgeId].id);\n        }\n      }\n    }\n\n    // get the velocity and the forces vector\n    for (let i = 0; i < this.physicsBody.physicsNodeIndices.length; i++) {\n      let nodeId = this.physicsBody.physicsNodeIndices[i];\n      this.physicsBody.forces[nodeId] = {x:0,y:0};\n\n      // forces can be reset because they are recalculated. Velocities have to persist.\n      if (this.physicsBody.velocities[nodeId] === undefined) {\n        this.physicsBody.velocities[nodeId] = {x:0,y:0};\n      }\n    }\n\n    // clean deleted nodes from the velocity vector\n    for (let nodeId in this.physicsBody.velocities) {\n      if (nodes[nodeId] === undefined) {\n        delete this.physicsBody.velocities[nodeId];\n      }\n    }\n  }\n\n\n  /**\n   * Revert the simulation one step. This is done so after stabilization, every new start of the simulation will also say stabilized.\n   */\n  revert() {\n    var nodeIds = Object.keys(this.previousStates);\n    var nodes = this.body.nodes;\n    var velocities = this.physicsBody.velocities;\n    this.referenceState = {};\n\n    for (let i = 0; i < nodeIds.length; i++) {\n      let nodeId = nodeIds[i];\n      if (nodes[nodeId] !== undefined) {\n        if (nodes[nodeId].options.physics === true) {\n          this.referenceState[nodeId] = {\n            positions: {x:nodes[nodeId].x, y:nodes[nodeId].y}\n          };\n          velocities[nodeId].x = this.previousStates[nodeId].vx;\n          velocities[nodeId].y = this.previousStates[nodeId].vy;\n          nodes[nodeId].x = this.previousStates[nodeId].x;\n          nodes[nodeId].y = this.previousStates[nodeId].y;\n        }\n      }\n      else {\n        delete this.previousStates[nodeId];\n      }\n    }\n  }\n\n  /**\n   * This compares the reference state to the current state\n   */\n  _evaluateStepQuality() {\n    let dx, dy, dpos;\n    let nodes = this.body.nodes;\n    let reference = this.referenceState;\n    let posThreshold = 0.3;\n\n    for (let nodeId in this.referenceState) {\n      if (this.referenceState.hasOwnProperty(nodeId) && nodes[nodeId] !== undefined) {\n        dx = nodes[nodeId].x - reference[nodeId].positions.x;\n        dy = nodes[nodeId].y - reference[nodeId].positions.y;\n\n        dpos = Math.sqrt(Math.pow(dx,2) + Math.pow(dy,2))\n\n        if (dpos > posThreshold) {\n          return false;\n        }\n      }\n    }\n    return true;\n  }\n\n  /**\n   * move the nodes one timestep and check if they are stabilized\n   * @returns {boolean}\n   */\n  moveNodes() {\n    var nodeIndices = this.physicsBody.physicsNodeIndices;\n    var maxVelocity = this.options.maxVelocity ? this.options.maxVelocity : 1e9;\n    var maxNodeVelocity = 0;\n    var averageNodeVelocity = 0;\n\n    // the velocity threshold (energy in the system) for the adaptivity toggle\n    var velocityAdaptiveThreshold = 5;\n\n    for (let i = 0; i < nodeIndices.length; i++) {\n      let nodeId = nodeIndices[i];\n      let nodeVelocity = this._performStep(nodeId, maxVelocity);\n      // stabilized is true if stabilized is true and velocity is smaller than vmin --> all nodes must be stabilized\n      maxNodeVelocity = Math.max(maxNodeVelocity,nodeVelocity);\n      averageNodeVelocity += nodeVelocity;\n    }\n\n    // evaluating the stabilized and adaptiveTimestepEnabled conditions\n    this.adaptiveTimestepEnabled = (averageNodeVelocity/nodeIndices.length) < velocityAdaptiveThreshold;\n    this.stabilized = maxNodeVelocity < this.options.minVelocity;\n  }\n\n\n  /**\n   * Perform the actual step\n   *\n   * @param nodeId\n   * @param maxVelocity\n   * @returns {number}\n   * @private\n   */\n  _performStep(nodeId,maxVelocity) {\n    let node = this.body.nodes[nodeId];\n    let timestep = this.timestep;\n    let forces = this.physicsBody.forces;\n    let velocities = this.physicsBody.velocities;\n\n    // store the state so we can revert\n    this.previousStates[nodeId] = {x:node.x, y:node.y, vx:velocities[nodeId].x, vy:velocities[nodeId].y};\n\n    if (node.options.fixed.x === false) {\n      let dx   = this.modelOptions.damping * velocities[nodeId].x;   // damping force\n      let ax   = (forces[nodeId].x - dx) / node.options.mass;        // acceleration\n      velocities[nodeId].x += ax * timestep;                         // velocity\n      velocities[nodeId].x = (Math.abs(velocities[nodeId].x) > maxVelocity) ? ((velocities[nodeId].x > 0) ? maxVelocity : -maxVelocity) : velocities[nodeId].x;\n      node.x   += velocities[nodeId].x * timestep;                    // position\n    }\n    else {\n      forces[nodeId].x = 0;\n      velocities[nodeId].x = 0;\n    }\n\n    if (node.options.fixed.y === false) {\n      let dy   = this.modelOptions.damping * velocities[nodeId].y;    // damping force\n      let ay   = (forces[nodeId].y - dy) / node.options.mass;         // acceleration\n      velocities[nodeId].y += ay * timestep;                          // velocity\n      velocities[nodeId].y = (Math.abs(velocities[nodeId].y) > maxVelocity) ? ((velocities[nodeId].y > 0) ? maxVelocity : -maxVelocity) : velocities[nodeId].y;\n      node.y   += velocities[nodeId].y * timestep;                     // position\n    }\n    else {\n      forces[nodeId].y = 0;\n      velocities[nodeId].y = 0;\n    }\n\n    let totalVelocity = Math.sqrt(Math.pow(velocities[nodeId].x,2) + Math.pow(velocities[nodeId].y,2));\n    return totalVelocity;\n  }\n\n\n  /**\n   * calculate the forces for one physics iteration.\n   */\n  calculateForces() {\n    this.gravitySolver.solve();\n    this.nodesSolver.solve();\n    this.edgesSolver.solve();\n  }\n\n\n\n  /**\n   * When initializing and stabilizing, we can freeze nodes with a predefined position. This greatly speeds up stabilization\n   * because only the supportnodes for the smoothCurves have to settle.\n   *\n   * @private\n   */\n  _freezeNodes() {\n    var nodes = this.body.nodes;\n    for (var id in nodes) {\n      if (nodes.hasOwnProperty(id)) {\n        if (nodes[id].x && nodes[id].y) {\n          this.freezeCache[id] = {x:nodes[id].options.fixed.x,y:nodes[id].options.fixed.y};\n          nodes[id].options.fixed.x = true;\n          nodes[id].options.fixed.y = true;\n        }\n      }\n    }\n  }\n\n  /**\n   * Unfreezes the nodes that have been frozen by _freezeDefinedNodes.\n   *\n   * @private\n   */\n  _restoreFrozenNodes() {\n    var nodes = this.body.nodes;\n    for (var id in nodes) {\n      if (nodes.hasOwnProperty(id)) {\n        if (this.freezeCache[id] !== undefined) {\n          nodes[id].options.fixed.x = this.freezeCache[id].x;\n          nodes[id].options.fixed.y = this.freezeCache[id].y;\n        }\n      }\n    }\n    this.freezeCache = {};\n  }\n\n  /**\n   * Find a stable position for all nodes\n   */\n  stabilize(iterations = this.options.stabilization.iterations) {\n    if (typeof iterations !== 'number') {\n      console.log('The stabilize method needs a numeric amount of iterations. Switching to default: ', this.options.stabilization.iterations);\n      iterations = this.options.stabilization.iterations;\n    }\n\n    if (this.physicsBody.physicsNodeIndices.length === 0) {\n      this.ready = true;\n      return;\n    }\n\n    // enable adaptive timesteps\n    this.adaptiveTimestep = true && this.options.adaptiveTimestep;\n\n    // this sets the width of all nodes initially which could be required for the avoidOverlap\n    this.body.emitter.emit(\"_resizeNodes\");\n\n    // stop the render loop\n    this.stopSimulation();\n\n    // set stabilze to false\n    this.stabilized = false;\n\n    // block redraw requests\n    this.body.emitter.emit('_blockRedraw');\n    this.targetIterations = iterations;\n\n    // start the stabilization\n    if (this.options.stabilization.onlyDynamicEdges === true) {\n      this._freezeNodes();\n    }\n    this.stabilizationIterations = 0;\n\n    setTimeout(() => this._stabilizationBatch(),0);\n  }\n\n\n  /**\n   * One batch of stabilization\n   * @private\n   */\n  _stabilizationBatch() {\n    // this is here to ensure that there is at least one start event.\n    if (this.startedStabilization === false) {\n      this.body.emitter.emit('startStabilizing');\n      this.startedStabilization = true;\n    }\n\n    var count = 0;\n    while (this.stabilized === false && count < this.options.stabilization.updateInterval && this.stabilizationIterations < this.targetIterations) {\n      this.physicsTick();\n      count++;\n    }\n\n    if (this.stabilized === false && this.stabilizationIterations < this.targetIterations) {\n      this.body.emitter.emit('stabilizationProgress', {iterations: this.stabilizationIterations, total: this.targetIterations});\n      setTimeout(this._stabilizationBatch.bind(this),0);\n    }\n    else {\n      this._finalizeStabilization();\n    }\n  }\n\n\n  /**\n   * Wrap up the stabilization, fit and emit the events.\n   * @private\n   */\n  _finalizeStabilization() {\n    this.body.emitter.emit('_allowRedraw');\n    if (this.options.stabilization.fit === true) {\n      this.body.emitter.emit('fit');\n    }\n\n    if (this.options.stabilization.onlyDynamicEdges === true) {\n      this._restoreFrozenNodes();\n    }\n\n    this.body.emitter.emit('stabilizationIterationsDone');\n    this.body.emitter.emit('_requestRedraw');\n\n    if (this.stabilized === true) {\n      this._emitStabilized();\n    }\n    else {\n      this.startSimulation();\n    }\n\n    this.ready = true;\n  }\n\n\n  _drawForces(ctx) {\n    for (var i = 0; i < this.physicsBody.physicsNodeIndices.length; i++) {\n      let node = this.body.nodes[this.physicsBody.physicsNodeIndices[i]];\n      let force = this.physicsBody.forces[this.physicsBody.physicsNodeIndices[i]];\n      let factor = 20;\n      let colorFactor = 0.03;\n      let forceSize = Math.sqrt(Math.pow(force.x,2) + Math.pow(force.x,2));\n\n      let size = Math.min(Math.max(5,forceSize),15);\n      let arrowSize = 3*size;\n\n      let color = util.HSVToHex((180 - Math.min(1,Math.max(0,colorFactor*forceSize))*180) / 360,1,1);\n\n      ctx.lineWidth = size;\n      ctx.strokeStyle = color;\n      ctx.beginPath();\n      ctx.moveTo(node.x,node.y);\n      ctx.lineTo(node.x+factor*force.x, node.y+factor*force.y);\n      ctx.stroke();\n\n      let angle = Math.atan2(force.y, force.x);\n      ctx.fillStyle = color;\n      ctx.arrowEndpoint(node.x + factor*force.x + Math.cos(angle)*arrowSize, node.y + factor*force.y+Math.sin(angle)*arrowSize, angle, arrowSize);\n      ctx.fill();\n    }\n  }\n\n}\n\nexport default PhysicsEngine;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/PhysicsEngine.js","\nclass BarnesHutSolver {\n  constructor(body, physicsBody, options) {\n    this.body = body;\n    this.physicsBody = physicsBody;\n    this.barnesHutTree;\n    this.setOptions(options);\n    this.randomSeed = 5;\n\n    // debug: show grid\n    //this.body.emitter.on(\"afterDrawing\", (ctx) => {this._debug(ctx,'#ff0000')})\n  }\n\n  setOptions(options) {\n    this.options = options;\n    this.thetaInversed = 1 / this.options.theta;\n    this.overlapAvoidanceFactor = 1 - Math.max(0, Math.min(1,this.options.avoidOverlap)); // if 1 then min distance = 0.5, if 0.5 then min distance = 0.5 + 0.5*node.shape.radius\n  }\n\n  seededRandom() {\n    var x = Math.sin(this.randomSeed++) * 10000;\n    return x - Math.floor(x);\n  }\n\n\n  /**\n   * This function calculates the forces the nodes apply on each other based on a gravitational model.\n   * The Barnes Hut method is used to speed up this N-body simulation.\n   *\n   * @private\n   */\n  solve() {\n    if (this.options.gravitationalConstant !== 0 && this.physicsBody.physicsNodeIndices.length > 0) {\n      let node;\n      let nodes = this.body.nodes;\n      let nodeIndices = this.physicsBody.physicsNodeIndices;\n      let nodeCount = nodeIndices.length;\n\n      // create the tree\n      let barnesHutTree = this._formBarnesHutTree(nodes, nodeIndices);\n\n      // for debugging\n      this.barnesHutTree = barnesHutTree;\n\n      // place the nodes one by one recursively\n      for (let i = 0; i < nodeCount; i++) {\n        node = nodes[nodeIndices[i]];\n        if (node.options.mass > 0) {\n          // starting with root is irrelevant, it never passes the BarnesHutSolver condition\n          this._getForceContribution(barnesHutTree.root.children.NW, node);\n          this._getForceContribution(barnesHutTree.root.children.NE, node);\n          this._getForceContribution(barnesHutTree.root.children.SW, node);\n          this._getForceContribution(barnesHutTree.root.children.SE, node);\n        }\n      }\n    }\n  }\n\n\n  /**\n   * This function traverses the barnesHutTree. It checks when it can approximate distant nodes with their center of mass.\n   * If a region contains a single node, we check if it is not itself, then we apply the force.\n   *\n   * @param parentBranch\n   * @param node\n   * @private\n   */\n  _getForceContribution(parentBranch, node) {\n    // we get no force contribution from an empty region\n    if (parentBranch.childrenCount > 0) {\n      let dx, dy, distance;\n\n      // get the distance from the center of mass to the node.\n      dx = parentBranch.centerOfMass.x - node.x;\n      dy = parentBranch.centerOfMass.y - node.y;\n      distance = Math.sqrt(dx * dx + dy * dy);\n\n      // BarnesHutSolver condition\n      // original condition : s/d < theta = passed  ===  d/s > 1/theta = passed\n      // calcSize = 1/s --> d * 1/s > 1/theta = passed\n      if (distance * parentBranch.calcSize > this.thetaInversed) {\n        this._calculateForces(distance, dx, dy, node, parentBranch);\n      }\n      else {\n        // Did not pass the condition, go into children if available\n        if (parentBranch.childrenCount === 4) {\n          this._getForceContribution(parentBranch.children.NW, node);\n          this._getForceContribution(parentBranch.children.NE, node);\n          this._getForceContribution(parentBranch.children.SW, node);\n          this._getForceContribution(parentBranch.children.SE, node);\n        }\n        else { // parentBranch must have only one node, if it was empty we wouldnt be here\n          if (parentBranch.children.data.id != node.id) { // if it is not self\n            this._calculateForces(distance, dx, dy, node, parentBranch);\n          }\n        }\n      }\n    }\n  }\n\n\n  /**\n   * Calculate the forces based on the distance.\n   *\n   * @param distance\n   * @param dx\n   * @param dy\n   * @param node\n   * @param parentBranch\n   * @private\n   */\n  _calculateForces(distance, dx, dy, node, parentBranch) {\n    if (distance === 0) {\n      distance = 0.1;\n      dx = distance;\n    }\n\n    if (this.overlapAvoidanceFactor < 1 && node.shape.radius) {\n      distance = Math.max(0.1 + (this.overlapAvoidanceFactor * node.shape.radius), distance - node.shape.radius);\n    }\n\n    // the dividing by the distance cubed instead of squared allows us to get the fx and fy components without sines and cosines\n    // it is shorthand for gravityforce with distance squared and fx = dx/distance * gravityForce\n    let gravityForce = this.options.gravitationalConstant * parentBranch.mass * node.options.mass / Math.pow(distance,3);\n    let fx = dx * gravityForce;\n    let fy = dy * gravityForce;\n\n    this.physicsBody.forces[node.id].x += fx;\n    this.physicsBody.forces[node.id].y += fy;\n  }\n\n\n  /**\n   * This function constructs the barnesHut tree recursively. It creates the root, splits it and starts placing the nodes.\n   *\n   * @param nodes\n   * @param nodeIndices\n   * @private\n   */\n  _formBarnesHutTree(nodes, nodeIndices) {\n    let node;\n    let nodeCount = nodeIndices.length;\n\n    let minX = nodes[nodeIndices[0]].x;\n    let minY = nodes[nodeIndices[0]].y;\n    let maxX = nodes[nodeIndices[0]].x;\n    let maxY = nodes[nodeIndices[0]].y;\n\n    // get the range of the nodes\n    for (let i = 1; i < nodeCount; i++) {\n      let x = nodes[nodeIndices[i]].x;\n      let y = nodes[nodeIndices[i]].y;\n      if (nodes[nodeIndices[i]].options.mass > 0) {\n        if (x < minX) {\n          minX = x;\n        }\n        if (x > maxX) {\n          maxX = x;\n        }\n        if (y < minY) {\n          minY = y;\n        }\n        if (y > maxY) {\n          maxY = y;\n        }\n      }\n    }\n    // make the range a square\n    let sizeDiff = Math.abs(maxX - minX) - Math.abs(maxY - minY); // difference between X and Y\n    if (sizeDiff > 0) {\n      minY -= 0.5 * sizeDiff;\n      maxY += 0.5 * sizeDiff;\n    } // xSize > ySize\n    else {\n      minX += 0.5 * sizeDiff;\n      maxX -= 0.5 * sizeDiff;\n    } // xSize < ySize\n\n\n    let minimumTreeSize = 1e-5;\n    let rootSize = Math.max(minimumTreeSize, Math.abs(maxX - minX));\n    let halfRootSize = 0.5 * rootSize;\n    let centerX = 0.5 * (minX + maxX), centerY = 0.5 * (minY + maxY);\n\n    // construct the barnesHutTree\n    let barnesHutTree = {\n      root: {\n        centerOfMass: {x: 0, y: 0},\n        mass: 0,\n        range: {\n          minX: centerX - halfRootSize, maxX: centerX + halfRootSize,\n          minY: centerY - halfRootSize, maxY: centerY + halfRootSize\n        },\n        size: rootSize,\n        calcSize: 1 / rootSize,\n        children: {data: null},\n        maxWidth: 0,\n        level: 0,\n        childrenCount: 4\n      }\n    };\n    this._splitBranch(barnesHutTree.root);\n\n    // place the nodes one by one recursively\n    for (let i = 0; i < nodeCount; i++) {\n      node = nodes[nodeIndices[i]];\n      if (node.options.mass > 0) {\n        this._placeInTree(barnesHutTree.root, node);\n      }\n    }\n\n    // make global\n    return barnesHutTree\n  }\n\n\n  /**\n   * this updates the mass of a branch. this is increased by adding a node.\n   *\n   * @param parentBranch\n   * @param node\n   * @private\n   */\n  _updateBranchMass(parentBranch, node) {\n    let totalMass = parentBranch.mass + node.options.mass;\n    let totalMassInv = 1 / totalMass;\n\n    parentBranch.centerOfMass.x = parentBranch.centerOfMass.x * parentBranch.mass + node.x * node.options.mass;\n    parentBranch.centerOfMass.x *= totalMassInv;\n\n    parentBranch.centerOfMass.y = parentBranch.centerOfMass.y * parentBranch.mass + node.y * node.options.mass;\n    parentBranch.centerOfMass.y *= totalMassInv;\n\n    parentBranch.mass = totalMass;\n    let biggestSize = Math.max(Math.max(node.height, node.radius), node.width);\n    parentBranch.maxWidth = (parentBranch.maxWidth < biggestSize) ? biggestSize : parentBranch.maxWidth;\n\n  }\n\n\n  /**\n   * determine in which branch the node will be placed.\n   *\n   * @param parentBranch\n   * @param node\n   * @param skipMassUpdate\n   * @private\n   */\n  _placeInTree(parentBranch, node, skipMassUpdate) {\n    if (skipMassUpdate != true || skipMassUpdate === undefined) {\n      // update the mass of the branch.\n      this._updateBranchMass(parentBranch, node);\n    }\n\n    if (parentBranch.children.NW.range.maxX > node.x) { // in NW or SW\n      if (parentBranch.children.NW.range.maxY > node.y) { // in NW\n        this._placeInRegion(parentBranch, node, \"NW\");\n      }\n      else { // in SW\n        this._placeInRegion(parentBranch, node, \"SW\");\n      }\n    }\n    else { // in NE or SE\n      if (parentBranch.children.NW.range.maxY > node.y) { // in NE\n        this._placeInRegion(parentBranch, node, \"NE\");\n      }\n      else { // in SE\n        this._placeInRegion(parentBranch, node, \"SE\");\n      }\n    }\n  }\n\n\n  /**\n   * actually place the node in a region (or branch)\n   *\n   * @param parentBranch\n   * @param node\n   * @param region\n   * @private\n   */\n  _placeInRegion(parentBranch, node, region) {\n    switch (parentBranch.children[region].childrenCount) {\n      case 0: // place node here\n        parentBranch.children[region].children.data = node;\n        parentBranch.children[region].childrenCount = 1;\n        this._updateBranchMass(parentBranch.children[region], node);\n        break;\n      case 1: // convert into children\n              // if there are two nodes exactly overlapping (on init, on opening of cluster etc.)\n              // we move one node a little bit and we do not put it in the tree.\n        if (parentBranch.children[region].children.data.x === node.x &&\n          parentBranch.children[region].children.data.y === node.y) {\n          node.x += this.seededRandom();\n          node.y += this.seededRandom();\n        }\n        else {\n          this._splitBranch(parentBranch.children[region]);\n          this._placeInTree(parentBranch.children[region], node);\n        }\n        break;\n      case 4: // place in branch\n        this._placeInTree(parentBranch.children[region], node);\n        break;\n    }\n  }\n\n\n  /**\n   * this function splits a branch into 4 sub branches. If the branch contained a node, we place it in the subbranch\n   * after the split is complete.\n   *\n   * @param parentBranch\n   * @private\n   */\n  _splitBranch(parentBranch) {\n    // if the branch is shaded with a node, replace the node in the new subset.\n    let containedNode = null;\n    if (parentBranch.childrenCount === 1) {\n      containedNode = parentBranch.children.data;\n      parentBranch.mass = 0;\n      parentBranch.centerOfMass.x = 0;\n      parentBranch.centerOfMass.y = 0;\n    }\n    parentBranch.childrenCount = 4;\n    parentBranch.children.data = null;\n    this._insertRegion(parentBranch, \"NW\");\n    this._insertRegion(parentBranch, \"NE\");\n    this._insertRegion(parentBranch, \"SW\");\n    this._insertRegion(parentBranch, \"SE\");\n\n    if (containedNode != null) {\n      this._placeInTree(parentBranch, containedNode);\n    }\n  }\n\n\n  /**\n   * This function subdivides the region into four new segments.\n   * Specifically, this inserts a single new segment.\n   * It fills the children section of the parentBranch\n   *\n   * @param parentBranch\n   * @param region\n   * @param parentRange\n   * @private\n   */\n  _insertRegion(parentBranch, region) {\n    let minX, maxX, minY, maxY;\n    let childSize = 0.5 * parentBranch.size;\n    switch (region) {\n      case \"NW\":\n        minX = parentBranch.range.minX;\n        maxX = parentBranch.range.minX + childSize;\n        minY = parentBranch.range.minY;\n        maxY = parentBranch.range.minY + childSize;\n        break;\n      case \"NE\":\n        minX = parentBranch.range.minX + childSize;\n        maxX = parentBranch.range.maxX;\n        minY = parentBranch.range.minY;\n        maxY = parentBranch.range.minY + childSize;\n        break;\n      case \"SW\":\n        minX = parentBranch.range.minX;\n        maxX = parentBranch.range.minX + childSize;\n        minY = parentBranch.range.minY + childSize;\n        maxY = parentBranch.range.maxY;\n        break;\n      case \"SE\":\n        minX = parentBranch.range.minX + childSize;\n        maxX = parentBranch.range.maxX;\n        minY = parentBranch.range.minY + childSize;\n        maxY = parentBranch.range.maxY;\n        break;\n    }\n\n\n    parentBranch.children[region] = {\n      centerOfMass: {x: 0, y: 0},\n      mass: 0,\n      range: {minX: minX, maxX: maxX, minY: minY, maxY: maxY},\n      size: 0.5 * parentBranch.size,\n      calcSize: 2 * parentBranch.calcSize,\n      children: {data: null},\n      maxWidth: 0,\n      level: parentBranch.level + 1,\n      childrenCount: 0\n    };\n  }\n\n\n\n\n  //---------------------------  DEBUGGING BELOW  ---------------------------//\n\n\n  /**\n   * This function is for debugging purposed, it draws the tree.\n   *\n   * @param ctx\n   * @param color\n   * @private\n   */\n  _debug(ctx, color) {\n    if (this.barnesHutTree !== undefined) {\n\n      ctx.lineWidth = 1;\n\n      this._drawBranch(this.barnesHutTree.root, ctx, color);\n    }\n  }\n\n\n  /**\n   * This function is for debugging purposes. It draws the branches recursively.\n   *\n   * @param branch\n   * @param ctx\n   * @param color\n   * @private\n   */\n  _drawBranch(branch, ctx, color) {\n    if (color === undefined) {\n      color = \"#FF0000\";\n    }\n\n    if (branch.childrenCount === 4) {\n      this._drawBranch(branch.children.NW, ctx);\n      this._drawBranch(branch.children.NE, ctx);\n      this._drawBranch(branch.children.SE, ctx);\n      this._drawBranch(branch.children.SW, ctx);\n    }\n    ctx.strokeStyle = color;\n    ctx.beginPath();\n    ctx.moveTo(branch.range.minX, branch.range.minY);\n    ctx.lineTo(branch.range.maxX, branch.range.minY);\n    ctx.stroke();\n\n    ctx.beginPath();\n    ctx.moveTo(branch.range.maxX, branch.range.minY);\n    ctx.lineTo(branch.range.maxX, branch.range.maxY);\n    ctx.stroke();\n\n    ctx.beginPath();\n    ctx.moveTo(branch.range.maxX, branch.range.maxY);\n    ctx.lineTo(branch.range.minX, branch.range.maxY);\n    ctx.stroke();\n\n    ctx.beginPath();\n    ctx.moveTo(branch.range.minX, branch.range.maxY);\n    ctx.lineTo(branch.range.minX, branch.range.minY);\n    ctx.stroke();\n\n    /*\n     if (branch.mass > 0) {\n     ctx.circle(branch.centerOfMass.x, branch.centerOfMass.y, 3*branch.mass);\n     ctx.stroke();\n     }\n     */\n  }\n}\n\n\nexport default BarnesHutSolver;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/physics/BarnesHutSolver.js","class RepulsionSolver {\n  constructor(body, physicsBody, options) {\n    this.body = body;\n    this.physicsBody = physicsBody;\n    this.setOptions(options);\n  }\n\n  setOptions(options) {\n    this.options = options;\n  }\n  /**\n   * Calculate the forces the nodes apply on each other based on a repulsion field.\n   * This field is linearly approximated.\n   *\n   * @private\n   */\n  solve() {\n    var dx, dy, distance, fx, fy, repulsingForce, node1, node2;\n\n    var nodes = this.body.nodes;\n    var nodeIndices = this.physicsBody.physicsNodeIndices;\n    var forces = this.physicsBody.forces;\n\n    // repulsing forces between nodes\n    var nodeDistance = this.options.nodeDistance;\n\n    // approximation constants\n    var a = (-2 / 3) / nodeDistance;\n    var b = 4 / 3;\n\n    // we loop from i over all but the last entree in the array\n    // j loops from i+1 to the last. This way we do not double count any of the indices, nor i === j\n    for (let i = 0; i < nodeIndices.length - 1; i++) {\n      node1 = nodes[nodeIndices[i]];\n      for (let j = i + 1; j < nodeIndices.length; j++) {\n        node2 = nodes[nodeIndices[j]];\n\n        dx = node2.x - node1.x;\n        dy = node2.y - node1.y;\n        distance = Math.sqrt(dx * dx + dy * dy);\n\n        // same condition as BarnesHutSolver, making sure nodes are never 100% overlapping.\n        if (distance === 0) {\n          distance = 0.1*Math.random();\n          dx = distance;\n        }\n\n        if (distance < 2 * nodeDistance) {\n          if (distance < 0.5 * nodeDistance) {\n            repulsingForce = 1.0;\n          }\n          else {\n            repulsingForce = a * distance + b; // linear approx of  1 / (1 + Math.exp((distance / nodeDistance - 1) * steepness))\n          }\n          repulsingForce = repulsingForce / distance;\n\n          fx = dx * repulsingForce;\n          fy = dy * repulsingForce;\n\n          forces[node1.id].x -= fx;\n          forces[node1.id].y -= fy;\n          forces[node2.id].x += fx;\n          forces[node2.id].y += fy;\n        }\n      }\n    }\n  }\n}\n\n\nexport default RepulsionSolver;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/physics/RepulsionSolver.js","class HierarchicalRepulsionSolver {\n  constructor(body, physicsBody, options) {\n    this.body = body;\n    this.physicsBody = physicsBody;\n    this.setOptions(options);\n  }\n\n  setOptions(options) {\n    this.options = options;\n  }\n\n  /**\n   * Calculate the forces the nodes apply on each other based on a repulsion field.\n   * This field is linearly approximated.\n   *\n   * @private\n   */\n  solve() {\n    var dx, dy, distance, fx, fy, repulsingForce, node1, node2, i, j;\n\n    var nodes = this.body.nodes;\n    var nodeIndices = this.physicsBody.physicsNodeIndices;\n    var forces = this.physicsBody.forces;\n\n    // repulsing forces between nodes\n    var nodeDistance = this.options.nodeDistance;\n\n    // we loop from i over all but the last entree in the array\n    // j loops from i+1 to the last. This way we do not double count any of the indices, nor i === j\n    for (i = 0; i < nodeIndices.length - 1; i++) {\n      node1 = nodes[nodeIndices[i]];\n      for (j = i + 1; j < nodeIndices.length; j++) {\n        node2 = nodes[nodeIndices[j]];\n\n        // nodes only affect nodes on their level\n        if (node1.level === node2.level) {\n          dx = node2.x - node1.x;\n          dy = node2.y - node1.y;\n          distance = Math.sqrt(dx * dx + dy * dy);\n\n          var steepness = 0.05;\n          if (distance < nodeDistance) {\n            repulsingForce = -Math.pow(steepness * distance, 2) + Math.pow(steepness * nodeDistance, 2);\n          }\n          else {\n            repulsingForce = 0;\n          }\n          // normalize force with\n          if (distance === 0) {\n            distance = 0.01;\n          }\n          else {\n            repulsingForce = repulsingForce / distance;\n          }\n          fx = dx * repulsingForce;\n          fy = dy * repulsingForce;\n\n          forces[node1.id].x -= fx;\n          forces[node1.id].y -= fy;\n          forces[node2.id].x += fx;\n          forces[node2.id].y += fy;\n        }\n      }\n    }\n  }\n}\n\n\nexport default HierarchicalRepulsionSolver;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/physics/HierarchicalRepulsionSolver.js","class SpringSolver {\n  constructor(body, physicsBody, options) {\n    this.body = body;\n    this.physicsBody = physicsBody;\n    this.setOptions(options);\n  }\n\n  setOptions(options) {\n    this.options = options;\n  }\n\n  /**\n   * This function calculates the springforces on the nodes, accounting for the support nodes.\n   *\n   * @private\n   */\n  solve() {\n    let edgeLength, edge;\n    let edgeIndices = this.physicsBody.physicsEdgeIndices;\n    let edges = this.body.edges;\n    let node1, node2, node3;\n\n    // forces caused by the edges, modelled as springs\n    for (let i = 0; i < edgeIndices.length; i++) {\n      edge = edges[edgeIndices[i]];\n      if (edge.connected === true && edge.toId !== edge.fromId) {\n        // only calculate forces if nodes are in the same sector\n        if (this.body.nodes[edge.toId] !== undefined && this.body.nodes[edge.fromId] !== undefined) {\n          if (edge.edgeType.via !== undefined) {\n            edgeLength = edge.options.length === undefined ? this.options.springLength : edge.options.length;\n            node1 = edge.to;\n            node2 = edge.edgeType.via;\n            node3 = edge.from;\n\n            this._calculateSpringForce(node1, node2, 0.5 * edgeLength);\n            this._calculateSpringForce(node2, node3, 0.5 * edgeLength);\n          }\n          else {\n            // the * 1.5 is here so the edge looks as large as a smooth edge. It does not initially because the smooth edges use\n            // the support nodes which exert a repulsive force on the to and from nodes, making the edge appear larger.\n            edgeLength = edge.options.length === undefined ? this.options.springLength * 1.5: edge.options.length;\n            this._calculateSpringForce(edge.from, edge.to, edgeLength);\n          }\n        }\n      }\n    }\n  }\n\n\n  /**\n   * This is the code actually performing the calculation for the function above.\n   *\n   * @param node1\n   * @param node2\n   * @param edgeLength\n   * @private\n   */\n  _calculateSpringForce(node1, node2, edgeLength) {\n    let dx = (node1.x - node2.x);\n    let dy = (node1.y - node2.y);\n    let distance = Math.max(Math.sqrt(dx * dx + dy * dy),0.01);\n\n    // the 1/distance is so the fx and fy can be calculated without sine or cosine.\n    let springForce = this.options.springConstant * (edgeLength - distance) / distance;\n\n    let fx = dx * springForce;\n    let fy = dy * springForce;\n\n    // handle the case where one node is not part of the physcis\n    if (this.physicsBody.forces[node1.id] !== undefined) {\n      this.physicsBody.forces[node1.id].x += fx;\n      this.physicsBody.forces[node1.id].y += fy;\n    }\n\n    if (this.physicsBody.forces[node2.id] !== undefined) {\n      this.physicsBody.forces[node2.id].x -= fx;\n      this.physicsBody.forces[node2.id].y -= fy;\n    }\n  }\n}\n\nexport default SpringSolver;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/physics/SpringSolver.js","class HierarchicalSpringSolver {\n  constructor(body, physicsBody, options) {\n    this.body = body;\n    this.physicsBody = physicsBody;\n    this.setOptions(options);\n  }\n\n  setOptions(options) {\n    this.options = options;\n  }\n\n  /**\n   * This function calculates the springforces on the nodes, accounting for the support nodes.\n   *\n   * @private\n   */\n  solve() {\n    var edgeLength, edge;\n    var dx, dy, fx, fy, springForce, distance;\n    var edges = this.body.edges;\n    var factor = 0.5;\n\n    var edgeIndices = this.physicsBody.physicsEdgeIndices;\n    var nodeIndices = this.physicsBody.physicsNodeIndices;\n    var forces = this.physicsBody.forces;\n\n    // initialize the spring force counters\n    for (let i = 0; i < nodeIndices.length; i++) {\n      let nodeId = nodeIndices[i];\n      forces[nodeId].springFx = 0;\n      forces[nodeId].springFy = 0;\n    }\n\n\n    // forces caused by the edges, modelled as springs\n    for (let i = 0; i < edgeIndices.length; i++) {\n      edge = edges[edgeIndices[i]];\n      if (edge.connected === true) {\n        edgeLength = edge.options.length === undefined ? this.options.springLength : edge.options.length;\n\n        dx = (edge.from.x - edge.to.x);\n        dy = (edge.from.y - edge.to.y);\n        distance = Math.sqrt(dx * dx + dy * dy);\n        distance = distance === 0 ? 0.01 : distance;\n\n        // the 1/distance is so the fx and fy can be calculated without sine or cosine.\n        springForce = this.options.springConstant * (edgeLength - distance) / distance;\n\n        fx = dx * springForce;\n        fy = dy * springForce;\n\n        if (edge.to.level != edge.from.level) {\n          if (forces[edge.toId] !== undefined) {\n            forces[edge.toId].springFx -= fx;\n            forces[edge.toId].springFy -= fy;\n          }\n          if (forces[edge.fromId] !== undefined) {\n            forces[edge.fromId].springFx += fx;\n            forces[edge.fromId].springFy += fy;\n          }\n        }\n        else {\n          if (forces[edge.toId] !== undefined) {\n            forces[edge.toId].x -= factor * fx;\n            forces[edge.toId].y -= factor * fy;\n          }\n          if (forces[edge.fromId] !== undefined) {\n            forces[edge.fromId].x += factor * fx;\n            forces[edge.fromId].y += factor * fy;\n          }\n        }\n      }\n    }\n\n    // normalize spring forces\n    var springForce = 1;\n    var springFx, springFy;\n    for (let i = 0; i < nodeIndices.length; i++) {\n      let nodeId = nodeIndices[i];\n      springFx = Math.min(springForce,Math.max(-springForce,forces[nodeId].springFx));\n      springFy = Math.min(springForce,Math.max(-springForce,forces[nodeId].springFy));\n\n      forces[nodeId].x += springFx;\n      forces[nodeId].y += springFy;\n    }\n\n    // retain energy balance\n    var totalFx = 0;\n    var totalFy = 0;\n    for (let i = 0; i < nodeIndices.length; i++) {\n      let nodeId = nodeIndices[i];\n      totalFx += forces[nodeId].x;\n      totalFy += forces[nodeId].y;\n    }\n    var correctionFx = totalFx / nodeIndices.length;\n    var correctionFy = totalFy / nodeIndices.length;\n\n    for (let i = 0; i < nodeIndices.length; i++) {\n      let nodeId = nodeIndices[i];\n      forces[nodeId].x -= correctionFx;\n      forces[nodeId].y -= correctionFy;\n    }\n  }\n\n}\n\nexport default HierarchicalSpringSolver;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/physics/HierarchicalSpringSolver.js","class CentralGravitySolver {\n  constructor(body, physicsBody, options) {\n    this.body = body;\n    this.physicsBody = physicsBody;\n    this.setOptions(options);\n  }\n\n  setOptions(options) {\n    this.options = options;\n  }\n\n  solve() {\n    let dx, dy, distance, node;\n    let nodes = this.body.nodes;\n    let nodeIndices = this.physicsBody.physicsNodeIndices;\n    let forces = this.physicsBody.forces;\n\n    for (let i = 0; i < nodeIndices.length; i++) {\n      let nodeId = nodeIndices[i];\n      node = nodes[nodeId];\n      dx = -node.x;\n      dy = -node.y;\n      distance = Math.sqrt(dx * dx + dy * dy);\n\n      this._calculateForces(distance, dx, dy, forces, node);\n    }\n  }\n\n  /**\n   * Calculate the forces based on the distance.\n   * @private\n   */\n  _calculateForces(distance, dx, dy, forces, node) {\n    let gravityForce = (distance === 0) ? 0 : (this.options.centralGravity / distance);\n    forces[node.id].x = dx * gravityForce;\n    forces[node.id].y = dy * gravityForce;\n  }\n}\n\n\nexport default CentralGravitySolver;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/physics/CentralGravitySolver.js","import BarnesHutSolver from \"./BarnesHutSolver\"\n\nclass ForceAtlas2BasedRepulsionSolver extends BarnesHutSolver {\n  constructor(body, physicsBody, options) {\n    super(body, physicsBody, options);\n  }\n\n  /**\n   * Calculate the forces based on the distance.\n   *\n   * @param distance\n   * @param dx\n   * @param dy\n   * @param node\n   * @param parentBranch\n   * @private\n   */\n  _calculateForces(distance, dx, dy, node, parentBranch) {\n    if (distance === 0) {\n      distance = 0.1 * Math.random();\n      dx = distance;\n    }\n\n    if (this.overlapAvoidanceFactor < 1 && node.shape.radius) {\n      distance = Math.max(0.1 + (this.overlapAvoidanceFactor * node.shape.radius), distance - node.shape.radius);\n    }\n\n    let degree = (node.edges.length + 1);\n    // the dividing by the distance cubed instead of squared allows us to get the fx and fy components without sines and cosines\n    // it is shorthand for gravityforce with distance squared and fx = dx/distance * gravityForce\n    let gravityForce = this.options.gravitationalConstant * parentBranch.mass * node.options.mass * degree / Math.pow(distance,2);\n    let fx = dx * gravityForce;\n    let fy = dy * gravityForce;\n\n    this.physicsBody.forces[node.id].x += fx;\n    this.physicsBody.forces[node.id].y += fy;\n  }\n}\n\nexport default ForceAtlas2BasedRepulsionSolver;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/physics/FA2BasedRepulsionSolver.js","import CentralGravitySolver from \"./CentralGravitySolver\"\n\nclass ForceAtlas2BasedCentralGravitySolver extends CentralGravitySolver {\n  constructor(body, physicsBody, options) {\n    super(body, physicsBody, options);\n  }\n\n\n  /**\n   * Calculate the forces based on the distance.\n   * @private\n   */\n  _calculateForces(distance, dx, dy, forces, node) {\n    if (distance > 0) {\n      let degree = (node.edges.length + 1);\n      let gravityForce = this.options.centralGravity * degree * node.options.mass;\n      forces[node.id].x = dx * gravityForce;\n      forces[node.id].y = dy * gravityForce;\n    }\n  }\n}\n\nexport default ForceAtlas2BasedCentralGravitySolver;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/physics/FA2BasedCentralGravitySolver.js","let util = require(\"../../util\");\nimport NetworkUtil from '../NetworkUtil';\nimport Cluster from './components/nodes/Cluster'\n\nclass ClusterEngine {\n  constructor(body) {\n    this.body = body;\n    this.clusteredNodes = {};\n    this.clusteredEdges = {};\n\n    this.options = {};\n    this.defaultOptions = {};\n    util.extend(this.options, this.defaultOptions);\n\n    this.body.emitter.on('_resetData', () => {this.clusteredNodes = {}; this.clusteredEdges = {};})\n  }\n\n  /**\n  *\n  * @param hubsize\n  * @param options\n  */\n  clusterByHubsize(hubsize, options) {\n    if (hubsize === undefined) {\n      hubsize = this._getHubSize();\n    }\n    else if (typeof(hubsize) === \"object\") {\n      options = this._checkOptions(hubsize);\n      hubsize = this._getHubSize();\n    }\n\n    let nodesToCluster = [];\n    for (let i = 0; i < this.body.nodeIndices.length; i++) {\n      let node = this.body.nodes[this.body.nodeIndices[i]];\n      if (node.edges.length >= hubsize) {\n        nodesToCluster.push(node.id);\n      }\n    }\n\n    for (let i = 0; i < nodesToCluster.length; i++) {\n      this.clusterByConnection(nodesToCluster[i],options,true);\n    }\n\n    this.body.emitter.emit('_dataChanged');\n  }\n\n\n  /**\n  * loop over all nodes, check if they adhere to the condition and cluster if needed.\n  * @param options\n  * @param refreshData\n  */\n  cluster(options = {}, refreshData = true) {\n    if (options.joinCondition === undefined) {throw new Error(\"Cannot call clusterByNodeData without a joinCondition function in the options.\");}\n\n    // check if the options object is fine, append if needed\n    options = this._checkOptions(options);\n\n    let childNodesObj = {};\n    let childEdgesObj = {};\n\n    // collect the nodes that will be in the cluster\n    for (let i = 0; i < this.body.nodeIndices.length; i++) {\n      let nodeId = this.body.nodeIndices[i];\n      let node = this.body.nodes[nodeId];\n      let clonedOptions = NetworkUtil.cloneOptions(node);\n      if (options.joinCondition(clonedOptions) === true) {\n        childNodesObj[nodeId] = this.body.nodes[nodeId];\n\n        // collect the nodes that will be in the cluster\n        for (let i = 0; i < node.edges.length; i++) {\n          let edge = node.edges[i];\n          if (this.clusteredEdges[edge.id] === undefined) {\n            childEdgesObj[edge.id] = edge;\n          }\n        }\n      }\n    }\n\n    this._cluster(childNodesObj, childEdgesObj, options, refreshData);\n  }\n\n\n  /**\n   * Cluster all nodes in the network that have only X edges\n   * @param edgeCount\n   * @param options\n   * @param refreshData\n   */\n  clusterByEdgeCount(edgeCount, options, refreshData = true) {\n    options = this._checkOptions(options);\n    let clusters = [];\n    let usedNodes = {};\n    let edge, edges, node, nodeId, relevantEdgeCount;\n    // collect the nodes that will be in the cluster\n    for (let i = 0; i < this.body.nodeIndices.length; i++) {\n      let childNodesObj = {};\n      let childEdgesObj = {};\n      nodeId = this.body.nodeIndices[i];\n\n      // if this node is already used in another cluster this session, we do not have to re-evaluate it.\n      if (usedNodes[nodeId] === undefined) {\n        relevantEdgeCount = 0;\n        node = this.body.nodes[nodeId];\n        edges = [];\n        for (let j = 0; j < node.edges.length; j++) {\n          edge = node.edges[j];\n          if (this.clusteredEdges[edge.id] === undefined) {\n            if (edge.toId !== edge.fromId) {\n              relevantEdgeCount++;\n            }\n            edges.push(edge);\n          }\n        }\n\n        // this node qualifies, we collect its neighbours to start the clustering process.\n        if (relevantEdgeCount === edgeCount) {\n          let gatheringSuccessful = true;\n          for (let j = 0; j < edges.length; j++) {\n            edge = edges[j];\n            let childNodeId = this._getConnectedId(edge, nodeId);\n            // add the nodes to the list by the join condition.\n            if (options.joinCondition === undefined) {\n              childEdgesObj[edge.id] = edge;\n              childNodesObj[nodeId] = this.body.nodes[nodeId];\n              childNodesObj[childNodeId] = this.body.nodes[childNodeId];\n              usedNodes[nodeId] = true;\n            }\n            else {\n              let clonedOptions = NetworkUtil.cloneOptions(this.body.nodes[nodeId]);\n              if (options.joinCondition(clonedOptions) === true) {\n                childEdgesObj[edge.id] = edge;\n                childNodesObj[nodeId] = this.body.nodes[nodeId];\n                usedNodes[nodeId] = true;\n              }\n              else {\n                // this node does not qualify after all.\n                gatheringSuccessful = false;\n                break;\n              }\n            }\n          }\n\n          // add to the cluster queue\n          if (Object.keys(childNodesObj).length > 0 && Object.keys(childEdgesObj).length > 0 && gatheringSuccessful === true) {\n            clusters.push({nodes: childNodesObj, edges: childEdgesObj})\n          }\n        }\n      }\n    }\n\n    for (let i = 0; i < clusters.length; i++) {\n      this._cluster(clusters[i].nodes, clusters[i].edges, options, false)\n    }\n\n    if (refreshData === true) {\n      this.body.emitter.emit('_dataChanged');\n    }\n  }\n\n  /**\n  * Cluster all nodes in the network that have only 1 edge\n  * @param options\n  * @param refreshData\n  */\n  clusterOutliers(options, refreshData = true) {\n    this.clusterByEdgeCount(1,options,refreshData);\n  }\n\n  /**\n   * Cluster all nodes in the network that have only 2 edge\n   * @param options\n   * @param refreshData\n   */\n  clusterBridges(options, refreshData = true) {\n    this.clusterByEdgeCount(2,options,refreshData);\n  }\n\n\n\n  /**\n  * suck all connected nodes of a node into the node.\n  * @param nodeId\n  * @param options\n  * @param refreshData\n  */\n  clusterByConnection(nodeId, options, refreshData = true) {\n    // kill conditions\n    if (nodeId === undefined)             {throw new Error(\"No nodeId supplied to clusterByConnection!\");}\n    if (this.body.nodes[nodeId] === undefined) {throw new Error(\"The nodeId given to clusterByConnection does not exist!\");}\n\n    let node = this.body.nodes[nodeId];\n    options = this._checkOptions(options, node);\n    if (options.clusterNodeProperties.x === undefined) {options.clusterNodeProperties.x = node.x;}\n    if (options.clusterNodeProperties.y === undefined) {options.clusterNodeProperties.y = node.y;}\n    if (options.clusterNodeProperties.fixed === undefined) {\n      options.clusterNodeProperties.fixed = {};\n      options.clusterNodeProperties.fixed.x = node.options.fixed.x;\n      options.clusterNodeProperties.fixed.y = node.options.fixed.y;\n    }\n\n\n    let childNodesObj = {};\n    let childEdgesObj = {};\n    let parentNodeId = node.id;\n    let parentClonedOptions = NetworkUtil.cloneOptions(node);\n    childNodesObj[parentNodeId] = node;\n\n    // collect the nodes that will be in the cluster\n    for (let i = 0; i < node.edges.length; i++) {\n      let edge = node.edges[i];\n      if (this.clusteredEdges[edge.id] === undefined) {\n        let childNodeId = this._getConnectedId(edge, parentNodeId);\n\n        // if the child node is not in a cluster\n        if (this.clusteredNodes[childNodeId] === undefined) {\n          if (childNodeId !== parentNodeId) {\n            if (options.joinCondition === undefined) {\n              childEdgesObj[edge.id] = edge;\n              childNodesObj[childNodeId] = this.body.nodes[childNodeId];\n            }\n            else {\n              // clone the options and insert some additional parameters that could be interesting.\n              let childClonedOptions = NetworkUtil.cloneOptions(this.body.nodes[childNodeId]);\n              if (options.joinCondition(parentClonedOptions, childClonedOptions) === true) {\n                childEdgesObj[edge.id] = edge;\n                childNodesObj[childNodeId] = this.body.nodes[childNodeId];\n              }\n            }\n          }\n          else {\n            // swallow the edge if it is self-referencing.\n            childEdgesObj[edge.id] = edge;\n          }\n        }\n      }\n    }\n    var childNodeIDs = Object.keys(childNodesObj).map(function(childNode){\n      return childNodesObj[childNode].id;\n    })\n\n    for (childNode in childNodesObj) {\n      var childNode = childNodesObj[childNode];\n      for (var y=0; y < childNode.edges.length; y++){\n        var childEdge = childNode.edges[y];\n        if (childNodeIDs.indexOf(this._getConnectedId(childEdge,childNode.id)) > -1){\n          childEdgesObj[childEdge.id] = childEdge;\n        }\n      }\n    }\n    this._cluster(childNodesObj, childEdgesObj, options, refreshData);\n  }\n\n\n  /**\n  * This function creates the edges that will be attached to the cluster\n  * It looks for edges that are connected to the nodes from the \"outside' of the cluster.\n  *\n  * @param childNodesObj\n  * @param childEdgesObj\n  * @param clusterNodeProperties\n  * @param clusterEdgeProperties\n  * @private\n  */\n  _createClusterEdges (childNodesObj, childEdgesObj, clusterNodeProperties, clusterEdgeProperties) {\n    let edge, childNodeId, childNode, toId, fromId, otherNodeId;\n\n    // loop over all child nodes and their edges to find edges going out of the cluster\n    // these edges will be replaced by clusterEdges.\n    let childKeys = Object.keys(childNodesObj);\n    let createEdges = [];\n    for (let i = 0; i < childKeys.length; i++) {\n      childNodeId = childKeys[i];\n      childNode = childNodesObj[childNodeId];\n\n      // construct new edges from the cluster to others\n      for (let j = 0; j < childNode.edges.length; j++) {\n        edge = childNode.edges[j];\n        // we only handle edges that are visible to the system, not the disabled ones from the clustering process.\n        if (this.clusteredEdges[edge.id] === undefined) {\n          // self-referencing edges will be added to the \"hidden\" list\n          if (edge.toId == edge.fromId) {\n            childEdgesObj[edge.id] = edge;\n          }\n          else {\n            // set up the from and to.\n            if (edge.toId == childNodeId) { // this is a double equals because ints and strings can be interchanged here.\n              toId = clusterNodeProperties.id;\n              fromId = edge.fromId;\n              otherNodeId = fromId;\n            }\n            else {\n              toId = edge.toId;\n              fromId = clusterNodeProperties.id;\n              otherNodeId = toId;\n            }\n          }\n\n          // Only edges from the cluster outwards are being replaced.\n          if (childNodesObj[otherNodeId] === undefined) {\n            createEdges.push({edge: edge, fromId: fromId, toId: toId});\n          }\n        }\n      }\n    }\n\n    // here we actually create the replacement edges. We could not do this in the loop above as the creation process\n    // would add an edge to the edges array we are iterating over.\n    for (let j = 0; j < createEdges.length; j++) {\n      let edge = createEdges[j].edge;\n      // copy the options of the edge we will replace\n      let clonedOptions = NetworkUtil.cloneOptions(edge, 'edge');\n      // make sure the properties of clusterEdges are superimposed on it\n      util.deepExtend(clonedOptions, clusterEdgeProperties);\n\n      // set up the edge\n      clonedOptions.from = createEdges[j].fromId;\n      clonedOptions.to = createEdges[j].toId;\n      clonedOptions.id = 'clusterEdge:' + util.randomUUID();\n      //clonedOptions.id = '(cf: ' + createEdges[j].fromId + \" to: \" + createEdges[j].toId + \")\" + Math.random();\n\n      // create the edge and give a reference to the one it replaced.\n      let newEdge = this.body.functions.createEdge(clonedOptions);\n      newEdge.clusteringEdgeReplacingId = edge.id;\n\n      // also reference the new edge in the old edge\n      this.body.edges[edge.id].edgeReplacedById = newEdge.id;\n\n      // connect the edge.\n      this.body.edges[newEdge.id] = newEdge;\n      newEdge.connect();\n\n      // hide the replaced edge\n      this._backupEdgeOptions(edge);\n      edge.setOptions({physics:false, hidden:true});\n    }\n\n  }\n\n  /**\n  * This function checks the options that can be supplied to the different cluster functions\n  * for certain fields and inserts defaults if needed\n  * @param options\n  * @returns {*}\n  * @private\n  */\n  _checkOptions(options = {}) {\n    if (options.clusterEdgeProperties === undefined)    {options.clusterEdgeProperties = {};}\n    if (options.clusterNodeProperties === undefined)    {options.clusterNodeProperties = {};}\n\n    return options;\n  }\n\n  /**\n  *\n  * @param {Object}    childNodesObj         | object with node objects, id as keys, same as childNodes except it also contains a source node\n  * @param {Object}    childEdgesObj         | object with edge objects, id as keys\n  * @param {Array}     options               | object with {clusterNodeProperties, clusterEdgeProperties, processProperties}\n  * @param {Boolean}   refreshData | when true, do not wrap up\n  * @private\n  */\n  _cluster(childNodesObj, childEdgesObj, options, refreshData = true) {\n    // kill condition: no nodes don't bother\n    if (Object.keys(childNodesObj).length == 0) {return;}\n\n    // allow clusters of 1 if options allow\n    if (Object.keys(childNodesObj).length == 1 && options.clusterNodeProperties.allowSingleNodeCluster != true) {return;}\n\n    // check if this cluster call is not trying to cluster anything that is in another cluster.\n    for (let nodeId in childNodesObj) {\n      if (childNodesObj.hasOwnProperty(nodeId)) {\n        if (this.clusteredNodes[nodeId] !== undefined) {\n          return;\n        }\n      }\n    }\n\n    let clusterNodeProperties = util.deepExtend({},options.clusterNodeProperties);\n\n    // construct the clusterNodeProperties\n    if (options.processProperties !== undefined) {\n      // get the childNode options\n      let childNodesOptions = [];\n      for (let nodeId in childNodesObj) {\n        if (childNodesObj.hasOwnProperty(nodeId)) {\n          let clonedOptions = NetworkUtil.cloneOptions(childNodesObj[nodeId]);\n          childNodesOptions.push(clonedOptions);\n        }\n      }\n\n      // get cluster properties based on childNodes\n      let childEdgesOptions = [];\n      for (let edgeId in childEdgesObj) {\n        if (childEdgesObj.hasOwnProperty(edgeId)) {\n          // these cluster edges will be removed on creation of the cluster.\n          if (edgeId.substr(0, 12) !== \"clusterEdge:\") {\n            let clonedOptions = NetworkUtil.cloneOptions(childEdgesObj[edgeId], 'edge');\n            childEdgesOptions.push(clonedOptions);\n          }\n        }\n      }\n\n      clusterNodeProperties = options.processProperties(clusterNodeProperties, childNodesOptions, childEdgesOptions);\n      if (!clusterNodeProperties) {\n        throw new Error(\"The processProperties function does not return properties!\");\n      }\n    }\n\n    // check if we have an unique id;\n    if (clusterNodeProperties.id === undefined) {clusterNodeProperties.id = 'cluster:' + util.randomUUID();}\n    let clusterId = clusterNodeProperties.id;\n\n    if (clusterNodeProperties.label === undefined) {\n      clusterNodeProperties.label = 'cluster';\n    }\n\n\n    // give the clusterNode a position if it does not have one.\n    let pos = undefined;\n    if (clusterNodeProperties.x === undefined) {\n      pos = this._getClusterPosition(childNodesObj);\n      clusterNodeProperties.x = pos.x;\n    }\n    if (clusterNodeProperties.y === undefined) {\n      if (pos === undefined) {pos = this._getClusterPosition(childNodesObj);}\n      clusterNodeProperties.y = pos.y;\n    }\n\n    // force the ID to remain the same\n    clusterNodeProperties.id = clusterId;\n\n    // create the clusterNode\n    let clusterNode = this.body.functions.createNode(clusterNodeProperties, Cluster);\n    clusterNode.isCluster = true;\n    clusterNode.containedNodes = childNodesObj;\n    clusterNode.containedEdges = childEdgesObj;\n    // cache a copy from the cluster edge properties if we have to reconnect others later on\n    clusterNode.clusterEdgeProperties = options.clusterEdgeProperties;\n\n    // finally put the cluster node into global\n    this.body.nodes[clusterNodeProperties.id] = clusterNode;\n\n    // create the new edges that will connect to the cluster, all self-referencing edges will be added to childEdgesObject here.\n    this._createClusterEdges(childNodesObj, childEdgesObj, clusterNodeProperties, options.clusterEdgeProperties);\n\n    // disable the childEdges\n    for (let edgeId in childEdgesObj) {\n      if (childEdgesObj.hasOwnProperty(edgeId)) {\n        if (this.body.edges[edgeId] !== undefined) {\n          let edge = this.body.edges[edgeId];\n          // cache the options before changing\n          this._backupEdgeOptions(edge);\n          // disable physics and hide the edge\n          edge.setOptions({physics:false, hidden:true});\n        }\n      }\n    }\n\n    // disable the childNodes\n    for (let nodeId in childNodesObj) {\n      if (childNodesObj.hasOwnProperty(nodeId)) {\n        this.clusteredNodes[nodeId] = {clusterId:clusterNodeProperties.id, node: this.body.nodes[nodeId]};\n        this.body.nodes[nodeId].setOptions({hidden:true, physics:false});\n      }\n    }\n\n    // set ID to undefined so no duplicates arise\n    clusterNodeProperties.id = undefined;\n\n    // wrap up\n    if (refreshData === true) {\n      this.body.emitter.emit('_dataChanged');\n    }\n  }\n\n  _backupEdgeOptions(edge) {\n    if (this.clusteredEdges[edge.id] === undefined) {\n      this.clusteredEdges[edge.id] = {physics: edge.options.physics, hidden: edge.options.hidden};\n    }\n  }\n\n  _restoreEdge(edge) {\n    let originalOptions = this.clusteredEdges[edge.id];\n    if (originalOptions !== undefined) {\n      edge.setOptions({physics: originalOptions.physics, hidden: originalOptions.hidden});\n      delete this.clusteredEdges[edge.id];\n    }\n  }\n\n\n  /**\n  * Check if a node is a cluster.\n  * @param nodeId\n  * @returns {*}\n  */\n  isCluster(nodeId) {\n    if (this.body.nodes[nodeId] !== undefined) {\n      return this.body.nodes[nodeId].isCluster === true;\n    }\n    else {\n      console.log(\"Node does not exist.\");\n      return false;\n    }\n  }\n\n  /**\n  * get the position of the cluster node based on what's inside\n  * @param {object} childNodesObj    | object with node objects, id as keys\n  * @returns {{x: number, y: number}}\n  * @private\n  */\n  _getClusterPosition(childNodesObj) {\n    let childKeys = Object.keys(childNodesObj);\n    let minX = childNodesObj[childKeys[0]].x;\n    let maxX = childNodesObj[childKeys[0]].x;\n    let minY = childNodesObj[childKeys[0]].y;\n    let maxY = childNodesObj[childKeys[0]].y;\n    let node;\n    for (let i = 1; i < childKeys.length; i++) {\n      node = childNodesObj[childKeys[i]];\n      minX = node.x < minX ? node.x : minX;\n      maxX = node.x > maxX ? node.x : maxX;\n      minY = node.y < minY ? node.y : minY;\n      maxY = node.y > maxY ? node.y : maxY;\n    }\n\n\n    return {x: 0.5*(minX + maxX), y: 0.5*(minY + maxY)};\n  }\n\n\n\n  /**\n  * Open a cluster by calling this function.\n  * @param {String}  clusterNodeId | the ID of the cluster node\n  * @param {Boolean} refreshData | wrap up afterwards if not true\n  */\n  openCluster(clusterNodeId, options, refreshData = true) {\n    // kill conditions\n    if (clusterNodeId === undefined)                    {throw new Error(\"No clusterNodeId supplied to openCluster.\");}\n    if (this.body.nodes[clusterNodeId] === undefined)   {throw new Error(\"The clusterNodeId supplied to openCluster does not exist.\");}\n    if (this.body.nodes[clusterNodeId].containedNodes === undefined) {\n      console.log(\"The node:\" + clusterNodeId + \" is not a cluster.\");\n      return\n    }\n    let clusterNode = this.body.nodes[clusterNodeId];\n    let containedNodes = clusterNode.containedNodes;\n    let containedEdges = clusterNode.containedEdges;\n\n    // allow the user to position the nodes after release.\n    if (options !== undefined && options.releaseFunction !== undefined && typeof options.releaseFunction === 'function') {\n      let positions = {};\n      let clusterPosition = {x:clusterNode.x, y:clusterNode.y};\n      for (let nodeId in containedNodes) {\n        if (containedNodes.hasOwnProperty(nodeId)) {\n          let containedNode = this.body.nodes[nodeId];\n          positions[nodeId] = {x: containedNode.x, y: containedNode.y};\n        }\n      }\n      let newPositions = options.releaseFunction(clusterPosition, positions);\n\n      for (let nodeId in containedNodes) {\n        if (containedNodes.hasOwnProperty(nodeId)) {\n          let containedNode = this.body.nodes[nodeId];\n          if (newPositions[nodeId] !== undefined) {\n            containedNode.x = (newPositions[nodeId].x === undefined ? clusterNode.x : newPositions[nodeId].x);\n            containedNode.y = (newPositions[nodeId].y === undefined ? clusterNode.y : newPositions[nodeId].y);\n          }\n        }\n      }\n    }\n    else {\n      // copy the position from the cluster\n      for (let nodeId in containedNodes) {\n        if (containedNodes.hasOwnProperty(nodeId)) {\n          let containedNode = this.body.nodes[nodeId];\n          containedNode = containedNodes[nodeId];\n          // inherit position\n          if (containedNode.options.fixed.x === false) {containedNode.x = clusterNode.x;}\n          if (containedNode.options.fixed.y === false) {containedNode.y = clusterNode.y;}\n        }\n      }\n    }\n\n    // release nodes\n    for (let nodeId in containedNodes) {\n      if (containedNodes.hasOwnProperty(nodeId)) {\n        let containedNode = this.body.nodes[nodeId];\n\n        // inherit speed\n        containedNode.vx = clusterNode.vx;\n        containedNode.vy = clusterNode.vy;\n\n        // we use these methods to avoid re-instantiating the shape, which happens with setOptions.\n        containedNode.setOptions({hidden:false, physics:true});\n\n        delete this.clusteredNodes[nodeId];\n      }\n    }\n\n    // copy the clusterNode edges because we cannot iterate over an object that we add or remove from.\n    let edgesToBeDeleted = [];\n    for (let i = 0; i < clusterNode.edges.length; i++) {\n      edgesToBeDeleted.push(clusterNode.edges[i]);\n    }\n\n    // actually handling the deleting.\n    for (let i = 0; i < edgesToBeDeleted.length; i++) {\n      let edge = edgesToBeDeleted[i];\n\n      let otherNodeId = this._getConnectedId(edge, clusterNodeId);\n      // if the other node is in another cluster, we transfer ownership of this edge to the other cluster\n      if (this.clusteredNodes[otherNodeId] !== undefined) {\n        // transfer ownership:\n        let otherCluster = this.body.nodes[this.clusteredNodes[otherNodeId].clusterId];\n        let transferEdge = this.body.edges[edge.clusteringEdgeReplacingId];\n        if (transferEdge !== undefined) {\n          otherCluster.containedEdges[transferEdge.id] = transferEdge;\n\n          // delete local reference\n          delete containedEdges[transferEdge.id];\n\n          // create new cluster edge from the otherCluster:\n          // get to and from\n          let fromId = transferEdge.fromId;\n          let toId = transferEdge.toId;\n          if (transferEdge.toId == otherNodeId) {\n            toId = this.clusteredNodes[otherNodeId].clusterId;\n          }\n          else {\n            fromId = this.clusteredNodes[otherNodeId].clusterId;\n          }\n\n          // clone the options and apply the cluster options to them\n          let clonedOptions = NetworkUtil.cloneOptions(transferEdge, 'edge');\n          util.deepExtend(clonedOptions, otherCluster.clusterEdgeProperties);\n\n          // apply the edge specific options to it.\n          let id = 'clusterEdge:' + util.randomUUID();\n          util.deepExtend(clonedOptions, {from: fromId, to: toId, hidden: false, physics: true, id: id});\n\n          // create it\n          let newEdge = this.body.functions.createEdge(clonedOptions);\n          newEdge.clusteringEdgeReplacingId = transferEdge.id;\n          this.body.edges[id] = newEdge;\n          this.body.edges[id].connect();\n        }\n      }\n      else {\n        let replacedEdge = this.body.edges[edge.clusteringEdgeReplacingId];\n        if (replacedEdge !== undefined) {\n          this._restoreEdge(replacedEdge);\n        }\n      }\n      edge.cleanup();\n      // this removes the edge from node.edges, which is why edgeIds is formed\n      edge.disconnect();\n      delete this.body.edges[edge.id];\n    }\n\n    // handle the releasing of the edges\n    for (let edgeId in containedEdges) {\n      if (containedEdges.hasOwnProperty(edgeId)) {\n        this._restoreEdge(containedEdges[edgeId]);\n      }\n    }\n\n    // remove clusterNode\n    delete this.body.nodes[clusterNodeId];\n\n    if (refreshData === true) {\n      this.body.emitter.emit('_dataChanged');\n    }\n  }\n\n  getNodesInCluster(clusterId) {\n    let nodesArray = [];\n    if (this.isCluster(clusterId) === true) {\n      let containedNodes = this.body.nodes[clusterId].containedNodes;\n      for (let nodeId in containedNodes) {\n        if (containedNodes.hasOwnProperty(nodeId)) {\n          nodesArray.push(this.body.nodes[nodeId].id)\n        }\n      }\n    }\n\n    return nodesArray;\n  }\n\n  /**\n  * Get the stack clusterId's that a certain node resides in. cluster A -> cluster B -> cluster C -> node\n  * @param nodeId\n  * @returns {Array}\n  */\n  findNode(nodeId) {\n    let stack = [];\n    let max = 100;\n    let counter = 0;\n\n    while (this.clusteredNodes[nodeId] !== undefined && counter < max) {\n      stack.push(this.body.nodes[nodeId].id);\n      nodeId = this.clusteredNodes[nodeId].clusterId;\n      counter++;\n    }\n    stack.push(this.body.nodes[nodeId].id);\n    stack.reverse();\n\n    return stack;\n  }\n\n  /**\n  * Using a clustered nodeId, update with the new options\n  * @param clusteredNodeId\n  * @param {object} newOptions\n  */\n  updateClusteredNode(clusteredNodeId, newOptions) {\n    if (clusteredNodeId === undefined) {throw new Error(\"No clusteredNodeId supplied to updateClusteredNode.\");}\n    if (newOptions === undefined) {throw new Error(\"No newOptions supplied to updateClusteredNode.\");}\n    if (this.body.nodes[clusteredNodeId] === undefined)   {throw new Error(\"The clusteredNodeId supplied to updateClusteredNode does not exist.\");}\n\n    this.body.nodes[clusteredNodeId].setOptions(newOptions);\n    this.body.emitter.emit('_dataChanged');\n  }\n\n  /**\n  * Using a base edgeId, update all related clustered edges with the new options\n  * @param startEdgeId\n  * @param {object} newOptions\n  */\n  updateEdge(startEdgeId, newOptions) {\n    if (startEdgeId === undefined) {throw new Error(\"No startEdgeId supplied to updateEdge.\");}\n    if (newOptions === undefined) {throw new Error(\"No newOptions supplied to updateEdge.\");}\n    if (this.body.edges[startEdgeId] === undefined)   {throw new Error(\"The startEdgeId supplied to updateEdge does not exist.\");}\n\n    let allEdgeIds = this.getClusteredEdges(startEdgeId);\n    for (let i = 0; i < allEdgeIds.length; i++) {\n      var edge = this.body.edges[allEdgeIds[i]];\n      edge.setOptions(newOptions);\n    }\n    this.body.emitter.emit('_dataChanged');\n  }\n\n  /**\n  * Get a stack of clusterEdgeId's (+base edgeid) that a base edge is the same as. cluster edge C -> cluster edge B -> cluster edge A -> base edge(edgeId)\n  * @param edgeId\n  * @returns {Array}\n  */\n  getClusteredEdges(edgeId) {\n    let stack = [];\n    let max = 100;\n    let counter = 0;\n\n    while (edgeId !== undefined && this.body.edges[edgeId] !== undefined && counter < max) {\n      stack.push(this.body.edges[edgeId].id);\n      edgeId = this.body.edges[edgeId].edgeReplacedById;\n      counter++;\n    }\n    stack.reverse();\n    return stack;\n  }\n\n  /**\n  * Get the base edge id of clusterEdgeId. cluster edge (clusteredEdgeId) -> cluster edge B -> cluster edge C -> base edge\n  * @param clusteredEdgeId\n  * @returns baseEdgeId\n  */\n  getBaseEdge(clusteredEdgeId) {\n    let baseEdgeId = clusteredEdgeId;\n    let max = 100;\n    let counter = 0;\n\n    while (clusteredEdgeId !== undefined && this.body.edges[clusteredEdgeId] !== undefined && counter < max) {\n      clusteredEdgeId = this.body.edges[clusteredEdgeId].clusteringEdgeReplacingId;\n      counter++;\n      if (clusteredEdgeId !== undefined) {\n        baseEdgeId = clusteredEdgeId;\n      }\n    }\n    return baseEdgeId;\n  }\n\n  /**\n  * Get the Id the node is connected to\n  * @param edge\n  * @param nodeId\n  * @returns {*}\n  * @private\n  */\n  _getConnectedId(edge, nodeId) {\n    if (edge.toId != nodeId) {\n      return edge.toId;\n    }\n    else if (edge.fromId != nodeId) {\n      return edge.fromId;\n    }\n    else {\n      return edge.fromId;\n    }\n  }\n\n  /**\n  * We determine how many connections denote an important hub.\n  * We take the mean + 2*std as the important hub size. (Assuming a normal distribution of data, ~2.2%)\n  *\n  * @private\n  */\n  _getHubSize() {\n    let average = 0;\n    let averageSquared = 0;\n    let hubCounter = 0;\n    let largestHub = 0;\n\n    for (let i = 0; i < this.body.nodeIndices.length; i++) {\n      let node = this.body.nodes[this.body.nodeIndices[i]];\n      if (node.edges.length > largestHub) {\n        largestHub = node.edges.length;\n      }\n      average += node.edges.length;\n      averageSquared += Math.pow(node.edges.length,2);\n      hubCounter += 1;\n    }\n    average = average / hubCounter;\n    averageSquared = averageSquared / hubCounter;\n\n    let variance = averageSquared - Math.pow(average,2);\n    let standardDeviation = Math.sqrt(variance);\n\n    let hubThreshold = Math.floor(average + 2*standardDeviation);\n\n    // always have at least one to cluster\n    if (hubThreshold > largestHub) {\n      hubThreshold = largestHub;\n    }\n\n    return hubThreshold;\n  };\n\n}\n\n\nexport default ClusterEngine;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/Clustering.js","let util = require(\"../util\");\nclass NetworkUtil {\n  constructor() {}\n\n  /**\n   * Find the center position of the network considering the bounding boxes\n   */\n  static getRange(allNodes, specificNodes = []) {\n    var minY = 1e9, maxY = -1e9, minX = 1e9, maxX = -1e9, node;\n    if (specificNodes.length > 0) {\n      for (var i = 0; i < specificNodes.length; i++) {\n        node = allNodes[specificNodes[i]];\n        if (minX > node.shape.boundingBox.left) {\n          minX = node.shape.boundingBox.left;\n        }\n        if (maxX < node.shape.boundingBox.right) {\n          maxX = node.shape.boundingBox.right;\n        }\n        if (minY > node.shape.boundingBox.top) {\n          minY = node.shape.boundingBox.top;\n        } // top is negative, bottom is positive\n        if (maxY < node.shape.boundingBox.bottom) {\n          maxY = node.shape.boundingBox.bottom;\n        } // top is negative, bottom is positive\n      }\n    }\n\n    if (minX === 1e9 && maxX === -1e9 && minY === 1e9 && maxY === -1e9) {\n      minY = 0, maxY = 0, minX = 0, maxX = 0;\n    }\n    return {minX: minX, maxX: maxX, minY: minY, maxY: maxY};\n  }\n\n  /**\n   * Find the center position of the network\n   */\n  static getRangeCore(allNodes, specificNodes = []) {\n    var minY = 1e9, maxY = -1e9, minX = 1e9, maxX = -1e9, node;\n    if (specificNodes.length > 0) {\n      for (var i = 0; i < specificNodes.length; i++) {\n        node = allNodes[specificNodes[i]];\n        if (minX > node.x) {\n          minX = node.x;\n        }\n        if (maxX < node.x) {\n          maxX = node.x;\n        }\n        if (minY > node.y) {\n          minY = node.y;\n        } // top is negative, bottom is positive\n        if (maxY < node.y) {\n          maxY = node.y;\n        } // top is negative, bottom is positive\n      }\n    }\n\n    if (minX === 1e9 && maxX === -1e9 && minY === 1e9 && maxY === -1e9) {\n      minY = 0, maxY = 0, minX = 0, maxX = 0;\n    }\n    return {minX: minX, maxX: maxX, minY: minY, maxY: maxY};\n  }\n\n\n  /**\n   * @param {object} range = {minX: minX, maxX: maxX, minY: minY, maxY: maxY};\n   * @returns {{x: number, y: number}}\n   */\n  static findCenter(range) {\n    return {x: (0.5 * (range.maxX + range.minX)),\n      y: (0.5 * (range.maxY + range.minY))};\n  }\n\n\n  /**\n   * This returns a clone of the options or options of the edge or node to be used for construction of new edges or check functions for new nodes.\n   * @param item\n   * @param type\n   * @returns {{}}\n   */\n  static cloneOptions(item, type) {\n    let clonedOptions = {};\n    if (type === undefined || type === 'node') {\n      util.deepExtend(clonedOptions, item.options, true);\n      clonedOptions.x = item.x;\n      clonedOptions.y = item.y;\n      clonedOptions.amountOfConnections = item.edges.length;\n    }\n    else {\n      util.deepExtend(clonedOptions, item.options, true);\n    }\n    return clonedOptions;\n  }\n\n}\n\nexport default NetworkUtil;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/NetworkUtil.js","import Node from '../Node'\n\n/**\n *\n */\nclass Cluster extends Node {\n  constructor(options, body, imagelist, grouplist, globalOptions) {\n    super(options, body, imagelist, grouplist, globalOptions);\n\n    this.isCluster = true;\n    this.containedNodes = {};\n    this.containedEdges = {};\n  }\n}\n\nexport default Cluster;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/nodes/Cluster.js","if (typeof window !== 'undefined') {\n  window.requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame ||\n  window.webkitRequestAnimationFrame || window.msRequestAnimationFrame;\n}\n\nlet util = require('../../util');\n\n\nclass CanvasRenderer {\n  constructor(body, canvas) {\n    this.body = body;\n    this.canvas = canvas;\n\n    this.redrawRequested = false;\n    this.renderTimer = undefined;\n    this.requiresTimeout = true;\n    this.renderingActive = false;\n    this.renderRequests = 0;\n    this.pixelRatio = undefined;\n    this.allowRedraw = true;\n\n    this.dragging = false;\n    this.options = {};\n    this.defaultOptions = {\n      hideEdgesOnDrag: false,\n      hideNodesOnDrag: false\n    };\n    util.extend(this.options, this.defaultOptions);\n\n    this._determineBrowserMethod();\n    this.bindEventListeners();\n  }\n\n  bindEventListeners() {\n    this.body.emitter.on(\"dragStart\", () => { this.dragging = true; });\n    this.body.emitter.on(\"dragEnd\", () => { this.dragging = false; });\n    this.body.emitter.on(\"_resizeNodes\", () => { this._resizeNodes(); });\n    this.body.emitter.on(\"_redraw\", () => {\n      if (this.renderingActive === false) {\n        this._redraw();\n      }\n    });\n    this.body.emitter.on(\"_blockRedraw\", () => {this.allowRedraw = false;});\n    this.body.emitter.on(\"_allowRedraw\", () => {this.allowRedraw = true; this.redrawRequested = false;});\n    this.body.emitter.on(\"_requestRedraw\", this._requestRedraw.bind(this));\n    this.body.emitter.on(\"_startRendering\", () => {\n      this.renderRequests += 1;\n      this.renderingActive = true;\n      this._startRendering();\n    });\n    this.body.emitter.on(\"_stopRendering\", () => {\n      this.renderRequests -= 1;\n      this.renderingActive = this.renderRequests > 0;\n      this.renderTimer = undefined;\n    });\n    this.body.emitter.on('destroy',  () => {\n      this.renderRequests = 0;\n      this.allowRedraw = false;\n      this.renderingActive = false;\n      if (this.requiresTimeout === true) {\n        clearTimeout(this.renderTimer);\n      }\n      else {\n        cancelAnimationFrame(this.renderTimer);\n      }\n      this.body.emitter.off();\n    });\n\n  }\n\n  setOptions(options) {\n    if (options !== undefined) {\n      let fields = ['hideEdgesOnDrag','hideNodesOnDrag'];\n      util.selectiveDeepExtend(fields,this.options, options);\n    }\n  }\n\n  _startRendering() {\n    if (this.renderingActive === true) {\n      if (this.renderTimer === undefined) {\n        if (this.requiresTimeout === true) {\n          this.renderTimer = window.setTimeout(this._renderStep.bind(this), this.simulationInterval); // wait this.renderTimeStep milliseconds and perform the animation step function\n        }\n        else {\n          this.renderTimer = window.requestAnimationFrame(this._renderStep.bind(this)); // wait this.renderTimeStep milliseconds and perform the animation step function\n        }\n      }\n    }\n  }\n\n  _renderStep() {\n    if (this.renderingActive === true) {\n      // reset the renderTimer so a new scheduled animation step can be set\n      this.renderTimer = undefined;\n\n      if (this.requiresTimeout === true) {\n        // this schedules a new simulation step\n        this._startRendering();\n      }\n\n      this._redraw();\n\n      if (this.requiresTimeout === false) {\n        // this schedules a new simulation step\n        this._startRendering();\n      }\n    }\n  }\n\n  /**\n   * Redraw the network with the current data\n   * chart will be resized too.\n   */\n  redraw() {\n    this.body.emitter.emit('setSize');\n    this._redraw();\n  }\n\n  /**\n   * Redraw the network with the current data\n   * @param hidden | used to get the first estimate of the node sizes. only the nodes are drawn after which they are quickly drawn over.\n   * @private\n   */\n  _requestRedraw() {\n    if (this.redrawRequested !== true && this.renderingActive === false && this.allowRedraw === true) {\n      this.redrawRequested = true;\n      if (this.requiresTimeout === true) {\n        window.setTimeout(() => {this._redraw(false);}, 0);\n      }\n      else {\n        window.requestAnimationFrame(() => {this._redraw(false);});\n      }\n    }\n  }\n\n  _redraw(hidden = false) {\n    if (this.allowRedraw === true) {\n      this.body.emitter.emit(\"initRedraw\");\n\n      this.redrawRequested = false;\n      let ctx = this.canvas.frame.canvas.getContext('2d');\n\n      // when the container div was hidden, this fixes it back up!\n      if (this.canvas.frame.canvas.width === 0 || this.canvas.frame.canvas.height === 0) {\n        this.canvas.setSize();\n      }\n\n      this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio ||\n        ctx.mozBackingStorePixelRatio ||\n        ctx.msBackingStorePixelRatio ||\n        ctx.oBackingStorePixelRatio ||\n        ctx.backingStorePixelRatio || 1);\n\n      ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);\n\n      // clear the canvas\n      let w = this.canvas.frame.canvas.clientWidth;\n      let h = this.canvas.frame.canvas.clientHeight;\n      ctx.clearRect(0, 0, w, h);\n\n      // if the div is hidden, we stop the redraw here for performance.\n      if (this.canvas.frame.clientWidth === 0) {\n        return;\n      }\n\n      // set scaling and translation\n      ctx.save();\n      ctx.translate(this.body.view.translation.x, this.body.view.translation.y);\n      ctx.scale(this.body.view.scale, this.body.view.scale);\n\n      ctx.beginPath();\n      this.body.emitter.emit(\"beforeDrawing\", ctx);\n      ctx.closePath();\n\n      if (hidden === false) {\n        if (this.dragging === false || (this.dragging === true && this.options.hideEdgesOnDrag === false)) {\n          this._drawEdges(ctx);\n        }\n      }\n\n      if (this.dragging === false || (this.dragging === true && this.options.hideNodesOnDrag === false)) {\n        this._drawNodes(ctx, hidden);\n      }\n\n      ctx.beginPath();\n      this.body.emitter.emit(\"afterDrawing\", ctx);\n      ctx.closePath();\n\n\n      // restore original scaling and translation\n      ctx.restore();\n      if (hidden === true) {\n        ctx.clearRect(0, 0, w, h);\n      }\n    }\n  }\n\n\n  /**\n   * Redraw all nodes\n   * The 2d context of a HTML canvas can be retrieved by canvas.getContext('2d');\n   * @param {CanvasRenderingContext2D}   ctx\n   * @param {Boolean} [alwaysShow]\n   * @private\n   */\n  _resizeNodes() {\n    let ctx = this.canvas.frame.canvas.getContext('2d');\n    if (this.pixelRatio === undefined) {\n      this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio ||\n        ctx.mozBackingStorePixelRatio ||\n        ctx.msBackingStorePixelRatio ||\n        ctx.oBackingStorePixelRatio ||\n        ctx.backingStorePixelRatio || 1);\n    }\n    ctx.setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);\n    ctx.save();\n    ctx.translate(this.body.view.translation.x, this.body.view.translation.y);\n    ctx.scale(this.body.view.scale, this.body.view.scale);\n\n    let nodes = this.body.nodes;\n    let node;\n\n    // resize all nodes\n    for (let nodeId in nodes) {\n      if (nodes.hasOwnProperty(nodeId)) {\n        node = nodes[nodeId];\n        node.resize(ctx);\n        node.updateBoundingBox(ctx, node.selected);\n      }\n    }\n\n    // restore original scaling and translation\n    ctx.restore();\n  }\n\n  /**\n   * Redraw all nodes\n   * The 2d context of a HTML canvas can be retrieved by canvas.getContext('2d');\n   * @param {CanvasRenderingContext2D}   ctx\n   * @param {Boolean} [alwaysShow]\n   * @private\n   */\n  _drawNodes(ctx, alwaysShow = false) {\n    let nodes = this.body.nodes;\n    let nodeIndices = this.body.nodeIndices;\n    let node;\n    let selected = [];\n    let margin = 20;\n    let topLeft = this.canvas.DOMtoCanvas({x:-margin,y:-margin});\n    let bottomRight = this.canvas.DOMtoCanvas({\n      x: this.canvas.frame.canvas.clientWidth+margin,\n      y: this.canvas.frame.canvas.clientHeight+margin\n    });\n    let viewableArea = {top:topLeft.y,left:topLeft.x,bottom:bottomRight.y,right:bottomRight.x};\n\n    // draw unselected nodes;\n    for (let i = 0; i < nodeIndices.length; i++) {\n      node = nodes[nodeIndices[i]];\n      // set selected nodes aside\n      if (node.isSelected()) {\n        selected.push(nodeIndices[i]);\n      }\n      else {\n        if (alwaysShow === true) {\n          node.draw(ctx);\n        }\n        else if (node.isBoundingBoxOverlappingWith(viewableArea) === true) {\n          node.draw(ctx);\n        }\n        else {\n          node.updateBoundingBox(ctx, node.selected);\n        }\n      }\n    }\n\n    // draw the selected nodes on top\n    for (let i = 0; i < selected.length; i++) {\n      node = nodes[selected[i]];\n      node.draw(ctx);\n    }\n  }\n\n\n  /**\n   * Redraw all edges\n   * The 2d context of a HTML canvas can be retrieved by canvas.getContext('2d');\n   * @param {CanvasRenderingContext2D}   ctx\n   * @private\n   */\n  _drawEdges(ctx) {\n    let edges = this.body.edges;\n    let edgeIndices = this.body.edgeIndices;\n    let edge;\n\n    for (let i = 0; i < edgeIndices.length; i++) {\n      edge = edges[edgeIndices[i]];\n      if (edge.connected === true) {\n        edge.draw(ctx);\n      }\n    }\n  }\n\n  /**\n   * Determine if the browser requires a setTimeout or a requestAnimationFrame. This was required because\n   * some implementations (safari and IE9) did not support requestAnimationFrame\n   * @private\n   */\n  _determineBrowserMethod() {\n    if (typeof window !== 'undefined') {\n      let browserType = navigator.userAgent.toLowerCase();\n      this.requiresTimeout = false;\n      if (browserType.indexOf('msie 9.0') != -1) { // IE 9\n        this.requiresTimeout = true;\n      }\n      else if (browserType.indexOf('safari') != -1) {  // safari\n        if (browserType.indexOf('chrome') <= -1) {\n          this.requiresTimeout = true;\n        }\n      }\n    }\n    else {\n      this.requiresTimeout = true;\n    }\n  }\n\n}\n\nexport default CanvasRenderer;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/CanvasRenderer.js","let Hammer = require('../../module/hammer');\nlet hammerUtil = require('../../hammerUtil');\n\nlet util = require('../../util');\n\n/**\n * Create the main frame for the Network.\n * This function is executed once when a Network object is created. The frame\n * contains a canvas, and this canvas contains all objects like the axis and\n * nodes.\n * @private\n */\nclass Canvas {\n  constructor(body) {\n    this.body = body;\n    this.pixelRatio = 1;\n    this.resizeTimer = undefined;\n    this.resizeFunction = this._onResize.bind(this);\n    this.cameraState = {};\n    this.initialized = false;\n    this.canvasViewCenter = {};\n\n    this.options = {};\n    this.defaultOptions = {\n      autoResize: true,\n      height: '100%',\n      width: '100%'\n    };\n    util.extend(this.options, this.defaultOptions);\n\n    this.bindEventListeners();\n  }\n\n  bindEventListeners() {\n    // bind the events\n    this.body.emitter.once(\"resize\", (obj) => {\n      if (obj.width !== 0) {\n        this.body.view.translation.x = obj.width * 0.5;\n      }\n      if (obj.height !== 0) {\n        this.body.view.translation.y = obj.height * 0.5;\n      }\n    });\n    this.body.emitter.on(\"setSize\", this.setSize.bind(this));\n    this.body.emitter.on(\"destroy\", () => {\n      this.hammerFrame.destroy();\n      this.hammer.destroy();\n      this._cleanUp();\n    });\n\n\n  }\n\n  setOptions(options) {\n    if (options !== undefined) {\n      let fields = ['width','height','autoResize'];\n      util.selectiveDeepExtend(fields,this.options, options);\n    }\n\n    if (this.options.autoResize === true) {\n      // automatically adapt to a changing size of the browser.\n      this._cleanUp();\n      this.resizeTimer = setInterval(() => {\n        let changed = this.setSize();\n        if (changed === true) {\n          this.body.emitter.emit(\"_requestRedraw\");\n        }\n      }, 1000);\n      this.resizeFunction = this._onResize.bind(this);\n      util.addEventListener(window,'resize',this.resizeFunction);\n    }\n  }\n\n  _cleanUp() {\n    // automatically adapt to a changing size of the browser.\n    if (this.resizeTimer !== undefined) {\n      clearInterval(this.resizeTimer);\n    }\n    util.removeEventListener(window,'resize',this.resizeFunction);\n    this.resizeFunction = undefined;\n  }\n\n  _onResize() {\n    this.setSize();\n    this.body.emitter.emit(\"_redraw\");\n  }\n\n  /**\n   * Get and store the cameraState\n   * @private\n   */\n  _getCameraState(pixelRatio = this.pixelRatio) {\n    if (this.initialized === true) {\n      this.cameraState.previousWidth = this.frame.canvas.width / pixelRatio;\n      this.cameraState.previousHeight = this.frame.canvas.height / pixelRatio;\n      this.cameraState.scale = this.body.view.scale;\n      this.cameraState.position = this.DOMtoCanvas({\n        x: 0.5 * this.frame.canvas.width / pixelRatio,\n        y: 0.5 * this.frame.canvas.height / pixelRatio\n      });\n    }\n  }\n\n  /**\n   * Set the cameraState\n   * @private\n   */\n  _setCameraState() {\n    if (this.cameraState.scale !== undefined &&\n      this.frame.canvas.clientWidth !== 0 &&\n      this.frame.canvas.clientHeight !== 0 &&\n      this.pixelRatio !== 0 &&\n      this.cameraState.previousWidth > 0) {\n\n      let widthRatio = (this.frame.canvas.width / this.pixelRatio) / this.cameraState.previousWidth;\n      let heightRatio = (this.frame.canvas.height / this.pixelRatio) / this.cameraState.previousHeight;\n      let newScale = this.cameraState.scale;\n\n      if (widthRatio != 1 && heightRatio != 1) {\n        newScale = this.cameraState.scale * 0.5 * (widthRatio + heightRatio);\n      }\n      else if (widthRatio != 1) {\n        newScale = this.cameraState.scale * widthRatio;\n      }\n      else if (heightRatio != 1) {\n        newScale = this.cameraState.scale * heightRatio;\n      }\n\n      this.body.view.scale = newScale;\n      // this comes from the view module.\n      var currentViewCenter = this.DOMtoCanvas({\n        x: 0.5 * this.frame.canvas.clientWidth,\n        y: 0.5 * this.frame.canvas.clientHeight\n      });\n\n      var distanceFromCenter = { // offset from view, distance view has to change by these x and y to center the node\n        x: currentViewCenter.x - this.cameraState.position.x,\n        y: currentViewCenter.y - this.cameraState.position.y\n      };\n      this.body.view.translation.x += distanceFromCenter.x * this.body.view.scale;\n      this.body.view.translation.y += distanceFromCenter.y * this.body.view.scale;\n    }\n  }\n\n  _prepareValue(value) {\n    if (typeof value === 'number') {\n      return value + 'px';\n    }\n    else if (typeof value === 'string') {\n      if (value.indexOf('%') !== -1 || value.indexOf('px') !== -1) {\n        return value;\n      }\n      else if (value.indexOf('%') === -1) {\n        return value + 'px';\n      }\n    }\n    throw new Error('Could not use the value supplied for width or height:' + value);\n  }\n\n\n  /**\n   * Create the HTML\n   */\n  _create() {\n    // remove all elements from the container element.\n    while (this.body.container.hasChildNodes()) {\n      this.body.container.removeChild(this.body.container.firstChild);\n    }\n\n    this.frame = document.createElement('div');\n    this.frame.className = 'vis-network';\n    this.frame.style.position = 'relative';\n    this.frame.style.overflow = 'hidden';\n    this.frame.tabIndex = 900; // tab index is required for keycharm to bind keystrokes to the div instead of the window\n\n    //////////////////////////////////////////////////////////////////\n\n    this.frame.canvas = document.createElement(\"canvas\");\n    this.frame.canvas.style.position = 'relative';\n    this.frame.appendChild(this.frame.canvas);\n\n    if (!this.frame.canvas.getContext) {\n      let noCanvas = document.createElement( 'DIV' );\n      noCanvas.style.color = 'red';\n      noCanvas.style.fontWeight =  'bold' ;\n      noCanvas.style.padding =  '10px';\n      noCanvas.innerHTML =  'Error: your browser does not support HTML canvas';\n      this.frame.canvas.appendChild(noCanvas);\n    }\n    else {\n      let ctx = this.frame.canvas.getContext(\"2d\");\n      this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio ||\n      ctx.mozBackingStorePixelRatio ||\n      ctx.msBackingStorePixelRatio ||\n      ctx.oBackingStorePixelRatio ||\n      ctx.backingStorePixelRatio || 1);\n\n      this.frame.canvas.getContext(\"2d\").setTransform(this.pixelRatio, 0, 0, this.pixelRatio, 0, 0);\n    }\n\n    // add the frame to the container element\n    this.body.container.appendChild(this.frame);\n\n    this.body.view.scale = 1;\n    this.body.view.translation = {x: 0.5 * this.frame.canvas.clientWidth,y: 0.5 * this.frame.canvas.clientHeight};\n\n    this._bindHammer();\n  }\n\n\n  /**\n   * This function binds hammer, it can be repeated over and over due to the uniqueness check.\n   * @private\n   */\n  _bindHammer() {\n    if (this.hammer !== undefined) {\n      this.hammer.destroy();\n    }\n    this.drag = {};\n    this.pinch = {};\n\n    // init hammer\n    this.hammer = new Hammer(this.frame.canvas);\n    this.hammer.get('pinch').set({enable: true});\n    // enable to get better response, todo: test on mobile.\n    this.hammer.get('pan').set({threshold:5, direction: Hammer.DIRECTION_ALL});\n\n    hammerUtil.onTouch(this.hammer, (event) => {this.body.eventListeners.onTouch(event)});\n    this.hammer.on('tap',       (event) => {this.body.eventListeners.onTap(event)});\n    this.hammer.on('doubletap', (event) => {this.body.eventListeners.onDoubleTap(event)});\n    this.hammer.on('press',     (event) => {this.body.eventListeners.onHold(event)});\n    this.hammer.on('panstart',  (event) => {this.body.eventListeners.onDragStart(event)});\n    this.hammer.on('panmove',   (event) => {this.body.eventListeners.onDrag(event)});\n    this.hammer.on('panend',    (event) => {this.body.eventListeners.onDragEnd(event)});\n    this.hammer.on('pinch',     (event) => {this.body.eventListeners.onPinch(event)});\n\n    // TODO: neatly cleanup these handlers when re-creating the Canvas, IF these are done with hammer, event.stopPropagation will not work?\n    this.frame.canvas.addEventListener('mousewheel',     (event) => {this.body.eventListeners.onMouseWheel(event)});\n    this.frame.canvas.addEventListener('DOMMouseScroll', (event) => {this.body.eventListeners.onMouseWheel(event)});\n\n    this.frame.canvas.addEventListener('mousemove', (event) => {this.body.eventListeners.onMouseMove(event)});\n    this.frame.canvas.addEventListener('contextmenu', (event) => {this.body.eventListeners.onContext(event)});\n\n    this.hammerFrame = new Hammer(this.frame);\n    hammerUtil.onRelease(this.hammerFrame, (event) => {this.body.eventListeners.onRelease(event)});\n  }\n\n\n  /**\n   * Set a new size for the network\n   * @param {string} width   Width in pixels or percentage (for example '800px'\n   *                         or '50%')\n   * @param {string} height  Height in pixels or percentage  (for example '400px'\n   *                         or '30%')\n   */\n  setSize(width = this.options.width, height = this.options.height) {\n    width = this._prepareValue(width);\n    height= this._prepareValue(height);\n\n    let emitEvent = false;\n    let oldWidth = this.frame.canvas.width;\n    let oldHeight = this.frame.canvas.height;\n\n    // update the pixel ratio\n    let ctx = this.frame.canvas.getContext(\"2d\");\n    let previousRatio = this.pixelRatio; // we cache this because the camera state storage needs the old value\n    this.pixelRatio = (window.devicePixelRatio || 1) / (ctx.webkitBackingStorePixelRatio ||\n      ctx.mozBackingStorePixelRatio ||\n      ctx.msBackingStorePixelRatio ||\n      ctx.oBackingStorePixelRatio ||\n      ctx.backingStorePixelRatio || 1);\n\n    if (width != this.options.width || height != this.options.height || this.frame.style.width != width || this.frame.style.height != height) {\n      this._getCameraState(previousRatio);\n\n      this.frame.style.width = width;\n      this.frame.style.height = height;\n\n      this.frame.canvas.style.width = '100%';\n      this.frame.canvas.style.height = '100%';\n\n      this.frame.canvas.width = Math.round(this.frame.canvas.clientWidth * this.pixelRatio);\n      this.frame.canvas.height = Math.round(this.frame.canvas.clientHeight * this.pixelRatio);\n\n      this.options.width = width;\n      this.options.height = height;\n\n      this.canvasViewCenter = {\n        x: 0.5 * this.frame.clientWidth,\n        y: 0.5 * this.frame.clientHeight\n      };\n\n      emitEvent = true;\n    }\n    else {\n      // this would adapt the width of the canvas to the width from 100% if and only if\n      // there is a change.\n\n      // store the camera if there is a change in size.\n      if (this.frame.canvas.width != Math.round(this.frame.canvas.clientWidth * this.pixelRatio) || this.frame.canvas.height != Math.round(this.frame.canvas.clientHeight * this.pixelRatio)) {\n        this._getCameraState(previousRatio);\n      }\n\n      if (this.frame.canvas.width != Math.round(this.frame.canvas.clientWidth * this.pixelRatio)) {\n        this.frame.canvas.width = Math.round(this.frame.canvas.clientWidth * this.pixelRatio);\n        emitEvent = true;\n      }\n      if (this.frame.canvas.height != Math.round(this.frame.canvas.clientHeight * this.pixelRatio)) {\n        this.frame.canvas.height = Math.round(this.frame.canvas.clientHeight * this.pixelRatio);\n        emitEvent = true;\n      }\n    }\n\n    if (emitEvent === true) {\n      this.body.emitter.emit('resize', {\n        width:Math.round(this.frame.canvas.width / this.pixelRatio),\n        height:Math.round(this.frame.canvas.height / this.pixelRatio),\n        oldWidth: Math.round(oldWidth / this.pixelRatio),\n        oldHeight: Math.round(oldHeight / this.pixelRatio)\n      });\n\n      // restore the camera on change.\n      this._setCameraState();\n    }\n\n\n    // set initialized so the get and set camera will work from now on.\n    this.initialized = true;\n    return emitEvent;\n  };\n\n\n  /**\n   * Convert the X coordinate in DOM-space (coordinate point in browser relative to the container div) to\n   * the X coordinate in canvas-space (the simulation sandbox, which the camera looks upon)\n   * @param {number} x\n   * @returns {number}\n   * @private\n   */\n  _XconvertDOMtoCanvas(x) {\n    return (x - this.body.view.translation.x) / this.body.view.scale;\n  }\n\n  /**\n   * Convert the X coordinate in canvas-space (the simulation sandbox, which the camera looks upon) to\n   * the X coordinate in DOM-space (coordinate point in browser relative to the container div)\n   * @param {number} x\n   * @returns {number}\n   * @private\n   */\n  _XconvertCanvasToDOM(x) {\n    return x * this.body.view.scale + this.body.view.translation.x;\n  }\n\n  /**\n   * Convert the Y coordinate in DOM-space (coordinate point in browser relative to the container div) to\n   * the Y coordinate in canvas-space (the simulation sandbox, which the camera looks upon)\n   * @param {number} y\n   * @returns {number}\n   * @private\n   */\n  _YconvertDOMtoCanvas(y) {\n    return (y - this.body.view.translation.y) / this.body.view.scale;\n  }\n\n  /**\n   * Convert the Y coordinate in canvas-space (the simulation sandbox, which the camera looks upon) to\n   * the Y coordinate in DOM-space (coordinate point in browser relative to the container div)\n   * @param {number} y\n   * @returns {number}\n   * @private\n   */\n  _YconvertCanvasToDOM(y) {\n    return y * this.body.view.scale + this.body.view.translation.y;\n  }\n\n\n  /**\n   *\n   * @param {object} pos   = {x: number, y: number}\n   * @returns {{x: number, y: number}}\n   * @constructor\n   */\n  canvasToDOM (pos) {\n    return {x: this._XconvertCanvasToDOM(pos.x), y: this._YconvertCanvasToDOM(pos.y)};\n  }\n\n  /**\n   *\n   * @param {object} pos   = {x: number, y: number}\n   * @returns {{x: number, y: number}}\n   * @constructor\n   */\n  DOMtoCanvas (pos) {\n    return {x: this._XconvertDOMtoCanvas(pos.x), y: this._YconvertDOMtoCanvas(pos.y)};\n  }\n\n}\n\nexport default Canvas;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/Canvas.js","let util = require('../../util');\n\nimport NetworkUtil from '../NetworkUtil';\n\nclass View {\n  constructor(body, canvas) {\n    this.body = body;\n    this.canvas = canvas;\n\n    this.animationSpeed = 1/this.renderRefreshRate;\n    this.animationEasingFunction = \"easeInOutQuint\";\n    this.easingTime = 0;\n    this.sourceScale = 0;\n    this.targetScale = 0;\n    this.sourceTranslation = 0;\n    this.targetTranslation = 0;\n    this.lockedOnNodeId = undefined;\n    this.lockedOnNodeOffset = undefined;\n    this.touchTime = 0;\n\n    this.viewFunction = undefined;\n\n    this.body.emitter.on(\"fit\",                 this.fit.bind(this));\n    this.body.emitter.on(\"animationFinished\",   () => {this.body.emitter.emit(\"_stopRendering\");});\n    this.body.emitter.on(\"unlockNode\",          this.releaseNode.bind(this));\n  }\n\n\n  setOptions(options = {}) {\n    this.options = options;\n  }\n\n\n  /**\n   * This function zooms out to fit all data on screen based on amount of nodes\n   * @param {Object} Options\n   * @param {Boolean} [initialZoom]  | zoom based on fitted formula or range, true = fitted, default = false;\n   */\n  fit(options = {nodes:[]}, initialZoom = false) {\n    let range;\n    let zoomLevel;\n    if (options.nodes === undefined || options.nodes.length === 0) {\n      options.nodes = this.body.nodeIndices;\n    }\n\n\n    if (initialZoom === true) {\n      // check if more than half of the nodes have a predefined position. If so, we use the range, not the approximation.\n      let positionDefined = 0;\n      for (let nodeId in this.body.nodes) {\n        if (this.body.nodes.hasOwnProperty(nodeId)) {\n          let node = this.body.nodes[nodeId];\n          if (node.predefinedPosition === true) {\n            positionDefined += 1;\n          }\n        }\n      }\n      if (positionDefined > 0.5 * this.body.nodeIndices.length) {\n        this.fit(options,false);\n        return;\n      }\n\n      range = NetworkUtil.getRange(this.body.nodes, options.nodes);\n\n      let numberOfNodes = this.body.nodeIndices.length;\n      zoomLevel = 12.662 / (numberOfNodes + 7.4147) + 0.0964822; // this is obtained from fitting a dataset from 5 points with scale levels that looked good.\n\n      // correct for larger canvasses.\n      let factor = Math.min(this.canvas.frame.canvas.clientWidth / 600, this.canvas.frame.canvas.clientHeight / 600);\n      zoomLevel *= factor;\n    }\n    else {\n      this.body.emitter.emit(\"_resizeNodes\");\n      range = NetworkUtil.getRange(this.body.nodes, options.nodes);\n\n      let xDistance = Math.abs(range.maxX - range.minX) * 1.1;\n      let yDistance = Math.abs(range.maxY - range.minY) * 1.1;\n\n      let xZoomLevel = this.canvas.frame.canvas.clientWidth  / xDistance;\n      let yZoomLevel = this.canvas.frame.canvas.clientHeight / yDistance;\n\n      zoomLevel = (xZoomLevel <= yZoomLevel) ? xZoomLevel : yZoomLevel;\n    }\n\n    if (zoomLevel > 1.0) {\n      zoomLevel = 1.0;\n    }\n    else if (zoomLevel === 0) {\n      zoomLevel = 1.0;\n    }\n\n    let center = NetworkUtil.findCenter(range);\n    let animationOptions = {position: center, scale: zoomLevel, animation: options.animation};\n    this.moveTo(animationOptions);\n  }\n  \n  // animation\n\n  /**\n   * Center a node in view.\n   *\n   * @param {Number} nodeId\n   * @param {Number} [options]\n   */\n  focus(nodeId, options = {}) {\n    if (this.body.nodes[nodeId] !== undefined) {\n      let nodePosition = {x: this.body.nodes[nodeId].x, y: this.body.nodes[nodeId].y};\n      options.position = nodePosition;\n      options.lockedOnNode = nodeId;\n\n      this.moveTo(options)\n    }\n    else {\n      console.log(\"Node: \" + nodeId + \" cannot be found.\");\n    }\n  }\n\n  /**\n   *\n   * @param {Object} options  |  options.offset   = {x:Number, y:Number}   // offset from the center in DOM pixels\n   *                          |  options.scale    = Number                 // scale to move to\n   *                          |  options.position = {x:Number, y:Number}   // position to move to\n   *                          |  options.animation = {duration:Number, easingFunction:String} || Boolean   // position to move to\n   */\n  moveTo(options) {\n    if (options === undefined) {\n      options = {};\n      return;\n    }\n    if (options.offset    === undefined)           {options.offset    = {x: 0, y: 0};    }\n    if (options.offset.x  === undefined)           {options.offset.x  = 0;               }\n    if (options.offset.y  === undefined)           {options.offset.y  = 0;               }\n    if (options.scale     === undefined)           {options.scale     = this.body.view.scale;  }\n    if (options.position  === undefined)           {options.position  = this.getViewPosition();}\n    if (options.animation === undefined)           {options.animation = {duration:0};    }\n    if (options.animation === false    )           {options.animation = {duration:0};    }\n    if (options.animation === true     )           {options.animation = {};              }\n    if (options.animation.duration === undefined)  {options.animation.duration = 1000;   }  // default duration\n    if (options.animation.easingFunction === undefined)  {options.animation.easingFunction = \"easeInOutQuad\";  } // default easing function\n\n    this.animateView(options);\n  }\n\n  /**\n   *\n   * @param {Object} options  |  options.offset   = {x:Number, y:Number}   // offset from the center in DOM pixels\n   *                          |  options.time     = Number                 // animation time in milliseconds\n   *                          |  options.scale    = Number                 // scale to animate to\n   *                          |  options.position = {x:Number, y:Number}   // position to animate to\n   *                          |  options.easingFunction = String           // linear, easeInQuad, easeOutQuad, easeInOutQuad,\n   *                                                                       // easeInCubic, easeOutCubic, easeInOutCubic,\n   *                                                                       // easeInQuart, easeOutQuart, easeInOutQuart,\n   *                                                                       // easeInQuint, easeOutQuint, easeInOutQuint\n   */\n  animateView(options) {\n    if (options === undefined) {\n      return;\n    }\n    this.animationEasingFunction = options.animation.easingFunction;\n    // release if something focussed on the node\n    this.releaseNode();\n    if (options.locked === true) {\n      this.lockedOnNodeId = options.lockedOnNode;\n      this.lockedOnNodeOffset = options.offset;\n    }\n\n    // forcefully complete the old animation if it was still running\n    if (this.easingTime != 0) {\n      this._transitionRedraw(true); // by setting easingtime to 1, we finish the animation.\n    }\n\n    this.sourceScale = this.body.view.scale;\n    this.sourceTranslation = this.body.view.translation;\n    this.targetScale = options.scale;\n\n    // set the scale so the viewCenter is based on the correct zoom level. This is overridden in the transitionRedraw\n    // but at least then we'll have the target transition\n    this.body.view.scale = this.targetScale;\n    let viewCenter = this.canvas.DOMtoCanvas({x: 0.5 * this.canvas.frame.canvas.clientWidth, y: 0.5 * this.canvas.frame.canvas.clientHeight});\n\n    let distanceFromCenter = { // offset from view, distance view has to change by these x and y to center the node\n      x: viewCenter.x - options.position.x,\n      y: viewCenter.y - options.position.y\n    };\n    this.targetTranslation = {\n      x: this.sourceTranslation.x + distanceFromCenter.x * this.targetScale + options.offset.x,\n      y: this.sourceTranslation.y + distanceFromCenter.y * this.targetScale + options.offset.y\n    };\n\n    // if the time is set to 0, don't do an animation\n    if (options.animation.duration === 0) {\n      if (this.lockedOnNodeId != undefined) {\n        this.viewFunction = this._lockedRedraw.bind(this);\n        this.body.emitter.on(\"initRedraw\", this.viewFunction);\n      }\n      else {\n        this.body.view.scale = this.targetScale;\n        this.body.view.translation = this.targetTranslation;\n        this.body.emitter.emit(\"_requestRedraw\");\n      }\n    }\n    else {\n      this.animationSpeed = 1 / (60 * options.animation.duration * 0.001) || 1 / 60; // 60 for 60 seconds, 0.001 for milli's\n      this.animationEasingFunction = options.animation.easingFunction;\n\n\n      this.viewFunction = this._transitionRedraw.bind(this);\n      this.body.emitter.on(\"initRedraw\", this.viewFunction);\n      this.body.emitter.emit(\"_startRendering\");\n    }\n  }\n\n  /**\n   * used to animate smoothly by hijacking the redraw function.\n   * @private\n   */\n  _lockedRedraw() {\n    let nodePosition = {x: this.body.nodes[this.lockedOnNodeId].x, y: this.body.nodes[this.lockedOnNodeId].y};\n    let viewCenter = this.canvas.DOMtoCanvas({x: 0.5 * this.canvas.frame.canvas.clientWidth, y: 0.5 * this.canvas.frame.canvas.clientHeight});\n    let distanceFromCenter = { // offset from view, distance view has to change by these x and y to center the node\n      x: viewCenter.x - nodePosition.x,\n      y: viewCenter.y - nodePosition.y\n    };\n    let sourceTranslation = this.body.view.translation;\n    let targetTranslation = {\n      x: sourceTranslation.x + distanceFromCenter.x * this.body.view.scale + this.lockedOnNodeOffset.x,\n      y: sourceTranslation.y + distanceFromCenter.y * this.body.view.scale + this.lockedOnNodeOffset.y\n    };\n\n    this.body.view.translation = targetTranslation;\n  }\n\n  releaseNode() {\n    if (this.lockedOnNodeId !== undefined && this.viewFunction !== undefined) {\n      this.body.emitter.off(\"initRedraw\", this.viewFunction);\n      this.lockedOnNodeId = undefined;\n      this.lockedOnNodeOffset = undefined;\n    }\n  }\n\n  /**\n   *\n   * @param easingTime\n   * @private\n   */\n  _transitionRedraw(finished = false) {\n    this.easingTime += this.animationSpeed;\n    this.easingTime = finished === true ? 1.0 : this.easingTime;\n\n    let progress = util.easingFunctions[this.animationEasingFunction](this.easingTime);\n\n    this.body.view.scale = this.sourceScale + (this.targetScale - this.sourceScale) * progress;\n    this.body.view.translation = {\n      x: this.sourceTranslation.x + (this.targetTranslation.x - this.sourceTranslation.x) * progress,\n      y: this.sourceTranslation.y + (this.targetTranslation.y - this.sourceTranslation.y) * progress\n    };\n\n    // cleanup\n    if (this.easingTime >= 1.0) {\n      this.body.emitter.off(\"initRedraw\", this.viewFunction);\n      this.easingTime = 0;\n      if (this.lockedOnNodeId != undefined) {\n        this.viewFunction = this._lockedRedraw.bind(this);\n        this.body.emitter.on(\"initRedraw\", this.viewFunction);\n      }\n      this.body.emitter.emit(\"animationFinished\");\n    }\n  };\n\n\n  getScale() {\n    return this.body.view.scale;\n  }\n\n  getViewPosition() {\n    return this.canvas.DOMtoCanvas({x: 0.5 * this.canvas.frame.canvas.clientWidth, y: 0.5 * this.canvas.frame.canvas.clientHeight});\n  }\n\n\n}\n\nexport default View;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/View.js","let util = require('../../util');\n\nimport NavigationHandler from './components/NavigationHandler'\nimport Popup             from './../../shared/Popup'\n\nclass InteractionHandler {\n  constructor(body, canvas, selectionHandler) {\n    this.body = body;\n    this.canvas = canvas;\n    this.selectionHandler = selectionHandler;\n    this.navigationHandler = new NavigationHandler(body,canvas);\n\n    // bind the events from hammer to functions in this object\n    this.body.eventListeners.onTap        = this.onTap.bind(this);\n    this.body.eventListeners.onTouch      = this.onTouch.bind(this);\n    this.body.eventListeners.onDoubleTap  = this.onDoubleTap.bind(this);\n    this.body.eventListeners.onHold       = this.onHold.bind(this);\n    this.body.eventListeners.onDragStart  = this.onDragStart.bind(this);\n    this.body.eventListeners.onDrag       = this.onDrag.bind(this);\n    this.body.eventListeners.onDragEnd    = this.onDragEnd.bind(this);\n    this.body.eventListeners.onMouseWheel = this.onMouseWheel.bind(this);\n    this.body.eventListeners.onPinch      = this.onPinch.bind(this);\n    this.body.eventListeners.onMouseMove  = this.onMouseMove.bind(this);\n    this.body.eventListeners.onRelease    = this.onRelease.bind(this);\n    this.body.eventListeners.onContext    = this.onContext.bind(this);\n\n    this.touchTime = 0;\n    this.drag = {};\n    this.pinch = {};\n    this.popup = undefined;\n    this.popupObj = undefined;\n    this.popupTimer = undefined;\n\n    this.body.functions.getPointer = this.getPointer.bind(this);\n\n    this.options = {};\n    this.defaultOptions = {\n      dragNodes:true,\n      dragView: true,\n      hover: false,\n      keyboard: {\n        enabled: false,\n        speed: {x: 10, y: 10, zoom: 0.02},\n        bindToWindow: true\n      },\n      navigationButtons: false,\n      tooltipDelay: 300,\n      zoomView: true\n    };\n    util.extend(this.options,this.defaultOptions);\n\n    this.bindEventListeners()\n  }\n\n  bindEventListeners() {\n    this.body.emitter.on('destroy', () => {\n      clearTimeout(this.popupTimer);\n      delete this.body.functions.getPointer;\n    })\n  }\n\n  setOptions(options) {\n    if (options !== undefined) {\n      // extend all but the values in fields\n      let fields = ['hideEdgesOnDrag','hideNodesOnDrag','keyboard','multiselect','selectable','selectConnectedEdges'];\n      util.selectiveNotDeepExtend(fields, this.options, options);\n\n      // merge the keyboard options in.\n      util.mergeOptions(this.options, options, 'keyboard');\n\n      if (options.tooltip) {\n        util.extend(this.options.tooltip, options.tooltip);\n        if (options.tooltip.color) {\n          this.options.tooltip.color = util.parseColor(options.tooltip.color);\n        }\n      }\n    }\n\n    this.navigationHandler.setOptions(this.options);\n  }\n\n\n  /**\n   * Get the pointer location from a touch location\n   * @param {{x: Number, y: Number}} touch\n   * @return {{x: Number, y: Number}} pointer\n   * @private\n   */\n  getPointer(touch) {\n    return {\n      x: touch.x - util.getAbsoluteLeft(this.canvas.frame.canvas),\n      y: touch.y - util.getAbsoluteTop(this.canvas.frame.canvas)\n    };\n  }\n\n\n  /**\n   * On start of a touch gesture, store the pointer\n   * @param event\n   * @private\n   */\n  onTouch(event) {\n    if (new Date().valueOf() - this.touchTime > 50) {\n      this.drag.pointer = this.getPointer(event.center);\n      this.drag.pinched = false;\n      this.pinch.scale = this.body.view.scale;\n      // to avoid double fireing of this event because we have two hammer instances. (on canvas and on frame)\n      this.touchTime = new Date().valueOf();\n    }\n  }\n\n  /**\n   * handle tap/click event: select/unselect a node\n   * @private\n   */\n  onTap(event) {\n    let pointer = this.getPointer(event.center);\n    let multiselect = this.selectionHandler.options.multiselect &&\n        (event.changedPointers[0].ctrlKey || event.changedPointers[0].metaKey);\n\n    this.checkSelectionChanges(pointer, event, multiselect);\n    this.selectionHandler._generateClickEvent('click', event, pointer);\n  }\n\n\n  /**\n   * handle doubletap event\n   * @private\n   */\n  onDoubleTap(event) {\n    let pointer = this.getPointer(event.center);\n    this.selectionHandler._generateClickEvent('doubleClick', event, pointer);\n  }\n\n\n\n  /**\n   * handle long tap event: multi select nodes\n   * @private\n   */\n  onHold(event) {\n    let pointer = this.getPointer(event.center);\n    let multiselect = this.selectionHandler.options.multiselect;\n\n    this.checkSelectionChanges(pointer, event, multiselect);\n\n    this.selectionHandler._generateClickEvent('click', event, pointer);\n    this.selectionHandler._generateClickEvent('hold', event, pointer);\n  }\n\n\n  /**\n   * handle the release of the screen\n   *\n   * @private\n   */\n  onRelease(event) {\n    if (new Date().valueOf() - this.touchTime > 10) {\n      let pointer = this.getPointer(event.center);\n      this.selectionHandler._generateClickEvent('release', event, pointer);\n      // to avoid double fireing of this event because we have two hammer instances. (on canvas and on frame)\n      this.touchTime = new Date().valueOf();\n    }\n  }\n\n  onContext(event) {\n    let pointer = this.getPointer({x:event.clientX, y:event.clientY});\n    this.selectionHandler._generateClickEvent('oncontext', event, pointer);\n  }\n\n\n  /**\n   *\n   * @param pointer\n   * @param add\n   */\n  checkSelectionChanges(pointer, event, add = false) {\n    let previouslySelectedEdgeCount = this.selectionHandler._getSelectedEdgeCount();\n    let previouslySelectedNodeCount = this.selectionHandler._getSelectedNodeCount();\n    let previousSelection = this.selectionHandler.getSelection();\n    let selected;\n    if (add === true) {\n      selected = this.selectionHandler.selectAdditionalOnPoint(pointer);\n    }\n    else {\n      selected = this.selectionHandler.selectOnPoint(pointer);\n    }\n    let selectedEdgesCount = this.selectionHandler._getSelectedEdgeCount();\n    let selectedNodesCount = this.selectionHandler._getSelectedNodeCount();\n    let currentSelection = this.selectionHandler.getSelection();\n\n    let {nodesChanged, edgesChanged} = this._determineIfDifferent(previousSelection, currentSelection);\n    let nodeSelected = false;\n\n    if (selectedNodesCount - previouslySelectedNodeCount > 0) { // node was selected\n      this.selectionHandler._generateClickEvent('selectNode', event, pointer);\n      selected = true;\n      nodeSelected = true;\n    }\n    else if (nodesChanged === true && selectedNodesCount > 0) {\n      this.selectionHandler._generateClickEvent('deselectNode', event, pointer, previousSelection);\n      this.selectionHandler._generateClickEvent('selectNode', event, pointer);\n      nodeSelected = true;\n      selected = true;\n    }\n    else if (selectedNodesCount - previouslySelectedNodeCount < 0) { // node was deselected\n      this.selectionHandler._generateClickEvent('deselectNode', event, pointer, previousSelection);\n      selected = true;\n    }\n\n\n    // handle the selected edges\n    if (selectedEdgesCount - previouslySelectedEdgeCount > 0 && nodeSelected === false) { // edge was selected\n      this.selectionHandler._generateClickEvent('selectEdge', event, pointer);\n      selected = true;\n    }\n    else if (selectedEdgesCount > 0 && edgesChanged === true) {\n      this.selectionHandler._generateClickEvent('deselectEdge', event, pointer, previousSelection);\n      this.selectionHandler._generateClickEvent('selectEdge', event, pointer);\n      selected = true;\n    }\n    else if (selectedEdgesCount - previouslySelectedEdgeCount < 0) { // edge was deselected\n      this.selectionHandler._generateClickEvent('deselectEdge', event, pointer, previousSelection);\n      selected = true;\n    }\n\n\n    // fire the select event if anything has been selected or deselected\n    if (selected === true) { // select or unselect\n      this.selectionHandler._generateClickEvent('select', event, pointer);\n    }\n  }\n\n\n  /**\n   * This function checks if the nodes and edges previously selected have changed.\n   * @param previousSelection\n   * @param currentSelection\n   * @returns {{nodesChanged: boolean, edgesChanged: boolean}}\n   * @private\n   */\n  _determineIfDifferent(previousSelection,currentSelection) {\n    let nodesChanged = false;\n    let edgesChanged = false;\n\n    for (let i = 0; i < previousSelection.nodes.length; i++) {\n      if (currentSelection.nodes.indexOf(previousSelection.nodes[i]) === -1) {\n        nodesChanged = true;\n      }\n    }\n    for (let i = 0; i < currentSelection.nodes.length; i++) {\n      if (previousSelection.nodes.indexOf(previousSelection.nodes[i]) === -1) {\n        nodesChanged = true;\n      }\n    }\n    for (let i = 0; i < previousSelection.edges.length; i++) {\n      if (currentSelection.edges.indexOf(previousSelection.edges[i]) === -1) {\n        edgesChanged = true;\n      }\n    }\n    for (let i = 0; i < currentSelection.edges.length; i++) {\n      if (previousSelection.edges.indexOf(previousSelection.edges[i]) === -1) {\n        edgesChanged = true;\n      }\n    }\n\n    return {nodesChanged, edgesChanged};\n  }\n\n\n  /**\n   * This function is called by onDragStart.\n   * It is separated out because we can then overload it for the datamanipulation system.\n   *\n   * @private\n   */\n  onDragStart(event) {\n    //in case the touch event was triggered on an external div, do the initial touch now.\n    if (this.drag.pointer === undefined) {\n      this.onTouch(event);\n    }\n\n    // note: drag.pointer is set in onTouch to get the initial touch location\n    let node = this.selectionHandler.getNodeAt(this.drag.pointer);\n\n    this.drag.dragging = true;\n    this.drag.selection = [];\n    this.drag.translation = util.extend({},this.body.view.translation); // copy the object\n    this.drag.nodeId = undefined;\n\n    if (node !== undefined && this.options.dragNodes === true) {\n      this.drag.nodeId = node.id;\n      // select the clicked node if not yet selected\n      if (node.isSelected() === false) {\n        this.selectionHandler.unselectAll();\n        this.selectionHandler.selectObject(node);\n      }\n\n      // after select to contain the node\n      this.selectionHandler._generateClickEvent('dragStart', event, this.drag.pointer);\n\n      let selection = this.selectionHandler.selectionObj.nodes;\n      // create an array with the selected nodes and their original location and status\n      for (let nodeId in selection) {\n        if (selection.hasOwnProperty(nodeId)) {\n          let object = selection[nodeId];\n          let s = {\n            id: object.id,\n            node: object,\n\n            // store original x, y, xFixed and yFixed, make the node temporarily Fixed\n            x: object.x,\n            y: object.y,\n            xFixed: object.options.fixed.x,\n            yFixed: object.options.fixed.y\n          };\n\n          object.options.fixed.x = true;\n          object.options.fixed.y = true;\n\n          this.drag.selection.push(s);\n        }\n      }\n    }\n    else {\n      // fallback if no node is selected and thus the view is dragged.\n      this.selectionHandler._generateClickEvent('dragStart', event, this.drag.pointer, undefined, true);\n    }\n  }\n\n\n  /**\n   * handle drag event\n   * @private\n   */\n  onDrag(event) {\n    if (this.drag.pinched === true) {\n      return;\n    }\n\n    // remove the focus on node if it is focussed on by the focusOnNode\n    this.body.emitter.emit('unlockNode');\n\n    let pointer = this.getPointer(event.center);\n\n    let selection = this.drag.selection;\n    if (selection && selection.length && this.options.dragNodes === true) {\n      this.selectionHandler._generateClickEvent('dragging', event, pointer);\n\n      // calculate delta's and new location\n      let deltaX = pointer.x - this.drag.pointer.x;\n      let deltaY = pointer.y - this.drag.pointer.y;\n\n      // update position of all selected nodes\n      selection.forEach((selection) => {\n        let node = selection.node;\n        // only move the node if it was not fixed initially\n        if (selection.xFixed === false) {\n          node.x = this.canvas._XconvertDOMtoCanvas(this.canvas._XconvertCanvasToDOM(selection.x) + deltaX);\n        }\n        // only move the node if it was not fixed initially\n        if (selection.yFixed === false) {\n          node.y = this.canvas._YconvertDOMtoCanvas(this.canvas._YconvertCanvasToDOM(selection.y) + deltaY);\n        }\n      });\n\n      // start the simulation of the physics\n      this.body.emitter.emit('startSimulation');\n    }\n    else {\n      // move the network\n      if (this.options.dragView === true) {\n        this.selectionHandler._generateClickEvent('dragging', event, pointer, undefined, true);\n\n        // if the drag was not started properly because the click started outside the network div, start it now.\n        if (this.drag.pointer === undefined) {\n          this.onDragStart(event);\n          return;\n        }\n        let diffX = pointer.x - this.drag.pointer.x;\n        let diffY = pointer.y - this.drag.pointer.y;\n\n        this.body.view.translation = {x:this.drag.translation.x + diffX, y:this.drag.translation.y + diffY};\n        this.body.emitter.emit('_redraw');\n      }\n    }\n  }\n\n\n  /**\n   * handle drag start event\n   * @private\n   */\n  onDragEnd(event) {\n    this.drag.dragging = false;\n    let selection = this.drag.selection;\n    if (selection && selection.length) {\n      selection.forEach(function (s) {\n        // restore original xFixed and yFixed\n        s.node.options.fixed.x = s.xFixed;\n        s.node.options.fixed.y = s.yFixed;\n      });\n      this.selectionHandler._generateClickEvent('dragEnd', event, this.getPointer(event.center));\n      this.body.emitter.emit('startSimulation');\n    }\n    else {\n      this.selectionHandler._generateClickEvent('dragEnd', event, this.getPointer(event.center), undefined, true);\n      this.body.emitter.emit('_requestRedraw');\n    }\n  }\n\n\n\n  /**\n   * Handle pinch event\n   * @param event\n   * @private\n   */\n  onPinch(event) {\n    let pointer = this.getPointer(event.center);\n\n    this.drag.pinched = true;\n    if (this.pinch['scale'] === undefined) {\n      this.pinch.scale = 1;\n    }\n\n    // TODO: enabled moving while pinching?\n    let scale = this.pinch.scale * event.scale;\n    this.zoom(scale, pointer)\n  }\n\n\n  /**\n   * Zoom the network in or out\n   * @param {Number} scale a number around 1, and between 0.01 and 10\n   * @param {{x: Number, y: Number}} pointer    Position on screen\n   * @return {Number} appliedScale    scale is limited within the boundaries\n   * @private\n   */\n  zoom(scale, pointer) {\n    if (this.options.zoomView === true) {\n      let scaleOld = this.body.view.scale;\n      if (scale < 0.00001) {\n        scale = 0.00001;\n      }\n      if (scale > 10) {\n        scale = 10;\n      }\n\n      let preScaleDragPointer = undefined;\n      if (this.drag !== undefined) {\n        if (this.drag.dragging === true) {\n          preScaleDragPointer = this.canvas.DOMtoCanvas(this.drag.pointer);\n        }\n      }\n      // + this.canvas.frame.canvas.clientHeight / 2\n      let translation = this.body.view.translation;\n\n      let scaleFrac = scale / scaleOld;\n      let tx = (1 - scaleFrac) * pointer.x + translation.x * scaleFrac;\n      let ty = (1 - scaleFrac) * pointer.y + translation.y * scaleFrac;\n\n      this.body.view.scale = scale;\n      this.body.view.translation = {x:tx, y:ty};\n\n      if (preScaleDragPointer != undefined) {\n        let postScaleDragPointer = this.canvas.canvasToDOM(preScaleDragPointer);\n        this.drag.pointer.x = postScaleDragPointer.x;\n        this.drag.pointer.y = postScaleDragPointer.y;\n      }\n\n      this.body.emitter.emit('_requestRedraw');\n\n      if (scaleOld < scale) {\n        this.body.emitter.emit('zoom', {direction: '+', scale: this.body.view.scale, pointer: pointer});\n      }\n      else {\n        this.body.emitter.emit('zoom', {direction: '-', scale: this.body.view.scale, pointer: pointer});\n      }\n    }\n  }\n\n\n  /**\n   * Event handler for mouse wheel event, used to zoom the timeline\n   * See http://adomas.org/javascript-mouse-wheel/\n   *     https://github.com/EightMedia/hammer.js/issues/256\n   * @param {MouseEvent}  event\n   * @private\n   */\n  onMouseWheel(event) {\n    if (this.options.zoomView === true) {\n      // retrieve delta\n      let delta = 0;\n      if (event.wheelDelta) { /* IE/Opera. */\n        delta = event.wheelDelta / 120;\n      }\n      else if (event.detail) { /* Mozilla case. */\n        // In Mozilla, sign of delta is different than in IE.\n        // Also, delta is multiple of 3.\n        delta = -event.detail / 3;\n      }\n\n      // If delta is nonzero, handle it.\n      // Basically, delta is now positive if wheel was scrolled up,\n      // and negative, if wheel was scrolled down.\n      if (delta !== 0) {\n\n        // calculate the new scale\n        let scale = this.body.view.scale;\n        let zoom = delta / 10;\n        if (delta < 0) {\n          zoom = zoom / (1 - zoom);\n        }\n        scale *= (1 + zoom);\n\n        // calculate the pointer location\n        let pointer = this.getPointer({x: event.clientX, y: event.clientY});\n\n        // apply the new scale\n        this.zoom(scale, pointer);\n      }\n\n      // Prevent default actions caused by mouse wheel.\n      event.preventDefault();\n    }\n  }\n\n\n  /**\n   * Mouse move handler for checking whether the title moves over a node with a title.\n   * @param  {Event} event\n   * @private\n   */\n  onMouseMove(event) {\n    let pointer = this.getPointer({x:event.clientX, y:event.clientY});\n    let popupVisible = false;\n\n    // check if the previously selected node is still selected\n    if (this.popup !== undefined) {\n      if (this.popup.hidden === false) {\n        this._checkHidePopup(pointer);\n      }\n\n      // if the popup was not hidden above\n      if (this.popup.hidden === false) {\n        popupVisible = true;\n        this.popup.setPosition(pointer.x + 3, pointer.y - 5);\n        this.popup.show();\n      }\n    }\n\n    // if we bind the keyboard to the div, we have to highlight it to use it. This highlights it on mouse over.\n    if (this.options.keyboard.bindToWindow === false && this.options.keyboard.enabled === true) {\n      this.canvas.frame.focus();\n    }\n\n    // start a timeout that will check if the mouse is positioned above an element\n    if (popupVisible === false) {\n      if (this.popupTimer !== undefined) {\n        clearInterval(this.popupTimer); // stop any running calculationTimer\n        this.popupTimer = undefined;\n      }\n      if (!this.drag.dragging) {\n        this.popupTimer = setTimeout(() => this._checkShowPopup(pointer), this.options.tooltipDelay);\n      }\n    }\n\n    /**\n    * Adding hover highlights\n    */\n    if (this.options.hover === true) {\n      // adding hover highlights\n      let obj = this.selectionHandler.getNodeAt(pointer);\n      if (obj === undefined) {\n        obj = this.selectionHandler.getEdgeAt(pointer);\n      }\n      this.selectionHandler.hoverObject(obj);\n    }\n  }\n\n\n\n  /**\n   * Check if there is an element on the given position in the network\n   * (a node or edge). If so, and if this element has a title,\n   * show a popup window with its title.\n   *\n   * @param {{x:Number, y:Number}} pointer\n   * @private\n   */\n _checkShowPopup(pointer) {\n    let x = this.canvas._XconvertDOMtoCanvas(pointer.x);\n    let y = this.canvas._YconvertDOMtoCanvas(pointer.y);\n    let pointerObj = {\n      left:   x,\n      top:    y,\n      right:  x,\n      bottom: y\n    };\n\n    let previousPopupObjId = this.popupObj === undefined ? undefined : this.popupObj.id;\n    let nodeUnderCursor = false;\n    let popupType = 'node';\n\n    // check if a node is under the cursor.\n    if (this.popupObj === undefined) {\n      // search the nodes for overlap, select the top one in case of multiple nodes\n      let nodeIndices = this.body.nodeIndices;\n      let nodes = this.body.nodes;\n      let node;\n      let overlappingNodes = [];\n      for (let i = 0; i < nodeIndices.length; i++) {\n        node = nodes[nodeIndices[i]];\n        if (node.isOverlappingWith(pointerObj) === true) {\n          if (node.getTitle() !== undefined) {\n            overlappingNodes.push(nodeIndices[i]);\n          }\n        }\n      }\n\n      if (overlappingNodes.length > 0) {\n        // if there are overlapping nodes, select the last one, this is the one which is drawn on top of the others\n        this.popupObj = nodes[overlappingNodes[overlappingNodes.length - 1]];\n        // if you hover over a node, the title of the edge is not supposed to be shown.\n        nodeUnderCursor = true;\n      }\n    }\n\n    if (this.popupObj === undefined && nodeUnderCursor === false) {\n      // search the edges for overlap\n      let edgeIndices = this.body.edgeIndices;\n      let edges = this.body.edges;\n      let edge;\n      let overlappingEdges = [];\n      for (let i = 0; i < edgeIndices.length; i++) {\n        edge = edges[edgeIndices[i]];\n        if (edge.isOverlappingWith(pointerObj) === true) {\n          if (edge.connected === true && edge.getTitle() !== undefined) {\n            overlappingEdges.push(edgeIndices[i]);\n          }\n        }\n      }\n\n      if (overlappingEdges.length > 0) {\n        this.popupObj = edges[overlappingEdges[overlappingEdges.length - 1]];\n        popupType = 'edge';\n      }\n    }\n\n    if (this.popupObj !== undefined) {\n      // show popup message window\n      if (this.popupObj.id !== previousPopupObjId) {\n        if (this.popup === undefined) {\n          this.popup = new Popup(this.canvas.frame);\n        }\n\n        this.popup.popupTargetType = popupType;\n        this.popup.popupTargetId = this.popupObj.id;\n\n        // adjust a small offset such that the mouse cursor is located in the\n        // bottom left location of the popup, and you can easily move over the\n        // popup area\n        this.popup.setPosition(pointer.x + 3, pointer.y - 5);\n        this.popup.setText(this.popupObj.getTitle());\n        this.popup.show();\n        this.body.emitter.emit('showPopup',this.popupObj.id);\n      }\n    }\n    else {\n      if (this.popup !== undefined) {\n        this.popup.hide();\n        this.body.emitter.emit('hidePopup');\n      }\n    }\n  }\n\n\n  /**\n   * Check if the popup must be hidden, which is the case when the mouse is no\n   * longer hovering on the object\n   * @param {{x:Number, y:Number}} pointer\n   * @private\n   */\n _checkHidePopup(pointer) {\n    let pointerObj = this.selectionHandler._pointerToPositionObject(pointer);\n\n    let stillOnObj = false;\n    if (this.popup.popupTargetType === 'node') {\n      if (this.body.nodes[this.popup.popupTargetId] !== undefined) {\n        stillOnObj = this.body.nodes[this.popup.popupTargetId].isOverlappingWith(pointerObj);\n\n        // if the mouse is still one the node, we have to check if it is not also on one that is drawn on top of it.\n        // we initially only check stillOnObj because this is much faster.\n        if (stillOnObj === true) {\n          let overNode = this.selectionHandler.getNodeAt(pointer);\n          stillOnObj = overNode === undefined ? false : overNode.id === this.popup.popupTargetId;\n        }\n      }\n    }\n    else {\n      if (this.selectionHandler.getNodeAt(pointer) === undefined) {\n        if (this.body.edges[this.popup.popupTargetId] !== undefined) {\n          stillOnObj = this.body.edges[this.popup.popupTargetId].isOverlappingWith(pointerObj);\n        }\n      }\n    }\n\n\n    if (stillOnObj === false) {\n      this.popupObj = undefined;\n      this.popup.hide();\n      this.body.emitter.emit('hidePopup');\n    }\n  }\n\n}\n\nexport default InteractionHandler;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/InteractionHandler.js","var util = require('../../../util');\nvar Hammer = require('../../../module/hammer');\nvar hammerUtil = require('../../../hammerUtil');\nvar keycharm = require('keycharm');\n\nclass NavigationHandler {\n  constructor(body, canvas) {\n    this.body = body;\n    this.canvas = canvas;\n\n    this.iconsCreated = false;\n    this.navigationHammers = [];\n    this.boundFunctions = {};\n    this.touchTime = 0;\n    this.activated = false;\n\n\n    this.body.emitter.on(\"activate\",   () => {this.activated = true;  this.configureKeyboardBindings();});\n    this.body.emitter.on(\"deactivate\", () => {this.activated = false; this.configureKeyboardBindings();});\n    this.body.emitter.on(\"destroy\",    () => {if (this.keycharm !== undefined) {this.keycharm.destroy();}});\n\n    this.options = {}\n  }\n\n  setOptions(options) {\n    if (options !== undefined) {\n      this.options = options;\n      this.create();\n    }\n  }\n\n  create() {\n    if (this.options.navigationButtons === true) {\n      if (this.iconsCreated === false) {\n        this.loadNavigationElements();\n      }\n    }\n    else if (this.iconsCreated === true) {\n      this.cleanNavigation();\n    }\n\n    this.configureKeyboardBindings();\n  }\n\n  cleanNavigation() {\n    // clean hammer bindings\n    if (this.navigationHammers.length != 0) {\n      for (var i = 0; i < this.navigationHammers.length; i++) {\n        this.navigationHammers[i].destroy();\n      }\n      this.navigationHammers = [];\n    }\n\n    // clean up previous navigation items\n    if (this.navigationDOM && this.navigationDOM['wrapper'] && this.navigationDOM['wrapper'].parentNode) {\n      this.navigationDOM['wrapper'].parentNode.removeChild(this.navigationDOM['wrapper']);\n    }\n\n    this.iconsCreated = false;\n  }\n\n  /**\n   * Creation of the navigation controls nodes. They are drawn over the rest of the nodes and are not affected by scale and translation\n   * they have a triggerFunction which is called on click. If the position of the navigation controls is dependent\n   * on this.frame.canvas.clientWidth or this.frame.canvas.clientHeight, we flag horizontalAlignLeft and verticalAlignTop false.\n   * This means that the location will be corrected by the _relocateNavigation function on a size change of the canvas.\n   *\n   * @private\n   */\n  loadNavigationElements() {\n    this.cleanNavigation();\n\n    this.navigationDOM = {};\n    var navigationDivs = ['up','down','left','right','zoomIn','zoomOut','zoomExtends'];\n    var navigationDivActions = ['_moveUp','_moveDown','_moveLeft','_moveRight','_zoomIn','_zoomOut','_fit'];\n\n    this.navigationDOM['wrapper'] = document.createElement('div');\n    this.navigationDOM['wrapper'].className = 'vis-navigation';\n    this.canvas.frame.appendChild(this.navigationDOM['wrapper']);\n\n    for (var i = 0; i < navigationDivs.length; i++) {\n      this.navigationDOM[navigationDivs[i]] = document.createElement('div');\n      this.navigationDOM[navigationDivs[i]].className = 'vis-button vis-' + navigationDivs[i];\n      this.navigationDOM['wrapper'].appendChild(this.navigationDOM[navigationDivs[i]]);\n\n      var hammer = new Hammer(this.navigationDOM[navigationDivs[i]]);\n      if (navigationDivActions[i] === \"_fit\") {\n        hammerUtil.onTouch(hammer, this._fit.bind(this));\n      }\n      else {\n        hammerUtil.onTouch(hammer, this.bindToRedraw.bind(this,navigationDivActions[i]));\n      }\n\n      this.navigationHammers.push(hammer);\n    }\n\n    // use a hammer for the release so we do not require the one used in the rest of the network\n    // the one the rest uses can be overloaded by the manipulation system.\n    var hammerFrame = new Hammer(this.canvas.frame);\n    hammerUtil.onRelease(hammerFrame, () => {this._stopMovement();});\n    this.navigationHammers.push(hammerFrame);\n\n    this.iconsCreated = true;\n  }\n\n  bindToRedraw(action) {\n    if (this.boundFunctions[action] === undefined) {\n      this.boundFunctions[action] = this[action].bind(this);\n      this.body.emitter.on(\"initRedraw\", this.boundFunctions[action]);\n      this.body.emitter.emit(\"_startRendering\");\n    }\n  }\n\n  unbindFromRedraw(action) {\n    if (this.boundFunctions[action] !== undefined) {\n      this.body.emitter.off(\"initRedraw\", this.boundFunctions[action]);\n      this.body.emitter.emit(\"_stopRendering\");\n      delete this.boundFunctions[action];\n    }\n  }\n\n  /**\n   * this stops all movement induced by the navigation buttons\n   *\n   * @private\n   */\n  _fit() {\n    if (new Date().valueOf() - this.touchTime > 700) { // TODO: fix ugly hack to avoid hammer's double fireing of event (because we use release?)\n      this.body.emitter.emit(\"fit\", {duration: 700});\n      this.touchTime = new Date().valueOf();\n    }\n  }\n\n  /**\n   * this stops all movement induced by the navigation buttons\n   *\n   * @private\n   */\n  _stopMovement() {\n    for (let boundAction in this.boundFunctions) {\n      if (this.boundFunctions.hasOwnProperty(boundAction)) {\n        this.body.emitter.off(\"initRedraw\", this.boundFunctions[boundAction]);\n        this.body.emitter.emit(\"_stopRendering\");\n      }\n    }\n    this.boundFunctions = {};\n  }\n\n  _moveUp()   {this.body.view.translation.y += this.options.keyboard.speed.y;}\n  _moveDown() {this.body.view.translation.y -= this.options.keyboard.speed.y;}\n  _moveLeft() {this.body.view.translation.x += this.options.keyboard.speed.x;}\n  _moveRight(){this.body.view.translation.x -= this.options.keyboard.speed.x;}\n  _zoomIn() {\n    var scaleOld = this.body.view.scale;\n    var scale = this.body.view.scale * (1 + this.options.keyboard.speed.zoom);\n    var translation = this.body.view.translation;\n    var scaleFrac = scale / scaleOld;\n    var tx = (1 - scaleFrac) * this.canvas.canvasViewCenter.x + translation.x * scaleFrac;\n    var ty = (1 - scaleFrac) * this.canvas.canvasViewCenter.y + translation.y * scaleFrac;\n\n    this.body.view.scale = scale;\n    this.body.view.translation = { x: tx, y: ty };\n    this.body.emitter.emit('zoom', { direction: '+', scale: this.body.view.scale, pointer: pointer });\n  }\n  _zoomOut()  {\n    var scaleOld = this.body.view.scale;\n    var scale = this.body.view.scale / (1 + this.options.keyboard.speed.zoom);\n    var translation = this.body.view.translation;\n    var scaleFrac = scale / scaleOld;\n    var tx = (1 - scaleFrac) * this.canvas.canvasViewCenter.x + translation.x * scaleFrac;\n    var ty = (1 - scaleFrac) * this.canvas.canvasViewCenter.y + translation.y * scaleFrac;\n\n    this.body.view.scale = scale;\n    this.body.view.translation = { x: tx, y: ty };\n    this.body.emitter.emit('zoom', { direction: '-', scale: this.body.view.scale, pointer: pointer });\n  }\n\n\n  /**\n   * bind all keys using keycharm.\n   */\n  configureKeyboardBindings() {\n    if (this.keycharm !== undefined) {\n      this.keycharm.destroy();\n    }\n\n    if (this.options.keyboard.enabled === true) {\n      if (this.options.keyboard.bindToWindow === true) {\n        this.keycharm = keycharm({container: window, preventDefault: true});\n      }\n      else {\n        this.keycharm = keycharm({container: this.canvas.frame, preventDefault: true});\n      }\n\n      this.keycharm.reset();\n\n      if (this.activated === true) {\n        this.keycharm.bind(\"up\",       () => {this.bindToRedraw(\"_moveUp\")   ;}, \"keydown\");\n        this.keycharm.bind(\"down\",     () => {this.bindToRedraw(\"_moveDown\") ;}, \"keydown\");\n        this.keycharm.bind(\"left\",     () => {this.bindToRedraw(\"_moveLeft\") ;}, \"keydown\");\n        this.keycharm.bind(\"right\",    () => {this.bindToRedraw(\"_moveRight\");}, \"keydown\");\n        this.keycharm.bind(\"=\",        () => {this.bindToRedraw(\"_zoomIn\")   ;}, \"keydown\");\n        this.keycharm.bind(\"num+\",     () => {this.bindToRedraw(\"_zoomIn\")   ;}, \"keydown\");\n        this.keycharm.bind(\"num-\",     () => {this.bindToRedraw(\"_zoomOut\")  ;}, \"keydown\");\n        this.keycharm.bind(\"-\",        () => {this.bindToRedraw(\"_zoomOut\")  ;}, \"keydown\");\n        this.keycharm.bind(\"[\",        () => {this.bindToRedraw(\"_zoomOut\")  ;}, \"keydown\");\n        this.keycharm.bind(\"]\",        () => {this.bindToRedraw(\"_zoomIn\")   ;}, \"keydown\");\n        this.keycharm.bind(\"pageup\",   () => {this.bindToRedraw(\"_zoomIn\")   ;}, \"keydown\");\n        this.keycharm.bind(\"pagedown\", () => {this.bindToRedraw(\"_zoomOut\")  ;}, \"keydown\");\n\n        this.keycharm.bind(\"up\",       () => {this.unbindFromRedraw(\"_moveUp\")   ;}, \"keyup\");\n        this.keycharm.bind(\"down\",     () => {this.unbindFromRedraw(\"_moveDown\") ;}, \"keyup\");\n        this.keycharm.bind(\"left\",     () => {this.unbindFromRedraw(\"_moveLeft\") ;}, \"keyup\");\n        this.keycharm.bind(\"right\",    () => {this.unbindFromRedraw(\"_moveRight\");}, \"keyup\");\n        this.keycharm.bind(\"=\",        () => {this.unbindFromRedraw(\"_zoomIn\")   ;}, \"keyup\");\n        this.keycharm.bind(\"num+\",     () => {this.unbindFromRedraw(\"_zoomIn\")   ;}, \"keyup\");\n        this.keycharm.bind(\"num-\",     () => {this.unbindFromRedraw(\"_zoomOut\")  ;}, \"keyup\");\n        this.keycharm.bind(\"-\",        () => {this.unbindFromRedraw(\"_zoomOut\")  ;}, \"keyup\");\n        this.keycharm.bind(\"[\",        () => {this.unbindFromRedraw(\"_zoomOut\")  ;}, \"keyup\");\n        this.keycharm.bind(\"]\",        () => {this.unbindFromRedraw(\"_zoomIn\")   ;}, \"keyup\");\n        this.keycharm.bind(\"pageup\",   () => {this.unbindFromRedraw(\"_zoomIn\")   ;}, \"keyup\");\n        this.keycharm.bind(\"pagedown\", () => {this.unbindFromRedraw(\"_zoomOut\")  ;}, \"keyup\");\n      }\n    }\n  }\n}\n\n\nexport default NavigationHandler;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/NavigationHandler.js","import Node from './components/Node';\nimport Edge from './components/Edge';\n\nlet util = require('../../util');\n\nclass SelectionHandler {\n  constructor(body, canvas) {\n    this.body = body;\n    this.canvas = canvas;\n    this.selectionObj = {nodes: [], edges: []};\n    this.hoverObj = {nodes:{},edges:{}};\n\n    this.options = {};\n    this.defaultOptions = {\n      multiselect: false,\n      selectable: true,\n      selectConnectedEdges: true,\n      hoverConnectedEdges: true\n    };\n    util.extend(this.options, this.defaultOptions);\n\n    this.body.emitter.on(\"_dataChanged\", () => {\n      this.updateSelection()\n    });\n  }\n\n\n  setOptions(options) {\n    if (options !== undefined) {\n      let fields = ['multiselect','hoverConnectedEdges','selectable','selectConnectedEdges'];\n      util.selectiveDeepExtend(fields,this.options, options);\n    }\n  }\n\n\n  /**\n   * handles the selection part of the tap;\n   *\n   * @param {Object} pointer\n   * @private\n   */\n  selectOnPoint(pointer) {\n    let selected = false;\n    if (this.options.selectable === true) {\n      let obj = this.getNodeAt(pointer) || this.getEdgeAt(pointer);\n\n      // unselect after getting the objects in order to restore width and height.\n      this.unselectAll();\n\n      if (obj !== undefined) {\n        selected = this.selectObject(obj);\n      }\n      this.body.emitter.emit(\"_requestRedraw\");\n    }\n    return selected;\n  }\n\n  selectAdditionalOnPoint(pointer) {\n    let selectionChanged = false;\n    if (this.options.selectable === true) {\n      let obj = this.getNodeAt(pointer) || this.getEdgeAt(pointer);\n\n      if (obj !== undefined) {\n        selectionChanged = true;\n        if (obj.isSelected() === true) {\n          this.deselectObject(obj);\n        }\n        else {\n          this.selectObject(obj);\n        }\n\n        this.body.emitter.emit(\"_requestRedraw\");\n      }\n    }\n    return selectionChanged;\n  }\n\n  _generateClickEvent(eventType, event, pointer, oldSelection, emptySelection = false) {\n    let properties;\n    if (emptySelection === true) {\n      properties = {nodes:[], edges:[]};\n    }\n    else {\n      properties = this.getSelection();\n    }\n    properties['pointer'] = {\n      DOM: {x: pointer.x, y: pointer.y},\n      canvas: this.canvas.DOMtoCanvas(pointer)\n    };\n    properties['event'] = event;\n\n    if (oldSelection !== undefined) {\n      properties['previousSelection'] = oldSelection;\n    }\n    this.body.emitter.emit(eventType, properties);\n  }\n\n  selectObject(obj, highlightEdges = this.options.selectConnectedEdges) {\n    if (obj !== undefined) {\n      if (obj instanceof Node) {\n        if (highlightEdges === true) {\n          this._selectConnectedEdges(obj);\n        }\n      }\n      obj.select();\n      this._addToSelection(obj);\n      return true;\n    }\n    return false;\n  }\n\n  deselectObject(obj) {\n    if (obj.isSelected() === true) {\n      obj.selected = false;\n      this._removeFromSelection(obj);\n    }\n  }\n\n\n\n  /**\n   * retrieve all nodes overlapping with given object\n   * @param {Object} object  An object with parameters left, top, right, bottom\n   * @return {Number[]}   An array with id's of the overlapping nodes\n   * @private\n   */\n  _getAllNodesOverlappingWith(object) {\n    let overlappingNodes = [];\n    let nodes = this.body.nodes;\n    for (let i = 0; i < this.body.nodeIndices.length; i++) {\n      let nodeId = this.body.nodeIndices[i];\n      if (nodes[nodeId].isOverlappingWith(object)) {\n        overlappingNodes.push(nodeId);\n      }\n    }\n    return overlappingNodes;\n  }\n\n\n  /**\n   * Return a position object in canvasspace from a single point in screenspace\n   *\n   * @param pointer\n   * @returns {{left: number, top: number, right: number, bottom: number}}\n   * @private\n   */\n  _pointerToPositionObject(pointer) {\n    let canvasPos = this.canvas.DOMtoCanvas(pointer);\n    return {\n      left:   canvasPos.x - 1,\n      top:    canvasPos.y + 1,\n      right:  canvasPos.x + 1,\n      bottom: canvasPos.y - 1\n    };\n  }\n\n\n  /**\n   * Get the top node at the a specific point (like a click)\n   *\n   * @param {{x: Number, y: Number}} pointer\n   * @return {Node | undefined} node\n   */\n  getNodeAt(pointer, returnNode = true) {\n    // we first check if this is an navigation controls element\n    let positionObject = this._pointerToPositionObject(pointer);\n    let overlappingNodes = this._getAllNodesOverlappingWith(positionObject);\n    // if there are overlapping nodes, select the last one, this is the\n    // one which is drawn on top of the others\n    if (overlappingNodes.length > 0) {\n      if (returnNode === true) {\n        return this.body.nodes[overlappingNodes[overlappingNodes.length - 1]];\n      }\n      else {\n        return overlappingNodes[overlappingNodes.length - 1];\n      }\n    }\n    else {\n      return undefined;\n    }\n  }\n\n\n  /**\n   * retrieve all edges overlapping with given object, selector is around center\n   * @param {Object} object  An object with parameters left, top, right, bottom\n   * @return {Number[]}   An array with id's of the overlapping nodes\n   * @private\n   */\n  _getEdgesOverlappingWith(object, overlappingEdges) {\n    let edges = this.body.edges;\n    for (let i = 0; i < this.body.edgeIndices.length; i++) {\n      let edgeId = this.body.edgeIndices[i];\n      if (edges[edgeId].isOverlappingWith(object)) {\n        overlappingEdges.push(edgeId);\n      }\n    }\n  }\n\n\n  /**\n   * retrieve all nodes overlapping with given object\n   * @param {Object} object  An object with parameters left, top, right, bottom\n   * @return {Number[]}   An array with id's of the overlapping nodes\n   * @private\n   */\n  _getAllEdgesOverlappingWith(object) {\n    let overlappingEdges = [];\n    this._getEdgesOverlappingWith(object,overlappingEdges);\n    return overlappingEdges;\n  }\n\n\n  /**\n   * Place holder. To implement change the getNodeAt to a _getObjectAt. Have the _getObjectAt call\n   * getNodeAt and _getEdgesAt, then priortize the selection to user preferences.\n   *\n   * @param pointer\n   * @returns {undefined}\n   */\n  getEdgeAt(pointer, returnEdge = true) {\n    // Iterate over edges, pick closest within 10\n    var canvasPos = this.canvas.DOMtoCanvas(pointer);\n    var mindist = 10;\n    var overlappingEdge = null;\n    var edges = this.body.edges;\n    for (var i = 0; i < this.body.edgeIndices.length; i++) {\n      var edgeId = this.body.edgeIndices[i];\n      var edge = edges[edgeId];\n      if (edge.connected) {\n        var xFrom = edge.from.x;\n        var yFrom = edge.from.y;\n        var xTo = edge.to.x;\n        var yTo = edge.to.y;\n        var dist = edge.edgeType.getDistanceToEdge(xFrom, yFrom, xTo, yTo, canvasPos.x, canvasPos.y);\n        if(dist < mindist){\n          overlappingEdge = edgeId;\n          mindist = dist;\n        }\n      }\n    }\n    if (overlappingEdge) {\n      if (returnEdge === true) {\n        return this.body.edges[overlappingEdge];\n      }\n      else {\n        return overlappingEdge;\n      }\n    }\n    else {\n      return undefined;\n    }\n  }\n\n\n  /**\n   * Add object to the selection array.\n   *\n   * @param obj\n   * @private\n   */\n  _addToSelection(obj) {\n    if (obj instanceof Node) {\n      this.selectionObj.nodes[obj.id] = obj;\n    }\n    else {\n      this.selectionObj.edges[obj.id] = obj;\n    }\n  }\n\n  /**\n   * Add object to the selection array.\n   *\n   * @param obj\n   * @private\n   */\n  _addToHover(obj) {\n    if (obj instanceof Node) {\n      this.hoverObj.nodes[obj.id] = obj;\n    }\n    else {\n      this.hoverObj.edges[obj.id] = obj;\n    }\n  }\n\n\n  /**\n   * Remove a single option from selection.\n   *\n   * @param {Object} obj\n   * @private\n   */\n  _removeFromSelection(obj) {\n    if (obj instanceof Node) {\n      delete this.selectionObj.nodes[obj.id];\n      this._unselectConnectedEdges(obj);\n    }\n    else {\n      delete this.selectionObj.edges[obj.id];\n    }\n  }\n\n  /**\n   * Unselect all. The selectionObj is useful for this.\n   */\n  unselectAll() {\n    for(let nodeId in this.selectionObj.nodes) {\n      if(this.selectionObj.nodes.hasOwnProperty(nodeId)) {\n        this.selectionObj.nodes[nodeId].unselect();\n      }\n    }\n    for(let edgeId in this.selectionObj.edges) {\n      if(this.selectionObj.edges.hasOwnProperty(edgeId)) {\n        this.selectionObj.edges[edgeId].unselect();\n      }\n    }\n\n    this.selectionObj = {nodes:{},edges:{}};\n  }\n\n\n  /**\n   * return the number of selected nodes\n   *\n   * @returns {number}\n   * @private\n   */\n  _getSelectedNodeCount() {\n    let count = 0;\n    for (let nodeId in this.selectionObj.nodes) {\n      if (this.selectionObj.nodes.hasOwnProperty(nodeId)) {\n        count += 1;\n      }\n    }\n    return count;\n  }\n\n  /**\n   * return the selected node\n   *\n   * @returns {number}\n   * @private\n   */\n  _getSelectedNode() {\n    for (let nodeId in this.selectionObj.nodes) {\n      if (this.selectionObj.nodes.hasOwnProperty(nodeId)) {\n        return this.selectionObj.nodes[nodeId];\n      }\n    }\n    return undefined;\n  }\n\n  /**\n   * return the selected edge\n   *\n   * @returns {number}\n   * @private\n   */\n  _getSelectedEdge() {\n    for (let edgeId in this.selectionObj.edges) {\n      if (this.selectionObj.edges.hasOwnProperty(edgeId)) {\n        return this.selectionObj.edges[edgeId];\n      }\n    }\n    return undefined;\n  }\n\n\n  /**\n   * return the number of selected edges\n   *\n   * @returns {number}\n   * @private\n   */\n  _getSelectedEdgeCount() {\n    let count = 0;\n    for (let edgeId in this.selectionObj.edges) {\n      if (this.selectionObj.edges.hasOwnProperty(edgeId)) {\n        count += 1;\n      }\n    }\n    return count;\n  }\n\n\n  /**\n   * return the number of selected objects.\n   *\n   * @returns {number}\n   * @private\n   */\n  _getSelectedObjectCount() {\n    let count = 0;\n    for(let nodeId in this.selectionObj.nodes) {\n      if(this.selectionObj.nodes.hasOwnProperty(nodeId)) {\n        count += 1;\n      }\n    }\n    for(let edgeId in this.selectionObj.edges) {\n      if(this.selectionObj.edges.hasOwnProperty(edgeId)) {\n        count += 1;\n      }\n    }\n    return count;\n  }\n\n  /**\n   * Check if anything is selected\n   *\n   * @returns {boolean}\n   * @private\n   */\n  _selectionIsEmpty() {\n    for(let nodeId in this.selectionObj.nodes) {\n      if(this.selectionObj.nodes.hasOwnProperty(nodeId)) {\n        return false;\n      }\n    }\n    for(let edgeId in this.selectionObj.edges) {\n      if(this.selectionObj.edges.hasOwnProperty(edgeId)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n\n  /**\n   * check if one of the selected nodes is a cluster.\n   *\n   * @returns {boolean}\n   * @private\n   */\n  _clusterInSelection() {\n    for(let nodeId in this.selectionObj.nodes) {\n      if(this.selectionObj.nodes.hasOwnProperty(nodeId)) {\n        if (this.selectionObj.nodes[nodeId].clusterSize > 1) {\n          return true;\n        }\n      }\n    }\n    return false;\n  }\n\n  /**\n   * select the edges connected to the node that is being selected\n   *\n   * @param {Node} node\n   * @private\n   */\n  _selectConnectedEdges(node) {\n    for (let i = 0; i < node.edges.length; i++) {\n      let edge = node.edges[i];\n      edge.select();\n      this._addToSelection(edge);\n    }\n  }\n\n  /**\n   * select the edges connected to the node that is being selected\n   *\n   * @param {Node} node\n   * @private\n   */\n  _hoverConnectedEdges(node) {\n    for (let i = 0; i < node.edges.length; i++) {\n      let edge = node.edges[i];\n      edge.hover = true;\n      this._addToHover(edge);\n    }\n  }\n\n\n  /**\n   * unselect the edges connected to the node that is being selected\n   *\n   * @param {Node} node\n   * @private\n   */\n  _unselectConnectedEdges(node) {\n    for (let i = 0; i < node.edges.length; i++) {\n      let edge = node.edges[i];\n      edge.unselect();\n      this._removeFromSelection(edge);\n    }\n  }\n\n\n  /**\n   * This is called when someone clicks on a node. either select or deselect it.\n   * If there is an existing selection and we don't want to append to it, clear the existing selection\n   *\n   * @param {Node || Edge} object\n   * @private\n   */\n  blurObject(object) {\n    if (object.hover === true) {\n      object.hover = false;\n      if (object instanceof Node) {\n        this.body.emitter.emit(\"blurNode\", {node: object.id});\n      }\n      else {\n        this.body.emitter.emit(\"blurEdge\", {edge: object.id});\n      }\n    }\n  }\n\n  /**\n   * This is called when someone clicks on a node. either select or deselect it.\n   * If there is an existing selection and we don't want to append to it, clear the existing selection\n   *\n   * @param {Node || Edge} object\n   * @private\n   */\n  hoverObject(object) {\n    let hoverChanged = false;\n    // remove all node hover highlights\n    for (let nodeId in this.hoverObj.nodes) {\n      if (this.hoverObj.nodes.hasOwnProperty(nodeId)) {\n        if (object === undefined || (object instanceof Node && object.id != nodeId) || object instanceof Edge) {\n          this.blurObject(this.hoverObj.nodes[nodeId]);\n          delete this.hoverObj.nodes[nodeId];\n          hoverChanged = true;\n        }\n      }\n    }\n\n    // removing all edge hover highlights\n    for (let edgeId in this.hoverObj.edges) {\n      if (this.hoverObj.edges.hasOwnProperty(edgeId)) {\n        // if the hover has been changed here it means that the node has been hovered over or off\n        // we then do not use the blurObject method here.\n        if (hoverChanged === true) {\n          this.hoverObj.edges[edgeId].hover = false;\n          delete this.hoverObj.edges[edgeId];\n        }\n        // if the blur remains the same and the object is undefined (mouse off) or another\n        // edge has been hovered, or another node has been hovered we blur the edge.\n        else if (object === undefined || (object instanceof Edge && object.id != edgeId) || (object instanceof Node && !object.hover)) {\n          this.blurObject(this.hoverObj.edges[edgeId]);\n          delete this.hoverObj.edges[edgeId];\n          hoverChanged = true;\n        }\n      }\n    }\n\n    if (object !== undefined) {\n      if (object.hover === false) {\n        object.hover = true;\n        this._addToHover(object);\n        hoverChanged = true;\n        if (object instanceof Node) {\n          this.body.emitter.emit(\"hoverNode\", {node: object.id});\n        }\n        else {\n          this.body.emitter.emit(\"hoverEdge\", {edge: object.id});\n        }\n      }\n      if (object instanceof Node && this.options.hoverConnectedEdges === true) {\n        this._hoverConnectedEdges(object);\n      }\n    }\n\n    if (hoverChanged === true) {\n      this.body.emitter.emit('_requestRedraw');\n    }\n  }\n\n\n\n\n  /**\n   *\n   * retrieve the currently selected objects\n   * @return {{nodes: Array.<String>, edges: Array.<String>}} selection\n   */\n  getSelection() {\n    let nodeIds = this.getSelectedNodes();\n    let edgeIds = this.getSelectedEdges();\n    return {nodes:nodeIds, edges:edgeIds};\n  }\n\n  /**\n   *\n   * retrieve the currently selected nodes\n   * @return {String[]} selection    An array with the ids of the\n   *                                            selected nodes.\n   */\n  getSelectedNodes() {\n    let idArray = [];\n    if (this.options.selectable === true) {\n      for (let nodeId in this.selectionObj.nodes) {\n        if (this.selectionObj.nodes.hasOwnProperty(nodeId)) {\n          idArray.push(this.selectionObj.nodes[nodeId].id);\n        }\n      }\n    }\n    return idArray;\n  }\n\n  /**\n   *\n   * retrieve the currently selected edges\n   * @return {Array} selection    An array with the ids of the\n   *                                            selected nodes.\n   */\n  getSelectedEdges() {\n    let idArray = [];\n    if (this.options.selectable === true) {\n      for (let edgeId in this.selectionObj.edges) {\n        if (this.selectionObj.edges.hasOwnProperty(edgeId)) {\n          idArray.push(this.selectionObj.edges[edgeId].id);\n        }\n      }\n    }\n    return idArray;\n  }\n\n  /**\n   * Updates the current selection\n   * @param {{nodes: Array.<String>, edges: Array.<String>}} Selection\n   * @param {Object} options                                 Options\n   */\n  setSelection(selection, options = {}) {\n    let i, id;\n\n    if (!selection || (!selection.nodes && !selection.edges))\n      throw 'Selection must be an object with nodes and/or edges properties';\n    // first unselect any selected node, if option is true or undefined\n    if (options.unselectAll || options.unselectAll === undefined) {\n      this.unselectAll();\n    }\n    if (selection.nodes) {\n      for (i = 0; i < selection.nodes.length; i++) {\n        id = selection.nodes[i];\n\n        let node = this.body.nodes[id];\n        if (!node) {\n          throw new RangeError('Node with id \"' + id + '\" not found');\n        }\n        // don't select edges with it\n        this.selectObject(node, options.highlightEdges);\n      }\n    }\n\n    if (selection.edges) {\n      for (i = 0; i < selection.edges.length; i++) {\n        id = selection.edges[i];\n\n        let edge = this.body.edges[id];\n        if (!edge) {\n          throw new RangeError('Edge with id \"' + id + '\" not found');\n        }\n        this.selectObject(edge);\n      }\n    }\n    this.body.emitter.emit('_requestRedraw');\n  }\n\n\n  /**\n   * select zero or more nodes with the option to highlight edges\n   * @param {Number[] | String[]} selection     An array with the ids of the\n   *                                            selected nodes.\n   * @param {boolean} [highlightEdges]\n   */\n  selectNodes(selection, highlightEdges = true) {\n    if (!selection || (selection.length === undefined))\n      throw 'Selection must be an array with ids';\n\n    this.setSelection({nodes: selection}, {highlightEdges: highlightEdges});\n  }\n\n\n  /**\n   * select zero or more edges\n   * @param {Number[] | String[]} selection     An array with the ids of the\n   *                                            selected nodes.\n   */\n  selectEdges(selection) {\n    if (!selection || (selection.length === undefined))\n      throw 'Selection must be an array with ids';\n\n    this.setSelection({edges: selection});\n  }\n\n  /**\n   * Validate the selection: remove ids of nodes which no longer exist\n   * @private\n   */\n  updateSelection() {\n    for (let nodeId in this.selectionObj.nodes) {\n      if (this.selectionObj.nodes.hasOwnProperty(nodeId)) {\n        if (!this.body.nodes.hasOwnProperty(nodeId)) {\n          delete this.selectionObj.nodes[nodeId];\n        }\n      }\n    }\n    for (let edgeId in this.selectionObj.edges) {\n      if (this.selectionObj.edges.hasOwnProperty(edgeId)) {\n        if (!this.body.edges.hasOwnProperty(edgeId)) {\n          delete this.selectionObj.edges[edgeId];\n        }\n      }\n    }\n  }\n}\n\nexport default SelectionHandler;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/SelectionHandler.js","'use strict';\n\nlet util = require('../../util');\nimport NetworkUtil from '../NetworkUtil';\n\nclass LayoutEngine {\n  constructor(body) {\n    this.body = body;\n\n    this.initialRandomSeed = Math.round(Math.random() * 1000000);\n    this.randomSeed = this.initialRandomSeed;\n    this.setPhysics = false;\n    this.options = {};\n    this.optionsBackup = {physics:{}};\n\n    this.defaultOptions = {\n      randomSeed: undefined,\n      improvedLayout: true,\n      hierarchical: {\n        enabled:false,\n        levelSeparation: 150,\n        nodeSpacing: 100,\n        treeSpacing: 200,\n        blockShifting: true,\n        edgeMinimization: true,\n        parentCentralization: true,\n        direction: 'UD',   // UD, DU, LR, RL\n        sortMethod: 'hubsize' // hubsize, directed\n      }\n    };\n    util.extend(this.options, this.defaultOptions);\n    this.bindEventListeners();\n  }\n\n  bindEventListeners() {\n    this.body.emitter.on('_dataChanged', () => {\n      this.setupHierarchicalLayout();\n    });\n    this.body.emitter.on('_dataLoaded', () => {\n      this.layoutNetwork();\n    });\n    this.body.emitter.on('_resetHierarchicalLayout', () => {\n      this.setupHierarchicalLayout();\n    });\n  }\n\n  setOptions(options, allOptions) {\n    if (options !== undefined) {\n      let prevHierarchicalState = this.options.hierarchical.enabled;\n      util.selectiveDeepExtend([\"randomSeed\", \"improvedLayout\"],this.options, options);\n      util.mergeOptions(this.options, options, 'hierarchical');\n      if (options.randomSeed !== undefined)     {this.initialRandomSeed = options.randomSeed;}\n\n      if (this.options.hierarchical.enabled === true) {\n        if (prevHierarchicalState === true) {\n          // refresh the overridden options for nodes and edges.\n          this.body.emitter.emit('refresh', true);\n        }\n\n        // make sure the level separation is the right way up\n        if (this.options.hierarchical.direction === 'RL' || this.options.hierarchical.direction === 'DU') {\n          if (this.options.hierarchical.levelSeparation > 0) {\n            this.options.hierarchical.levelSeparation *= -1;\n          }\n        }\n        else {\n          if (this.options.hierarchical.levelSeparation < 0) {\n            this.options.hierarchical.levelSeparation *= -1;\n          }\n        }\n\n        this.body.emitter.emit('_resetHierarchicalLayout');\n        // because the hierarchical system needs it's own physics and smooth curve settings, we adapt the other options if needed.\n        return this.adaptAllOptionsForHierarchicalLayout(allOptions);\n      }\n      else {\n        if (prevHierarchicalState === true) {\n          // refresh the overridden options for nodes and edges.\n          this.body.emitter.emit('refresh');\n          return util.deepExtend(allOptions,this.optionsBackup);\n        }\n      }\n    }\n    return allOptions;\n  }\n\n  adaptAllOptionsForHierarchicalLayout(allOptions) {\n    if (this.options.hierarchical.enabled === true) {\n      // set the physics\n      if (allOptions.physics === undefined || allOptions.physics === true) {\n        allOptions.physics = {\n          enabled:this.optionsBackup.physics.enabled === undefined ? true :  this.optionsBackup.physics.enabled,\n          solver:'hierarchicalRepulsion'\n        };\n        this.optionsBackup.physics.enabled = this.optionsBackup.physics.enabled === undefined ? true : this.optionsBackup.physics.enabled;\n        this.optionsBackup.physics.solver = this.optionsBackup.physics.solver || 'barnesHut';\n      }\n      else if (typeof allOptions.physics === 'object') {\n        this.optionsBackup.physics.enabled = allOptions.physics.enabled === undefined ? true : allOptions.physics.enabled;\n        this.optionsBackup.physics.solver  = allOptions.physics.solver  || 'barnesHut';\n        allOptions.physics.solver = 'hierarchicalRepulsion';\n      }\n      else if (allOptions.physics !== false) {\n        this.optionsBackup.physics.solver ='barnesHut';\n        allOptions.physics = {solver:'hierarchicalRepulsion'};\n      }\n\n      // get the type of static smooth curve in case it is required\n      let type = 'horizontal';\n      if (this.options.hierarchical.direction === 'RL' || this.options.hierarchical.direction === 'LR') {\n        type = 'vertical';\n      }\n\n      // disable smooth curves if nothing is defined. If smooth curves have been turned on, turn them into static smooth curves.\n      if (allOptions.edges === undefined) {\n        this.optionsBackup.edges = {smooth:{enabled:true, type:'dynamic'}};\n        allOptions.edges = {smooth: false};\n      }\n      else if (allOptions.edges.smooth === undefined) {\n        this.optionsBackup.edges = {smooth:{enabled:true, type:'dynamic'}};\n        allOptions.edges.smooth = false;\n      }\n      else {\n        if (typeof allOptions.edges.smooth === 'boolean') {\n          this.optionsBackup.edges = {smooth:allOptions.edges.smooth};\n          allOptions.edges.smooth = {enabled: allOptions.edges.smooth, type:type}\n        }\n        else {\n          // allow custom types except for dynamic\n          if (allOptions.edges.smooth.type !== undefined && allOptions.edges.smooth.type !== 'dynamic') {\n            type = allOptions.edges.smooth.type;\n          }\n\n          this.optionsBackup.edges = {\n            smooth: allOptions.edges.smooth.enabled === undefined ? true : allOptions.edges.smooth.enabled,\n            type: allOptions.edges.smooth.type === undefined ? 'dynamic' : allOptions.edges.smooth.type,\n            roundness: allOptions.edges.smooth.roundness === undefined ? 0.5 : allOptions.edges.smooth.roundness,\n            forceDirection: allOptions.edges.smooth.forceDirection === undefined ? false : allOptions.edges.smooth.forceDirection\n          };\n          allOptions.edges.smooth = {\n            enabled: allOptions.edges.smooth.enabled === undefined ? true : allOptions.edges.smooth.enabled,\n            type:type,\n            roundness: allOptions.edges.smooth.roundness === undefined ? 0.5 : allOptions.edges.smooth.roundness,\n            forceDirection: allOptions.edges.smooth.forceDirection === undefined ? false : allOptions.edges.smooth.forceDirection\n          }\n        }\n      }\n\n      // force all edges into static smooth curves. Only applies to edges that do not use the global options for smooth.\n      this.body.emitter.emit('_forceDisableDynamicCurves', type);\n    }\n\n    return allOptions;\n  }\n\n  seededRandom() {\n    let x = Math.sin(this.randomSeed++) * 10000;\n    return x - Math.floor(x);\n  }\n\n  positionInitially(nodesArray) {\n    if (this.options.hierarchical.enabled !== true) {\n      this.randomSeed = this.initialRandomSeed;\n      for (let i = 0; i < nodesArray.length; i++) {\n        let node = nodesArray[i];\n        let radius = 10 * 0.1 * nodesArray.length + 10;\n        let angle = 2 * Math.PI * this.seededRandom();\n        if (node.x === undefined) {\n          node.x = radius * Math.cos(angle);\n        }\n        if (node.y === undefined) {\n          node.y = radius * Math.sin(angle);\n        }\n      }\n    }\n  }\n\n\n  /**\n   * Use Kamada Kawai to position nodes. This is quite a heavy algorithm so if there are a lot of nodes we\n   * cluster them first to reduce the amount.\n   */\n  layoutNetwork() {\n    if (this.options.hierarchical.enabled !== true && this.options.improvedLayout === true) {\n      // first check if we should Kamada Kawai to layout. The threshold is if less than half of the visible\n      // nodes have predefined positions we use this.\n      let positionDefined = 0;\n      for (let i = 0; i < this.body.nodeIndices.length; i++) {\n        let node = this.body.nodes[this.body.nodeIndices[i]];\n        if (node.predefinedPosition === true) {\n          positionDefined += 1;\n        }\n      }\n\n      // if less than half of the nodes have a predefined position we continue\n      if (positionDefined < 0.5 * this.body.nodeIndices.length) {\n        let MAX_LEVELS = 10;\n        let level = 0;\n        let clusterThreshold = 100;\n        // if there are a lot of nodes, we cluster before we run the algorithm.\n        if (this.body.nodeIndices.length > clusterThreshold) {\n          let startLength = this.body.nodeIndices.length;\n          while (this.body.nodeIndices.length > clusterThreshold) {\n            //console.time(\"clustering\")\n            level += 1;\n            let before = this.body.nodeIndices.length;\n            // if there are many nodes we do a hubsize cluster\n            if (level % 3 === 0) {\n              this.body.modules.clustering.clusterBridges();\n            }\n            else {\n              this.body.modules.clustering.clusterOutliers();\n            }\n            let after = this.body.nodeIndices.length;\n            if ((before == after && level % 3 !== 0) || level > MAX_LEVELS) {\n              this._declusterAll();\n              this.body.emitter.emit(\"_layoutFailed\");\n              console.info(\"This network could not be positioned by this version of the improved layout algorithm. Please disable improvedLayout for better performance.\");\n              return;\n            }\n            //console.timeEnd(\"clustering\")\n            //console.log(level,after)\n          }\n          // increase the size of the edges\n          this.body.modules.kamadaKawai.setOptions({springLength: Math.max(150, 2 * startLength)})\n        }\n\n        // position the system for these nodes and edges\n        this.body.modules.kamadaKawai.solve(this.body.nodeIndices, this.body.edgeIndices, true);\n\n        // shift to center point\n        this._shiftToCenter();\n\n        // perturb the nodes a little bit to force the physics to kick in\n        let offset = 70;\n        for (let i = 0; i < this.body.nodeIndices.length; i++) {\n          // Only perturb the nodes that aren't fixed\n          if (this.body.nodes[this.body.nodeIndices[i]].predefinedPosition === false) {\n            this.body.nodes[this.body.nodeIndices[i]].x += (0.5 - this.seededRandom())*offset;\n            this.body.nodes[this.body.nodeIndices[i]].y += (0.5 - this.seededRandom())*offset;\n          }\n        }\n\n        // uncluster all clusters\n        this._declusterAll();\n\n        // reposition all bezier nodes.\n        this.body.emitter.emit(\"_repositionBezierNodes\");\n      }\n    }\n  }\n\n  /**\n   * Move all the nodes towards to the center so gravitational pull wil not move the nodes away from view\n   * @private\n   */\n  _shiftToCenter() {\n    let range = NetworkUtil.getRangeCore(this.body.nodes, this.body.nodeIndices);\n    let center = NetworkUtil.findCenter(range);\n    for (let i = 0; i < this.body.nodeIndices.length; i++) {\n      this.body.nodes[this.body.nodeIndices[i]].x -= center.x;\n      this.body.nodes[this.body.nodeIndices[i]].y -= center.y;\n    }\n  }\n\n  _declusterAll() {\n    let clustersPresent = true;\n    while (clustersPresent === true) {\n      clustersPresent = false;\n      for (let i = 0; i < this.body.nodeIndices.length; i++) {\n        if (this.body.nodes[this.body.nodeIndices[i]].isCluster === true) {\n          clustersPresent = true;\n          this.body.modules.clustering.openCluster(this.body.nodeIndices[i], {}, false);\n        }\n      }\n      if (clustersPresent === true) {\n        this.body.emitter.emit('_dataChanged');\n      }\n    }\n  }\n\n  getSeed() {\n    return this.initialRandomSeed;\n  }\n\n  /**\n   * This is the main function to layout the nodes in a hierarchical way.\n   * It checks if the node details are supplied correctly\n   *\n   * @private\n   */\n  setupHierarchicalLayout() {\n    if (this.options.hierarchical.enabled === true && this.body.nodeIndices.length > 0) {\n      // get the size of the largest hubs and check if the user has defined a level for a node.\n      let node, nodeId;\n      let definedLevel = false;\n      let definedPositions = true;\n      let undefinedLevel = false;\n      this.hierarchicalLevels = {};\n      this.lastNodeOnLevel = {};\n      this.hierarchicalChildrenReference = {};\n      this.hierarchicalParentReference = {};\n      this.hierarchicalTrees = {};\n      this.treeIndex = -1;\n\n      this.distributionOrdering = {};\n      this.distributionIndex = {};\n      this.distributionOrderingPresence = {};\n\n\n      for (nodeId in this.body.nodes) {\n        if (this.body.nodes.hasOwnProperty(nodeId)) {\n          node = this.body.nodes[nodeId];\n          if (node.options.x === undefined && node.options.y === undefined) {\n            definedPositions = false;\n          }\n          if (node.options.level !== undefined) {\n            definedLevel = true;\n            this.hierarchicalLevels[nodeId] = node.options.level;\n          }\n          else {\n            undefinedLevel = true;\n          }\n        }\n      }\n\n      // if the user defined some levels but not all, alert and run without hierarchical layout\n      if (undefinedLevel === true && definedLevel === true) {\n        throw new Error('To use the hierarchical layout, nodes require either no predefined levels or levels have to be defined for all nodes.');\n        return;\n      }\n      else {\n        // define levels if undefined by the users. Based on hubsize.\n        if (undefinedLevel === true) {\n          if (this.options.hierarchical.sortMethod === 'hubsize') {\n            this._determineLevelsByHubsize();\n          }\n          else if (this.options.hierarchical.sortMethod === 'directed') {\n            this._determineLevelsDirected();\n          }\n          else if (this.options.hierarchical.sortMethod === 'custom') {\n            this._determineLevelsCustomCallback();\n          }\n        }\n\n\n        // fallback for cases where there are nodes but no edges\n        for (let nodeId in this.body.nodes) {\n          if (this.body.nodes.hasOwnProperty(nodeId)) {\n            if (this.hierarchicalLevels[nodeId] === undefined) {\n              this.hierarchicalLevels[nodeId] = 0;\n            }\n          }\n        }\n        // check the distribution of the nodes per level.\n        let distribution = this._getDistribution();\n\n        // get the parent children relations.\n        this._generateMap();\n\n        // place the nodes on the canvas.\n        this._placeNodesByHierarchy(distribution);\n\n        // condense the whitespace.\n        this._condenseHierarchy();\n\n        // shift to center so gravity does not have to do much\n        this._shiftToCenter();\n      }\n    }\n  }\n\n  /**\n   * @private\n   */\n  _condenseHierarchy() {\n    // Global var in this scope to define when the movement has stopped.\n    let stillShifting = false;\n    let branches = {};\n    // first we have some methods to help shifting trees around.\n    // the main method to shift the trees\n    let shiftTrees = () => {\n      let treeSizes = getTreeSizes();\n      for (let i = 0; i < treeSizes.length - 1; i++) {\n        let diff = treeSizes[i].max - treeSizes[i+1].min;\n        shiftTree(i + 1, diff + this.options.hierarchical.treeSpacing);\n      }\n    };\n\n    // shift a single tree by an offset\n    let shiftTree = (index, offset) => {\n      for (let nodeId in this.hierarchicalTrees) {\n        if (this.hierarchicalTrees.hasOwnProperty(nodeId)) {\n          if (this.hierarchicalTrees[nodeId] === index) {\n            let node = this.body.nodes[nodeId];\n            let pos = this._getPositionForHierarchy(node);\n            this._setPositionForHierarchy(node, pos + offset, undefined, true);\n          }\n        }\n      }\n    };\n\n    // get the width of a tree\n    let getTreeSize = (index) => {\n      let min = 1e9;\n      let max = -1e9;\n      for (let nodeId in this.hierarchicalTrees) {\n        if (this.hierarchicalTrees.hasOwnProperty(nodeId)) {\n          if (this.hierarchicalTrees[nodeId] === index) {\n            let pos = this._getPositionForHierarchy(this.body.nodes[nodeId]);\n            min = Math.min(pos, min);\n            max = Math.max(pos, max);\n          }\n        }\n      }\n      return {min:min, max:max};\n    };\n\n    // get the width of all trees\n    let getTreeSizes = () => {\n      let treeWidths = [];\n      for (let i = 0; i <= this.treeIndex; i++) {\n        treeWidths.push(getTreeSize(i));\n      }\n      return treeWidths;\n    };\n\n\n    // get a map of all nodes in this branch\n    let getBranchNodes = (source, map) => {\n      map[source.id] = true;\n      if (this.hierarchicalChildrenReference[source.id]) {\n        let children = this.hierarchicalChildrenReference[source.id];\n        if (children.length > 0) {\n          for (let i = 0; i < children.length; i++) {\n            getBranchNodes(this.body.nodes[children[i]], map);\n          }\n        }\n      }\n    };\n\n    // get a min max width as well as the maximum movement space it has on either sides\n    // we use min max terminology because width and height can interchange depending on the direction of the layout\n    let getBranchBoundary = (branchMap, maxLevel = 1e9) => {\n      let minSpace = 1e9;\n      let maxSpace = 1e9;\n      let min = 1e9;\n      let max = -1e9;\n      for (let branchNode in branchMap) {\n        if (branchMap.hasOwnProperty(branchNode)) {\n          let node = this.body.nodes[branchNode];\n          let level = this.hierarchicalLevels[node.id];\n          let position = this._getPositionForHierarchy(node);\n\n          // get the space around the node.\n          let [minSpaceNode, maxSpaceNode] = this._getSpaceAroundNode(node,branchMap);\n          minSpace = Math.min(minSpaceNode, minSpace);\n          maxSpace = Math.min(maxSpaceNode, maxSpace);\n\n          // the width is only relevant for the levels two nodes have in common. This is why we filter on this.\n          if (level <= maxLevel) {\n            min = Math.min(position, min);\n            max = Math.max(position, max);\n          }\n        }\n      }\n\n      return [min, max, minSpace, maxSpace];\n    };\n\n    // get the maximum level of a branch.\n    let getMaxLevel = (nodeId) => {\n      let level = this.hierarchicalLevels[nodeId];\n      if (this.hierarchicalChildrenReference[nodeId]) {\n        let children = this.hierarchicalChildrenReference[nodeId];\n        if (children.length > 0) {\n          for (let i = 0; i < children.length; i++) {\n            level = Math.max(level,getMaxLevel(children[i]));\n          }\n        }\n      }\n      return level;\n    };\n\n    // check what the maximum level is these nodes have in common.\n    let getCollisionLevel = (node1, node2) => {\n      let maxLevel1 = getMaxLevel(node1.id);\n      let maxLevel2 = getMaxLevel(node2.id);\n      return Math.min(maxLevel1, maxLevel2);\n    };\n\n    // check if two nodes have the same parent(s)\n    let hasSameParent = (node1, node2) => {\n      let parents1 = this.hierarchicalParentReference[node1.id];\n      let parents2 = this.hierarchicalParentReference[node2.id];\n      if (parents1 === undefined || parents2 === undefined) {\n        return false;\n      }\n\n      for (let i = 0; i < parents1.length; i++) {\n        for (let j = 0; j < parents2.length; j++) {\n          if (parents1[i] == parents2[j]) {\n            return true;\n          }\n        }\n      }\n      return false;\n    };\n\n    // condense elements. These can be nodes or branches depending on the callback.\n    let shiftElementsCloser = (callback, levels, centerParents) => {\n      for (let i = 0; i < levels.length; i++) {\n        let level = levels[i];\n        let levelNodes = this.distributionOrdering[level];\n        if (levelNodes.length > 1) {\n          for (let j = 0; j < levelNodes.length - 1; j++) {\n            if (hasSameParent(levelNodes[j],levelNodes[j+1]) === true)  {\n              if (this.hierarchicalTrees[levelNodes[j].id] === this.hierarchicalTrees[levelNodes[j+1].id])  {\n                callback(levelNodes[j],levelNodes[j+1], centerParents);\n              }\n            }}\n        }\n      }\n    };\n\n    // callback for shifting branches\n    let branchShiftCallback = (node1, node2, centerParent = false) => {\n      //window.CALLBACKS.push(() => {\n        let pos1 = this._getPositionForHierarchy(node1);\n        let pos2 = this._getPositionForHierarchy(node2);\n        let diffAbs = Math.abs(pos2 - pos1);\n        //console.log(\"NOW CHEcKING:\", node1.id, node2.id, diffAbs);\n        if (diffAbs > this.options.hierarchical.nodeSpacing) {\n          let branchNodes1 = {}; branchNodes1[node1.id] = true;\n          let branchNodes2 = {}; branchNodes2[node2.id] = true;\n\n          getBranchNodes(node1, branchNodes1);\n          getBranchNodes(node2, branchNodes2);\n\n          // check the largest distance between the branches\n          let maxLevel = getCollisionLevel(node1, node2);\n          let [min1,max1, minSpace1, maxSpace1] = getBranchBoundary(branchNodes1, maxLevel);\n          let [min2,max2, minSpace2, maxSpace2] = getBranchBoundary(branchNodes2, maxLevel);\n\n          //console.log(node1.id, getBranchBoundary(branchNodes1, maxLevel), node2.id, getBranchBoundary(branchNodes2, maxLevel), maxLevel);\n          let diffBranch = Math.abs(max1 - min2);\n          if (diffBranch > this.options.hierarchical.nodeSpacing) {\n            let offset = max1 - min2 + this.options.hierarchical.nodeSpacing;\n            if (offset < -minSpace2 + this.options.hierarchical.nodeSpacing) {\n              offset = -minSpace2 + this.options.hierarchical.nodeSpacing;\n              //console.log(\"RESETTING OFFSET\", max1 - min2 + this.options.hierarchical.nodeSpacing, -minSpace2, offset);\n            }\n            if (offset < 0) {\n              //console.log(\"SHIFTING\", node2.id, offset);\n              this._shiftBlock(node2.id, offset);\n              stillShifting = true;\n\n              if (centerParent === true)\n                this._centerParent(node2);\n            }\n          }\n\n        }\n        //this.body.emitter.emit(\"_redraw\");})\n    };\n\n    let minimizeEdgeLength = (iterations, node) => {\n      //window.CALLBACKS.push(() => {\n      //  console.log(\"ts\",node.id);\n        let nodeId = node.id;\n        let allEdges = node.edges;\n        let nodeLevel = this.hierarchicalLevels[node.id];\n\n        // gather constants\n        let C2 = this.options.hierarchical.levelSeparation * this.options.hierarchical.levelSeparation;\n        let referenceNodes = {};\n        let aboveEdges = [];\n        for (let i = 0; i < allEdges.length; i++) {\n          let edge = allEdges[i];\n          if (edge.toId != edge.fromId) {\n            let otherNode = edge.toId == nodeId ? edge.from : edge.to;\n            referenceNodes[allEdges[i].id] = otherNode;\n            if (this.hierarchicalLevels[otherNode.id] < nodeLevel) {\n              aboveEdges.push(edge);\n            }\n          }\n        }\n\n        // differentiated sum of lengths based on only moving one node over one axis\n        let getFx = (point, edges) => {\n          let sum = 0;\n          for (let i = 0; i < edges.length; i++) {\n            if (referenceNodes[edges[i].id] !== undefined) {\n              let a = this._getPositionForHierarchy(referenceNodes[edges[i].id]) - point;\n              sum += a / Math.sqrt(a * a + C2);\n            }\n          }\n          return sum;\n        };\n\n        // doubly differentiated sum of lengths based on only moving one node over one axis\n        let getDFx = (point, edges) => {\n          let sum = 0;\n          for (let i = 0; i < edges.length; i++) {\n            if (referenceNodes[edges[i].id] !== undefined) {\n              let a = this._getPositionForHierarchy(referenceNodes[edges[i].id]) - point;\n              sum -= (C2 * Math.pow(a * a + C2, -1.5));\n            }\n          }\n          return sum;\n        };\n\n        let getGuess = (iterations, edges) => {\n          let guess = this._getPositionForHierarchy(node);\n          // Newton's method for optimization\n          let guessMap = {};\n          for (let i = 0; i < iterations; i++) {\n            let fx = getFx(guess, edges);\n            let dfx = getDFx(guess, edges);\n\n            // we limit the movement to avoid instability.\n            let limit = 40;\n            let ratio = Math.max(-limit, Math.min(limit, Math.round(fx/dfx)));\n            guess = guess - ratio;\n            // reduce duplicates\n            if (guessMap[guess] !== undefined) {\n              break;\n            }\n            guessMap[guess] = i;\n          }\n          return guess;\n        };\n\n        let moveBranch = (guess) => {\n          // position node if there is space\n          let nodePosition = this._getPositionForHierarchy(node);\n\n          // check movable area of the branch\n          if (branches[node.id] === undefined) {\n            let branchNodes = {};\n            branchNodes[node.id] = true;\n            getBranchNodes(node, branchNodes);\n            branches[node.id] = branchNodes;\n          }\n          let [minBranch, maxBranch, minSpaceBranch, maxSpaceBranch] = getBranchBoundary(branches[node.id]);\n\n          let diff = guess - nodePosition;\n\n          // check if we are allowed to move the node:\n          let branchOffset = 0;\n          if (diff > 0) {\n            branchOffset = Math.min(diff, maxSpaceBranch - this.options.hierarchical.nodeSpacing);\n          }\n          else if (diff < 0) {\n            branchOffset = -Math.min(-diff, minSpaceBranch - this.options.hierarchical.nodeSpacing);\n          }\n\n          if (branchOffset != 0) {\n            //console.log(\"moving branch:\",branchOffset, maxSpaceBranch, minSpaceBranch)\n            this._shiftBlock(node.id, branchOffset);\n            //this.body.emitter.emit(\"_redraw\");\n            stillShifting = true;\n          }\n        };\n\n        let moveNode = (guess) => {\n          let nodePosition = this._getPositionForHierarchy(node);\n\n          // position node if there is space\n          let [minSpace, maxSpace] = this._getSpaceAroundNode(node);\n          let diff = guess - nodePosition;\n          // check if we are allowed to move the node:\n          let newPosition = nodePosition;\n          if (diff > 0) {\n            newPosition = Math.min(nodePosition + (maxSpace - this.options.hierarchical.nodeSpacing), guess);\n          }\n          else if (diff < 0) {\n            newPosition = Math.max(nodePosition - (minSpace - this.options.hierarchical.nodeSpacing), guess);\n          }\n\n          if (newPosition !== nodePosition) {\n            //console.log(\"moving Node:\",diff, minSpace, maxSpace);\n            this._setPositionForHierarchy(node, newPosition, undefined, true);\n            //this.body.emitter.emit(\"_redraw\");\n            stillShifting = true;\n          }\n        };\n\n        let guess = getGuess(iterations, aboveEdges);\n        moveBranch(guess);\n        guess = getGuess(iterations, allEdges);\n        moveNode(guess);\n      //})\n    };\n\n    // method to remove whitespace between branches. Because we do bottom up, we can center the parents.\n    let minimizeEdgeLengthBottomUp = (iterations) => {\n      let levels = Object.keys(this.distributionOrdering);\n      levels = levels.reverse();\n      for (let i = 0; i < iterations; i++) {\n        stillShifting = false;\n        for (let j = 0; j < levels.length; j++) {\n          let level = levels[j];\n          let levelNodes = this.distributionOrdering[level];\n          for (let k = 0; k < levelNodes.length; k++) {\n            minimizeEdgeLength(1000, levelNodes[k]);\n          }\n        }\n        if (stillShifting !== true) {\n          //console.log(\"FINISHED minimizeEdgeLengthBottomUp IN \" + i);\n          break;\n        }\n      }\n    };\n\n    // method to remove whitespace between branches. Because we do bottom up, we can center the parents.\n    let shiftBranchesCloserBottomUp = (iterations) => {\n      let levels = Object.keys(this.distributionOrdering);\n      levels = levels.reverse();\n      for (let i = 0; i < iterations; i++) {\n        stillShifting = false;\n        shiftElementsCloser(branchShiftCallback, levels, true);\n        if (stillShifting !== true) {\n          //console.log(\"FINISHED shiftBranchesCloserBottomUp IN \" + (i+1));\n          break;\n        }\n      }\n    };\n\n    // center all parents\n    let centerAllParents = () => {\n      for (let nodeId in this.body.nodes) {\n        if (this.body.nodes.hasOwnProperty(nodeId))\n          this._centerParent(this.body.nodes[nodeId]);\n      }\n    };\n\n    // center all parents\n    let centerAllParentsBottomUp = () => {\n      let levels = Object.keys(this.distributionOrdering);\n      levels = levels.reverse();\n      for (let i = 0; i < levels.length; i++) {\n        let level = levels[i];\n        let levelNodes = this.distributionOrdering[level];\n        for (let j = 0; j < levelNodes.length; j++) {\n          this._centerParent(levelNodes[j]);\n        }\n      }\n    };\n\n    // the actual work is done here.\n    if (this.options.hierarchical.blockShifting === true) {\n      shiftBranchesCloserBottomUp(5);\n      centerAllParents();\n    }\n\n    // minimize edge length\n    if (this.options.hierarchical.edgeMinimization === true) {\n      minimizeEdgeLengthBottomUp(20);\n    }\n\n    if (this.options.hierarchical.parentCentralization === true) {\n      centerAllParentsBottomUp()\n    }\n\n    shiftTrees();\n  }\n\n  /**\n   * This gives the space around the node. IF a map is supplied, it will only check against nodes NOT in the map.\n   * This is used to only get the distances to nodes outside of a branch.\n   * @param node\n   * @param map\n   * @returns {*[]}\n   * @private\n   */\n  _getSpaceAroundNode(node, map) {\n    let useMap = true;\n    if (map === undefined) {\n      useMap = false;\n    }\n    let level = this.hierarchicalLevels[node.id];\n    if (level !== undefined) {\n      let index = this.distributionIndex[node.id];\n      let position = this._getPositionForHierarchy(node);\n      let minSpace = 1e9;\n      let maxSpace = 1e9;\n      if (index !== 0) {\n        let prevNode = this.distributionOrdering[level][index - 1];\n        if ((useMap === true && map[prevNode.id] === undefined) || useMap === false) {\n          let prevPos = this._getPositionForHierarchy(prevNode);\n          minSpace = position - prevPos;\n        }\n      }\n\n      if (index != this.distributionOrdering[level].length - 1) {\n        let nextNode = this.distributionOrdering[level][index + 1];\n        if ((useMap === true && map[nextNode.id] === undefined) || useMap === false) {\n          let nextPos = this._getPositionForHierarchy(nextNode);\n          maxSpace = Math.min(maxSpace, nextPos - position);\n        }\n      }\n\n      return [minSpace, maxSpace];\n    }\n    else {\n      return [0, 0];\n    }\n  }\n\n  /**\n   * We use this method to center a parent node and check if it does not cross other nodes when it does.\n   * @param node\n   * @private\n   */\n  _centerParent(node) {\n    if (this.hierarchicalParentReference[node.id]) {\n      let parents = this.hierarchicalParentReference[node.id];\n      for (var i = 0; i < parents.length; i++) {\n        let parentId = parents[i];\n        let parentNode = this.body.nodes[parentId];\n        if (this.hierarchicalChildrenReference[parentId]) {\n          // get the range of the children\n          let minPos = 1e9;\n          let maxPos = -1e9;\n          let children = this.hierarchicalChildrenReference[parentId];\n          if (children.length > 0) {\n            for (let i = 0; i < children.length; i++) {\n              let childNode = this.body.nodes[children[i]];\n              minPos = Math.min(minPos, this._getPositionForHierarchy(childNode));\n              maxPos = Math.max(maxPos, this._getPositionForHierarchy(childNode));\n            }\n          }\n\n          let position = this._getPositionForHierarchy(parentNode);\n          let [minSpace, maxSpace] = this._getSpaceAroundNode(parentNode);\n          let newPosition = 0.5 * (minPos + maxPos);\n          let diff = position - newPosition;\n          if ((diff < 0 && Math.abs(diff) < maxSpace - this.options.hierarchical.nodeSpacing) || (diff > 0 && Math.abs(diff) < minSpace - this.options.hierarchical.nodeSpacing))  {\n            this._setPositionForHierarchy(parentNode, newPosition, undefined, true);\n          }\n        }\n      }\n    }\n  }\n\n\n\n  /**\n   * This function places the nodes on the canvas based on the hierarchial distribution.\n   *\n   * @param {Object} distribution | obtained by the function this._getDistribution()\n   * @private\n   */\n  _placeNodesByHierarchy(distribution) {\n    this.positionedNodes = {};\n    // start placing all the level 0 nodes first. Then recursively position their branches.\n    for (let level in distribution) {\n      if (distribution.hasOwnProperty(level)) {\n        // sort nodes in level by position:\n        let nodeArray = Object.keys(distribution[level]);\n        nodeArray = this._indexArrayToNodes(nodeArray);\n        this._sortNodeArray(nodeArray);\n        let handledNodeCount = 0;\n\n        for (let i = 0; i < nodeArray.length; i++) {\n          let node = nodeArray[i];\n          if (this.positionedNodes[node.id] === undefined) {\n            let pos = this.options.hierarchical.nodeSpacing * handledNodeCount;\n            // we get the X or Y values we need and store them in pos and previousPos. The get and set make sure we get X or Y\n            if (handledNodeCount > 0) {pos = this._getPositionForHierarchy(nodeArray[i-1]) + this.options.hierarchical.nodeSpacing;}\n            this._setPositionForHierarchy(node, pos, level);\n            this._validataPositionAndContinue(node, level, pos);\n\n            handledNodeCount++;\n          }\n        }\n      }\n    }\n  }\n\n\n  /**\n   * This is a recursively called function to enumerate the branches from the largest hubs and place the nodes\n   * on a X position that ensures there will be no overlap.\n   *\n   * @param parentId\n   * @param parentLevel\n   * @private\n   */\n  _placeBranchNodes(parentId, parentLevel) {\n    // if this is not a parent, cancel the placing. This can happen with multiple parents to one child.\n    if (this.hierarchicalChildrenReference[parentId] === undefined) {\n      return;\n    }\n\n    // get a list of childNodes\n    let childNodes = [];\n    for (let i = 0; i < this.hierarchicalChildrenReference[parentId].length; i++) {\n      childNodes.push(this.body.nodes[this.hierarchicalChildrenReference[parentId][i]]);\n    }\n\n    // use the positions to order the nodes.\n    this._sortNodeArray(childNodes);\n\n    // position the childNodes\n    for (let i = 0; i < childNodes.length; i++) {\n      let childNode = childNodes[i];\n      let childNodeLevel = this.hierarchicalLevels[childNode.id];\n      // check if the child node is below the parent node and if it has already been positioned.\n      if (childNodeLevel > parentLevel && this.positionedNodes[childNode.id] === undefined) {\n        // get the amount of space required for this node. If parent the width is based on the amount of children.\n        let pos;\n\n        // we get the X or Y values we need and store them in pos and previousPos. The get and set make sure we get X or Y\n        if (i === 0) {pos = this._getPositionForHierarchy(this.body.nodes[parentId]);}\n        else         {pos = this._getPositionForHierarchy(childNodes[i-1]) + this.options.hierarchical.nodeSpacing;}\n        this._setPositionForHierarchy(childNode, pos, childNodeLevel);\n        this._validataPositionAndContinue(childNode, childNodeLevel, pos);\n      }\n      else {\n        return;\n      }\n    }\n\n    // center the parent nodes.\n    let minPos = 1e9;\n    let maxPos = -1e9;\n    for (let i = 0; i < childNodes.length; i++) {\n      let childNodeId = childNodes[i].id;\n      minPos = Math.min(minPos, this._getPositionForHierarchy(this.body.nodes[childNodeId]));\n      maxPos = Math.max(maxPos, this._getPositionForHierarchy(this.body.nodes[childNodeId]));\n    }\n    this._setPositionForHierarchy(this.body.nodes[parentId], 0.5 * (minPos + maxPos), parentLevel);\n  }\n\n\n  /**\n   * This method checks for overlap and if required shifts the branch. It also keeps records of positioned nodes.\n   * Finally it will call _placeBranchNodes to place the branch nodes.\n   * @param node\n   * @param level\n   * @param pos\n   * @private\n   */\n  _validataPositionAndContinue(node, level, pos) {\n    // if overlap has been detected, we shift the branch\n    if (this.lastNodeOnLevel[level] !== undefined) {\n      let previousPos = this._getPositionForHierarchy(this.body.nodes[this.lastNodeOnLevel[level]]);\n      if (pos - previousPos < this.options.hierarchical.nodeSpacing) {\n        let diff = (previousPos + this.options.hierarchical.nodeSpacing) - pos;\n        let sharedParent = this._findCommonParent(this.lastNodeOnLevel[level], node.id);\n        this._shiftBlock(sharedParent.withChild, diff);\n      }\n    }\n\n    // store change in position.\n    this.lastNodeOnLevel[level] = node.id;\n\n    this.positionedNodes[node.id] = true;\n\n    this._placeBranchNodes(node.id, level);\n  }\n\n  /**\n   * Receives an array with node indices and returns an array with the actual node references. Used for sorting based on\n   * node properties.\n   * @param idArray\n   */\n  _indexArrayToNodes(idArray) {\n    let array = [];\n    for (let i = 0; i < idArray.length; i++) {\n      array.push(this.body.nodes[idArray[i]])\n    }\n    return array;\n  }\n\n  /**\n   * This function get the distribution of levels based on hubsize\n   *\n   * @returns {Object}\n   * @private\n   */\n  _getDistribution() {\n    let distribution = {};\n    let nodeId, node;\n\n    // we fix Y because the hierarchy is vertical, we fix X so we do not give a node an x position for a second time.\n    // the fix of X is removed after the x value has been set.\n    for (nodeId in this.body.nodes) {\n      if (this.body.nodes.hasOwnProperty(nodeId)) {\n        node = this.body.nodes[nodeId];\n        let level = this.hierarchicalLevels[nodeId] === undefined ? 0 : this.hierarchicalLevels[nodeId];\n        if (this.options.hierarchical.direction === 'UD' || this.options.hierarchical.direction === 'DU') {\n          node.y = this.options.hierarchical.levelSeparation * level;\n          node.options.fixed.y = true;\n        }\n        else {\n          node.x = this.options.hierarchical.levelSeparation * level;\n          node.options.fixed.x = true;\n        }\n        if (distribution[level] === undefined) {\n          distribution[level] = {};\n        }\n        distribution[level][nodeId] = node;\n      }\n    }\n    return distribution;\n  }\n\n\n  /**\n   * Get the hubsize from all remaining unlevelled nodes.\n   *\n   * @returns {number}\n   * @private\n   */\n  _getHubSize() {\n    let hubSize = 0;\n    for (let nodeId in this.body.nodes) {\n      if (this.body.nodes.hasOwnProperty(nodeId)) {\n        let node = this.body.nodes[nodeId];\n        if (this.hierarchicalLevels[nodeId] === undefined) {\n          hubSize = node.edges.length < hubSize ? hubSize : node.edges.length;\n        }\n      }\n    }\n    return hubSize;\n  }\n\n\n  /**\n   * this function allocates nodes in levels based on the recursive branching from the largest hubs.\n   *\n   * @param hubsize\n   * @private\n   */\n  _determineLevelsByHubsize() {\n    let hubSize = 1;\n\n    let levelDownstream = (nodeA, nodeB) => {\n      if (this.hierarchicalLevels[nodeB.id] === undefined) {\n        // set initial level\n        if (this.hierarchicalLevels[nodeA.id] === undefined) {\n          this.hierarchicalLevels[nodeA.id] = 0;\n        }\n        // set level\n        this.hierarchicalLevels[nodeB.id] = this.hierarchicalLevels[nodeA.id] + 1;\n      }\n    };\n\n    while (hubSize > 0) {\n      // determine hubs\n      hubSize = this._getHubSize();\n      if (hubSize === 0)\n        break;\n\n      for (let nodeId in this.body.nodes) {\n        if (this.body.nodes.hasOwnProperty(nodeId)) {\n          let node = this.body.nodes[nodeId];\n          if (node.edges.length === hubSize) {\n            this._crawlNetwork(levelDownstream,nodeId);\n          }\n        }\n      }\n    }\n  }\n\n  /**\n   * TODO: release feature\n   * @private\n   */\n  _determineLevelsCustomCallback() {\n    let minLevel = 100000;\n\n    // TODO: this should come from options.\n    let customCallback = function(nodeA, nodeB, edge) {\n\n    };\n\n    let levelByDirection = (nodeA, nodeB, edge) => {\n      let levelA = this.hierarchicalLevels[nodeA.id];\n      // set initial level\n      if (levelA === undefined) {this.hierarchicalLevels[nodeA.id] = minLevel;}\n\n      let diff = customCallback(\n        NetworkUtil.cloneOptions(nodeA,'node'),\n        NetworkUtil.cloneOptions(nodeB,'node'),\n        NetworkUtil.cloneOptions(edge,'edge')\n      );\n\n      this.hierarchicalLevels[nodeB.id] = this.hierarchicalLevels[nodeA.id] + diff;\n    };\n\n    this._crawlNetwork(levelByDirection);\n    this._setMinLevelToZero();\n  }\n\n  /**\n   * this function allocates nodes in levels based on the direction of the edges\n   *\n   * @param hubsize\n   * @private\n   */\n  _determineLevelsDirected() {\n    let minLevel = 10000;\n    let levelByDirection = (nodeA, nodeB, edge) => {\n      let levelA = this.hierarchicalLevels[nodeA.id];\n      // set initial level\n      if (levelA === undefined) {this.hierarchicalLevels[nodeA.id] = minLevel;}\n      if (edge.toId == nodeB.id) {\n        this.hierarchicalLevels[nodeB.id] = this.hierarchicalLevels[nodeA.id] + 1;\n      }\n      else {\n        this.hierarchicalLevels[nodeB.id] = this.hierarchicalLevels[nodeA.id] - 1;\n      }\n    };\n    this._crawlNetwork(levelByDirection);\n    this._setMinLevelToZero();\n  }\n\n\n  /**\n   * Small util method to set the minimum levels of the nodes to zero.\n   * @private\n   */\n  _setMinLevelToZero() {\n    let minLevel = 1e9;\n    // get the minimum level\n    for (let nodeId in this.body.nodes) {\n      if (this.body.nodes.hasOwnProperty(nodeId)) {\n        if (this.hierarchicalLevels[nodeId] !== undefined) {\n          minLevel = Math.min(this.hierarchicalLevels[nodeId], minLevel);\n        }\n      }\n    }\n\n    // subtract the minimum from the set so we have a range starting from 0\n    for (let nodeId in this.body.nodes) {\n      if (this.body.nodes.hasOwnProperty(nodeId)) {\n        if (this.hierarchicalLevels[nodeId] !== undefined) {\n          this.hierarchicalLevels[nodeId] -= minLevel;\n        }\n      }\n    }\n  }\n\n\n  /**\n   * Update the bookkeeping of parent and child.\n   * @private\n   */\n  _generateMap() {\n    let fillInRelations = (parentNode, childNode) => {\n      if (this.hierarchicalLevels[childNode.id] > this.hierarchicalLevels[parentNode.id]) {\n        let parentNodeId = parentNode.id;\n        let childNodeId = childNode.id;\n        if (this.hierarchicalChildrenReference[parentNodeId] === undefined) {\n          this.hierarchicalChildrenReference[parentNodeId] = [];\n        }\n        this.hierarchicalChildrenReference[parentNodeId].push(childNodeId);\n        if (this.hierarchicalParentReference[childNodeId] === undefined) {\n          this.hierarchicalParentReference[childNodeId] = [];\n        }\n        this.hierarchicalParentReference[childNodeId].push(parentNodeId);\n      }\n    };\n\n    this._crawlNetwork(fillInRelations);\n  }\n\n\n  /**\n   * Crawl over the entire network and use a callback on each node couple that is connected to each other.\n   * @param callback          | will receive nodeA nodeB and the connecting edge. A and B are unique.\n   * @param startingNodeId\n   * @private\n   */\n  _crawlNetwork(callback = function() {}, startingNodeId) {\n    let progress = {};\n    let treeIndex = 0;\n\n    let crawler = (node, tree) => {\n      if (progress[node.id] === undefined) {\n\n        if (this.hierarchicalTrees[node.id] === undefined) {\n          this.hierarchicalTrees[node.id] = tree;\n          this.treeIndex = Math.max(tree, this.treeIndex);\n        }\n\n        progress[node.id] = true;\n        let childNode;\n        for (let i = 0; i < node.edges.length; i++) {\n          if (node.edges[i].connected === true) {\n            if (node.edges[i].toId === node.id) {\n              childNode = node.edges[i].from;\n            }\n            else {\n              childNode = node.edges[i].to;\n            }\n\n            if (node.id !== childNode.id) {\n              callback(node, childNode, node.edges[i]);\n              crawler(childNode, tree);\n            }\n          }\n        }\n      }\n    };\n\n\n    // we can crawl from a specific node or over all nodes.\n    if (startingNodeId === undefined) {\n      for (let i = 0; i < this.body.nodeIndices.length; i++) {\n        let node = this.body.nodes[this.body.nodeIndices[i]];\n        if (progress[node.id] === undefined) {\n          crawler(node, treeIndex);\n          treeIndex += 1;\n        }\n      }\n    }\n    else {\n      let node = this.body.nodes[startingNodeId];\n      if (node === undefined) {\n        console.error(\"Node not found:\", startingNodeId);\n        return;\n      }\n      crawler(node);\n    }\n  }\n\n\n  /**\n   * Shift a branch a certain distance\n   * @param parentId\n   * @param diff\n   * @private\n   */\n  _shiftBlock(parentId, diff) {\n    if (this.options.hierarchical.direction === 'UD' || this.options.hierarchical.direction === 'DU') {\n      this.body.nodes[parentId].x += diff;\n    }\n    else {\n      this.body.nodes[parentId].y += diff;\n    }\n    if (this.hierarchicalChildrenReference[parentId] !== undefined) {\n      for (let i = 0; i < this.hierarchicalChildrenReference[parentId].length; i++) {\n        this._shiftBlock(this.hierarchicalChildrenReference[parentId][i], diff);\n      }\n    }\n  }\n\n\n  /**\n   * Find a common parent between branches.\n   * @param childA\n   * @param childB\n   * @returns {{foundParent, withChild}}\n   * @private\n   */\n  _findCommonParent(childA,childB) {\n    let parents = {};\n    let iterateParents = (parents,child) => {\n      if (this.hierarchicalParentReference[child] !== undefined) {\n        for (let i = 0; i < this.hierarchicalParentReference[child].length; i++) {\n          let parent = this.hierarchicalParentReference[child][i];\n          parents[parent] = true;\n          iterateParents(parents, parent)\n        }\n      }\n    };\n    let findParent = (parents, child) => {\n      if (this.hierarchicalParentReference[child] !== undefined) {\n        for (let i = 0; i < this.hierarchicalParentReference[child].length; i++) {\n          let parent = this.hierarchicalParentReference[child][i];\n          if (parents[parent] !== undefined) {\n            return {foundParent:parent, withChild:child};\n          }\n          let branch = findParent(parents, parent);\n          if (branch.foundParent !== null) {\n            return branch;\n          }\n        }\n      }\n      return {foundParent:null, withChild:child};\n    };\n\n    iterateParents(parents, childA);\n    return findParent(parents, childB);\n  }\n\n  /**\n   * Abstract the getting of the position so we won't have to repeat the check for direction all the time\n   * @param node\n   * @param position\n   * @param level\n   * @private\n   */\n  _setPositionForHierarchy(node, position, level, doNotUpdate = false) {\n    //console.log('_setPositionForHierarchy',node.id, position)\n    if (doNotUpdate !== true) {\n      if (this.distributionOrdering[level] === undefined) {\n        this.distributionOrdering[level] = [];\n        this.distributionOrderingPresence[level] = {};\n      }\n\n      if (this.distributionOrderingPresence[level][node.id] === undefined) {\n        this.distributionOrdering[level].push(node);\n        this.distributionIndex[node.id] = this.distributionOrdering[level].length - 1;\n      }\n      this.distributionOrderingPresence[level][node.id] = true;\n    }\n\n    if (this.options.hierarchical.direction === 'UD' || this.options.hierarchical.direction === 'DU') {\n      node.x = position;\n    }\n    else {\n      node.y = position;\n    }\n  }\n\n  /**\n   * Abstract the getting of the position of a node so we do not have to repeat the direction check all the time.\n   * @param node\n   * @returns {number|*}\n   * @private\n   */\n  _getPositionForHierarchy(node) {\n    if (this.options.hierarchical.direction === 'UD' || this.options.hierarchical.direction === 'DU') {\n      return node.x;\n    }\n    else {\n      return node.y;\n    }\n  }\n\n  /**\n   * Use the x or y value to sort the array, allowing users to specify order.\n   * @param nodeArray\n   * @private\n   */\n  _sortNodeArray(nodeArray) {\n    if (nodeArray.length > 1) {\n      if (this.options.hierarchical.direction === 'UD' || this.options.hierarchical.direction === 'DU') {\n        nodeArray.sort(function (a, b) {\n          return a.x - b.x;\n        })\n      }\n      else {\n        nodeArray.sort(function (a, b) {\n          return a.y - b.y;\n        })\n      }\n    }\n  }\n\n\n\n}\n\nexport default LayoutEngine;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/LayoutEngine.js","\nlet util = require('../../util');\nlet Hammer = require('../../module/hammer');\nlet hammerUtil = require('../../hammerUtil');\n\n/**\n * clears the toolbar div element of children\n *\n * @private\n */\nclass ManipulationSystem {\n  constructor(body, canvas, selectionHandler) {\n    this.body = body;\n    this.canvas = canvas;\n    this.selectionHandler = selectionHandler;\n\n    this.editMode = false;\n    this.manipulationDiv = undefined;\n    this.editModeDiv     = undefined;\n    this.closeDiv        = undefined;\n\n    this.manipulationHammers = [];\n    this.temporaryUIFunctions = {};\n    this.temporaryEventFunctions = [];\n\n    this.touchTime = 0;\n    this.temporaryIds = {nodes: [], edges:[]};\n    this.guiEnabled = false;\n    this.inMode = false;\n    this.selectedControlNode = undefined;\n\n    this.options = {};\n    this.defaultOptions = {\n      enabled: false,\n      initiallyActive: false,\n      addNode: true,\n      addEdge: true,\n      editNode: undefined,\n      editEdge: true,\n      deleteNode: true,\n      deleteEdge: true,\n      controlNodeStyle:{\n        shape:'dot',\n        size:6,\n        color: {background: '#ff0000', border: '#3c3c3c', highlight: {background: '#07f968', border: '#3c3c3c'}},\n        borderWidth: 2,\n        borderWidthSelected: 2\n      }\n    };\n    util.extend(this.options, this.defaultOptions);\n\n    this.body.emitter.on('destroy',     () => {this._clean();});\n    this.body.emitter.on('_dataChanged',this._restore.bind(this));\n    this.body.emitter.on('_resetData',  this._restore.bind(this));\n  }\n\n\n  /**\n   * If something changes in the data during editing, switch back to the initial datamanipulation state and close all edit modes.\n   * @private\n   */\n  _restore() {\n    if (this.inMode !== false) {\n      if (this.options.initiallyActive === true) {\n        this.enableEditMode();\n      }\n      else {\n        this.disableEditMode();\n      }\n    }\n  }\n\n  /**\n   * Set the Options\n   * @param options\n   */\n  setOptions(options, allOptions, globalOptions) {\n    if (allOptions !== undefined) {\n      if (allOptions.locale !== undefined)  {this.options.locale = allOptions.locale}   else {this.options.locale = globalOptions.locale;}\n      if (allOptions.locales !== undefined) {this.options.locales = allOptions.locales} else {this.options.locales = globalOptions.locales;}\n    }\n\n    if (options !== undefined) {\n      if (typeof options === 'boolean') {\n        this.options.enabled = options;\n      }\n      else {\n        this.options.enabled = true;\n        util.deepExtend(this.options, options);\n      }\n      if (this.options.initiallyActive === true) {\n        this.editMode = true;\n      }\n      this._setup();\n    }\n  }\n\n\n  /**\n   * Enable or disable edit-mode. Draws the DOM required and cleans up after itself.\n   *\n   * @private\n   */\n  toggleEditMode() {\n    if (this.editMode === true) {\n      this.disableEditMode();\n    }\n    else {\n      this.enableEditMode();\n    }\n  }\n\n\n  enableEditMode() {\n    this.editMode = true;\n\n    this._clean();\n    if (this.guiEnabled === true) {\n      this.manipulationDiv.style.display = 'block';\n      this.closeDiv.style.display = 'block';\n      this.editModeDiv.style.display = 'none';\n      this.showManipulatorToolbar();\n    }\n  }\n\n  disableEditMode() {\n    this.editMode = false;\n\n    this._clean();\n    if (this.guiEnabled === true) {\n      this.manipulationDiv.style.display = 'none';\n      this.closeDiv.style.display = 'none';\n      this.editModeDiv.style.display = 'block';\n      this._createEditButton();\n    }\n  }\n\n  /**\n   * Creates the main toolbar. Removes functions bound to the select event. Binds all the buttons of the toolbar.\n   *\n   * @private\n   */\n  showManipulatorToolbar() {\n    // restore the state of any bound functions or events, remove control nodes, restore physics\n    this._clean();\n\n    // reset global variables\n    this.manipulationDOM = {};\n\n    // if the gui is enabled, draw all elements.\n    if (this.guiEnabled === true) {\n      // a _restore will hide these menus\n      this.editMode = true;\n      this.manipulationDiv.style.display = 'block';\n      this.closeDiv.style.display = 'block';\n\n      let selectedNodeCount  = this.selectionHandler._getSelectedNodeCount();\n      let selectedEdgeCount  = this.selectionHandler._getSelectedEdgeCount();\n      let selectedTotalCount = selectedNodeCount + selectedEdgeCount;\n      let locale = this.options.locales[this.options.locale];\n      let needSeperator = false;\n\n\n      if (this.options.addNode !== false) {\n        this._createAddNodeButton(locale);\n        needSeperator = true;\n      }\n      if (this.options.addEdge !== false) {\n        if (needSeperator === true) {\n          this._createSeperator(1);\n        } else {\n          needSeperator = true;\n        }\n        this._createAddEdgeButton(locale);\n      }\n\n      if (selectedNodeCount === 1 && typeof this.options.editNode === 'function') {\n        if (needSeperator === true) {\n          this._createSeperator(2);\n        } else {\n          needSeperator = true;\n        }\n        this._createEditNodeButton(locale);\n      }\n      else if (selectedEdgeCount === 1 && selectedNodeCount === 0 && this.options.editEdge !== false) {\n        if (needSeperator === true) {\n          this._createSeperator(3);\n        } else {\n          needSeperator = true;\n        }\n        this._createEditEdgeButton(locale);\n      }\n\n      // remove buttons\n      if (selectedTotalCount !== 0) {\n        if (selectedNodeCount > 0 && this.options.deleteNode !== false) {\n          if (needSeperator === true) {\n            this._createSeperator(4);\n          }\n          this._createDeleteButton(locale);\n        }\n        else if (selectedNodeCount === 0 && this.options.deleteEdge !== false) {\n          if (needSeperator === true) {\n            this._createSeperator(4);\n          }\n          this._createDeleteButton(locale);\n        }\n      }\n\n      // bind the close button\n      this._bindHammerToDiv(this.closeDiv, this.toggleEditMode.bind(this));\n\n      // refresh this bar based on what has been selected\n      this._temporaryBindEvent('select', this.showManipulatorToolbar.bind(this));\n    }\n\n    // redraw to show any possible changes\n    this.body.emitter.emit('_redraw');\n\n  }\n\n\n  /**\n   * Create the toolbar for adding Nodes\n   */\n  addNodeMode() {\n    // when using the gui, enable edit mode if it wasnt already.\n    if (this.editMode !== true) {\n      this.enableEditMode();\n    }\n\n    // restore the state of any bound functions or events, remove control nodes, restore physics\n    this._clean();\n\n    this.inMode = 'addNode';\n    if (this.guiEnabled === true) {\n      let locale = this.options.locales[this.options.locale];\n      this.manipulationDOM = {};\n      this._createBackButton(locale);\n      this._createSeperator();\n      this._createDescription(locale['addDescription'] || this.options.locales['en']['addDescription']);\n\n      // bind the close button\n      this._bindHammerToDiv(this.closeDiv, this.toggleEditMode.bind(this));\n    }\n\n    this._temporaryBindEvent('click', this._performAddNode.bind(this));\n  }\n\n  /**\n   * call the bound function to handle the editing of the node. The node has to be selected.\n   */\n  editNode() {\n    // when using the gui, enable edit mode if it wasnt already.\n    if (this.editMode !== true) {\n      this.enableEditMode();\n    }\n\n    // restore the state of any bound functions or events, remove control nodes, restore physics\n    this._clean();\n    let node = this.selectionHandler._getSelectedNode();\n    if (node !== undefined) {\n      this.inMode = 'editNode';\n      if (typeof this.options.editNode === 'function') {\n        if (node.isCluster !== true) {\n          let data = util.deepExtend({}, node.options, false);\n          data.x = node.x;\n          data.y = node.y;\n\n          if (this.options.editNode.length === 2) {\n            this.options.editNode(data, (finalizedData) => {\n              if (finalizedData !== null && finalizedData !== undefined && this.inMode === 'editNode') { // if for whatever reason the mode has changes (due to dataset change) disregard the callback) {\n                this.body.data.nodes.getDataSet().update(finalizedData);\n              }\n              this.showManipulatorToolbar();\n            });\n          }\n          else {\n            throw new Error('The function for edit does not support two arguments (data, callback)');\n          }\n        }\n        else {\n          alert(this.options.locales[this.options.locale]['editClusterError'] || this.options.locales['en']['editClusterError']);\n        }\n      }\n      else {\n        throw new Error('No function has been configured to handle the editing of nodes.');\n      }\n    }\n    else {\n      this.showManipulatorToolbar();\n    }\n  }\n\n\n  /**\n   * create the toolbar to connect nodes\n   */\n  addEdgeMode() {\n    // when using the gui, enable edit mode if it wasnt already.\n    if (this.editMode !== true) {\n      this.enableEditMode();\n    }\n\n    // restore the state of any bound functions or events, remove control nodes, restore physics\n    this._clean();\n\n    this.inMode = 'addEdge';\n    if (this.guiEnabled === true) {\n      let locale = this.options.locales[this.options.locale];\n      this.manipulationDOM = {};\n      this._createBackButton(locale);\n      this._createSeperator();\n      this._createDescription(locale['edgeDescription'] || this.options.locales['en']['edgeDescription']);\n\n      // bind the close button\n      this._bindHammerToDiv(this.closeDiv, this.toggleEditMode.bind(this));\n    }\n\n    // temporarily overload functions\n    this._temporaryBindUI('onTouch',    this._handleConnect.bind(this));\n    this._temporaryBindUI('onDragEnd',  this._finishConnect.bind(this));\n    this._temporaryBindUI('onDrag',     this._dragControlNode.bind(this));\n    this._temporaryBindUI('onRelease',  this._finishConnect.bind(this));\n\n    this._temporaryBindUI('onDragStart', () => {});\n    this._temporaryBindUI('onHold', () => {});\n  }\n\n  /**\n   * create the toolbar to edit edges\n   */\n  editEdgeMode() {\n    // when using the gui, enable edit mode if it wasn't already.\n    if (this.editMode !== true) {\n      this.enableEditMode();\n    }\n\n    // restore the state of any bound functions or events, remove control nodes, restore physics\n    this._clean();\n\n    this.inMode = 'editEdge';\n    if (typeof this.options.editEdge === 'object' && typeof this.options.editEdge.editWithoutDrag === \"function\") {\n      this.edgeBeingEditedId = this.selectionHandler.getSelectedEdges()[0];\n      if (this.edgeBeingEditedId !== undefined) {\n        var edge = this.body.edges[this.edgeBeingEditedId];\n        this._performEditEdge(edge.from, edge.to);\n        return;\n      }\n    }\n    if (this.guiEnabled === true) {\n      let locale = this.options.locales[this.options.locale];\n      this.manipulationDOM = {};\n      this._createBackButton(locale);\n      this._createSeperator();\n      this._createDescription(locale['editEdgeDescription'] || this.options.locales['en']['editEdgeDescription']);\n\n      // bind the close button\n      this._bindHammerToDiv(this.closeDiv, this.toggleEditMode.bind(this));\n    }\n\n    this.edgeBeingEditedId = this.selectionHandler.getSelectedEdges()[0];\n    if (this.edgeBeingEditedId !== undefined) {\n      let edge = this.body.edges[this.edgeBeingEditedId];\n\n      // create control nodes\n      let controlNodeFrom = this._getNewTargetNode(edge.from.x, edge.from.y);\n      let controlNodeTo = this._getNewTargetNode(edge.to.x, edge.to.y);\n\n      this.temporaryIds.nodes.push(controlNodeFrom.id);\n      this.temporaryIds.nodes.push(controlNodeTo.id);\n\n      this.body.nodes[controlNodeFrom.id] = controlNodeFrom;\n      this.body.nodeIndices.push(controlNodeFrom.id);\n      this.body.nodes[controlNodeTo.id] = controlNodeTo;\n      this.body.nodeIndices.push(controlNodeTo.id);\n\n      // temporarily overload UI functions, cleaned up automatically because of _temporaryBindUI\n      this._temporaryBindUI('onTouch', this._controlNodeTouch.bind(this));    // used to get the position\n      this._temporaryBindUI('onTap', () => {});                             // disabled\n      this._temporaryBindUI('onHold', () => {});                             // disabled\n      this._temporaryBindUI('onDragStart', this._controlNodeDragStart.bind(this));// used to select control node\n      this._temporaryBindUI('onDrag', this._controlNodeDrag.bind(this));     // used to drag control node\n      this._temporaryBindUI('onDragEnd', this._controlNodeDragEnd.bind(this));  // used to connect or revert control nodes\n      this._temporaryBindUI('onMouseMove', () => {});                             // disabled\n\n      // create function to position control nodes correctly on movement\n      // automatically cleaned up because we use the temporary bind\n      this._temporaryBindEvent('beforeDrawing', (ctx) => {\n        let positions = edge.edgeType.findBorderPositions(ctx);\n        if (controlNodeFrom.selected === false) {\n          controlNodeFrom.x = positions.from.x;\n          controlNodeFrom.y = positions.from.y;\n        }\n        if (controlNodeTo.selected === false) {\n          controlNodeTo.x = positions.to.x;\n          controlNodeTo.y = positions.to.y;\n        }\n      });\n\n      this.body.emitter.emit('_redraw');\n    }\n    else {\n      this.showManipulatorToolbar();\n    }\n  }\n\n  /**\n   * delete everything in the selection\n   */\n  deleteSelected() {\n    // when using the gui, enable edit mode if it wasnt already.\n    if (this.editMode !== true) {\n      this.enableEditMode();\n    }\n\n    // restore the state of any bound functions or events, remove control nodes, restore physics\n    this._clean();\n\n    this.inMode = 'delete';\n    let selectedNodes = this.selectionHandler.getSelectedNodes();\n    let selectedEdges = this.selectionHandler.getSelectedEdges();\n    let deleteFunction = undefined;\n    if (selectedNodes.length > 0) {\n      for (let i = 0; i < selectedNodes.length; i++) {\n        if (this.body.nodes[selectedNodes[i]].isCluster === true) {\n          alert(this.options.locales[this.options.locale]['deleteClusterError'] || this.options.locales['en']['deleteClusterError']);\n          return;\n        }\n      }\n\n      if (typeof this.options.deleteNode === 'function') {\n        deleteFunction = this.options.deleteNode;\n      }\n    }\n    else if (selectedEdges.length > 0) {\n      if (typeof this.options.deleteEdge === 'function') {\n        deleteFunction = this.options.deleteEdge;\n      }\n    }\n\n    if (typeof deleteFunction === 'function') {\n      let data = {nodes: selectedNodes, edges: selectedEdges};\n      if (deleteFunction.length === 2) {\n        deleteFunction(data, (finalizedData) => {\n          if (finalizedData !== null && finalizedData !== undefined && this.inMode === 'delete') { // if for whatever reason the mode has changes (due to dataset change) disregard the callback) {\n            this.body.data.edges.getDataSet().remove(finalizedData.edges);\n            this.body.data.nodes.getDataSet().remove(finalizedData.nodes);\n            this.body.emitter.emit('startSimulation');\n            this.showManipulatorToolbar();\n          }\n          else {\n            this.body.emitter.emit('startSimulation');\n            this.showManipulatorToolbar();\n          }\n        });\n      }\n      else {\n        throw new Error('The function for delete does not support two arguments (data, callback)')\n      }\n    }\n    else {\n      this.body.data.edges.getDataSet().remove(selectedEdges);\n      this.body.data.nodes.getDataSet().remove(selectedNodes);\n      this.body.emitter.emit('startSimulation');\n      this.showManipulatorToolbar();\n    }\n  }\n\n\n\n\n  //********************************************** PRIVATE ***************************************//\n\n  /**\n   * draw or remove the DOM\n   * @private\n   */\n  _setup() {\n    if (this.options.enabled === true) {\n      // Enable the GUI\n      this.guiEnabled = true;\n\n      this._createWrappers();\n      if (this.editMode === false) {\n        this._createEditButton();\n      }\n      else {\n        this.showManipulatorToolbar();\n      }\n    }\n    else {\n      this._removeManipulationDOM();\n\n      // disable the gui\n      this.guiEnabled = false;\n    }\n  }\n\n\n  /**\n   * create the div overlays that contain the DOM\n   * @private\n   */\n  _createWrappers() {\n    // load the manipulator HTML elements. All styling done in css.\n    if (this.manipulationDiv === undefined) {\n      this.manipulationDiv = document.createElement('div');\n      this.manipulationDiv.className = 'vis-manipulation';\n      if (this.editMode === true) {\n        this.manipulationDiv.style.display = 'block';\n      }\n      else {\n        this.manipulationDiv.style.display = 'none';\n      }\n      this.canvas.frame.appendChild(this.manipulationDiv);\n    }\n\n    // container for the edit button.\n    if (this.editModeDiv === undefined) {\n      this.editModeDiv = document.createElement('div');\n      this.editModeDiv.className = 'vis-edit-mode';\n      if (this.editMode === true) {\n        this.editModeDiv.style.display = 'none';\n      }\n      else {\n        this.editModeDiv.style.display = 'block';\n      }\n      this.canvas.frame.appendChild(this.editModeDiv);\n    }\n\n\n    // container for the close div button\n    if (this.closeDiv === undefined) {\n      this.closeDiv = document.createElement('div');\n      this.closeDiv.className = 'vis-close';\n      this.closeDiv.style.display = this.manipulationDiv.style.display;\n      this.canvas.frame.appendChild(this.closeDiv);\n    }\n  }\n\n\n  /**\n   * generate a new target node. Used for creating new edges and editing edges\n   * @param x\n   * @param y\n   * @returns {*}\n   * @private\n   */\n  _getNewTargetNode(x,y) {\n    let controlNodeStyle = util.deepExtend({}, this.options.controlNodeStyle);\n\n    controlNodeStyle.id = 'targetNode' + util.randomUUID();\n    controlNodeStyle.hidden = false;\n    controlNodeStyle.physics = false;\n    controlNodeStyle.x = x;\n    controlNodeStyle.y = y;\n\n    // we have to define the bounding box in order for the nodes to be drawn immediately\n    let node = this.body.functions.createNode(controlNodeStyle);\n    node.shape.boundingBox = {left: x, right:x, top:y, bottom:y};\n\n    return node;\n  }\n\n\n  /**\n   * Create the edit button\n   */\n  _createEditButton() {\n    // restore everything to it's original state (if applicable)\n    this._clean();\n\n    // reset the manipulationDOM\n    this.manipulationDOM = {};\n\n    // empty the editModeDiv\n    util.recursiveDOMDelete(this.editModeDiv);\n\n\n    // create the contents for the editMode button\n    let locale = this.options.locales[this.options.locale];\n    let button = this._createButton('editMode', 'vis-button vis-edit vis-edit-mode', locale['edit'] || this.options.locales['en']['edit']);\n    this.editModeDiv.appendChild(button);\n\n    // bind a hammer listener to the button, calling the function toggleEditMode.\n    this._bindHammerToDiv(button, this.toggleEditMode.bind(this));\n  }\n\n\n  /**\n   * this function cleans up after everything this module does. Temporary elements, functions and events are removed, physics restored, hammers removed.\n   * @private\n   */\n  _clean() {\n    // not in mode\n    this.inMode = false;\n\n    // _clean the divs\n    if (this.guiEnabled === true) {\n      util.recursiveDOMDelete(this.editModeDiv);\n      util.recursiveDOMDelete(this.manipulationDiv);\n\n      // removes all the bindings and overloads\n      this._cleanManipulatorHammers();\n    }\n\n    // remove temporary nodes and edges\n    this._cleanupTemporaryNodesAndEdges();\n\n    // restore overloaded UI functions\n    this._unbindTemporaryUIs();\n\n    // remove the temporaryEventFunctions\n    this._unbindTemporaryEvents();\n\n    // restore the physics if required\n    this.body.emitter.emit('restorePhysics');\n  }\n\n\n  /**\n   * Each dom element has it's own hammer. They are stored in this.manipulationHammers. This cleans them up.\n   * @private\n   */\n  _cleanManipulatorHammers() {\n    // _clean hammer bindings\n    if (this.manipulationHammers.length != 0) {\n      for (let i = 0; i < this.manipulationHammers.length; i++) {\n        this.manipulationHammers[i].destroy();\n      }\n      this.manipulationHammers = [];\n    }\n  }\n\n\n  /**\n   * Remove all DOM elements created by this module.\n   * @private\n   */\n  _removeManipulationDOM() {\n    // removes all the bindings and overloads\n    this._clean();\n\n    // empty the manipulation divs\n    util.recursiveDOMDelete(this.manipulationDiv);\n    util.recursiveDOMDelete(this.editModeDiv);\n    util.recursiveDOMDelete(this.closeDiv);\n\n    // remove the manipulation divs\n    if (this.manipulationDiv) {this.canvas.frame.removeChild(this.manipulationDiv);}\n    if (this.editModeDiv)     {this.canvas.frame.removeChild(this.editModeDiv);}\n    if (this.closeDiv)        {this.canvas.frame.removeChild(this.closeDiv);}\n\n    // set the references to undefined\n    this.manipulationDiv = undefined;\n    this.editModeDiv = undefined;\n    this.closeDiv = undefined;\n  }\n\n\n  /**\n   * create a seperator line. the index is to differentiate in the manipulation dom\n   * @param index\n   * @private\n   */\n  _createSeperator(index = 1) {\n    this.manipulationDOM['seperatorLineDiv' + index] = document.createElement('div');\n    this.manipulationDOM['seperatorLineDiv' + index].className = 'vis-separator-line';\n    this.manipulationDiv.appendChild(this.manipulationDOM['seperatorLineDiv' + index]);\n  }\n\n  // ----------------------    DOM functions for buttons    --------------------------//\n\n  _createAddNodeButton(locale) {\n    let button = this._createButton('addNode', 'vis-button vis-add', locale['addNode'] || this.options.locales['en']['addNode']);\n    this.manipulationDiv.appendChild(button);\n    this._bindHammerToDiv(button, this.addNodeMode.bind(this));\n  }\n\n  _createAddEdgeButton(locale) {\n    let button = this._createButton('addEdge', 'vis-button vis-connect',  locale['addEdge'] || this.options.locales['en']['addEdge']);\n    this.manipulationDiv.appendChild(button);\n    this._bindHammerToDiv(button, this.addEdgeMode.bind(this));\n  }\n\n  _createEditNodeButton(locale) {\n    let button = this._createButton('editNode', 'vis-button vis-edit', locale['editNode'] || this.options.locales['en']['editNode']);\n    this.manipulationDiv.appendChild(button);\n    this._bindHammerToDiv(button, this.editNode.bind(this));\n  }\n\n  _createEditEdgeButton(locale) {\n    let button = this._createButton('editEdge', 'vis-button vis-edit',  locale['editEdge'] || this.options.locales['en']['editEdge']);\n    this.manipulationDiv.appendChild(button);\n    this._bindHammerToDiv(button, this.editEdgeMode.bind(this));\n  }\n\n  _createDeleteButton(locale) {\n    if (this.options.rtl) {\n      var deleteBtnClass = 'vis-button vis-delete-rtl';\n    } else {\n      var deleteBtnClass = 'vis-button vis-delete';\n    }\n    let button = this._createButton('delete', deleteBtnClass, locale['del'] || this.options.locales['en']['del']);\n    this.manipulationDiv.appendChild(button);\n    this._bindHammerToDiv(button, this.deleteSelected.bind(this));\n  }\n\n  _createBackButton(locale) {\n    let button = this._createButton('back', 'vis-button vis-back', locale['back'] || this.options.locales['en']['back']);\n    this.manipulationDiv.appendChild(button);\n    this._bindHammerToDiv(button, this.showManipulatorToolbar.bind(this));\n  }\n\n  _createButton(id, className, label, labelClassName = 'vis-label') {\n\n    this.manipulationDOM[id+'Div'] = document.createElement('div');\n    this.manipulationDOM[id+'Div'].className = className;\n    this.manipulationDOM[id+'Label'] = document.createElement('div');\n    this.manipulationDOM[id+'Label'].className = labelClassName;\n    this.manipulationDOM[id+'Label'].innerHTML = label;\n    this.manipulationDOM[id+'Div'].appendChild(this.manipulationDOM[id+'Label']);\n    return this.manipulationDOM[id+'Div'];\n  }\n\n  _createDescription(label) {\n    this.manipulationDiv.appendChild(\n      this._createButton('description', 'vis-button vis-none', label)\n    );\n  }\n\n  // -------------------------- End of DOM functions for buttons ------------------------------//\n\n  /**\n   * this binds an event until cleanup by the clean functions.\n   * @param event\n   * @param newFunction\n   * @private\n   */\n  _temporaryBindEvent(event, newFunction) {\n    this.temporaryEventFunctions.push({event:event, boundFunction:newFunction});\n    this.body.emitter.on(event, newFunction);\n  }\n\n  /**\n   * this overrides an UI function until cleanup by the clean function\n   * @param UIfunctionName\n   * @param newFunction\n   * @private\n   */\n  _temporaryBindUI(UIfunctionName, newFunction) {\n    if (this.body.eventListeners[UIfunctionName] !== undefined) {\n      this.temporaryUIFunctions[UIfunctionName] = this.body.eventListeners[UIfunctionName];\n      this.body.eventListeners[UIfunctionName] = newFunction;\n    }\n    else {\n      throw new Error('This UI function does not exist. Typo? You tried: ' + UIfunctionName + ' possible are: ' + JSON.stringify(Object.keys(this.body.eventListeners)));\n    }\n  }\n\n  /**\n   * Restore the overridden UI functions to their original state.\n   *\n   * @private\n   */\n  _unbindTemporaryUIs() {\n    for (let functionName in this.temporaryUIFunctions) {\n      if (this.temporaryUIFunctions.hasOwnProperty(functionName)) {\n        this.body.eventListeners[functionName] = this.temporaryUIFunctions[functionName];\n        delete this.temporaryUIFunctions[functionName];\n      }\n    }\n    this.temporaryUIFunctions = {};\n  }\n\n  /**\n   * Unbind the events created by _temporaryBindEvent\n   * @private\n   */\n  _unbindTemporaryEvents() {\n    for (let i = 0; i < this.temporaryEventFunctions.length; i++) {\n      let eventName = this.temporaryEventFunctions[i].event;\n      let boundFunction = this.temporaryEventFunctions[i].boundFunction;\n      this.body.emitter.off(eventName, boundFunction);\n    }\n    this.temporaryEventFunctions = [];\n  }\n\n  /**\n   * Bind an hammer instance to a DOM element.\n   * @param domElement\n   * @param funct\n   */\n  _bindHammerToDiv(domElement, boundFunction) {\n    let hammer = new Hammer(domElement, {});\n    hammerUtil.onTouch(hammer, boundFunction);\n    this.manipulationHammers.push(hammer);\n  }\n\n\n  /**\n   * Neatly clean up temporary edges and nodes\n   * @private\n   */\n  _cleanupTemporaryNodesAndEdges() {\n    // _clean temporary edges\n    for (let i = 0; i < this.temporaryIds.edges.length; i++) {\n      this.body.edges[this.temporaryIds.edges[i]].disconnect();\n      delete this.body.edges[this.temporaryIds.edges[i]];\n      let indexTempEdge = this.body.edgeIndices.indexOf(this.temporaryIds.edges[i]);\n      if (indexTempEdge !== -1) {this.body.edgeIndices.splice(indexTempEdge,1);}\n    }\n\n    // _clean temporary nodes\n    for (let i = 0; i < this.temporaryIds.nodes.length; i++) {\n      delete this.body.nodes[this.temporaryIds.nodes[i]];\n      let indexTempNode = this.body.nodeIndices.indexOf(this.temporaryIds.nodes[i]);\n      if (indexTempNode !== -1) {this.body.nodeIndices.splice(indexTempNode,1);}\n    }\n\n    this.temporaryIds = {nodes: [], edges: []};\n  }\n\n  // ------------------------------------------ EDIT EDGE FUNCTIONS -----------------------------------------//\n\n  /**\n   * the touch is used to get the position of the initial click\n   * @param event\n   * @private\n   */\n  _controlNodeTouch(event) {\n    this.selectionHandler.unselectAll();\n    this.lastTouch = this.body.functions.getPointer(event.center);\n    this.lastTouch.translation = util.extend({},this.body.view.translation); // copy the object\n  }\n\n\n  /**\n   * the drag start is used to mark one of the control nodes as selected.\n   * @param event\n   * @private\n   */\n  _controlNodeDragStart(event) {\n    let pointer = this.lastTouch;\n    let pointerObj = this.selectionHandler._pointerToPositionObject(pointer);\n    let from = this.body.nodes[this.temporaryIds.nodes[0]];\n    let to   = this.body.nodes[this.temporaryIds.nodes[1]];\n    let edge = this.body.edges[this.edgeBeingEditedId];\n    this.selectedControlNode = undefined;\n\n    let fromSelect = from.isOverlappingWith(pointerObj);\n    let toSelect = to.isOverlappingWith(pointerObj);\n\n    if (fromSelect === true) {\n      this.selectedControlNode = from;\n      edge.edgeType.from = from;\n    }\n    else if (toSelect === true) {\n      this.selectedControlNode = to;\n      edge.edgeType.to = to;\n    }\n\n    // we use the selection to find the node that is being dragged. We explicitly select it here.\n    if (this.selectedControlNode !== undefined) {\n      this.selectionHandler.selectObject(this.selectedControlNode)\n    }\n\n    this.body.emitter.emit('_redraw');\n  }\n\n  /**\n   * dragging the control nodes or the canvas\n   * @param event\n   * @private\n   */\n  _controlNodeDrag(event) {\n    this.body.emitter.emit('disablePhysics');\n    let pointer = this.body.functions.getPointer(event.center);\n    let pos = this.canvas.DOMtoCanvas(pointer);\n    if (this.selectedControlNode !== undefined) {\n      this.selectedControlNode.x = pos.x;\n      this.selectedControlNode.y = pos.y;\n    }\n    else {\n      // if the drag was not started properly because the click started outside the network div, start it now.\n      let diffX = pointer.x - this.lastTouch.x;\n      let diffY = pointer.y - this.lastTouch.y;\n      this.body.view.translation = {x:this.lastTouch.translation.x + diffX, y:this.lastTouch.translation.y + diffY};\n    }\n    this.body.emitter.emit('_redraw');\n  }\n\n\n  /**\n   * connecting or restoring the control nodes.\n   * @param event\n   * @private\n   */\n  _controlNodeDragEnd(event) {\n    let pointer = this.body.functions.getPointer(event.center);\n    let pointerObj = this.selectionHandler._pointerToPositionObject(pointer);\n    let edge = this.body.edges[this.edgeBeingEditedId];\n    // if the node that was dragged is not a control node, return\n    if (this.selectedControlNode === undefined) {\n      return;\n    }\n\n    // we use the selection to find the node that is being dragged. We explicitly DEselect the control node here.\n    this.selectionHandler.unselectAll();\n    let overlappingNodeIds = this.selectionHandler._getAllNodesOverlappingWith(pointerObj);\n    let node = undefined;\n    for (let i = overlappingNodeIds.length-1; i >= 0; i--) {\n      if (overlappingNodeIds[i] !== this.selectedControlNode.id) {\n        node = this.body.nodes[overlappingNodeIds[i]];\n        break;\n      }\n    }\n    // perform the connection\n    if (node !== undefined && this.selectedControlNode !== undefined) {\n      if (node.isCluster === true) {\n        alert(this.options.locales[this.options.locale]['createEdgeError'] || this.options.locales['en']['createEdgeError'])\n      }\n      else {\n        let from = this.body.nodes[this.temporaryIds.nodes[0]];\n        if (this.selectedControlNode.id === from.id) {\n          this._performEditEdge(node.id, edge.to.id);\n        }\n        else {\n          this._performEditEdge(edge.from.id, node.id);\n        }\n      }\n    }\n    else {\n      edge.updateEdgeType();\n      this.body.emitter.emit('restorePhysics');\n    }\n    this.body.emitter.emit('_redraw');\n  }\n\n  // ------------------------------------ END OF EDIT EDGE FUNCTIONS -----------------------------------------//\n\n\n\n  // ------------------------------------------- ADD EDGE FUNCTIONS -----------------------------------------//\n  /**\n   * the function bound to the selection event. It checks if you want to connect a cluster and changes the description\n   * to walk the user through the process.\n   *\n   * @private\n   */\n  _handleConnect(event) {\n    // check to avoid double fireing of this function.\n    if (new Date().valueOf() - this.touchTime > 100) {\n      this.lastTouch = this.body.functions.getPointer(event.center);\n      this.lastTouch.translation = util.extend({},this.body.view.translation); // copy the object\n\n      let pointer = this.lastTouch;\n      let node = this.selectionHandler.getNodeAt(pointer);\n\n      if (node !== undefined) {\n        if (node.isCluster === true) {\n          alert(this.options.locales[this.options.locale]['createEdgeError'] || this.options.locales['en']['createEdgeError'])\n        }\n        else {\n          // create a node the temporary line can look at\n          let targetNode = this._getNewTargetNode(node.x,node.y);\n          this.body.nodes[targetNode.id] = targetNode;\n          this.body.nodeIndices.push(targetNode.id);\n\n          // create a temporary edge\n          let connectionEdge = this.body.functions.createEdge({\n            id: 'connectionEdge' + util.randomUUID(),\n            from: node.id,\n            to: targetNode.id,\n            physics: false,\n            smooth: {\n              enabled: true,\n              type: 'continuous',\n              roundness: 0.5\n            }\n          });\n          this.body.edges[connectionEdge.id] = connectionEdge;\n          this.body.edgeIndices.push(connectionEdge.id);\n\n          this.temporaryIds.nodes.push(targetNode.id);\n          this.temporaryIds.edges.push(connectionEdge.id);\n        }\n      }\n      this.touchTime = new Date().valueOf();\n    }\n  }\n\n  _dragControlNode(event) {\n    let pointer = this.body.functions.getPointer(event.center);\n    if (this.temporaryIds.nodes[0] !== undefined) {\n      let targetNode = this.body.nodes[this.temporaryIds.nodes[0]]; // there is only one temp node in the add edge mode.\n      targetNode.x = this.canvas._XconvertDOMtoCanvas(pointer.x);\n      targetNode.y = this.canvas._YconvertDOMtoCanvas(pointer.y);\n      this.body.emitter.emit('_redraw');\n    }\n    else {\n      let diffX = pointer.x - this.lastTouch.x;\n      let diffY = pointer.y - this.lastTouch.y;\n      this.body.view.translation = {x:this.lastTouch.translation.x + diffX, y:this.lastTouch.translation.y + diffY};\n    }\n\n  }\n\n\n  /**\n   * Connect the new edge to the target if one exists, otherwise remove temp line\n   * @param event\n   * @private\n   */\n  _finishConnect(event) {\n    let pointer = this.body.functions.getPointer(event.center);\n    let pointerObj = this.selectionHandler._pointerToPositionObject(pointer);\n\n    // remember the edge id\n    let connectFromId = undefined;\n    if (this.temporaryIds.edges[0] !== undefined) {\n      connectFromId = this.body.edges[this.temporaryIds.edges[0]].fromId;\n    }\n\n    // get the overlapping node but NOT the temporary node;\n    let overlappingNodeIds = this.selectionHandler._getAllNodesOverlappingWith(pointerObj);\n    let node = undefined;\n    for (let i = overlappingNodeIds.length-1; i >= 0; i--) {\n      // if the node id is NOT a temporary node, accept the node.\n      if (this.temporaryIds.nodes.indexOf(overlappingNodeIds[i]) === -1) {\n        node = this.body.nodes[overlappingNodeIds[i]];\n        break;\n      }\n    }\n\n    // clean temporary nodes and edges.\n    this._cleanupTemporaryNodesAndEdges();\n\n    // perform the connection\n    if (node !== undefined) {\n      if (node.isCluster === true) {\n        alert(this.options.locales[this.options.locale]['createEdgeError'] || this.options.locales['en']['createEdgeError']);\n      }\n      else {\n        if (this.body.nodes[connectFromId] !== undefined && this.body.nodes[node.id] !== undefined) {\n          this._performAddEdge(connectFromId, node.id);\n        }\n      }\n    }\n    this.body.emitter.emit('_redraw');\n  }\n\n  // --------------------------------------- END OF ADD EDGE FUNCTIONS -------------------------------------//\n\n\n  // ------------------------------ Performing all the actual data manipulation ------------------------//\n\n  /**\n   * Adds a node on the specified location\n   */\n  _performAddNode(clickData) {\n    let defaultData = {\n      id: util.randomUUID(),\n      x: clickData.pointer.canvas.x,\n      y: clickData.pointer.canvas.y,\n      label: 'new'\n    };\n\n    if (typeof this.options.addNode === 'function') {\n      if (this.options.addNode.length === 2) {\n        this.options.addNode(defaultData, (finalizedData) => {\n          if (finalizedData !== null && finalizedData !== undefined && this.inMode === 'addNode') { // if for whatever reason the mode has changes (due to dataset change) disregard the callback\n            this.body.data.nodes.getDataSet().add(finalizedData);\n            this.showManipulatorToolbar();\n          }\n        });\n      }\n      else {\n        throw new Error('The function for add does not support two arguments (data,callback)');\n        this.showManipulatorToolbar();\n      }\n    }\n    else {\n      this.body.data.nodes.getDataSet().add(defaultData);\n      this.showManipulatorToolbar();\n    }\n  }\n\n\n  /**\n   * connect two nodes with a new edge.\n   *\n   * @private\n   */\n  _performAddEdge(sourceNodeId, targetNodeId) {\n    let defaultData = {from: sourceNodeId, to: targetNodeId};\n    if (typeof this.options.addEdge === 'function') {\n      if (this.options.addEdge.length === 2) {\n        this.options.addEdge(defaultData, (finalizedData) => {\n          if (finalizedData !== null && finalizedData !== undefined && this.inMode === 'addEdge') { // if for whatever reason the mode has changes (due to dataset change) disregard the callback\n            this.body.data.edges.getDataSet().add(finalizedData);\n            this.selectionHandler.unselectAll();\n            this.showManipulatorToolbar();\n          }\n        });\n      }\n      else {\n        throw new Error('The function for connect does not support two arguments (data,callback)');\n      }\n    }\n    else {\n      this.body.data.edges.getDataSet().add(defaultData);\n      this.selectionHandler.unselectAll();\n      this.showManipulatorToolbar();\n    }\n  }\n\n  /**\n   * connect two nodes with a new edge.\n   *\n   * @private\n   */\n  _performEditEdge(sourceNodeId, targetNodeId) {\n    let defaultData = {id: this.edgeBeingEditedId, from: sourceNodeId, to: targetNodeId, label: this.body.data.edges._data[this.edgeBeingEditedId].label };\n    let eeFunct = this.options.editEdge;\n    if (typeof eeFunct === 'object') {\n      eeFunct = eeFunct.editWithoutDrag;\n    }\n    if (typeof eeFunct === 'function') {\n      if (eeFunct.length === 2) {\n        eeFunct(defaultData, (finalizedData) => {\n          if (finalizedData === null || finalizedData === undefined || this.inMode !== 'editEdge') { // if for whatever reason the mode has changes (due to dataset change) disregard the callback) {\n            this.body.edges[defaultData.id].updateEdgeType();\n            this.body.emitter.emit('_redraw');\n            this.showManipulatorToolbar();\n          }\n          else {\n            this.body.data.edges.getDataSet().update(finalizedData);\n            this.selectionHandler.unselectAll();\n            this.showManipulatorToolbar();\n          }\n        });\n      }\n      else {\n        throw new Error('The function for edit does not support two arguments (data, callback)');\n      }\n    }\n    else {\n      this.body.data.edges.getDataSet().update(defaultData);\n      this.selectionHandler.unselectAll();\n      this.showManipulatorToolbar();\n    }\n  }\n\n\n}\n\nexport default ManipulationSystem;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/ManipulationSystem.js","/**\n * This object contains all possible options. It will check if the types are correct, if required if the option is one\n * of the allowed values.\n *\n * __any__ means that the name of the property does not matter.\n * __type__ is a required field for all objects and contains the allowed types of all objects\n */\nlet string = 'string';\nlet bool = 'boolean';\nlet number = 'number';\nlet array = 'array';\nlet object = 'object'; // should only be in a __type__ property\nlet dom = 'dom';\nlet any = 'any';\n\n\nlet allOptions = {\n  configure: {\n    enabled: { boolean: bool },\n    filter: { boolean: bool, string, array, 'function': 'function' },\n    container: { dom },\n    showButton: { boolean: bool },\n    __type__: { object, boolean: bool, string, array, 'function': 'function' }\n  },\n  edges: {\n    arrows: {\n      to: { enabled: { boolean: bool }, scaleFactor: { number }, type: { string: ['arrow', 'circle'] }, __type__: { object, boolean: bool } },\n      middle: { enabled: { boolean: bool }, scaleFactor: { number }, type: { string: ['arrow', 'circle'] }, __type__: { object, boolean: bool } },\n      from: { enabled: { boolean: bool }, scaleFactor: { number }, type: { string: ['arrow', 'circle'] }, __type__: { object, boolean: bool } },\n      __type__: { string: ['from', 'to', 'middle'], object }\n    },\n    arrowStrikethrough: { boolean: bool },\n    chosen: {\n      label: { boolean: bool, 'function': 'function' },\n      edge: { boolean: bool, 'function': 'function' },\n      __type__: { object, boolean: bool }\n    },\n    color: {\n      color: { string },\n      highlight: { string },\n      hover: { string },\n      inherit: { string: ['from', 'to', 'both'], boolean: bool },\n      opacity: { number },\n      __type__: { object, string }\n    },\n    dashes: { boolean: bool, array },\n    font: {\n      color: { string },\n      size: { number }, // px\n      face: { string },\n      background: { string },\n      strokeWidth: { number }, // px\n      strokeColor: { string },\n      align: { string: ['horizontal', 'top', 'middle', 'bottom'] },\n      vadjust: { number },\n      multi: { boolean: bool, string },\n      bold: {\n        color: { string },\n        size: { number }, // px\n        face: { string },\n        mod: { string },\n        vadjust: { number },\n        __type__: { object, string }\n      },\n      boldital: {\n        color: { string },\n        size: { number }, // px\n        face: { string },\n        mod: { string },\n        vadjust: { number },\n        __type__: { object, string }\n      },\n      ital: {\n        color: { string },\n        size: { number }, // px\n        face: { string },\n        mod: { string },\n        vadjust: { number },\n        __type__: { object, string }\n      },\n      mono: {\n        color: { string },\n        size: { number }, // px\n        face: { string },\n        mod: { string },\n        vadjust: { number },\n        __type__: { object, string }\n      },\n      __type__: { object, string }\n    },\n    hidden: { boolean: bool },\n    hoverWidth: { 'function': 'function', number },\n    label: { string, 'undefined': 'undefined' },\n    labelHighlightBold: { boolean: bool },\n    length: { number, 'undefined': 'undefined' },\n    physics: { boolean: bool },\n    scaling: {\n      min: { number },\n      max: { number },\n      label: {\n        enabled: { boolean: bool },\n        min: { number },\n        max: { number },\n        maxVisible: { number },\n        drawThreshold: { number },\n        __type__: { object, boolean: bool }\n      },\n      customScalingFunction: { 'function': 'function' },\n      __type__: { object }\n    },\n    selectionWidth: { 'function': 'function', number },\n    selfReferenceSize: { number },\n    shadow: {\n      enabled: { boolean: bool },\n      color: { string },\n      size: { number },\n      x: { number },\n      y: { number },\n      __type__: { object, boolean: bool }\n    },\n    smooth: {\n      enabled: { boolean: bool },\n      type: { string: ['dynamic', 'continuous', 'discrete', 'diagonalCross', 'straightCross', 'horizontal', 'vertical', 'curvedCW', 'curvedCCW', 'cubicBezier'] },\n      roundness: { number },\n      forceDirection: { string: ['horizontal', 'vertical', 'none'], boolean: bool },\n      __type__: { object, boolean: bool }\n    },\n    title: { string, 'undefined': 'undefined' },\n    width: { number },\n    widthConstraint: {\n      maximum: { number },\n      __type__: { object, boolean: bool, number }\n    },\n    value: { number, 'undefined': 'undefined' },\n    __type__: { object }\n  },\n  groups: {\n    useDefaultGroups: { boolean: bool },\n    __any__: 'get from nodes, will be overwritten below',\n    __type__: { object }\n  },\n  interaction: {\n    dragNodes: { boolean: bool },\n    dragView: { boolean: bool },\n    hideEdgesOnDrag: { boolean: bool },\n    hideNodesOnDrag: { boolean: bool },\n    hover: { boolean: bool },\n    keyboard: {\n      enabled: { boolean: bool },\n      speed: { x: { number }, y: { number }, zoom: { number }, __type__: { object } },\n      bindToWindow: { boolean: bool },\n      __type__: { object, boolean: bool }\n    },\n    multiselect: { boolean: bool },\n    navigationButtons: { boolean: bool },\n    selectable: { boolean: bool },\n    selectConnectedEdges: { boolean: bool },\n    hoverConnectedEdges: { boolean: bool },\n    tooltipDelay: { number },\n    zoomView: { boolean: bool },\n    __type__: { object }\n  },\n  layout: {\n    randomSeed: { 'undefined': 'undefined', number },\n    improvedLayout: { boolean: bool },\n    hierarchical: {\n      enabled: { boolean: bool },\n      levelSeparation: { number },\n      nodeSpacing: { number },\n      treeSpacing: { number },\n      blockShifting: { boolean: bool },\n      edgeMinimization: { boolean: bool },\n      parentCentralization: { boolean: bool },\n      direction: { string: ['UD', 'DU', 'LR', 'RL'] },   // UD, DU, LR, RL\n      sortMethod: { string: ['hubsize', 'directed'] }, // hubsize, directed\n      __type__: { object, boolean: bool }\n    },\n    __type__: { object }\n  },\n  manipulation: {\n    enabled: { boolean: bool },\n    initiallyActive: { boolean: bool },\n    addNode: { boolean: bool, 'function': 'function' },\n    addEdge: { boolean: bool, 'function': 'function' },\n    editNode: { 'function': 'function' },\n    editEdge: {\n      editWithoutDrag: { 'function' : 'function' },\n      __type__: {object, boolean: bool, 'function': 'function' }\n    },\n    deleteNode: { boolean: bool, 'function': 'function' },\n    deleteEdge: { boolean: bool, 'function': 'function' },\n    controlNodeStyle: 'get from nodes, will be overwritten below',\n    __type__: { object, boolean: bool }\n  },\n  nodes: {\n    borderWidth: { number },\n    borderWidthSelected: { number, 'undefined': 'undefined' },\n    brokenImage: { string, 'undefined': 'undefined' },\n    chosen: {\n      label: { boolean: bool, 'function': 'function' },\n      node: { boolean: bool, 'function': 'function' },\n      __type__: { object, boolean: bool }\n    },\n    color: {\n      border: { string },\n      background: { string },\n      highlight: {\n        border: { string },\n        background: { string },\n        __type__: { object, string }\n      },\n      hover: {\n        border: { string },\n        background: { string },\n        __type__: { object, string }\n      },\n      __type__: { object, string }\n    },\n    fixed: {\n      x: { boolean: bool },\n      y: { boolean: bool },\n      __type__: { object, boolean: bool }\n    },\n    font: {\n      align: { string },\n      color: { string },\n      size: { number }, // px\n      face: { string },\n      background: { string },\n      strokeWidth: { number }, // px\n      strokeColor: { string },\n      vadjust: { number },\n      multi: { boolean: bool, string },\n      bold: {\n        color: { string },\n        size: { number }, // px\n        face: { string },\n        mod: { string },\n        vadjust: { number },\n        __type__: { object, string }\n      },\n      boldital: {\n        color: { string },\n        size: { number }, // px\n        face: { string },\n        mod: { string },\n        vadjust: { number },\n        __type__: { object, string }\n      },\n      ital: {\n        color: { string },\n        size: { number }, // px\n        face: { string },\n        mod: { string },\n        vadjust: { number },\n        __type__: { object, string }\n      },\n      mono: {\n        color: { string },\n        size: { number }, // px\n        face: { string },\n        mod: { string },\n        vadjust: { number },\n        __type__: { object, string }\n      },\n      __type__: { object, string }\n    },\n    group: { string, number, 'undefined': 'undefined' },\n    heightConstraint: {\n      minimum: { number },\n      valign: { string },\n      __type__: { object, boolean: bool, number }\n    },\n    hidden: { boolean: bool },\n    icon: {\n      face: { string },\n      code: { string },  //'\\uf007',\n      size: { number },  //50,\n      color: { string },\n      __type__: { object }\n    },\n    id: { string, number },\n    image: { string, 'undefined': 'undefined' }, // --> URL\n    label: { string, 'undefined': 'undefined' },\n    labelHighlightBold: { boolean: bool },\n    level: { number, 'undefined': 'undefined' },\n    margin: {\n      top: { number },\n      right: { number },\n      bottom: { number },\n      left: { number },\n      __type__: { object, number }\n    },\n    mass: { number },\n    physics: { boolean: bool },\n    scaling: {\n      min: { number },\n      max: { number },\n      label: {\n        enabled: { boolean: bool },\n        min: { number },\n        max: { number },\n        maxVisible: { number },\n        drawThreshold: { number },\n        __type__: { object, boolean: bool }\n      },\n      customScalingFunction: { 'function': 'function' },\n      __type__: { object }\n    },\n    shadow: {\n      enabled: { boolean: bool },\n      color: { string },\n      size: { number },\n      x: { number },\n      y: { number },\n      __type__: { object, boolean: bool }\n    },\n    shape: { string: ['ellipse', 'circle', 'database', 'box', 'text', 'image', 'circularImage', 'diamond', 'dot', 'star', 'triangle', 'triangleDown', 'square', 'icon'] },\n    shapeProperties: {\n      borderDashes: { boolean: bool, array },\n      borderRadius: { number },\n      interpolation: { boolean: bool },\n      useImageSize: { boolean: bool },\n      useBorderWithImage: { boolean: bool },\n      __type__: { object }\n    },\n    size: { number },\n    title: { string, 'undefined': 'undefined' },\n    value: { number, 'undefined': 'undefined' },\n    widthConstraint: {\n      minimum: { number },\n      maximum: { number },\n      __type__: { object, boolean: bool, number }\n    },\n    x: { number },\n    y: { number },\n    __type__: { object }\n  },\n  physics: {\n    enabled: { boolean: bool },\n    barnesHut: {\n      gravitationalConstant: { number },\n      centralGravity: { number },\n      springLength: { number },\n      springConstant: { number },\n      damping: { number },\n      avoidOverlap: { number },\n      __type__: { object }\n    },\n    forceAtlas2Based: {\n      gravitationalConstant: { number },\n      centralGravity: { number },\n      springLength: { number },\n      springConstant: { number },\n      damping: { number },\n      avoidOverlap: { number },\n      __type__: { object }\n    },\n    repulsion: {\n      centralGravity: { number },\n      springLength: { number },\n      springConstant: { number },\n      nodeDistance: { number },\n      damping: { number },\n      __type__: { object }\n    },\n    hierarchicalRepulsion: {\n      centralGravity: { number },\n      springLength: { number },\n      springConstant: { number },\n      nodeDistance: { number },\n      damping: { number },\n      __type__: { object }\n    },\n    maxVelocity: { number },\n    minVelocity: { number },    // px/s\n    solver: { string: ['barnesHut', 'repulsion', 'hierarchicalRepulsion', 'forceAtlas2Based'] },\n    stabilization: {\n      enabled: { boolean: bool },\n      iterations: { number },   // maximum number of iteration to stabilize\n      updateInterval: { number },\n      onlyDynamicEdges: { boolean: bool },\n      fit: { boolean: bool },\n      __type__: { object, boolean: bool }\n    },\n    timestep: { number },\n    adaptiveTimestep: { boolean: bool },\n    __type__: { object, boolean: bool }\n  },\n\n  //globals :\n  autoResize: { boolean: bool },\n  clickToUse: { boolean: bool },\n  locale: { string },\n  locales: {\n    __any__: { any },\n    __type__: { object }\n  },\n  height: { string },\n  width: { string },\n  __type__: { object }\n};\n\nallOptions.groups.__any__ = allOptions.nodes;\nallOptions.manipulation.controlNodeStyle = allOptions.nodes;\n\n\nlet configureOptions = {\n  nodes: {\n    borderWidth: [1, 0, 10, 1],\n    borderWidthSelected: [2, 0, 10, 1],\n    color: {\n      border: ['color', '#2B7CE9'],\n      background: ['color', '#97C2FC'],\n      highlight: {\n        border: ['color', '#2B7CE9'],\n        background: ['color', '#D2E5FF']\n      },\n      hover: {\n        border: ['color', '#2B7CE9'],\n        background: ['color', '#D2E5FF']\n      }\n    },\n    fixed: {\n      x: false,\n      y: false\n    },\n    font: {\n      color: ['color', '#343434'],\n      size: [14, 0, 100, 1], // px\n      face: ['arial', 'verdana', 'tahoma'],\n      background: ['color', 'none'],\n      strokeWidth: [0, 0, 50, 1], // px\n      strokeColor: ['color', '#ffffff']\n    },\n    //group: 'string',\n    hidden: false,\n    labelHighlightBold: true,\n    //icon: {\n    //  face: 'string',  //'FontAwesome',\n    //  code: 'string',  //'\\uf007',\n    //  size: [50, 0, 200, 1],  //50,\n    //  color: ['color','#2B7CE9']   //'#aa00ff'\n    //},\n    //image: 'string', // --> URL\n    physics: true,\n    scaling: {\n      min: [10, 0, 200, 1],\n      max: [30, 0, 200, 1],\n      label: {\n        enabled: false,\n        min: [14, 0, 200, 1],\n        max: [30, 0, 200, 1],\n        maxVisible: [30, 0, 200, 1],\n        drawThreshold: [5, 0, 20, 1]\n      }\n    },\n    shadow: {\n      enabled: false,\n      color: 'rgba(0,0,0,0.5)',\n      size: [10, 0, 20, 1],\n      x: [5, -30, 30, 1],\n      y: [5, -30, 30, 1]\n    },\n    shape: ['ellipse', 'box', 'circle', 'database', 'diamond', 'dot', 'square', 'star', 'text', 'triangle', 'triangleDown'],\n    shapeProperties: {\n      borderDashes: false,\n      borderRadius: [6, 0, 20, 1],\n      interpolation: true,\n      useImageSize: false\n    },\n    size: [25, 0, 200, 1]\n  },\n  edges: {\n    arrows: {\n      to: { enabled: false, scaleFactor: [1, 0, 3, 0.05], type: 'arrow' },\n      middle: { enabled: false, scaleFactor: [1, 0, 3, 0.05], type: 'arrow' },\n      from: { enabled: false, scaleFactor: [1, 0, 3, 0.05], type: 'arrow' }\n    },\n    arrowStrikethrough: true,\n    color: {\n      color: ['color', '#848484'],\n      highlight: ['color', '#848484'],\n      hover: ['color', '#848484'],\n      inherit: ['from', 'to', 'both', true, false],\n      opacity: [1, 0, 1, 0.05]\n    },\n    dashes: false,\n    font: {\n      color: ['color', '#343434'],\n      size: [14, 0, 100, 1], // px\n      face: ['arial', 'verdana', 'tahoma'],\n      background: ['color', 'none'],\n      strokeWidth: [2, 0, 50, 1], // px\n      strokeColor: ['color', '#ffffff'],\n      align: ['horizontal', 'top', 'middle', 'bottom']\n    },\n    hidden: false,\n    hoverWidth: [1.5, 0, 5, 0.1],\n    labelHighlightBold: true,\n    physics: true,\n    scaling: {\n      min: [1, 0, 100, 1],\n      max: [15, 0, 100, 1],\n      label: {\n        enabled: true,\n        min: [14, 0, 200, 1],\n        max: [30, 0, 200, 1],\n        maxVisible: [30, 0, 200, 1],\n        drawThreshold: [5, 0, 20, 1]\n      }\n    },\n    selectionWidth: [1.5, 0, 5, 0.1],\n    selfReferenceSize: [20, 0, 200, 1],\n    shadow: {\n      enabled: false,\n      color: 'rgba(0,0,0,0.5)',\n      size: [10, 0, 20, 1],\n      x: [5, -30, 30, 1],\n      y: [5, -30, 30, 1]\n    },\n    smooth: {\n      enabled: true,\n      type: ['dynamic', 'continuous', 'discrete', 'diagonalCross', 'straightCross', 'horizontal', 'vertical', 'curvedCW', 'curvedCCW', 'cubicBezier'],\n      forceDirection: ['horizontal', 'vertical', 'none'],\n      roundness: [0.5, 0, 1, 0.05]\n    },\n    width: [1, 0, 30, 1]\n  },\n  layout: {\n    //randomSeed: [0, 0, 500, 1],\n    //improvedLayout: true,\n    hierarchical: {\n      enabled: false,\n      levelSeparation: [150, 20, 500, 5],\n      nodeSpacing: [100, 20, 500, 5],\n      treeSpacing: [200, 20, 500, 5],\n      blockShifting: true,\n      edgeMinimization: true,\n      parentCentralization: true,\n      direction: ['UD', 'DU', 'LR', 'RL'],   // UD, DU, LR, RL\n      sortMethod: ['hubsize', 'directed'] // hubsize, directed\n    }\n  },\n  interaction: {\n    dragNodes: true,\n    dragView: true,\n    hideEdgesOnDrag: false,\n    hideNodesOnDrag: false,\n    hover: false,\n    keyboard: {\n      enabled: false,\n      speed: { x: [10, 0, 40, 1], y: [10, 0, 40, 1], zoom: [0.02, 0, 0.1, 0.005] },\n      bindToWindow: true\n    },\n    multiselect: false,\n    navigationButtons: false,\n    selectable: true,\n    selectConnectedEdges: true,\n    hoverConnectedEdges: true,\n    tooltipDelay: [300, 0, 1000, 25],\n    zoomView: true\n  },\n  manipulation: {\n    enabled: false,\n    initiallyActive: false\n  },\n  physics: {\n    enabled: true,\n    barnesHut: {\n      //theta: [0.5, 0.1, 1, 0.05],\n      gravitationalConstant: [-2000, -30000, 0, 50],\n      centralGravity: [0.3, 0, 10, 0.05],\n      springLength: [95, 0, 500, 5],\n      springConstant: [0.04, 0, 1.2, 0.005],\n      damping: [0.09, 0, 1, 0.01],\n      avoidOverlap: [0, 0, 1, 0.01]\n    },\n    forceAtlas2Based: {\n      //theta: [0.5, 0.1, 1, 0.05],\n      gravitationalConstant: [-50, -500, 0, 1],\n      centralGravity: [0.01, 0, 1, 0.005],\n      springLength: [95, 0, 500, 5],\n      springConstant: [0.08, 0, 1.2, 0.005],\n      damping: [0.4, 0, 1, 0.01],\n      avoidOverlap: [0, 0, 1, 0.01]\n    },\n    repulsion: {\n      centralGravity: [0.2, 0, 10, 0.05],\n      springLength: [200, 0, 500, 5],\n      springConstant: [0.05, 0, 1.2, 0.005],\n      nodeDistance: [100, 0, 500, 5],\n      damping: [0.09, 0, 1, 0.01]\n    },\n    hierarchicalRepulsion: {\n      centralGravity: [0.2, 0, 10, 0.05],\n      springLength: [100, 0, 500, 5],\n      springConstant: [0.01, 0, 1.2, 0.005],\n      nodeDistance: [120, 0, 500, 5],\n      damping: [0.09, 0, 1, 0.01]\n    },\n    maxVelocity: [50, 0, 150, 1],\n    minVelocity: [0.1, 0.01, 0.5, 0.01],\n    solver: ['barnesHut', 'forceAtlas2Based', 'repulsion', 'hierarchicalRepulsion'],\n    timestep: [0.5, 0.01, 1, 0.01],\n    //adaptiveTimestep: true\n  }\n};\n\nexport {allOptions, configureOptions};\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/options.js","// distance finding algorithm\nimport FloydWarshall from \"./components/algorithms/FloydWarshall.js\"\n\n\n/**\n * KamadaKawai positions the nodes initially based on\n *\n * \"AN ALGORITHM FOR DRAWING GENERAL UNDIRECTED GRAPHS\"\n * -- Tomihisa KAMADA and Satoru KAWAI in 1989\n *\n * Possible optimizations in the distance calculation can be implemented.\n */\nclass KamadaKawai {\n  constructor(body, edgeLength, edgeStrength) {\n    this.body = body;\n    this.springLength = edgeLength;\n    this.springConstant = edgeStrength;\n    this.distanceSolver = new FloydWarshall();\n  }\n\n  /**\n   * Not sure if needed but can be used to update the spring length and spring constant\n   * @param options\n   */\n  setOptions(options) {\n    if (options) {\n      if (options.springLength) {\n        this.springLength = options.springLength;\n      }\n      if (options.springConstant) {\n        this.springConstant = options.springConstant;\n      }\n    }\n  }\n\n\n  /**\n   * Position the system\n   * @param nodesArray\n   * @param edgesArray\n   */\n  solve(nodesArray, edgesArray, ignoreClusters = false) {\n    // get distance matrix\n    let D_matrix = this.distanceSolver.getDistances(this.body, nodesArray, edgesArray); // distance matrix\n\n    // get the L Matrix\n    this._createL_matrix(D_matrix);\n\n    // get the K Matrix\n    this._createK_matrix(D_matrix);\n\n    // calculate positions\n    let threshold = 0.01;\n    let innerThreshold = 1;\n    let iterations = 0;\n    let maxIterations = Math.max(1000,Math.min(10*this.body.nodeIndices.length,6000));\n    let maxInnerIterations = 5;\n\n    let maxEnergy = 1e9;\n    let highE_nodeId = 0, dE_dx = 0, dE_dy = 0, delta_m = 0, subIterations = 0;\n\n    while (maxEnergy > threshold && iterations < maxIterations) {\n      iterations += 1;\n      [highE_nodeId, maxEnergy, dE_dx, dE_dy] = this._getHighestEnergyNode(ignoreClusters);\n      delta_m = maxEnergy;\n      subIterations = 0;\n      while(delta_m > innerThreshold && subIterations < maxInnerIterations) {\n        subIterations += 1;\n        this._moveNode(highE_nodeId, dE_dx, dE_dy);\n        [delta_m,dE_dx,dE_dy] = this._getEnergy(highE_nodeId);\n      }\n    }\n  }\n\n  /**\n   * get the node with the highest energy\n   * @returns {*[]}\n   * @private\n   */\n  _getHighestEnergyNode(ignoreClusters) {\n    let nodesArray = this.body.nodeIndices;\n    let nodes = this.body.nodes;\n    let maxEnergy = 0;\n    let maxEnergyNodeId = nodesArray[0];\n    let dE_dx_max = 0, dE_dy_max = 0;\n\n    for (let nodeIdx = 0; nodeIdx < nodesArray.length; nodeIdx++) {\n      let m = nodesArray[nodeIdx];\n      // by not evaluating nodes with predefined positions we should only move nodes that have no positions.\n      if ((nodes[m].predefinedPosition === false || nodes[m].isCluster === true && ignoreClusters === true) || nodes[m].options.fixed.x === true ||  nodes[m].options.fixed.y === true) {\n        let [delta_m,dE_dx,dE_dy] = this._getEnergy(m);\n        if (maxEnergy < delta_m) {\n          maxEnergy = delta_m;\n          maxEnergyNodeId = m;\n          dE_dx_max = dE_dx;\n          dE_dy_max = dE_dy;\n        }\n      }\n    }\n\n    return [maxEnergyNodeId, maxEnergy, dE_dx_max, dE_dy_max];\n  }\n\n  /**\n   * calculate the energy of a single node\n   * @param m\n   * @returns {*[]}\n   * @private\n   */\n  _getEnergy(m) {\n    let nodesArray = this.body.nodeIndices;\n    let nodes = this.body.nodes;\n\n    let x_m = nodes[m].x;\n    let y_m = nodes[m].y;\n    let dE_dx = 0;\n    let dE_dy = 0;\n    for (let iIdx = 0; iIdx < nodesArray.length; iIdx++) {\n      let i = nodesArray[iIdx];\n      if (i !== m) {\n        let x_i = nodes[i].x;\n        let y_i = nodes[i].y;\n        let denominator = 1.0 / Math.sqrt(Math.pow(x_m - x_i, 2) + Math.pow(y_m - y_i, 2));\n        dE_dx += this.K_matrix[m][i] * ((x_m - x_i) - this.L_matrix[m][i] * (x_m - x_i) * denominator);\n        dE_dy += this.K_matrix[m][i] * ((y_m - y_i) - this.L_matrix[m][i] * (y_m - y_i) * denominator);\n      }\n    }\n\n    let delta_m = Math.sqrt(Math.pow(dE_dx, 2) + Math.pow(dE_dy, 2));\n    return [delta_m, dE_dx, dE_dy];\n  }\n\n  /**\n   * move the node based on it's energy\n   * the dx and dy are calculated from the linear system proposed by Kamada and Kawai\n   * @param m\n   * @param dE_dx\n   * @param dE_dy\n   * @private\n   */\n  _moveNode(m, dE_dx, dE_dy) {\n    let nodesArray = this.body.nodeIndices;\n    let nodes = this.body.nodes;\n    let d2E_dx2 = 0;\n    let d2E_dxdy = 0;\n    let d2E_dy2 = 0;\n\n    let x_m = nodes[m].x;\n    let y_m = nodes[m].y;\n    for (let iIdx = 0; iIdx < nodesArray.length; iIdx++) {\n      let i = nodesArray[iIdx];\n      if (i !== m) {\n        let x_i = nodes[i].x;\n        let y_i = nodes[i].y;\n        let denominator = 1.0 / Math.pow(Math.pow(x_m - x_i, 2) + Math.pow(y_m - y_i, 2), 1.5);\n        d2E_dx2 += this.K_matrix[m][i] * (1 - this.L_matrix[m][i] * Math.pow(y_m - y_i, 2) * denominator);\n        d2E_dxdy += this.K_matrix[m][i] * (this.L_matrix[m][i] * (x_m - x_i) * (y_m - y_i) * denominator);\n        d2E_dy2 += this.K_matrix[m][i] * (1 - this.L_matrix[m][i] * Math.pow(x_m - x_i, 2) * denominator);\n      }\n    }\n    // make the variable names easier to make the solving of the linear system easier to read\n    let A = d2E_dx2, B = d2E_dxdy, C = dE_dx, D = d2E_dy2, E = dE_dy;\n\n    // solve the linear system for dx and dy\n    let dy = (C / A + E / B) / (B / A - D / B);\n    let dx = -(B * dy + C) / A;\n\n    // move the node\n    nodes[m].x += dx;\n    nodes[m].y += dy;\n  }\n\n\n  /**\n   * Create the L matrix: edge length times shortest path\n   * @param D_matrix\n   * @private\n   */\n  _createL_matrix(D_matrix) {\n    let nodesArray = this.body.nodeIndices;\n    let edgeLength = this.springLength;\n\n    this.L_matrix = [];\n    for (let i = 0; i < nodesArray.length; i++) {\n      this.L_matrix[nodesArray[i]] = {};\n      for (let j = 0; j < nodesArray.length; j++) {\n        this.L_matrix[nodesArray[i]][nodesArray[j]] = edgeLength * D_matrix[nodesArray[i]][nodesArray[j]];\n      }\n    }\n  }\n\n\n  /**\n   * Create the K matrix: spring constants times shortest path\n   * @param D_matrix\n   * @private\n   */\n  _createK_matrix(D_matrix) {\n    let nodesArray = this.body.nodeIndices;\n    let edgeStrength = this.springConstant;\n\n    this.K_matrix = [];\n    for (let i = 0; i < nodesArray.length; i++) {\n      this.K_matrix[nodesArray[i]] = {};\n      for (let j = 0; j < nodesArray.length; j++) {\n        this.K_matrix[nodesArray[i]][nodesArray[j]] = edgeStrength * Math.pow(D_matrix[nodesArray[i]][nodesArray[j]], -2);\n      }\n    }\n  }\n\n\n\n}\n\nexport default KamadaKawai;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/KamadaKawai.js","/**\n * Created by Alex on 10-Aug-15.\n */\n\n\nclass FloydWarshall {\n  constructor(){}\n\n  getDistances(body, nodesArray, edgesArray) {\n    let D_matrix = {};\n    let edges = body.edges;\n\n    // prepare matrix with large numbers\n    for (let i = 0; i < nodesArray.length; i++) {\n      D_matrix[nodesArray[i]] = {};\n      D_matrix[nodesArray[i]] = {};\n      for (let j = 0; j < nodesArray.length; j++) {\n        D_matrix[nodesArray[i]][nodesArray[j]] = (i == j ? 0 : 1e9);\n        D_matrix[nodesArray[i]][nodesArray[j]] = (i == j ? 0 : 1e9);\n      }\n    }\n\n    // put the weights for the edges in. This assumes unidirectionality.\n    for (let i = 0; i < edgesArray.length; i++) {\n      let edge = edges[edgesArray[i]];\n      // edge has to be connected if it counts to the distances. If it is connected to inner clusters it will crash so we also check if it is in the D_matrix\n      if (edge.connected === true && D_matrix[edge.fromId] !== undefined && D_matrix[edge.toId] !== undefined) {\n        D_matrix[edge.fromId][edge.toId] = 1;\n        D_matrix[edge.toId][edge.fromId] = 1;\n      }\n    }\n\n    let nodeCount = nodesArray.length;\n\n    // Adapted FloydWarshall based on unidirectionality to greatly reduce complexity.\n    for (let k = 0; k < nodeCount; k++) {\n      for (let i = 0; i < nodeCount-1; i++) {\n        for (let j = i+1; j < nodeCount; j++) {\n          D_matrix[nodesArray[i]][nodesArray[j]] = Math.min(D_matrix[nodesArray[i]][nodesArray[j]],D_matrix[nodesArray[i]][nodesArray[k]] + D_matrix[nodesArray[k]][nodesArray[j]])\n          D_matrix[nodesArray[j]][nodesArray[i]] = D_matrix[nodesArray[i]][nodesArray[j]];\n        }\n      }\n    }\n\n    return D_matrix;\n  }\n}\n\nexport default FloydWarshall;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/modules/components/algorithms/FloydWarshall.js","/**\n * Canvas shapes used by Network\n */\nif (typeof CanvasRenderingContext2D !== 'undefined') {\n\n  /**\n   * Draw a circle shape\n   */\n  CanvasRenderingContext2D.prototype.circle = function (x, y, r) {\n    this.beginPath();\n    this.arc(x, y, r, 0, 2 * Math.PI, false);\n    this.closePath();\n  };\n\n  /**\n   * Draw a square shape\n   * @param {Number} x horizontal center\n   * @param {Number} y vertical center\n   * @param {Number} r   size, width and height of the square\n   */\n  CanvasRenderingContext2D.prototype.square = function (x, y, r) {\n    this.beginPath();\n    this.rect(x - r, y - r, r * 2, r * 2);\n    this.closePath();\n  };\n\n  /**\n   * Draw a triangle shape\n   * @param {Number} x horizontal center\n   * @param {Number} y vertical center\n   * @param {Number} r   radius, half the length of the sides of the triangle\n   */\n  CanvasRenderingContext2D.prototype.triangle = function (x, y, r) {\n    // http://en.wikipedia.org/wiki/Equilateral_triangle\n    this.beginPath();\n\n    // the change in radius and the offset is here to center the shape\n    r *= 1.15;\n    y += 0.275 * r;\n\n    var s = r * 2;\n    var s2 = s / 2;\n    var ir = Math.sqrt(3) / 6 * s;      // radius of inner circle\n    var h = Math.sqrt(s * s - s2 * s2); // height\n\n\n    this.moveTo(x, y - (h - ir));\n    this.lineTo(x + s2, y + ir);\n    this.lineTo(x - s2, y + ir);\n    this.lineTo(x, y - (h - ir));\n    this.closePath();\n\n\n  };\n\n  /**\n   * Draw a triangle shape in downward orientation\n   * @param {Number} x horizontal center\n   * @param {Number} y vertical center\n   * @param {Number} r radius\n   */\n  CanvasRenderingContext2D.prototype.triangleDown = function (x, y, r) {\n    // http://en.wikipedia.org/wiki/Equilateral_triangle\n    this.beginPath();\n\n    // the change in radius and the offset is here to center the shape\n    r *= 1.15;\n    y -= 0.275 * r;\n\n    var s = r * 2;\n    var s2 = s / 2;\n    var ir = Math.sqrt(3) / 6 * s;      // radius of inner circle\n    var h = Math.sqrt(s * s - s2 * s2); // height\n\n    this.moveTo(x, y + (h - ir));\n    this.lineTo(x + s2, y - ir);\n    this.lineTo(x - s2, y - ir);\n    this.lineTo(x, y + (h - ir));\n    this.closePath();\n  };\n\n  /**\n   * Draw a star shape, a star with 5 points\n   * @param {Number} x horizontal center\n   * @param {Number} y vertical center\n   * @param {Number} r   radius, half the length of the sides of the triangle\n   */\n  CanvasRenderingContext2D.prototype.star = function (x, y, r) {\n    // http://www.html5canvastutorials.com/labs/html5-canvas-star-spinner/\n    this.beginPath();\n\n    // the change in radius and the offset is here to center the shape\n    r *= 0.82;\n    y += 0.1 * r;\n\n    for (var n = 0; n < 10; n++) {\n      var radius = (n % 2 === 0) ? r * 1.3 : r * 0.5;\n      this.lineTo(\n        x + radius * Math.sin(n * 2 * Math.PI / 10),\n        y - radius * Math.cos(n * 2 * Math.PI / 10)\n      );\n    }\n\n    this.closePath();\n  };\n\n  /**\n   * Draw a Diamond shape\n   * @param {Number} x horizontal center\n   * @param {Number} y vertical center\n   * @param {Number} r   radius, half the length of the sides of the triangle\n   */\n  CanvasRenderingContext2D.prototype.diamond = function (x, y, r) {\n    // http://www.html5canvastutorials.com/labs/html5-canvas-star-spinner/\n    this.beginPath();\n\n    this.lineTo(x, y + r);\n    this.lineTo(x + r, y);\n    this.lineTo(x, y - r);\n    this.lineTo(x - r, y);\n\n\n    this.closePath();\n  };\n\n  /**\n   * http://stackoverflow.com/questions/1255512/how-to-draw-a-rounded-rectangle-on-html-canvas\n   */\n  CanvasRenderingContext2D.prototype.roundRect = function (x, y, w, h, r) {\n    var r2d = Math.PI / 180;\n    if (w - ( 2 * r ) < 0) {\n      r = ( w / 2 );\n    } //ensure that the radius isn't too large for x\n    if (h - ( 2 * r ) < 0) {\n      r = ( h / 2 );\n    } //ensure that the radius isn't too large for y\n    this.beginPath();\n    this.moveTo(x + r, y);\n    this.lineTo(x + w - r, y);\n    this.arc(x + w - r, y + r, r, r2d * 270, r2d * 360, false);\n    this.lineTo(x + w, y + h - r);\n    this.arc(x + w - r, y + h - r, r, 0, r2d * 90, false);\n    this.lineTo(x + r, y + h);\n    this.arc(x + r, y + h - r, r, r2d * 90, r2d * 180, false);\n    this.lineTo(x, y + r);\n    this.arc(x + r, y + r, r, r2d * 180, r2d * 270, false);\n    this.closePath();\n  };\n\n  /**\n   * http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas\n   */\n  CanvasRenderingContext2D.prototype.ellipse = function (x, y, w, h) {\n    var kappa = .5522848,\n      ox = (w / 2) * kappa, // control point offset horizontal\n      oy = (h / 2) * kappa, // control point offset vertical\n      xe = x + w,           // x-end\n      ye = y + h,           // y-end\n      xm = x + w / 2,       // x-middle\n      ym = y + h / 2;       // y-middle\n\n    this.beginPath();\n    this.moveTo(x, ym);\n    this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y);\n    this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym);\n    this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye);\n    this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym);\n    this.closePath();\n  };\n\n\n  /**\n   * http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas\n   */\n  CanvasRenderingContext2D.prototype.database = function (x, y, w, h) {\n    var f = 1 / 3;\n    var wEllipse = w;\n    var hEllipse = h * f;\n\n    var kappa = .5522848,\n      ox = (wEllipse / 2) * kappa, // control point offset horizontal\n      oy = (hEllipse / 2) * kappa, // control point offset vertical\n      xe = x + wEllipse,           // x-end\n      ye = y + hEllipse,           // y-end\n      xm = x + wEllipse / 2,       // x-middle\n      ym = y + hEllipse / 2,       // y-middle\n      ymb = y + (h - hEllipse / 2),  // y-midlle, bottom ellipse\n      yeb = y + h;                 // y-end, bottom ellipse\n\n    this.beginPath();\n    this.moveTo(xe, ym);\n\n    this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye);\n    this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym);\n\n    this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y);\n    this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym);\n\n    this.lineTo(xe, ymb);\n\n    this.bezierCurveTo(xe, ymb + oy, xm + ox, yeb, xm, yeb);\n    this.bezierCurveTo(xm - ox, yeb, x, ymb + oy, x, ymb);\n\n    this.lineTo(x, ym);\n  };\n\n\n  /**\n   * Draw an arrow at the end of a line with the given angle.\n   */\n  CanvasRenderingContext2D.prototype.arrowEndpoint = function (x, y, angle, length) {\n    // tail\n    var xt = x - length * Math.cos(angle);\n    var yt = y - length * Math.sin(angle);\n\n    // inner tail\n    var xi = x - length * 0.9 * Math.cos(angle);\n    var yi = y - length * 0.9 * Math.sin(angle);\n\n    // left\n    var xl = xt + length / 3 * Math.cos(angle + 0.5 * Math.PI);\n    var yl = yt + length / 3 * Math.sin(angle + 0.5 * Math.PI);\n\n    // right\n    var xr = xt + length / 3 * Math.cos(angle - 0.5 * Math.PI);\n    var yr = yt + length / 3 * Math.sin(angle - 0.5 * Math.PI);\n\n    this.beginPath();\n    this.moveTo(x, y);\n    this.lineTo(xl, yl);\n    this.lineTo(xi, yi);\n    this.lineTo(xr, yr);\n    this.closePath();\n  };\n\n  /**\n   * Draw an circle an the end of an line with the given angle.\n   */\n  CanvasRenderingContext2D.prototype.circleEndpoint = function (x, y, angle, length) {\n    var radius = length * 0.4;\n    var xc = x - radius * Math.cos(angle);\n    var yc = y - radius * Math.sin(angle);\n    this.circle(xc, yc, radius);\n  };\n\n  /**\n   * Sets up the dashedLine functionality for drawing\n   * Original code came from http://stackoverflow.com/questions/4576724/dotted-stroke-in-canvas\n   * @author David Jordan\n   * @date 2012-08-08\n   */\n  CanvasRenderingContext2D.prototype.dashedLine = function (x, y, x2, y2, pattern) {\n    this.beginPath();\n    this.moveTo(x, y);\n\n    var patternLength = pattern.length;\n    var dx = (x2 - x);\n    var dy = (y2 - y);\n    var slope = dy / dx;\n    var distRemaining = Math.sqrt(dx * dx + dy * dy);\n    var patternIndex = 0;\n    var draw = true;\n    var xStep = 0;\n    var dashLength = pattern[0];\n\n    while (distRemaining >= 0.1) {\n      dashLength = pattern[patternIndex++ % patternLength];\n      if (dashLength > distRemaining) {\n        dashLength = distRemaining;\n      }\n\n      xStep = Math.sqrt(dashLength * dashLength / (1 + slope * slope));\n      xStep = dx < 0 ? -xStep : xStep;\n      x += xStep;\n      y += slope * xStep;\n\n      if (draw === true) {this.lineTo(x,y);}\n      else               {this.moveTo(x,y);}\n\n      distRemaining -= dashLength;\n      draw = !draw;\n    }\n  };\n\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/shapes.js","/**\n * Parse a text source containing data in DOT language into a JSON object.\n * The object contains two lists: one with nodes and one with edges.\n *\n * DOT language reference: http://www.graphviz.org/doc/info/lang.html\n *\n * DOT language attributes: http://graphviz.org/content/attrs\n *\n * @param {String} data     Text containing a graph in DOT-notation\n * @return {Object} graph   An object containing two parameters:\n *                          {Object[]} nodes\n *                          {Object[]} edges\n */\nfunction parseDOT (data) {\n  dot = data;\n  return parseGraph();\n}\n\n// mapping of attributes from DOT (the keys) to vis.js (the values)\nvar NODE_ATTR_MAPPING = {\n  'fontsize': 'font.size',\n  'fontcolor': 'font.color',\n  'labelfontcolor': 'font.color',\n  'fontname': 'font.face',\n  'color': ['color.border', 'color.background'],\n  'fillcolor': 'color.background',\n  'tooltip': 'title',\n  'labeltooltip': 'title'\n};\nvar EDGE_ATTR_MAPPING = Object.create(NODE_ATTR_MAPPING);\nEDGE_ATTR_MAPPING.color = 'color.color';\n\n// token types enumeration\nvar TOKENTYPE = {\n  NULL : 0,\n  DELIMITER : 1,\n  IDENTIFIER: 2,\n  UNKNOWN : 3\n};\n\n// map with all delimiters\nvar DELIMITERS = {\n  '{': true,\n  '}': true,\n  '[': true,\n  ']': true,\n  ';': true,\n  '=': true,\n  ',': true,\n\n  '->': true,\n  '--': true\n};\n\nvar dot = '';                   // current dot file\nvar index = 0;                  // current index in dot file\nvar c = '';                     // current token character in expr\nvar token = '';                 // current token\nvar tokenType = TOKENTYPE.NULL; // type of the token\n\n/**\n * Get the first character from the dot file.\n * The character is stored into the char c. If the end of the dot file is\n * reached, the function puts an empty string in c.\n */\nfunction first() {\n  index = 0;\n  c = dot.charAt(0);\n}\n\n/**\n * Get the next character from the dot file.\n * The character is stored into the char c. If the end of the dot file is\n * reached, the function puts an empty string in c.\n */\nfunction next() {\n  index++;\n  c = dot.charAt(index);\n}\n\n/**\n * Preview the next character from the dot file.\n * @return {String} cNext\n */\nfunction nextPreview() {\n  return dot.charAt(index + 1);\n}\n\n/**\n * Test whether given character is alphabetic or numeric\n * @param {String} c\n * @return {Boolean} isAlphaNumeric\n */\nvar regexAlphaNumeric = /[a-zA-Z_0-9.:#]/;\nfunction isAlphaNumeric(c) {\n  return regexAlphaNumeric.test(c);\n}\n\n/**\n * Merge all options of object b into object b\n * @param {Object} a\n * @param {Object} b\n * @return {Object} a\n */\nfunction merge (a, b) {\n  if (!a) {\n    a = {};\n  }\n\n  if (b) {\n    for (var name in b) {\n      if (b.hasOwnProperty(name)) {\n        a[name] = b[name];\n      }\n    }\n  }\n  return a;\n}\n\n/**\n * Set a value in an object, where the provided parameter name can be a\n * path with nested parameters. For example:\n *\n *     var obj = {a: 2};\n *     setValue(obj, 'b.c', 3);     // obj = {a: 2, b: {c: 3}}\n *\n * @param {Object} obj\n * @param {String} path  A parameter name or dot-separated parameter path,\n *                      like \"color.highlight.border\".\n * @param {*} value\n */\nfunction setValue(obj, path, value) {\n  var keys = path.split('.');\n  var o = obj;\n  while (keys.length) {\n    var key = keys.shift();\n    if (keys.length) {\n      // this isn't the end point\n      if (!o[key]) {\n        o[key] = {};\n      }\n      o = o[key];\n    }\n    else {\n      // this is the end point\n      o[key] = value;\n    }\n  }\n}\n\n/**\n * Add a node to a graph object. If there is already a node with\n * the same id, their attributes will be merged.\n * @param {Object} graph\n * @param {Object} node\n */\nfunction addNode(graph, node) {\n  var i, len;\n  var current = null;\n\n  // find root graph (in case of subgraph)\n  var graphs = [graph]; // list with all graphs from current graph to root graph\n  var root = graph;\n  while (root.parent) {\n    graphs.push(root.parent);\n    root = root.parent;\n  }\n\n  // find existing node (at root level) by its id\n  if (root.nodes) {\n    for (i = 0, len = root.nodes.length; i < len; i++) {\n      if (node.id === root.nodes[i].id) {\n        current = root.nodes[i];\n        break;\n      }\n    }\n  }\n\n  if (!current) {\n    // this is a new node\n    current = {\n      id: node.id\n    };\n    if (graph.node) {\n      // clone default attributes\n      current.attr = merge(current.attr, graph.node);\n    }\n  }\n\n  // add node to this (sub)graph and all its parent graphs\n  for (i = graphs.length - 1; i >= 0; i--) {\n    var g = graphs[i];\n\n    if (!g.nodes) {\n      g.nodes = [];\n    }\n    if (g.nodes.indexOf(current) === -1) {\n      g.nodes.push(current);\n    }\n  }\n\n  // merge attributes\n  if (node.attr) {\n    current.attr = merge(current.attr, node.attr);\n  }\n}\n\n/**\n * Add an edge to a graph object\n * @param {Object} graph\n * @param {Object} edge\n */\nfunction addEdge(graph, edge) {\n  if (!graph.edges) {\n    graph.edges = [];\n  }\n  graph.edges.push(edge);\n  if (graph.edge) {\n    var attr = merge({}, graph.edge);     // clone default attributes\n    edge.attr = merge(attr, edge.attr); // merge attributes\n  }\n}\n\n/**\n * Create an edge to a graph object\n * @param {Object} graph\n * @param {String | Number | Object} from\n * @param {String | Number | Object} to\n * @param {String} type\n * @param {Object | null} attr\n * @return {Object} edge\n */\nfunction createEdge(graph, from, to, type, attr) {\n  var edge = {\n    from: from,\n    to: to,\n    type: type\n  };\n\n  if (graph.edge) {\n    edge.attr = merge({}, graph.edge);  // clone default attributes\n  }\n  edge.attr = merge(edge.attr || {}, attr); // merge attributes\n\n  return edge;\n}\n\n/**\n * Get next token in the current dot file.\n * The token and token type are available as token and tokenType\n */\nfunction getToken() {\n  tokenType = TOKENTYPE.NULL;\n  token = '';\n\n  // skip over whitespaces\n  while (c === ' ' || c === '\\t' || c === '\\n' || c === '\\r') {  // space, tab, enter\n    next();\n  }\n\n  do {\n    var isComment = false;\n\n    // skip comment\n    if (c === '#') {\n      // find the previous non-space character\n      var i = index - 1;\n      while (dot.charAt(i) === ' ' || dot.charAt(i) === '\\t') {\n        i--;\n      }\n      if (dot.charAt(i) === '\\n' || dot.charAt(i) === '') {\n        // the # is at the start of a line, this is indeed a line comment\n        while (c != '' && c != '\\n') {\n          next();\n        }\n        isComment = true;\n      }\n    }\n    if (c === '/' && nextPreview() === '/') {\n      // skip line comment\n      while (c != '' && c != '\\n') {\n        next();\n      }\n      isComment = true;\n    }\n    if (c === '/' && nextPreview() === '*') {\n      // skip block comment\n      while (c != '') {\n        if (c === '*' && nextPreview() === '/') {\n          // end of block comment found. skip these last two characters\n          next();\n          next();\n          break;\n        }\n        else {\n          next();\n        }\n      }\n      isComment = true;\n    }\n\n    // skip over whitespaces\n    while (c === ' ' || c === '\\t' || c === '\\n' || c === '\\r') {  // space, tab, enter\n      next();\n    }\n  }\n  while (isComment);\n\n  // check for end of dot file\n  if (c === '') {\n    // token is still empty\n    tokenType = TOKENTYPE.DELIMITER;\n    return;\n  }\n\n  // check for delimiters consisting of 2 characters\n  var c2 = c + nextPreview();\n  if (DELIMITERS[c2]) {\n    tokenType = TOKENTYPE.DELIMITER;\n    token = c2;\n    next();\n    next();\n    return;\n  }\n\n  // check for delimiters consisting of 1 character\n  if (DELIMITERS[c]) {\n    tokenType = TOKENTYPE.DELIMITER;\n    token = c;\n    next();\n    return;\n  }\n\n  // check for an identifier (number or string)\n  // TODO: more precise parsing of numbers/strings (and the port separator ':')\n  if (isAlphaNumeric(c) || c === '-') {\n    token += c;\n    next();\n\n    while (isAlphaNumeric(c)) {\n      token += c;\n      next();\n    }\n    if (token === 'false') {\n      token = false;   // convert to boolean\n    }\n    else if (token === 'true') {\n      token = true;   // convert to boolean\n    }\n    else if (!isNaN(Number(token))) {\n      token = Number(token); // convert to number\n    }\n    tokenType = TOKENTYPE.IDENTIFIER;\n    return;\n  }\n\n  // check for a string enclosed by double quotes\n  if (c === '\"') {\n    next();\n    while (c != '' && (c != '\"' || (c === '\"' && nextPreview() === '\"'))) {\n      token += c;\n      if (c === '\"') { // skip the escape character\n        next();\n      }\n      next();\n    }\n    if (c != '\"') {\n      throw newSyntaxError('End of string \" expected');\n    }\n    next();\n    tokenType = TOKENTYPE.IDENTIFIER;\n    return;\n  }\n\n  // something unknown is found, wrong characters, a syntax error\n  tokenType = TOKENTYPE.UNKNOWN;\n  while (c != '') {\n    token += c;\n    next();\n  }\n  throw new SyntaxError('Syntax error in part \"' + chop(token, 30) + '\"');\n}\n\n/**\n * Parse a graph.\n * @returns {Object} graph\n */\nfunction parseGraph() {\n  var graph = {};\n\n  first();\n  getToken();\n\n  // optional strict keyword\n  if (token === 'strict') {\n    graph.strict = true;\n    getToken();\n  }\n\n  // graph or digraph keyword\n  if (token === 'graph' || token === 'digraph') {\n    graph.type = token;\n    getToken();\n  }\n\n  // optional graph id\n  if (tokenType === TOKENTYPE.IDENTIFIER) {\n    graph.id = token;\n    getToken();\n  }\n\n  // open angle bracket\n  if (token != '{') {\n    throw newSyntaxError('Angle bracket { expected');\n  }\n  getToken();\n\n  // statements\n  parseStatements(graph);\n\n  // close angle bracket\n  if (token != '}') {\n    throw newSyntaxError('Angle bracket } expected');\n  }\n  getToken();\n\n  // end of file\n  if (token !== '') {\n    throw newSyntaxError('End of file expected');\n  }\n  getToken();\n\n  // remove temporary default options\n  delete graph.node;\n  delete graph.edge;\n  delete graph.graph;\n\n  return graph;\n}\n\n/**\n * Parse a list with statements.\n * @param {Object} graph\n */\nfunction parseStatements (graph) {\n  while (token !== '' && token != '}') {\n    parseStatement(graph);\n    if (token === ';') {\n      getToken();\n    }\n  }\n}\n\n/**\n * Parse a single statement. Can be a an attribute statement, node\n * statement, a series of node statements and edge statements, or a\n * parameter.\n * @param {Object} graph\n */\nfunction parseStatement(graph) {\n  // parse subgraph\n  var subgraph = parseSubgraph(graph);\n  if (subgraph) {\n    // edge statements\n    parseEdge(graph, subgraph);\n\n    return;\n  }\n\n  // parse an attribute statement\n  var attr = parseAttributeStatement(graph);\n  if (attr) {\n    return;\n  }\n\n  // parse node\n  if (tokenType != TOKENTYPE.IDENTIFIER) {\n    throw newSyntaxError('Identifier expected');\n  }\n  var id = token; // id can be a string or a number\n  getToken();\n\n  if (token === '=') {\n    // id statement\n    getToken();\n    if (tokenType != TOKENTYPE.IDENTIFIER) {\n      throw newSyntaxError('Identifier expected');\n    }\n    graph[id] = token;\n    getToken();\n    // TODO: implement comma separated list with \"a_list: ID=ID [','] [a_list] \"\n  }\n  else {\n    parseNodeStatement(graph, id);\n  }\n}\n\n/**\n * Parse a subgraph\n * @param {Object} graph    parent graph object\n * @return {Object | null} subgraph\n */\nfunction parseSubgraph (graph) {\n  var subgraph = null;\n\n  // optional subgraph keyword\n  if (token === 'subgraph') {\n    subgraph = {};\n    subgraph.type = 'subgraph';\n    getToken();\n\n    // optional graph id\n    if (tokenType === TOKENTYPE.IDENTIFIER) {\n      subgraph.id = token;\n      getToken();\n    }\n  }\n\n  // open angle bracket\n  if (token === '{') {\n    getToken();\n\n    if (!subgraph) {\n      subgraph = {};\n    }\n    subgraph.parent = graph;\n    subgraph.node = graph.node;\n    subgraph.edge = graph.edge;\n    subgraph.graph = graph.graph;\n\n    // statements\n    parseStatements(subgraph);\n\n    // close angle bracket\n    if (token != '}') {\n      throw newSyntaxError('Angle bracket } expected');\n    }\n    getToken();\n\n    // remove temporary default options\n    delete subgraph.node;\n    delete subgraph.edge;\n    delete subgraph.graph;\n    delete subgraph.parent;\n\n    // register at the parent graph\n    if (!graph.subgraphs) {\n      graph.subgraphs = [];\n    }\n    graph.subgraphs.push(subgraph);\n  }\n\n  return subgraph;\n}\n\n/**\n * parse an attribute statement like \"node [shape=circle fontSize=16]\".\n * Available keywords are 'node', 'edge', 'graph'.\n * The previous list with default attributes will be replaced\n * @param {Object} graph\n * @returns {String | null} keyword Returns the name of the parsed attribute\n *                                  (node, edge, graph), or null if nothing\n *                                  is parsed.\n */\nfunction parseAttributeStatement (graph) {\n  // attribute statements\n  if (token === 'node') {\n    getToken();\n\n    // node attributes\n    graph.node = parseAttributeList();\n    return 'node';\n  }\n  else if (token === 'edge') {\n    getToken();\n\n    // edge attributes\n    graph.edge = parseAttributeList();\n    return 'edge';\n  }\n  else if (token === 'graph') {\n    getToken();\n\n    // graph attributes\n    graph.graph = parseAttributeList();\n    return 'graph';\n  }\n\n  return null;\n}\n\n/**\n * parse a node statement\n * @param {Object} graph\n * @param {String | Number} id\n */\nfunction parseNodeStatement(graph, id) {\n  // node statement\n  var node = {\n    id: id\n  };\n  var attr = parseAttributeList();\n  if (attr) {\n    node.attr = attr;\n  }\n  addNode(graph, node);\n\n  // edge statements\n  parseEdge(graph, id);\n}\n\n/**\n * Parse an edge or a series of edges\n * @param {Object} graph\n * @param {String | Number} from        Id of the from node\n */\nfunction parseEdge(graph, from) {\n  while (token === '->' || token === '--') {\n    var to;\n    var type = token;\n    getToken();\n\n    var subgraph = parseSubgraph(graph);\n    if (subgraph) {\n      to = subgraph;\n    }\n    else {\n      if (tokenType != TOKENTYPE.IDENTIFIER) {\n        throw newSyntaxError('Identifier or subgraph expected');\n      }\n      to = token;\n      addNode(graph, {\n        id: to\n      });\n      getToken();\n    }\n\n    // parse edge attributes\n    var attr = parseAttributeList();\n\n    // create edge\n    var edge = createEdge(graph, from, to, type, attr);\n    addEdge(graph, edge);\n\n    from = to;\n  }\n}\n\n/**\n * Parse a set with attributes,\n * for example [label=\"1.000\", shape=solid]\n * @return {Object | null} attr\n */\nfunction parseAttributeList() {\n  var attr = null;\n\n  while (token === '[') {\n    getToken();\n    attr = {};\n    while (token !== '' && token != ']') {\n      if (tokenType != TOKENTYPE.IDENTIFIER) {\n        throw newSyntaxError('Attribute name expected');\n      }\n      var name = token;\n\n      getToken();\n      if (token != '=') {\n        throw newSyntaxError('Equal sign = expected');\n      }\n      getToken();\n\n      if (tokenType != TOKENTYPE.IDENTIFIER) {\n        throw newSyntaxError('Attribute value expected');\n      }\n      var value = token;\n      setValue(attr, name, value); // name can be a path\n\n      getToken();\n      if (token ==',') {\n        getToken();\n      }\n    }\n\n    if (token != ']') {\n      throw newSyntaxError('Bracket ] expected');\n    }\n    getToken();\n  }\n\n  return attr;\n}\n\n/**\n * Create a syntax error with extra information on current token and index.\n * @param {String} message\n * @returns {SyntaxError} err\n */\nfunction newSyntaxError(message) {\n  return new SyntaxError(message + ', got \"' + chop(token, 30) + '\" (char ' + index + ')');\n}\n\n/**\n * Chop off text after a maximum length\n * @param {String} text\n * @param {Number} maxLength\n * @returns {String}\n */\nfunction chop (text, maxLength) {\n  return (text.length <= maxLength) ? text : (text.substr(0, 27) + '...');\n}\n\n/**\n * Execute a function fn for each pair of elements in two arrays\n * @param {Array | *} array1\n * @param {Array | *} array2\n * @param {function} fn\n */\nfunction forEach2(array1, array2, fn) {\n  if (Array.isArray(array1)) {\n    array1.forEach(function (elem1) {\n      if (Array.isArray(array2)) {\n        array2.forEach(function (elem2)  {\n          fn(elem1, elem2);\n        });\n      }\n      else {\n        fn(elem1, array2);\n      }\n    });\n  }\n  else {\n    if (Array.isArray(array2)) {\n      array2.forEach(function (elem2)  {\n        fn(array1, elem2);\n      });\n    }\n    else {\n      fn(array1, array2);\n    }\n  }\n}\n\n/**\n * Set a nested property on an object\n * When nested objects are missing, they will be created.\n * For example setProp({}, 'font.color', 'red') will return {font: {color: 'red'}}\n * @param {Object} object\n * @param {string} path   A dot separated string like 'font.color'\n * @param {*} value       Value for the property\n * @return {Object} Returns the original object, allows for chaining.\n */\nfunction setProp(object, path, value) {\n  var names = path.split('.');\n  var prop = names.pop();\n\n  // traverse over the nested objects\n  var obj = object;\n  for (var i = 0; i < names.length; i++) {\n    var name = names[i];\n    if (!(name in obj)) {\n      obj[name] = {};\n    }\n    obj = obj[name];\n  }\n\n  // set the property value\n  obj[prop] = value;\n\n  return object;\n}\n\n/**\n * Convert an object with DOT attributes to their vis.js equivalents.\n * @param {Object} attr     Object with DOT attributes\n * @param {Object} mapping\n * @return {Object}         Returns an object with vis.js attributes\n */\nfunction convertAttr (attr, mapping) {\n  var converted = {};\n\n  for (var prop in attr) {\n    if (attr.hasOwnProperty(prop)) {\n      var visProp = mapping[prop];\n      if (Array.isArray(visProp)) {\n        visProp.forEach(function (visPropI) {\n          setProp(converted, visPropI, attr[prop]);\n        })\n      }\n      else if (typeof visProp === 'string') {\n        setProp(converted, visProp, attr[prop]);\n      }\n      else {\n        setProp(converted, prop, attr[prop]);\n      }\n    }\n  }\n\n  return converted;\n}\n\n/**\n * Convert a string containing a graph in DOT language into a map containing\n * with nodes and edges in the format of graph.\n * @param {String} data         Text containing a graph in DOT-notation\n * @return {Object} graphData\n */\nfunction DOTToGraph (data) {\n  // parse the DOT file\n  var dotData = parseDOT(data);\n  var graphData = {\n    nodes: [],\n    edges: [],\n    options: {}\n  };\n\n  // copy the nodes\n  if (dotData.nodes) {\n    dotData.nodes.forEach(function (dotNode) {\n      var graphNode = {\n        id: dotNode.id,\n        label: String(dotNode.label || dotNode.id)\n      };\n      merge(graphNode, convertAttr(dotNode.attr, NODE_ATTR_MAPPING));\n      if (graphNode.image) {\n        graphNode.shape = 'image';\n      }\n      graphData.nodes.push(graphNode);\n    });\n  }\n\n  // copy the edges\n  if (dotData.edges) {\n    /**\n     * Convert an edge in DOT format to an edge with VisGraph format\n     * @param {Object} dotEdge\n     * @returns {Object} graphEdge\n     */\n    var convertEdge = function (dotEdge) {\n      var graphEdge = {\n        from: dotEdge.from,\n        to: dotEdge.to\n      };\n      merge(graphEdge, convertAttr(dotEdge.attr, EDGE_ATTR_MAPPING));\n      graphEdge.arrows = (dotEdge.type === '->') ? 'to' : undefined;\n\n      return graphEdge;\n    };\n\n    dotData.edges.forEach(function (dotEdge) {\n      var from, to;\n      if (dotEdge.from instanceof Object) {\n        from = dotEdge.from.nodes;\n      }\n      else {\n        from = {\n          id: dotEdge.from\n        }\n      }\n\n      // TODO: support of solid/dotted/dashed edges (attr = 'style')\n      // TODO: support for attributes 'dir' and 'arrowhead' (edge arrows)\n\n      if (dotEdge.to instanceof Object) {\n        to = dotEdge.to.nodes;\n      }\n      else {\n        to = {\n          id: dotEdge.to\n        }\n      }\n\n      if (dotEdge.from instanceof Object && dotEdge.from.edges) {\n        dotEdge.from.edges.forEach(function (subEdge) {\n          var graphEdge = convertEdge(subEdge);\n          graphData.edges.push(graphEdge);\n        });\n      }\n\n      forEach2(from, to, function (from, to) {\n        var subEdge = createEdge(graphData, from.id, to.id, dotEdge.type, dotEdge.attr);\n        var graphEdge = convertEdge(subEdge);\n        graphData.edges.push(graphEdge);\n      });\n\n      if (dotEdge.to instanceof Object && dotEdge.to.edges) {\n        dotEdge.to.edges.forEach(function (subEdge) {\n          var graphEdge = convertEdge(subEdge);\n          graphData.edges.push(graphEdge);\n        });\n      }\n    });\n  }\n\n  // copy the options\n  if (dotData.attr) {\n    graphData.options = dotData.attr;\n  }\n\n  return graphData;\n}\n\n// exports\nexports.parseDOT   = parseDOT;\nexports.DOTToGraph = DOTToGraph;\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/dotparser.js","\nfunction parseGephi(gephiJSON, optionsObj) {\n  var edges = [];\n  var nodes = [];\n  var options = {\n    edges: {\n      inheritColor: false\n    },\n    nodes: {\n      fixed: false,\n      parseColor: false\n    }\n  };\n\n  if (optionsObj !== undefined) {\n    if (optionsObj.fixed !== undefined)        {options.nodes.fixed = optionsObj.fixed}\n    if (optionsObj.parseColor !== undefined)   {options.nodes.parseColor = optionsObj.parseColor}\n    if (optionsObj.inheritColor !== undefined) {options.edges.inheritColor = optionsObj.inheritColor}\n  }\n\n  var gEdges = gephiJSON.edges;\n  var gNodes = gephiJSON.nodes;\n  for (var i = 0; i < gEdges.length; i++) {\n    var edge = {};\n    var gEdge = gEdges[i];\n    edge['id'] = gEdge.id;\n    edge['from'] = gEdge.source;\n    edge['to'] = gEdge.target;\n    edge['attributes'] = gEdge.attributes;\n    edge['label'] = gEdge.label;\n    edge['title'] = gEdge.attributes !== undefined ? gEdge.attributes.title : undefined;\n    if (gEdge['type'] === 'Directed') {\n      edge['arrows'] = 'to';\n    }\n//    edge['value'] = gEdge.attributes !== undefined ? gEdge.attributes.Weight : undefined;\n//    edge['width'] = edge['value'] !== undefined ? undefined : edgegEdge.size;\n    if (gEdge.color && options.inheritColor === false) {\n      edge['color'] = gEdge.color;\n    }\n    edges.push(edge);\n  }\n\n  for (var i = 0; i < gNodes.length; i++) {\n    var node = {};\n    var gNode = gNodes[i];\n    node['id'] = gNode.id;\n    node['attributes'] = gNode.attributes;\n    node['title'] = gNode.title;\n    node['x'] = gNode.x;\n    node['y'] = gNode.y;\n    node['label'] = gNode.label;\n    node['title'] = gNode.attributes !== undefined ? gNode.attributes.title : undefined;\n    if (options.nodes.parseColor === true) {\n      node['color'] = gNode.color;\n    }\n    else {\n      node['color'] = gNode.color !== undefined ? {background:gNode.color, border:gNode.color, highlight: {background:gNode.color, border:gNode.color}, hover:{background:gNode.color, border:gNode.color}} : undefined;\n    }\n    node['size'] = gNode.size;\n    node['fixed'] = options.nodes.fixed && gNode.x !== undefined && gNode.y !== undefined;\n    nodes.push(node);\n  }\n\n  return {nodes:nodes, edges:edges};\n}\n\nexports.parseGephi = parseGephi;\n\n\n// WEBPACK FOOTER //\n// ./lib/network/gephiParser.js","// English\nexports['en'] = {\n  edit: 'Edit',\n  del: 'Delete selected',\n  back: 'Back',\n  addNode: 'Add Node',\n  addEdge: 'Add Edge',\n  editNode: 'Edit Node',\n  editEdge: 'Edit Edge',\n  addDescription: 'Click in an empty space to place a new node.',\n  edgeDescription: 'Click on a node and drag the edge to another node to connect them.',\n  editEdgeDescription: 'Click on the control points and drag them to a node to connect to it.',\n  createEdgeError: 'Cannot link edges to a cluster.',\n  deleteClusterError: 'Clusters cannot be deleted.',\n  editClusterError: 'Clusters cannot be edited.'\n};\nexports['en_EN'] = exports['en'];\nexports['en_US'] = exports['en'];\n\n// German\nexports['de'] = {\n  edit: 'Editieren',\n  del: 'L\\u00f6sche Auswahl',\n  back: 'Zur\\u00fcck',\n  addNode: 'Knoten hinzuf\\u00fcgen',\n  addEdge: 'Kante hinzuf\\u00fcgen',\n  editNode: 'Knoten editieren',\n  editEdge: 'Kante editieren',\n  addDescription: 'Klicke auf eine freie Stelle, um einen neuen Knoten zu plazieren.',\n  edgeDescription: 'Klicke auf einen Knoten und ziehe die Kante zu einem anderen Knoten, um diese zu verbinden.',\n  editEdgeDescription: 'Klicke auf die Verbindungspunkte und ziehe diese auf einen Knoten, um sie zu verbinden.',\n  createEdgeError: 'Es ist nicht m\\u00f6glich, Kanten mit Clustern zu verbinden.',\n  deleteClusterError: 'Cluster k\\u00f6nnen nicht gel\\u00f6scht werden.',\n  editClusterError: 'Cluster k\\u00f6nnen nicht editiert werden.'\n};\nexports['de_DE'] = exports['de'];\n\n// Spanish\nexports['es'] = {\n  edit: 'Editar',\n  del: 'Eliminar selecci\\u00f3n',\n  back: '\\u00c1tras',\n  addNode: 'A\\u00f1adir nodo',\n  addEdge: 'A\\u00f1adir arista',\n  editNode: 'Editar nodo',\n  editEdge: 'Editar arista',\n  addDescription: 'Haga clic en un lugar vac\\u00edo para colocar un nuevo nodo.',\n  edgeDescription: 'Haga clic en un nodo y arrastre la arista hacia otro nodo para conectarlos.',\n  editEdgeDescription: 'Haga clic en un punto de control y arrastrelo a un nodo para conectarlo.',\n  createEdgeError: 'No se puede conectar una arista a un grupo.',\n  deleteClusterError: 'No es posible eliminar grupos.',\n  editClusterError: 'No es posible editar grupos.'\n};\nexports['es_ES'] = exports['es'];\n\n//Italiano\nexports['it'] = {\n  edit: 'Modifica',\n  del: 'Cancella la selezione',\n  back: 'Indietro',\n  addNode: 'Aggiungi un nodo',\n  addEdge: 'Aggiungi un vertice',\n  editNode: 'Modifica il nodo',\n  editEdge: 'Modifica il vertice',\n  addDescription: 'Clicca per aggiungere un nuovo nodo',\n  edgeDescription: 'Clicca su un nodo e trascinalo ad un altro nodo per connetterli.',\n  editEdgeDescription: 'Clicca sui Punti di controllo e trascinali ad un nodo per connetterli.',\n  createEdgeError: 'Non si possono collegare vertici ad un cluster',\n  deleteClusterError: 'I cluster non possono essere cancellati',\n  editClusterError: 'I clusters non possono essere modificati.'\n};\nexports['it_IT'] = exports['it'];\n\n// Dutch\nexports['nl'] = {\n  edit: 'Wijzigen',\n  del: 'Selectie verwijderen',\n  back: 'Terug',\n  addNode: 'Node toevoegen',\n  addEdge: 'Link toevoegen',\n  editNode: 'Node wijzigen',\n  editEdge: 'Link wijzigen',\n  addDescription: 'Klik op een leeg gebied om een nieuwe node te maken.',\n  edgeDescription: 'Klik op een node en sleep de link naar een andere node om ze te verbinden.',\n  editEdgeDescription: 'Klik op de verbindingspunten en sleep ze naar een node om daarmee te verbinden.',\n  createEdgeError: 'Kan geen link maken naar een cluster.',\n  deleteClusterError: 'Clusters kunnen niet worden verwijderd.',\n  editClusterError: 'Clusters kunnen niet worden aangepast.'\n};\nexports['nl_NL'] = exports['nl'];\nexports['nl_BE'] = exports['nl'];\n\n// Portuguese Brazil\nexports['pt-br'] = {\n  edit: 'Editar',\n  del: 'Remover selecionado',\n  back: 'Voltar',\n  addNode: 'Adicionar nó',\n  addEdge: 'Adicionar aresta',\n  editNode: 'Editar nó',\n  editEdge: 'Editar aresta',\n  addDescription: 'Clique em um espaço em branco para adicionar um novo nó',\n  edgeDescription: 'Clique em um nó e arraste a aresta até outro nó para conectá-los',\n  editEdgeDescription: 'Clique nos pontos de controle e os arraste para um nó para conectá-los',\n  createEdgeError: 'Não foi possível linkar arestas a um cluster.',\n  deleteClusterError: 'Clusters não puderam ser removidos.',\n  editClusterError: 'Clusters não puderam ser editados.'\n};\nexports['pt-BR'] = exports['pt-br'];\nexports['pt_BR'] = exports['pt-br'];\nexports['pt_br'] = exports['pt-br'];\n\n// Russian\nexports['ru'] = {\n  edit: 'Редактировать',\n  del: 'Удалить выбранное',\n  back: 'Ð?азад',\n  addNode: 'Добавить узел',\n  addEdge: 'Добавить ребро',\n  editNode: 'Редактировать узел',\n  editEdge: 'Редактировать ребро',\n  addDescription: 'Кликните в Ñ?вободное меÑ?то, чтобы добавить новый узел.',\n  edgeDescription: 'Кликните на узел и протÑ?ните ребро к другому узлу, чтобы Ñ?оединить их.',\n  editEdgeDescription: 'Кликните на контрольные точки и перетащите их в узел, чтобы подключитьÑ?Ñ? к нему.',\n  createEdgeError: 'Ð?евозможно Ñ?оединить ребра в клаÑ?тер.',\n  deleteClusterError: 'КлаÑ?теры не могут быть удалены',\n  editClusterError: 'КлаÑ?теры недоÑ?тупны длÑ? редактированиÑ?.'\n};\nexports['ru_RU'] = exports['ru'];\n\n\n\n// WEBPACK FOOTER //\n// ./lib/network/locales.js"],"sourceRoot":""}

=====================================================
== File: src/main/webapp/resources/plugin_extension/visjs/vis.map
=====================================================
{"version":3,"sources":["vis.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","util","extend","_interopRequireDefault","obj","__esModule","default","_getIterator2","_getIterator3","_create","_create2","_keys","_keys2","_typeof2","_typeof3","moment","uuid","isNumber","object","Number","recursiveDOMDelete","DOMobject","hasChildNodes","firstChild","removeChild","giveRange","min","max","total","value","scale","Math","isString","String","isDate","Date","ASPDateRegex","exec","isNaN","parse","randomUUID","v4","assignAllKeys","prop","hasOwnProperty","fillIfDefined","a","b","allowDeletion","arguments","length","undefined","protoExtend","i","other","selectiveExtend","props","Array","isArray","Error","selectiveDeepExtend","TypeError","constructor","Object","deepExtend","selectiveNotDeepExtend","indexOf","push","equalArray","len","convert","type","match","Boolean","valueOf","isMoment","toDate","getType","toISOString","format","copyAndExtendArray","arr","newValue","newArr","copyArray","getAbsoluteLeft","elem","getBoundingClientRect","left","getAbsoluteRight","right","getAbsoluteTop","top","addClassName","classNames","classes","className","split","newClasses","concat","filter","join","removeClassName","oldClasses","forEach","callback","toArray","array","updateProperty","key","throttle","fn","scheduled","requestAnimationFrame","addEventListener","element","action","listener","useCapture","navigator","userAgent","attachEvent","removeEventListener","detachEvent","preventDefault","event","window","returnValue","getTarget","target","srcElement","nodeType","parentNode","hasParent","parent","e","option","asBoolean","defaultValue","asNumber","asString","asSize","asElement","hexToRGB","hex","shorthandRegex","replace","r","g","result","parseInt","overrideOpacity","color","opacity","rgb","substr","RGBToHex","red","green","blue","toString","slice","parseColor","isValidRGB","map","isValidHex","hsv","hexToHSV","lighterColorHSV","h","s","v","darkerColorHSV","darkerColorHex","HSVToHex","lighterColorHex","background","border","highlight","hover","RGBToHSV","minRGB","maxRGB","d","cssUtil","cssText","styles","style","trim","parts","addCssText","currentStyles","newStyles","removeCssText","removeStyles","HSVToRGB","floor","f","q","t","test","isValidRGBA","rgba","selectiveBridgeObject","fields","referenceObject","objectTo","bridgeObject","insertSort","compare","k","j","mergeOptions","mergeTarget","options","globalOptions","enabled","binarySearchCustom","orderedItems","comparator","field","field2","iteration","low","high","middle","item","searchResult","binarySearchValue","sidePreference","prevValue","nextValue","easingFunctions","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","getScrollBarWidth","inner","document","createElement","width","height","outer","position","visibility","overflow","appendChild","body","w1","offsetWidth","w2","clientWidth","topMost","pile","accessors","candidate","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","next","done","member","err","global","hide","Iterators","TO_STRING_TAG","collections","NAME","Collection","proto","prototype","addToUnscopables","step","toIObject","iterated","kind","_t","_i","_k","O","index","Arguments","IObject","defined","it","cof","propertyIsEnumerable","LIBRARY","$export","redefine","has","$iterCreate","setToStringTag","getPrototypeOf","ITERATOR","BUGGY","keys","returnThis","Base","Constructor","DEFAULT","IS_SET","FORCED","methods","IteratorPrototype","getMethod","TAG","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","entries","name","values","P","F","core","ctx","source","own","out","IS_FORCED","IS_GLOBAL","G","IS_STATIC","S","IS_PROTO","IS_BIND","B","IS_WRAP","W","expProto","C","apply","Function","virtual","R","U","self","__g","version","__e","aFunction","that","dP","createDesc","anObject","IE8_DOM_DEFINE","toPrimitive","defineProperty","Attributes","isObject","get","is","val","bitmap","enumerable","configurable","writable","create","descriptor","dPs","enumBugKeys","IE_PROTO","Empty","createDict","iframeDocument","iframe","display","src","contentWindow","open","write","lt","close","Properties","getKeys","defineProperties","$keys","arrayIndexOf","names","toLength","toIndex","IS_INCLUDES","$this","el","fromIndex","toInteger","ceil","shared","uid","store","px","random","documentElement","def","tag","stat","Symbol","USE_SYMBOL","toObject","ObjectProto","$at","point","TO_STRING","pos","l","charCodeAt","charAt","getIterator","iterFn","classof","getIteratorMethod","ARG","tryGet","T","callee","$Object","D","fails","KEY","exp","_iterator2","_symbol","_symbol2","_typeof","DESCRIPTORS","META","$fails","wks","wksExt","wksDefine","keyOf","enumKeys","gOPNExt","$GOPD","$DP","gOPD","gOPN","$Symbol","$JSON","JSON","_stringify","stringify","HIDDEN","TO_PRIMITIVE","isEnum","SymbolRegistry","AllSymbols","OPSymbols","USE_NATIVE","QObject","setter","findChild","setSymbolDesc","protoDesc","wrap","sym","isSymbol","iterator","$defineProperty","$defineProperties","$create","$propertyIsEnumerable","E","$getOwnPropertyDescriptor","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","$set","set","symbols","for","keyFor","useSetter","useSimple","getOwnPropertyDescriptor","getOwnPropertyNames","getOwnPropertySymbols","replacer","$replacer","args","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","w","fastKey","getWeak","onFreeze","meta","NEED","gOPS","pIE","getSymbols","arg","windowNames","getWindowNames","hiddenKeys","hooks","hookCallback","input","isObjectEmpty","isUndefined","res","hasOwnProp","createUTC","locale","strict","createLocalOrUTC","utc","defaultParsingFlags","empty","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","meridiem","rfc2822","weekdayMismatch","getParsingFlags","_pf","isValid","_isValid","flags","parsedParts","some$1","isNowValid","_d","getTime","invalidWeekday","_strict","bigHour","isFrozen","createInvalid","NaN","copyConfig","to","from","_isAMomentObject","_f","_l","_tzm","_isUTC","_offset","_locale","momentProperties","Moment","config","updateInProgress","updateOffset","absFloor","number","toInt","argumentForCoercion","coercedNumber","isFinite","compareArrays","array1","array2","dontConvert","lengthDiff","abs","diffs","warn","msg","suppressDeprecationWarnings","console","deprecate","firstTime","deprecationHandler","stack","deprecateSimple","deprecations","isFunction","_config","_dayOfMonthOrdinalParseLenient","RegExp","_dayOfMonthOrdinalParse","_ordinalParse","mergeConfigs","parentConfig","childConfig","Locale","calendar","mom","now","output","_calendar","longDateFormat","_longDateFormat","formatUpper","toUpperCase","invalidDate","_invalidDate","ordinal","_ordinal","relativeTime","withoutSuffix","string","isFuture","_relativeTime","pastFuture","diff","addUnitAlias","unit","shorthand","lowerCase","toLowerCase","aliases","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","addUnitPriority","priority","priorities","getPrioritizedUnits","unitsObj","u","sort","makeGetSet","keepTime","set$1","stringGet","stringSet","prioritized","zeroFill","targetLength","forceSign","absNumber","zerosToFill","pow","addFormatToken","token","padded","func","formatTokenFunctions","localeData","removeFormattingTokens","makeFormatFunction","formattingTokens","formatMoment","expandFormat","formatFunctions","replaceLongDateFormatTokens","localFormattingTokens","lastIndex","addRegexToken","regex","strictRegex","regexes","isStrict","getParseRegexForToken","unescapeFormat","regexEscape","matched","p1","p2","p3","p4","addParseToken","tokens","addWeekParseToken","_w","addTimeToArrayFromToken","_a","daysInMonth","year","month","UTC","getUTCDate","localeMonths","_months","isFormat","MONTHS_IN_FORMAT","localeMonthsShort","_monthsShort","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","monthsShort","months","indexOf$1","localeMonthsParse","_monthsParseExact","setMonth","dayOfMonth","monthsParse","date","getSetMonth","getDaysInMonth","monthsShortRegex","computeMonthsParse","_monthsShortStrictRegex","_monthsShortRegex","defaultMonthsShortRegex","monthsRegex","_monthsStrictRegex","_monthsRegex","defaultMonthsRegex","cmpLenRev","shortPieces","longPieces","mixedPieces","daysInYear","isLeapYear","getIsLeapYear","createDate","y","M","ms","getFullYear","setFullYear","createUTCDate","getUTCFullYear","setUTCFullYear","firstWeekOffset","dow","doy","fwd","getUTCDay","dayOfYearFromWeeks","week","weekday","resYear","resDayOfYear","localWeekday","weekOffset","dayOfYear","weekOfYear","resWeek","weeksInYear","weekOffsetNext","localeWeek","_week","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","add","getSetISOWeek","parseWeekday","weekdaysParse","parseIsoWeekday","localeWeekdays","_weekdays","day","localeWeekdaysShort","_weekdaysShort","localeWeekdaysMin","_weekdaysMin","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","weekdaysMin","weekdaysShort","weekdays","localeWeekdaysParse","_weekdaysParseExact","_fullWeekdaysParse","getSetDayOfWeek","getDay","getSetLocaleDayOfWeek","getSetISODayOfWeek","weekdaysRegex","computeWeekdaysParse","_weekdaysStrictRegex","_weekdaysRegex","defaultWeekdaysRegex","weekdaysShortRegex","_weekdaysShortStrictRegex","_weekdaysShortRegex","defaultWeekdaysShortRegex","weekdaysMinRegex","_weekdaysMinStrictRegex","_weekdaysMinRegex","defaultWeekdaysMinRegex","minp","shortp","longp","minPieces","hFormat","hours","kFormat","lowercase","minutes","matchMeridiem","_meridiemParse","localeIsPM","localeMeridiem","isLower","normalizeLocale","chooseLocale","loadLocale","oldLocale","locales","globalLocale","_abbr","code","getSetGlobalLocale","data","getLocale","defineLocale","baseConfig","abbr","parentLocale","localeFamilies","x","updateLocale","listLocales","keys$1","checkOverflow","MONTH","DATE","YEAR","HOUR","MINUTE","SECOND","MILLISECOND","_overflowDayOfYear","_overflowWeeks","WEEK","_overflowWeekday","WEEKDAY","configFromISO","allowTime","dateFormat","timeFormat","tzFormat","extendedIsoRegex","basicIsoRegex","isoDates","isoTimes","tzRegex","configFromStringAndFormat","configFromRFC2822","dayFormat","timezone","timezoneIndex","timezones"," GMT"," EDT"," EST"," CDT"," CST"," MDT"," MST"," PDT"," PST","military","basicRfcRegex","momentDate","momentDay","splice","configFromString","aspNetJsonRegex","createFromInputFallback","defaults","currentDateArray","nowValue","_useUTC","getUTCMonth","getMonth","getDate","configFromArray","currentDate","yearToUse","dayOfYearFromWeekInfo","_dayOfYear","_nextDay","setUTCMinutes","getUTCMinutes","weekYear","temp","weekdayOverflow","GG","createLocal","curWeek","gg","ISO_8601","RFC_2822","parsedInput","skipped","stringLength","totalParsedInputLength","_meridiem","meridiemFixWrap","hour","isPm","meridiemHour","isPM","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","score","configFromObject","minute","second","millisecond","createFromConfig","prepareConfig","preparse","configFromInput","isUTC","pickBy","moments","isDurationValid","ordering","unitHasDecimal","parseFloat","isValid$1","createInvalid$1","createDuration","Duration","duration","years","quarters","quarter","weeks","days","seconds","milliseconds","_milliseconds","_days","_data","_bubble","isDuration","absRound","round","offset","separator","utcOffset","sign","offsetFromString","matcher","matches","chunk","chunkOffset","cloneWithOffset","model","clone","setTime","local","getDateOffset","getTimezoneOffset","getSetOffset","keepLocalTime","keepMinutes","localAdjust","matchShortOffset","_changeInProgress","addSubtract","getSetZone","setOffsetToUTC","setOffsetToLocal","subtract","setOffsetToParsedOffset","tZone","matchOffset","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","_isDSTShifted","isLocal","isUtcOffset","isUtc","ret","diffRes","aspNetRegex","isoRegex","parseIso","momentsDifference","inp","positiveMomentsDifference","base","isAfter","isBefore","createAdder","direction","period","dur","tmp","isAdding","getCalendarFormat","myMoment","calendar$1","time","formats","sod","startOf","calendarFormat","localInput","endOf","isBetween","inclusivity","isSame","inputMs","isSameOrAfter","isSameOrBefore","asFloat","zoneDelta","delta","monthDiff","anchor2","adjust","wholeMonthDiff","anchor","inspect","zone","prefix","suffix","inputString","defaultFormatUtc","defaultFormat","postformat","humanize","fromNow","toNow","newLocaleData","isoWeekday","unix","toJSON","isValid$2","parsingFlags","invalidAt","creationData","addWeekYearFormatToken","getter","getSetWeekYear","getSetWeekYearHelper","getSetISOWeekYear","isoWeek","getISOWeeksInYear","getWeeksInYear","weekInfo","weeksTarget","setWeekAll","dayOfYearData","getSetQuarter","getSetDayOfYear","parseMs","getZoneAbbr","getZoneName","createUnix","createInZone","parseZone","preParsePostFormat","get$1","listMonthsImpl","listWeekdaysImpl","localeSorted","shift","listMonths","listMonthsShort","listWeekdays","listWeekdaysShort","listWeekdaysMin","mathAbs","addSubtract$1","add$1","subtract$1","absCeil","bubble","monthsFromDays","monthsToDays","daysToMonths","as","valueOf$1","makeAs","alias","get$2","makeGetter","substituteTimeAgo","relativeTime$1","posNegDuration","thresholds","ss","getSetRelativeTimeRounding","roundingFunction","getSetRelativeTimeThreshold","threshold","limit","withSuffix","toISOString$1","abs$1","Y","asSeconds","some","fun","defaultCalendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","defaultLongDateFormat","LTS","LT","L","LL","LLL","LLLL","defaultDayOfMonthOrdinalParse","defaultRelativeTime","future","past","mm","hh","dd","MM","yy","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchTimestamp","matchWord","o","defaultLocaleMonths","defaultLocaleMonthsShort","parseTwoDigitYear","getSetYear","defaultLocaleWeek","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","kInput","_isPm","pos1","pos2","defaultLocaleMeridiemParse","getSetHour","dayOfMonthOrdinalParse","meridiemParse","prototypeMin","prototypeMax","invalid","lang","isoWeekYear","getSetDayOfMonth","getSetMinute","getSetSecond","getSetMillisecond","isoWeeks","isoWeeksInYear","isDST","zoneAbbr","zoneName","dates","isDSTShifted","proto$1","firstDayOfYear","firstDayOfWeek","langData","asMilliseconds","asMinutes","asHours","asDays","asWeeks","asMonths","asYears","proto$2","toIsoString","relativeTimeRounding","relativeTimeThreshold","webpackPolyfill","paths","children","webpackContext","req","resolve","buf","oct","_hexToByte","unparse","bth","_byteToHex","v1","clockseq","_clockseq","msecs","nsecs","_lastNSecs","dt","_lastMSecs","tl","tmh","node","_nodeId","n","rnds","rng","_rng","globalVar","crypto","getRandomValues","_rnds8","Uint8Array","_rnds","_seedBytes","DOMutil","DataSet","DataView","Queue","Graph3d","graph3d","Camera","Filter","Point2d","Point3d","Slider","StepNumber","Hammer","keycharm","prepareElements","JSONcontainer","elementType","redundant","used","cleanupElements","resetElements","getSVGElement","svgContainer","createElementNS","getDOMElement","DOMContainer","insertBefore","drawPoint","groupTemplate","labelObj","setAttributeNS","size","label","xOffset","yOffset","content","textContent","drawBar","rect","_options","_fieldId","fieldId","_type","_subscribers","setOptions","_stringify2","queue","_queue","destroy","on","subscribers","subscribe","off","unsubscribe","_trigger","params","senderId","subscriber","addedIds","me","_addItem","items","update","updatedIds","oldData","updatedData","addOrUpdate","oldItem","_updateItem","ids","firstType","returnType","itemIds","itemId","_getItem","order","_sort","_filterFields","resultant","getIds","getDataSet","mappedItems","filteredItem","itemFields","av","bv","remove","removedIds","removedItems","_remove","ident","clear","maxField","itemField","minField","distinct","fieldType","count","exists","types","raw","converted","delay","Infinity","_timeout","_extended","_flushIfNeeded","flush","original","method","context","entry","clearTimeout","setTimeout","_ids","_onEvent","setData","refresh","oldIds","newIds","viewOptions","getArguments","defaultFilter","dataSet","oldItems","updatedItems","container","SyntaxError","containerElement","dataTable","dataPoints","Settings","setDefaults","DEFAULTS","colX","colY","colZ","colValue","colFilter","getMouseX","clientX","targetTouches","getMouseY","clientY","_assign","_assign2","Emitter","Range","STYLE","filterLabel","legendLabel","xLabel","yLabel","zLabel","xValueLabel","yValueLabel","zValueLabel","showXAxis","showYAxis","showZAxis","showGrid","showPerspective","showShadow","keepAspectRatio","verticalRatio","dotSizeRatio","dotSizeMinFraction","dotSizeMaxFraction","showAnimationControls","animationInterval","animationPreload","animationAutoStart","axisColor","gridColor","xCenter","yCenter","DOT","tooltip","tooltipStyle","padding","borderRadius","boxShadow","line","borderLeft","dot","showLegend","backgroundColor","dataColor","fill","stroke","strokeWidth","cameraPosition","horizontal","vertical","distance","xBarWidth","yBarWidth","valueMin","valueMax","xMin","xMax","xStep","yMin","yMax","yStep","zMin","zMax","zStep","_setScale","xRange","range","yRange","zRange","z","valueRange","center","zCenter","camera","setArmLocation","_convert3Dto2D","point3d","translation","_convertPointToTranslation","_convertTranslationToScreen","cameraLocation","getCameraLocation","cameraRotation","getCameraRotation","ax","ay","az","cx","cy","cz","sinTx","sin","cosTx","cos","sinTy","cosTy","sinTz","cosTz","bx","by","ex","eye","ey","ez","dx","dy","dz","getArmLength","currentXCenter","frame","canvas","currentYCenter","_calcTranslations","points","trans","screen","transBottom","bottom","dist","sortDepth","getNumberOfRows","getNumberOfColumns","counter","column","getDistinctValues","distinctValues","getSmallestDifference","smallest_diff","getColumnRange","_checkValueField","BARCOLOR","BARSIZE","DOTCOLOR","DOTSIZE","_setRangeDefaults","defaultMin","defaultMax","_dataInitialize","rawData","_onChange","withBars","BAR","defaultXBarWidth","defaultYBarWidth","expand","defaultXMin","defaultXMax","defaultXStep","defaultYMin","defaultYMax","defaultYStep","defaultZMin","defaultZMax","defaultZStep","defaultValueMin","defaultValueMax","dataFilter","setOnLoadCallback","redraw","_getDataPoints","GRID","SURFACE","dataX","dataY","sortNumber","dataMatrix","xIndex","yIndex","pointRight","pointTop","pointCross","LINE","pointNext","noCanvas","fontWeight","innerHTML","onmousedown","_onMouseDown","ontouchstart","_onTouchStart","onmousewheel","_onWheel","ontooltip","_onTooltip","onclick","_onClick","_setSize","_resizeCanvas","clientHeight","animationStart","slider","play","animationStop","stop","_resizeCenter","getCameraPosition","getArmRotation","_readData","_redrawFilter","setPointDrawingMethod","_redrawBarGraphPoint","_redrawBarColorGraphPoint","_redrawBarSizeGraphPoint","_redrawDotGraphPoint","DOTLINE","_redrawDotLineGraphPoint","_redrawDotColorGraphPoint","_redrawDotSizeGraphPoint","_redrawSurfaceGraphPoint","_redrawGridGraphPoint","_redrawLineGraphPoint","_pointDrawingMethod","_redrawSlider","_redrawClear","_redrawAxis","_redrawDataGraph","_redrawInfo","_redrawLegend","_getContext","getContext","lineJoin","lineCap","clearRect","_dotSize","_getLegendWidth","isSizeLegend","isValueLegend","margin","lineWidth","font","ymax","hue","_hsv2rgb","strokeStyle","beginPath","moveTo","lineTo","strokeRect","widthMin","fillStyle","closePath","legendMin","legendMax","start","end","getCurrent","_line","textAlign","textBaseline","fillText","visible","setValues","setPlayInterval","onchange","getIndex","selectValue","setOnChangeCallback","lineStyle","getLabel","getSelectedValue","drawAxisLabelX","text","armAngle","yMargin","point2d","drawAxisLabelY","drawAxisLabelZ","_line3d","from2d","to2d","prettyStep","xText","yText","zText","gridLenX","gridLenY","textMargin","armVector","from3d","xMin2d","xMax2d","H","V","Hi","X","_getStrokeWidth","_redrawBar","xWidth","yWidth","borderColor","surface","surfaces","corners","avg","transCenter","_polygon","_drawCircle","radius","_calcRadius","arc","PI","_getColorsRegular","_getColorsColor","_getColorsSize","colors","fraction","dotSize","sizeMin","sizeRange","cross","topSideVisible","showGrayBottom","aDiff","bDiff","crossproduct","crossProduct","zAvg","_drawGridLine","_storeMousePosition","startMouseX","startMouseY","_startCameraOffset","getOffset","leftButtonDown","_onMouseUp","which","button","touchDown","startStart","startEnd","startArmRotation","cursor","onmousemove","_onMouseMove","onmouseup","moving","diffX","diffY","ctrlKey","scaleX","scaleY","offXNew","armLength","offYNew","setOffset","horizontalNew","verticalNew","snapValue","setArmRotation","parameters","emit","onclick_callback","boundingRect","mouseX","mouseY","dataPoint","_dataPointFromXY","showTooltip","tooltipTimeout","_hideTooltip","_showTooltip","ontouchmove","_onTouchMove","ontouchend","_onTouchEnd","wheelDelta","detail","oldLength","newLength","setArmLength","_insideTriangle","triangle","bs","cs","closestDataPoint","closestDist","triangle1","triangle2","distX","distY","sqrt","dom","contentWidth","contentHeight","offsetHeight","lineHeight","dotWidth","dotHeight","setCameraPosition","setSize","assign","$assign","A","K","aLen","mixin","_callbacks","once","removeListener","removeAllListeners","callbacks","cb","listeners","hasListeners","sub","sum","armLocation","armRotation","cameraOffset","offsetMultiplier","calculateCameraOrientation","_sign","_sign2","mul","rot","xa","za","graph","onLoadCallback","loadInBackground","isLoaded","getLoadedProgress","getColumn","getValues","getValue","dataView","progress","prev","bar","MozBorderRadius","slide","togglePlay","onChangeCallback","playTimeout","playInterval","playLoop","setIndex","playNext","interval","clearInterval","getPlayInterval","setPlayLoop","doLoop","onChange","indexToLeft","startClientX","startSlideX","leftToIndex","_start","_end","precision","_current","setRange","isNumeric","setStep","calculatePrettyStep","log10","log","LN10","step1","step2","step5","toPrecision","getStep","checkFirst","combine","newMin","newMax","isEmpty","capitalize","str","prefixFieldName","fieldName","forceCopy","dst","srcKey","dstKey","safeCopy","OPTIONKEYS","PREFIXEDOPTIONKEYS","setSpecialSettings","setBackgroundColor","setDataColor","setStyle","setShowLegend","isLegendGraphStyle","getStyleNumberByName","styleName","STYLENAME","checkStyleNumber","valid","styleNumber","borderWidth","borderStyle","camPos","dot-line","dot-color","dot-size","grid","bar-color","bar-size","propagating","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","_firstTarget","hammer","events","propagatedHandler","srcEvent","_handled","stopped","stopPropagation","srcStop","bind","firstTarget","elemHammer","_handlers","Manager","PropagatingHammer","wrapper","pointerType","isFirst","handler","eventType","hammers","idx","exportName","setTimeoutContext","timeout","bindFn","invokeArrayArg","each","message","deprecationMessage","inherit","child","properties","childP","baseP","_super","boolOrFn","TYPE_FUNCTION","ifUndefined","val1","val2","addEventListeners","splitStr","removeEventListeners","inStr","find","inArray","findByKey","uniqueArray","results","prefixed","property","camelProp","VENDOR_PREFIXES","uniqueId","_uniqueId","getWindowForElement","doc","ownerDocument","defaultView","parentWindow","Input","manager","inputTarget","domHandler","ev","enable","init","createInputInstance","inputClass","SUPPORT_POINTER_EVENTS","PointerEventInput","SUPPORT_ONLY_TOUCH","TouchInput","SUPPORT_TOUCH","TouchMouseInput","MouseInput","inputHandler","pointersLen","pointers","changedPointersLen","changedPointers","INPUT_START","isFinal","INPUT_END","INPUT_CANCEL","session","computeInputData","recognize","prevInput","pointersLength","firstInput","simpleCloneInputData","firstMultiple","offsetCenter","getCenter","timeStamp","deltaTime","angle","getAngle","getDistance","computeDeltaXY","offsetDirection","getDirection","deltaX","deltaY","overallVelocity","getVelocity","overallVelocityX","overallVelocityY","getScale","rotation","getRotation","maxPointers","computeIntervalInputData","offsetDelta","prevDelta","velocity","velocityX","velocityY","last","lastInterval","COMPUTE_INTERVAL","DIRECTION_NONE","DIRECTION_LEFT","DIRECTION_RIGHT","DIRECTION_UP","DIRECTION_DOWN","PROPS_XY","atan2","PROPS_CLIENT_XY","evEl","MOUSE_ELEMENT_EVENTS","evWin","MOUSE_WINDOW_EVENTS","pressed","POINTER_ELEMENT_EVENTS","POINTER_WINDOW_EVENTS","pointerEvents","SingleTouchInput","evTarget","SINGLE_TOUCH_TARGET_EVENTS","SINGLE_TOUCH_WINDOW_EVENTS","started","normalizeSingleTouches","all","touches","changed","changedTouches","TOUCH_TARGET_EVENTS","targetIds","getTouches","allTouches","INPUT_MOVE","identifier","changedTargetTouches","touch","mouse","primaryTouch","lastTouches","recordTouches","eventData","setLastTouch","lastTouch","lts","removeLastTouch","DEDUP_TIMEOUT","isSyntheticEvent","DEDUP_DISTANCE","TouchAction","cleanTouchActions","actions","TOUCH_ACTION_NONE","hasPanX","TOUCH_ACTION_PAN_X","hasPanY","TOUCH_ACTION_PAN_Y","TOUCH_ACTION_MANIPULATION","TOUCH_ACTION_AUTO","Recognizer","state","STATE_POSSIBLE","simultaneous","requireFail","stateStr","STATE_CANCELLED","STATE_ENDED","STATE_CHANGED","STATE_BEGAN","directionStr","getRecognizerByNameIfManager","otherRecognizer","recognizer","AttrRecognizer","PanRecognizer","pX","pY","PinchRecognizer","PressRecognizer","_timer","_input","RotateRecognizer","SwipeRecognizer","TapRecognizer","pTime","pCenter","recognizers","preset","handlers","oldCssProps","touchAction","toggleCssProps","recognizeWith","requireFailure","cssProps","triggerDomEvent","gestureEvent","createEvent","initEvent","gesture","dispatchEvent","TEST_ELEMENT","nextKey","dest","merge","MOBILE_REGEX","DIRECTION_HORIZONTAL","DIRECTION_VERTICAL","DIRECTION_ALL","MOUSE_INPUT_MAP","mousedown","mousemove","mouseup","POINTER_INPUT_MAP","pointerdown","pointermove","pointerup","pointercancel","pointerout","IE10_POINTER_TYPE_ENUM","2","3","4","5","MSPointerEvent","PointerEvent","removePointer","eventTypeNormalized","isTouch","storeIndex","pointerId","SINGLE_TOUCH_INPUT_MAP","touchstart","touchmove","touchend","touchcancel","TOUCH_INPUT_MAP","inputEvent","inputData","isMouse","sourceCapabilities","firesTouchEvents","PREFIXED_TOUCH_ACTION","NATIVE_TOUCH_ACTION","TOUCH_ACTION_MAP","touchMap","cssSupports","CSS","supports","compute","getTouchAction","preventDefaults","prevented","hasNone","isTapPointer","isTapMovement","isTapTouchTime","preventSrc","STATE_RECOGNIZED","dropRecognizeWith","dropRequireFailure","hasRequireFailures","canRecognizeWith","additionalEvent","tryEmit","canEmit","inputDataClone","reset","process","attrTest","optionPointers","isRecognized","directionTest","hasMoved","inOut","validPointers","validMovement","validTime","taps","posThreshold","validTouchTime","failTimeout","validInterval","validMultiTap","tapCount","VERSION","domEvents","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","force","curRecognizer","existing","STATE_FAILED","Tap","Pan","Swipe","Pinch","Rotate","Press","_exportFunctions","_bound","keydown","keyup","fromCharCode","down","handleEvent","up","keyCode","bound","shiftKey","bindAll","getKey","unbind","newBindings","Timeline","Graph2d","timeline","Core","DateUtil","TimeStep","components","Item","BackgroundItem","BoxItem","PointItem","RangeItem","BackgroundGroup","Component","CurrentTime","CustomTime","DataAxis","DataScale","GraphGroup","Group","ItemSet","Legend","LineGraph","TimeAxis","groups","forthArgument","throttleRedraw","defaultOptions","autoResize","orientation","axis","maxHeight","minHeight","rtl","directionFromDom","domNode","getComputedStyle","parentElement","rollingMode","domProps","emitter","hiddenDates","timeAxis","toScreen","_toScreen","toGlobalScreen","_toGlobalScreen","toTime","_toTime","toGlobalTime","_toGlobalTime","timeAxis2","currentTime","itemSet","itemsData","groupsData","getEventProperties","ondblclick","oncontextmenu","onmouseover","onpointerdown","onpointermove","onpointerup","fitDone","getItemRange","setWindow","animation","fit","setGroups","setItems","_redraw","printStyle","allOptions","configureOptions","Configurator","Validator","_createConfigurator","markDirty","refreshItems","validate","selection","getSelection","setSelection","newDataSet","group","focus","itemData","dataset","getDataRange","minItem","maxItem","getStart","getEnd","factor","groupShowing","show","repositionX","startSide","getWidthRight","endSide","getWidthLeft","lhs","rhs","centerContainer","itemFromTarget","groupFromTarget","customTime","customTimeFromTarget","snap","snappedTime","what","foreground","labelSet","groupId","pageX","pageY","toggleRollingMode","rolling","stopRolling","startRolling","deltaDifference","scaleOffset","startToFront","endToFront","moveable","zoomable","zoomMin","zoomMax","follow","animationTimer","_onDragStart","_onDrag","_onDragEnd","_onMouseWheel","_onTouch","_onPinch","rollingModeBtn","validateDirection","conversion","currentTimeTimer","byUser","finalStart","finalEnd","_cancelAnimation","initStart","initEnd","easingName","easingFunction","initTime","anyChanged","dragging","ease","_applyRange","updateHiddenDates","timeoutID","getMillisecondsPerPixel","newStart","newEnd","getRange","totalHidden","previousDelta","_isInsideRange","allowDragging","getHiddenDurationBetween","diffRange","safeStart","snapAwayFromHidden","safeEnd","startDate","endDate","zoomKey","horizontalScroll","pointerDate","pointer","getPointer","_pointerToDate","zoom","centerDate","hiddenDuration","hiddenDurationBefore","getHiddenDurationBefore","hiddenDurationAfter","move","onTouch","onRelease","offTouch","offRelease","disablePreventDefaultVertically","pinchRecognizer","_isResized","resized","_previousWidth","_previousHeight","convertHiddenOptions","repeat","dateItem","totalRange","pixelTime","runUntil","dayOffset","removeDuplicates","startHidden","isHidden","endHidden","rangeStart","rangeEnd","hidden","safeDates","printDates","stepOverHiddenDates","timeStep","previousTime","stepInHidden","currentValue","current","switchedYear","switchedMonth","switchedDay","hiddenBeforeStart","getHiddenDurationBeforeStart","rangeAfterEnd","correctTimeForHidden","totalDuration","partialDuration","accumulatedHiddenDuration","getAccumulatedHiddenDuration","timeOffset","requiredDuration","previousPoint","correctionEnabled","hammerUtil","Activator","onMouseWheel","isActive","verticalScroll","scrollTop","adjusted","_setScrollTop","onMouseScrollSide","handleDragOver","itemAddedToTimeline","dataTransfer","dropEffect","handleDrop","getData","_onAddItem","backgroundVertical","backgroundHorizontal","leftContainer","rightContainer","shadowTop","shadowBottom","shadowTopLeft","shadowBottomLeft","shadowTopRight","shadowBottomRight","scrollTopMin","initialDrawDone","_origRedraw","initialItemSetDrawn","customTimes","redrawCount","drawPoints","onRender","clickToUse","activator","_initAutoResize","component","configurator","configure","appliedOptions","setModuleOptions","active","_stopAutoResize","setCustomTime","getCustomTime","setCustomTimeTitle","title","setCustomTitle","addCustomTime","timestamp","removeCustomTime","getVisibleItems","getWindow","zoomIn","percentage","newInterval","zoomOut","borderRootHeight","borderRootWidth","autoHeight","containerHeight","scrollbarWidth","_setDOM","_updateScrollTop","visibilityTop","visibilityBottom","contentsOverflow","centerWidth","repaint","setCurrentTime","getCurrentTime","_startAutoResize","_onResize","lastWidth","lastHeight","watchTimer","setInterval","initialScrollTop","oldScrollTop","_getScrollTop","newScrollTop","align","stackSubgroups","groupOrderSwap","fromGroup","toGroup","targetOrder","groupOrder","selectable","multiselect","itemsAlwaysDraggable","editable","updateTime","updateGroup","overrideItems","groupEditable","onAdd","onUpdate","onMove","onRemove","onMoving","onAddGroup","onMoveGroup","onRemoveGroup","showTooltips","followMouse","overflowMethod","tooltipOnItemUpdateTime","itemOptions","itemListeners","_onAdd","_onUpdate","_onRemove","groupListeners","_onAddGroups","_onUpdateGroups","_onRemoveGroups","groupIds","popup","touchParams","groupTouchParams","Popup","UNGROUPED","BACKGROUND","box","_updateUngrouped","backgroundGroup","_onSelectItem","_onMultiSelectItem","groupHammer","_onGroupClick","_onGroupDragStart","_onGroupDrag","_onGroupDragEnd","_onMouseOver","_onMouseOut","dirty","displayed","unselect","select","rawVisibleItems","isVisible","visibleItems","_deselect","_orderGroups","visibleInterval","zoomed","lastVisibleInterval","scrolled","lastRangeStart","forceRestack","firstGroup","_firstGroup","firstMargin","nonFirstMargin","groupMargin","groupResized","firstGroupIndex","firstGroupId","ungrouped","_getGroupId","getLabelSet","oldItemsData","getItems","nestedGroups","nestedGroupId","updatedNestedGroup","nestedInGroup","showNested","_order","getGroups","removeItem","_getType","selected","_removeItem","groupData","groupOptions","_orderNestedGroups","newGroupIdsOrder","nestedGroup","nestedGroupIds","_constructByEndArray","endArray","dragLeftItem","dragRightItem","itemProps","_getGroupIndex","itemIsDragging","selectedItem","initialX","dragLeft","_cloneItemData","dragRight","baseGroupIndex","itemsToDrag","groupIndex","groupOffset","metaKey","_onDragStartAddItem","xAbs","newItem","offsetLeft","updateGroupAllowed","newGroupBase","initial","initialEnd","initialStart","newOffset","_moveToGroup","oldGroup","collapsedDirClassName","originalOrder","movingUp","targetGroupTop","draggedGroupHeight","targetGroup","draggedGroup","newOrder","origOrder","draggedId","numGroups","curPos","orgOffset","slippedPosition","switchGroup","shouldBeGroup","switchGroupId","oldSelection","newSelection","itemFromRelatedTarget","getTitle","setText","setPosition","offsetTop","_onUpdateItem","newItemData","itemGroup","lastSelectedGroup","multiselectPerGroup","_getItemRange","_item","itemFromElement","cur","relatedTarget","itemSetFromTarget","minimumStep","autoScale","FORMAT","minorLabels","majorLabels","setMoment","setFormat","setMinimumStep","roundToMinor","hasNext","setScale","setAutoScale","stepYear","stepMonth","stepDay","stepHour","stepMinute","stepSecond","stepMillisecond","isMajor","getLabelMinor","getLabelMajor","getClassName","even","today","_moment","currentWeek","currentMonth","subgroups","subgroupIndex","subgroupOrderer","subgroupOrder","stackDirty","itemsInRange","byStart","byEnd","checkRangedItems","marker","templateFunction","Element","paddingRight","paddingLeft","getLabelWidth","markerHeight","lastMarkerHeight","_calculateSubGroupHeights","lastIsVisible","_isGroupVisible","customOrderedItems","_updateItemsInRange","nostack","_updateSubgroupsSizes","_calculateHeight","repositionY","resetSubgroups","subgroup","setParent","_addToSubgroup","orderSubgroups","_checkIfVisible","subgroupId","sortArray","sortField","_removeFromSubgroup","itemIndex","removeFromDataSet","startArray","orderByStart","orderByEnd","oldVisibleItems","visibleItemsLookup","lowerBound","upperBound","searchFunction","_checkIfVisibleWithReference","initialPosByStart","_traceVisible","initialPosByEnd","initialPos","breakCondition","changeSubgroup","oldSubgroup","newSubgroup","collidingItem","jj","collision","newTop","otherSubgroup","collisionByTimes","baseClassName","visibleFrame","_updateContents","_updateDataAttributes","_updateStyle","maxWidth","_repaintOnItemUpdateTimeTooltip","_repaintDeleteButton","_repaintDragCenter","_repaintDragLeft","_repaintDragRight","limitSize","contentStartPosition","parentWidth","boxWidth","_updateEditStatus","dragCenter","dragCenterItem","deleteButton","onItemUpdateTimeTooltip","itemDistanceFromTop","template","itemVisibleFrameContent","visibleFrameTemplateFunction","frameElement","itemVisibleFrameContentElement","getElementsByClassName","visibleFrameTemplate","_contentToString","dataAttributes","attributes","setAttribute","removeAttribute","outerHTML","widthInMs","previousRight","previousLeft","itemSetHeight","marginLeft","marginRight","itemSubgroup","_classCallCheck2","_classCallCheck3","_createClass2","_createClass3","doShow","isLeft","isTop","instance","_defineProperty","_defineProperty2","protoProps","staticProps","desc","lines","majorTexts","minorTexts","lineTop","showMinorLabels","showMajorLabels","maxMinorChars","parentChanged","_calculateCharSize","minorLabelHeight","minorCharHeight","majorLabelHeight","majorCharHeight","minorLineHeight","minorLineWidth","majorLineHeight","majorLineWidth","foregroundNextSibling","nextSibling","backgroundNextSibling","_repaintLabels","timeLabelsize","minorCharWidth","xNext","showMinorGrid","prevWidth","labelMinor","xFirstMajorLabel","_repaintMinorText","_repaintMajorText","_repaintMajorLine","_repaintMinorLine","warnedForOverflow","leftTime","leftText","widthText","majorCharWidth","pop","createTextNode","childNodes","measureCharMinor","measureCharMajor","overlay","_onTapOverlay","onClick","_hasParent","deactivate","escListener","activate","eventParams","drag","warned","substring","showCurrentTime","errorFound","referenceOptions","subObject","usedOptions","path","check","__any__","getSuggestion","__type__","checkFields","referenceOption","refOptionObj","optionType","refOptionType","print","printLocation","localSearch","findInOptions","globalSearch","indexMatch","closestMatch","recursive","closestMatchPath","lowerCaseOption","op","levenshteinDistance","_j","_j2","matrix","bool","boolean","function","any","null","groupsDraggable","ColorPicker","parentModule","defaultContainer","pixelRatio","changedOptions","allowCreation","initialized","popupCounter","showButton","moduleOptions","domElements","popupDiv","popupLimit","popupHistory","colorPicker","_removePopup","_clean","_this","_handleObject","_makeItem","_makeHeader","generateButton","_printOptions","onmouseout","optionsContainer","_push","_showPopupIfNeeded","_len","_key","div","objectLabel","selectedValue","_update","_makeLabel","popupString","popupValue","oninput","_setupPopup","_this2","html","hideTimeout","deleteTimeout","_this3","correspondingElement","checkbox","checked","_this4","defaultColor","_showColorPicker","_this5","insertTo","setColor","setUpdateCallback","colorString","setCloseCallback","checkOnly","visibleInSet","subObj","newPath","_getValue","_handleArray","_makeTextInput","_makeCheckbox","draw","physics","solver","enabledPath","enabledValue","_label","error","_makeColorField","_makeDropdown","_makeRange","_constructOptions","optionsObj","getOptions","generated","centerCoordinates","hueCircle","initialColor","previousColor","applied","updateCallback","closeCallback","_bindHammer","htmlColors","black","navy","darkblue","mediumblue","darkgreen","teal","darkcyan","deepskyblue","darkturquoise","mediumspringgreen","lime","springgreen","aqua","cyan","midnightblue","dodgerblue","lightseagreen","forestgreen","seagreen","darkslategray","limegreen","mediumseagreen","turquoise","royalblue","steelblue","darkslateblue","mediumturquoise","indigo","darkolivegreen","cadetblue","cornflowerblue","mediumaquamarine","dimgray","slateblue","olivedrab","slategray","lightslategray","mediumslateblue","lawngreen","chartreuse","aquamarine","maroon","purple","olive","gray","skyblue","lightskyblue","blueviolet","darkred","darkmagenta","saddlebrown","darkseagreen","lightgreen","mediumpurple","darkviolet","palegreen","darkorchid","yellowgreen","sienna","brown","darkgray","lightblue","greenyellow","paleturquoise","lightsteelblue","powderblue","firebrick","darkgoldenrod","mediumorchid","rosybrown","darkkhaki","silver","mediumvioletred","indianred","peru","chocolate","tan","lightgrey","palevioletred","thistle","orchid","goldenrod","crimson","gainsboro","plum","burlywood","lightcyan","lavender","darksalmon","violet","palegoldenrod","lightcoral","khaki","aliceblue","honeydew","azure","sandybrown","wheat","beige","whitesmoke","mintcream","ghostwhite","salmon","antiquewhite","linen","lightgoldenrodyellow","oldlace","fuchsia","magenta","deeppink","orangered","tomato","hotpink","coral","darkorange","lightsalmon","orange","lightpink","pink","gold","peachpuff","navajowhite","moccasin","bisque","mistyrose","blanchedalmond","papayawhip","lavenderblush","seashell","cornsilk","lemonchiffon","floralwhite","snow","yellow","lightyellow","ivory","white","setInitial","htmlColor","_isColorString","rgbaArray","_rgbaArray","rgbObj","alpha","_setColor","_generateHueCircle","_hide","_updatePicker","alert","angleConvert","colorPickerSelector","colorPickerCanvas","pixelRation","devicePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","setTransform","putImageData","circle","brightnessRange","opacityRange","initialColorDiv","newColorDiv","colorPickerDiv","opacityDiv","brightnessDiv","arrowDiv","_setOpacity","_setBrightness","brightnessLabel","opacityLabel","cancelButton","applyButton","_apply","saveButton","_save","loadButton","_loadLast","pinch","_moveSelector","sat","sfac","fillRect","getImageData","centerY","centerX","newLeft","linegraph","initialLoad","getLegend","isGroupVisible","yAxisLeft","yAxisRight","legendLeft","legendRight","screenToValue","yAxisOrientation","defaultGroup","sampling","graphHeight","shaded","barChart","sideBySide","interpolation","parametrization","dataAxis","legend","abortedGraphUpdate","updateSVGheight","updateSVGheightOnResize","forceGraphUpdate","lastStart","svgElements","groupsUsingDefaultStyles","svg","framework","Bars","Lines","Points","_removeGroup","_updateAllGroupData","removeGroup","_updateGroup","addGroup","groupsContent","idMap","groupCounts","existingItemsMap","existing_items","extended","orginalY","_updateGraph","rangePerPixelInv","_getSortedGroupIds","grouplist","zIndex","bz","groupRanges","minDate","maxDate","_getRelevantData","_applySampling","_convertXcoordinates","_getYRanges","_updateYAxis","below","excludeFromStacking","_stack","_convertYcoordinates","calcPath","subGroupId","drawShading","subData","subPrevPoint","subNextPoint","dateComparator","first","dataContainer","increment","amountOfPoints","xDistance","pointsPerPixel","sampledData","combinedDataLeft","combinedDataRight","getYRange","getStackedYRange","minVal","maxVal","yAxisLeftUsed","yAxisRightUsed","minLeft","minRight","maxLeft","maxRight","ignore","_toggleAxisVisiblity","drawIcons","master","masterAxis","lineOffset","tempGroups","axisUsed","datapoints","screen_x","screen_y","screen_end","svgHeight","convertValue","setZeroPosition","linegraphOptions","icons","majorLinesOffset","minorLinesOffset","labelOffsetX","labelOffsetY","iconWidth","alignZeros","linegraphSVG","DOMelements","labels","conversionFactor","minWidth","stepPixels","zeroCrossing","amountOfSteps","iconsRemoved","amountOfGroups","lineContainer","graphOptions","_redrawGroupIcons","iconOffset","groupArray","iconHeight","_cleanupIcons","activeGroups","_redrawLabels","_redrawTitle","customRange","autoScaleEnd","autoScaleStart","followScale","maxLabelSize","getLines","major","_redrawLabel","_redrawLine","titleWidth","titleCharHeight","characterHeight","largestWidth","textMinor","textMajor","textTitle","measureCharTitle","titleCharWidth","zeroAlign","formattingFunction","majorSteps","minorSteps","customLines","minorStepIdx","magnitudefactor","determineScale","rounded","setCharHeight","setHeight","minimumStepValue","orderOfMagnitude","solutionFound","is_major","getFirstMajor","majorStep","formatValue","bottomOffset","oldStepIdx","oldStart","oldEnd","increaseMagnitude","decreaseMagnitude","otherZero","otherStep","newRange","myOriginalZero","majorOffset","zeroOffset","pixels","usingDefaultStyle","zeroPosition","drawIcon","icon","Bargraph","fillHeight","outline","barWidth","originalWidth","bar1Height","bar2Height","processedGroupData","coreDistance","drawData","combinedData","intersections","barPoints","_getDataIntersections","heightOffset","_getSafeDrawData","amount","resolved","accumulatedNegative","accumulatedPositive","dataWidth","pointData","groupLabel","_getStackedYRange","xpos","getGroupTemplate","callbackResult","getCallback","Line","_catmullRom","_linear","fillPath","pathArray","subPathArray","dFill","zero","serializePath","inverse","_catmullRomUniform","p0","bp1","bp2","d1","d2","d3","N","d3powA","d2powA","d3pow2A","d2pow2A","d1pow2A","d1powA","side","iconSize","iconSpacing","excludeFromLegend","textArea","scrollableHeight","drawLegendIcons","paddingTop","Network","network","Images","dotparser","gephiParser","convertDot","DOTToGraph","convertGephi","parseGephi","nodes","nodeIndices","edges","edgeIndices","eventListeners","onTap","onDoubleTap","onHold","onDragStart","onDrag","onDragEnd","onPinch","onMouseMove","onContext","functions","createNode","createEdge","view","bindEventListeners","images","Groups","Canvas","selectionHandler","SelectionHandler","interactionHandler","InteractionHandler","View","renderer","CanvasRenderer","PhysicsEngine","layoutEngine","LayoutEngine","clustering","ClusterEngine","manipulation","ManipulationSystem","nodesHandler","NodesHandler","edgesHandler","EdgesHandler","KamadaKawai","_require","_require2","layout","interaction","networkOptions","_updateVisibleIndices","nodeId","edgeId","_updateValueRange","unselectAll","dotData","gephi","gephiData","valueTotal","setValueRange","canvasToDOM","DOMtoCanvas","findNode","isCluster","openCluster","cluster","getNodesInCluster","clusterByConnection","clusterByHubsize","clusterOutliers","getSeed","enableEditMode","disableEditMode","addNodeMode","editNode","editNodeMode","addEdgeMode","editEdgeMode","deleteSelected","getPositions","storePositions","moveNode","getBoundingBox","getConnectedNodes","objectId","getConnectedEdges","startSimulation","stopSimulation","stabilize","getSelectedNodes","getSelectedEdges","getNodeAt","getEdgeAt","edge","selectNodes","selectEdges","getViewPosition","releaseNode","getOptionsFromConfigurator","CanvasRenderingContext2D","square","s2","ir","triangleDown","star","diamond","roundRect","r2d","ellipse_vis","ox","oy","xe","ye","xm","ym","bezierCurveTo","database","wEllipse","hEllipse","ymb","yeb","arrowEndpoint","xt","yt","xi","yi","xl","yl","xr","yr","circleEndpoint","xc","yc","dashedLine","x2","y2","pattern","patternLength","slope","distRemaining","patternIndex","dashLength","parseDOT","parseGraph","nextPreview","isAlphaNumeric","regexAlphaNumeric","setValue","addNode","graphs","attr","addEdge","getToken","tokenType","TOKENTYPE","NULL","isComment","DELIMITER","c2","DELIMITERS","IDENTIFIER","newSyntaxError","UNKNOWN","chop","parseStatements","parseStatement","subgraph","parseSubgraph","parseEdge","parseAttributeStatement","parseNodeStatement","subgraphs","parseAttributeList","maxLength","forEach2","elem1","elem2","setProp","convertAttr","mapping","visProp","visPropI","graphData","dotNode","graphNode","NODE_ATTR_MAPPING","image","shape","convertEdge","dotEdge","graphEdge","EDGE_ATTR_MAPPING","arrows","subEdge","fontsize","fontcolor","labelfontcolor","fontname","fillcolor","labeltooltip","{","}","[","]",";","=",",","->","--","gephiJSON","inheritColor","fixed","gEdges","gNodes","gEdge","gNode","edit","del","back","editEdge","addDescription","edgeDescription","editEdgeDescription","createEdgeError","deleteClusterError","editClusterError","_CachedImage","_CachedImage2","imageBroken","url","brokenUrl","imageToLoadBrokenUrlOn","onerror","imageToRedrawWith","cachedImage","img","onload","_fixImageCoordinates","_redrawWithImage","_tryloadBrokenUrl","imageToCache","CachedImage","NUM_ITERATIONS","Image","coordinates","_fillMipMap","drawImage","iterations","_to","_isImageOk","complete","naturalWidth","defaultIndex","groupsArray","defaultGroups","useDefaultGroups","optionFields","groupName","groupname","_index","Node","Label","nodesListeners","borderWidthSelected","brokenImage","face","strokeColor","vadjust","multi","bold","mod","boldital","ital","mono","labelHighlightBold","level","mass","scaling","maxVisible","drawThreshold","customScalingFunction","shadow","shapeProperties","borderDashes","useImageSize","useBorderWithImage","nodeOptions","parseOptions","updateShape","updateLabelModule","needsRefresh","_nodeId2","doNotEmit","oldNodesData","newNodes","positionInitially","changedData","dataChanged","clearPositions","dataArray","_node","_node2","boundingBox","nodeList","nodeObj","toId","fromId","edgeList","Box","Circle","CircularImage","Database","Diamond","Dot","Ellipse","Icon","Square","Star","Text","Triangle","TriangleDown","imagelist","baseSize","baseFontSize","predefinedPosition","labelModule","currentShape","groupObj","choosify","_load_images","propagateFonts","imageObj","load","unselected","imageObjAlt","chooser","chosen","chosenNode","shadowColor","shadowSize","shadowX","shadowY","constrain","refreshNeeded","distanceToBorder","sizeDiff","fontDiff","getFormattingValues","updateBoundingBox","resize","parentOptions","newOptions","parsedColor","_slicedToArray2","_slicedToArray3","edgelabel","pointToSelf","fontOptions","yLine","isEdgeLabel","elementOptions","labelDirty","constrainWidth","maxWdt","minWdt","widthConstraint","widthConstraintMaximum","widthConstraintMinimum","constrainHeight","minHgt","valign","heightConstraint","heightConstraintMinimum","heightConstraintValign","chosenLabel","margins","widthBias","heightBias","pathP","opt","getP","mods","modOptions","modDefaults","parseFontString","ratio","baseline","viewFontSize","calculateLabelSize","_drawBackground","_drawText","fontSize","_setAlignment2","_setAlignment","_setAlignment3","labelHeight","lineCount","blocks","block","_getColor2","_getColor","_getColor3","fontColor","strokeText","initialStrokeColor","_processLabel","markupSystem","system","decodeMarkupSystem","splitMarkdownBlocks","splitHtmlBlocks","beginable","spacing","buffer","modStack","modName","emitBlock","ch","unshift","selectedState","hoverState","accumulate","addAndAccumulate","_nlLines","splitBlocks","_values","words","atStart","measure","lastMeasure","pre","measureText","_values2","_measure","_values3","_words","_text","_measure2","_lastMeasure","_pre","_text2","_measure3","outOptions","inOptions","newOptionsArray","_isIterable2","_isIterable3","sliceIterator","_arr","_n","_e","_s","isIterable","_getPrototypeOf","_getPrototypeOf2","_possibleConstructorReturn2","_possibleConstructorReturn3","_inherits2","_inherits3","_NodeBase2","_NodeBase3","_NodeBase","__proto__","_setMargins","textSize","getTextSize","enableShadow","disableShadow","save","enableBorderDashes","disableBorderDashes","restore","$getPrototypeOf","ReferenceError","_setPrototypeOf","_setPrototypeOf2","subClass","superClass","setPrototypeOf","buggy","NodeBase","adjustSizes","shadowBlur","shadowOffsetX","shadowOffsetY","setLineDash","dashes","differentState","_CircleImageBase2","_CircleImageBase3","_CircleImageBase","diameter","_drawRawCircle","CircleImageBase","labelOffset","setImages","selection_changed","imageTmp","ratio_width","ratio_height","globalAlpha","drawImageAtPosition","labelDimensions","_resizeImage","switchImages","clip","_drawImageAtPosition","_drawImageLabel","_distanceToBorder","_ShapeBase2","_ShapeBase3","_ShapeBase","_drawShape","ShapeBase","sizeMultiplier","_icon","neutralborderWidth","selectionLineWidth","Edge","edgesListeners","scaleFactor","arrowStrikethrough","hoverWidth","selectionWidth","selfReferenceSize","smooth","forceDirection","roundness","emitChange","edgeData","edgeOptions","reconnectEdges","updateEdgeType","_edgeId","oldEdgesData","edgesData","oldEdge","disconnect","showInternalIds","connect","cleanup","CubicBezierEdge","BezierEdgeDynamic","BezierEdgeStatic","StraightEdge","baseWidth","edgeType","connected","_setInteractionWidths","chosenEdge","toArrow","fromArrow","middleArrow","inheritsColor","toArrowScale","toArrowType","middleArrowScale","middleArrowType","fromArrowScale","fromArrowType","selectedWidth","changeInType","attachEdge","detachEdge","widthDiff","viaNode","getViaNode","arrowData","fromPoint","toPoint","getArrowData","drawLine","drawArrows","drawLabel","drawArrowHead","node1","node2","getPoint","translate","_rotateForLabelAlignment","_pointOnCircle","xFrom","yFrom","xTo","yTo","xObj","yObj","getDistanceToEdge","angleInDegrees","rotate","colorsDefined","_CubicBezierEdgeBase2","_CubicBezierEdgeBase3","_CubicBezierEdgeBase","viaNodes","via1","via2","x1","y1","_getViaCoordinates","nearNode","_findBorderPositionBezier","x3","y3","_ref","_ref2","_getDistanceToBezierEdge","_ref3","_ref4","vec","_BezierEdgeBase2","_BezierEdgeBase3","CubicBezierEdgeBase","_BezierEdgeBase","minDistance","lastX","lastY","_getDistanceToLine","_EdgeBase2","_EdgeBase3","BezierEdgeBase","_EdgeBase","distanceToPoint","difference","via","EdgeBase","colorDirty","getColor","_drawDashedLine","_drawLine","_getCircleData2","_getCircleData","_getCircleData3","_circle","lineDashOffset","_getCircleData4","_getCircleData5","_getCircleData6","_getCircleData7","_x","_y","_radius","_findBorderPosition","_findBorderPositionCircle","_getCircleData8","_getCircleData9","grd","createLinearGradient","fromColor","toColor","addColorStop","_getDistanceToEdge","_getCircleData10","_getCircleData11","py","something","arrowPoint","guideOffset","findBorderPosition","guidePos","_getCircleData12","_getCircleData13","_boundFunction","positionBezierNode","physicsChange","setupSupportNode","parentEdgeId","quadraticCurveTo","cr","xVia","yVia","pi","originalAngle","myAngle","_pi","_originalAngle","_myAngle","edgeSegmentLength","toBorderDist","toBorderPoint","borderPos","BarnesHutSolver","Repulsion","HierarchicalRepulsion","SpringSolver","HierarchicalSpringSolver","CentralGravitySolver","ForceAtlas2BasedRepulsionSolver","ForceAtlas2BasedCentralGravitySolver","physicsBody","physicsNodeIndices","physicsEdgeIndices","forces","velocities","physicsEnabled","simulationInterval","requiresTimeout","previousStates","referenceState","freezeCache","renderTimer","adaptiveTimestep","adaptiveTimestepEnabled","adaptiveCounter","adaptiveInterval","stabilized","startedStabilization","stabilizationIterations","ready","barnesHut","theta","gravitationalConstant","centralGravity","springLength","springConstant","damping","avoidOverlap","forceAtlas2Based","repulsion","nodeDistance","hierarchicalRepulsion","maxVelocity","minVelocity","stabilization","updateInterval","onlyDynamicEdges","timestep","layoutFailed","initPhysics","updatePhysicsData","nodesSolver","edgesSolver","gravitySolver","modelOptions","viewFunction","simulationStep","_emitStabilized","startTime","physicsTick","runDoubleSpeed","amountOfIterations","calculateForces","moveNodes","revert","_evaluateStepQuality","nodeIds","positions","vx","vy","reference","maxNodeVelocity","averageNodeVelocity","nodeVelocity","_performStep","solve","targetIterations","_freezeNodes","_stabilizationBatch","_finalizeStabilization","_restoreFrozenNodes","forceSize","arrowSize","barnesHutTree","randomSeed","thetaInversed","overlapAvoidanceFactor","nodeCount","_formBarnesHutTree","_getForceContribution","NW","NE","SW","SE","parentBranch","childrenCount","centerOfMass","calcSize","_calculateForces","gravityForce","fx","fy","minX","minY","maxX","maxY","rootSize","halfRootSize","_splitBranch","_placeInTree","totalMass","totalMassInv","biggestSize","skipMassUpdate","_updateBranchMass","_placeInRegion","region","seededRandom","containedNode","_insertRegion","childSize","_drawBranch","branch","RepulsionSolver","repulsingForce","HierarchicalRepulsionSolver","edgeLength","node3","_calculateSpringForce","springForce","springFx","springFy","_i2","totalFx","totalFy","_i3","correctionFx","correctionFy","_i4","_nodeId3","_BarnesHutSolver2","_BarnesHutSolver3","_BarnesHutSolver","degree","_CentralGravitySolver2","_CentralGravitySolver3","_CentralGravitySolver","NetworkUtil","Cluster","clusteredNodes","clusteredEdges","hubsize","_getHubSize","_checkOptions","nodesToCluster","refreshData","joinCondition","childNodesObj","childEdgesObj","clonedOptions","cloneOptions","_cluster","edgeCount","clusters","usedNodes","relevantEdgeCount","gatheringSuccessful","childNodeId","_getConnectedId","clusterByEdgeCount","clusterNodeProperties","parentNodeId","parentClonedOptions","childClonedOptions","childNodeIDs","childNode","childEdge","clusterEdgeProperties","otherNodeId","childKeys","createEdges","_edge","newEdge","clusteringEdgeReplacingId","edgeReplacedById","_backupEdgeOptions","allowSingleNodeCluster","processProperties","childNodesOptions","childEdgesOptions","_clonedOptions","clusterId","_getClusterPosition","clusterNode","containedNodes","containedEdges","_createClusterEdges","originalOptions","clusterNodeId","releaseFunction","clusterPosition","newPositions","_containedNode","_nodeId4","_containedNode2","_nodeId5","_containedNode3","edgesToBeDeleted","otherCluster","transferEdge","replacedEdge","_restoreEdge","nodesArray","reverse","clusteredNodeId","startEdgeId","allEdgeIds","getClusteredEdges","clusteredEdgeId","baseEdgeId","average","averageSquared","hubCounter","largestHub","variance","standardDeviation","hubThreshold","allNodes","specificNodes","amountOfConnections","_Node2","_Node3","_Node","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","redrawRequested","renderingActive","renderRequests","allowRedraw","hideEdgesOnDrag","hideNodesOnDrag","_determineBrowserMethod","_resizeNodes","_requestRedraw","_startRendering","cancelAnimationFrame","_renderStep","_drawEdges","_drawNodes","alwaysShow","topLeft","bottomRight","viewableArea","isSelected","isBoundingBoxOverlappingWith","browserType","resizeTimer","resizeFunction","cameraState","canvasViewCenter","hammerFrame","_cleanUp","previousWidth","previousHeight","widthRatio","heightRatio","newScale","currentViewCenter","distanceFromCenter","tabIndex","_setPixelRatio","_prepareValue","emitEvent","oldWidth","oldHeight","previousRatio","_getCameraState","newWidth","newHeight","_setCameraState","_XconvertCanvasToDOM","_YconvertCanvasToDOM","_XconvertDOMtoCanvas","_YconvertDOMtoCanvas","animationSpeed","renderRefreshRate","animationEasingFunction","easingTime","sourceScale","targetScale","sourceTranslation","targetTranslation","lockedOnNodeId","lockedOnNodeOffset","touchTime","initialZoom","zoomLevel","positionDefined","yDistance","xZoomLevel","yZoomLevel","findCenter","animationOptions","nodePosition","lockedOnNode","animateView","locked","_transitionRedraw","viewCenter","_lockedRedraw","finished","NavigationHandler","navigationHandler","popupObj","popupTimer","dragNodes","dragView","keyboard","speed","bindToWindow","navigationButtons","tooltipDelay","zoomView","pinched","checkSelectionChanges","_generateClickEvent","previouslySelectedEdgeCount","_getSelectedEdgeCount","previouslySelectedNodeCount","_getSelectedNodeCount","previousSelection","selectAdditionalOnPoint","selectOnPoint","selectedEdgesCount","selectedNodesCount","currentSelection","_determineIfDifferent2","_determineIfDifferent","nodesChanged","edgesChanged","nodeSelected","selectObject","selectionObj","xFixed","yFixed","scaleOld","preScaleDragPointer","scaleFrac","tx","ty","postScaleDragPointer","popupVisible","_checkHidePopup","_checkShowPopup","hoverObject","pointerObj","previousPopupObjId","nodeUnderCursor","popupType","overlappingNodes","isOverlappingWith","overlappingEdges","popupTargetType","popupTargetId","_pointerToPositionObject","stillOnObj","overNode","iconsCreated","navigationHammers","boundFunctions","activated","configureKeyboardBindings","loadNavigationElements","cleanNavigation","navigationDOM","navigationDivs","navigationDivActions","_fit","bindToRedraw","_stopMovement","boundAction","unbindFromRedraw","hoverObj","selectConnectedEdges","hoverConnectedEdges","updateSelection","selectionChanged","deselectObject","emptySelection","DOM","highlightEdges","_selectConnectedEdges","_addToSelection","_removeFromSelection","canvasPos","returnNode","positionObject","_getAllNodesOverlappingWith","_getEdgesOverlappingWith","returnEdge","mindist","overlappingEdge","_unselectConnectedEdges","clusterSize","_addToHover","hoverChanged","blurObject","_hoverConnectedEdges","idArray","RangeError","HierarchicalStatus","childrenReference","parentReference","levels","trees","isTree","accumulator","_getMaxLevel","nodeA","nodeB","minLevel","min_x","max_x","min_y","max_y","initialRandomSeed","setPhysics","optionsBackup","improvedLayout","hierarchical","levelSeparation","nodeSpacing","treeSpacing","blockShifting","edgeMinimization","parentCentralization","sortMethod","setupHierarchicalLayout","layoutNetwork","prevHierarchicalState","adaptAllOptionsForHierarchicalLayout","clusterOptions","startLength","before","clusterBridges","_declusterAll","info","kamadaKawai","_shiftToCenter","getRangeCore","clustersPresent","definedLevel","undefinedLevel","lastNodeOnLevel","treeIndex","distributionOrdering","distributionIndex","distributionOrderingPresence","_determineLevelsByHubsize","_determineLevelsDirected","_determineLevelsCustomCallback","ensureLevel","distribution","_getDistribution","_generateMap","_placeNodesByHierarchy","_condenseHierarchy","stillShifting","branches","shiftTree","_getPositionForHierarchy","_setPositionForHierarchy","getTreeSize","_isVertical","getTreeSizes","treeWidths","getBranchNodes","getBranchBoundary","branchMap","maxLevel","minSpace","maxSpace","branchNode","_getSpaceAroundNode2","_getSpaceAroundNode","_getSpaceAroundNode3","minSpaceNode","maxSpaceNode","getCollisionLevel","maxLevel1","getMaxLevel","maxLevel2","hasSameParent","parents1","parents2","shiftElementsCloser","centerParents","levelNodes","branchShiftCallback","centerParent","branchNodes1","branchNodes2","_getBranchBoundary","_getBranchBoundary2","max1","_getBranchBoundary3","_getBranchBoundary4","min2","minSpace2","_shiftBlock","_centerParent","minimizeEdgeLength","allEdges","nodeLevel","C2","referenceNodes","aboveEdges","otherNode","getFx","getDFx","getGuess","guess","guessMap","dfx","branchNodes","_getBranchBoundary5","_getBranchBoundary6","minSpaceBranch","maxSpaceBranch","branchOffset","_getSpaceAroundNode4","_getSpaceAroundNode5","newPosition","treeSizes","shiftBy","useMap","prevNode","nextNode","nextPos","parents","parentId","minPos","maxPos","_i5","_getSpaceAroundNode6","_getSpaceAroundNode7","positionedNodes","nodeArray","_indexArrayToNodes","_sortNodeArray","handledNodeCount","_validatePositionAndContinue","parentLevel","_i6","childNodeLevel","_i7","previousPos","sharedParent","_findCommonParent","withChild","_placeBranchNodes","hubSize","levelDownstream","_crawlNetwork","levelByDirection","setMinLevelToZero","_this6","_this7","fillInRelations","addRelation","checkIfTree","_this8","startingNodeId","crawler","tree","_this9","shifter","childA","childB","_this10","iterateParents","findParent","foundParent","editMode","manipulationDiv","editModeDiv","closeDiv","manipulationHammers","temporaryUIFunctions","temporaryEventFunctions","temporaryIds","guiEnabled","inMode","selectedControlNode","initiallyActive","deleteNode","deleteEdge","controlNodeStyle","_restore","_setup","showManipulatorToolbar","_createEditButton","manipulationDOM","selectedNodeCount","selectedEdgeCount","selectedTotalCount","needSeperator","_createAddNodeButton","_createSeperator","_createAddEdgeButton","_createEditNodeButton","_createEditEdgeButton","_createDeleteButton","_bindHammerToDiv","toggleEditMode","_temporaryBindEvent","_createBackButton","_createDescription","_performAddNode","_getSelectedNode","finalizedData","_temporaryBindUI","_handleConnect","_finishConnect","_dragControlNode","editWithoutDrag","edgeBeingEditedId","_performEditEdge","controlNodeFrom","_getNewTargetNode","controlNodeTo","_controlNodeTouch","_controlNodeDragStart","_controlNodeDrag","_controlNodeDragEnd","findBorderPositions","selectedNodes","selectedEdges","deleteFunction","_createWrappers","_removeManipulationDOM","_createButton","_cleanManipulatorHammers","_cleanupTemporaryNodesAndEdges","_unbindTemporaryUIs","_unbindTemporaryEvents","deleteBtnClass","labelClassName","newFunction","boundFunction","UIfunctionName","functionName","eventName","domElement","indexTempEdge","indexTempNode","fromSelect","toSelect","overlappingNodeIds","targetNode","connectionEdge","connectFromId","_performAddEdge","clickData","defaultData","sourceNodeId","targetNodeId","eeFunct","maximum","minimum","_FloydWarshall","_FloydWarshall2","edgeStrength","distanceSolver","edgesArray","ignoreClusters","D_matrix","getDistances","_createL_matrix","_createK_matrix","_createE_matrix","maxIterations","maxEnergy","highE_nodeId","dE_dx","dE_dy","delta_m","subIterations","_getHighestEnergyNode2","_getHighestEnergyNode","_getHighestEnergyNode3","_moveNode","_getEnergy2","_getEnergy","_getEnergy3","maxEnergyNodeId","dE_dx_max","dE_dy_max","nodeIdx","_getEnergy4","_getEnergy5","_E_sums$m","E_sums","d2E_dx2","d2E_dxdy","d2E_dy2","x_m","y_m","km","K_matrix","lm","L_matrix","iIdx","x_i","y_i","kmat","lmat","denominator","_updateE_matrix","E_matrix","mIdx","_mIdx","colm","kcolm","lcolm","cell","oldDx","oldDy","FloydWarshall","knode","inode","icolm","jnode","jcolm"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAyBA,cAEA,SAA2CA,EAAMC,GAC1B,gBAAZC,UAA0C,gBAAXC,QACxCA,OAAOD,QAAUD,IACQ,kBAAXG,SAAyBA,OAAOC,IAC9CD,UAAWH,GACe,gBAAZC,SACdA,QAAa,IAAID,IAEjBD,EAAU,IAAIC,KACbK,KAAM,WACT,MAAgB,UAAUC,GAKhB,QAASC,GAAoBC,GAG5B,GAAGC,EAAiBD,GACnB,MAAOC,GAAiBD,GAAUP,OAGnC,IAAIC,GAASO,EAAiBD,IAC7BP,WACAS,GAAIF,EACJG,QAAQ,EAUT,OANAL,GAAQE,GAAUI,KAAKV,EAAOD,QAASC,EAAQA,EAAOD,QAASM,GAG/DL,EAAOS,QAAS,EAGTT,EAAOD,QAvBf,GAAIQ,KAqCJ,OATAF,GAAoBM,EAAIP,EAGxBC,EAAoBO,EAAIL,EAGxBF,EAAoBQ,EAAI,GAGjBR,EAAoB,KAK/B,SAAUL,EAAQD,EAASM,GAI/B,GAAIS,GAAOT,EAAoB,EAG/BS,GAAKC,OAAOhB,EAASM,EAAoB,KAGzCS,EAAKC,OAAOhB,EAASM,EAAoB,MAGzCS,EAAKC,OAAOhB,EAASM,EAAoB,OAIrC,SAAUL,EAAQD,EAASM,GAoB/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAhBzF,GAAIG,GAAgBf,EAAoB,GAEpCgB,EAAgBL,EAAuBI,GAEvCE,EAAUjB,EAAoB,IAE9BkB,EAAWP,EAAuBM,GAElCE,EAAQnB,EAAoB,IAE5BoB,EAAST,EAAuBQ,GAEhCE,EAAWrB,EAAoB,IAE/BsB,EAAWX,EAAuBU,GAUlCE,EAASvB,EAAoB,IAC7BwB,EAAOxB,EAAoB,GAO/BN,GAAQ+B,SAAW,SAAUC,GAC3B,MAAOA,aAAkBC,SAA2B,gBAAVD,IAO5ChC,EAAQkC,mBAAqB,SAAUC,GACrC,GAAIA,EACF,MAAqC,IAA9BA,EAAUC,iBACfpC,EAAQkC,mBAAmBC,EAAUE,YACrCF,EAAUG,YAAYH,EAAUE,aActCrC,EAAQuC,UAAY,SAAUC,EAAKC,EAAKC,EAAOC,GAC7C,GAAIF,GAAOD,EACT,MAAO,EAEP,IAAII,GAAQ,GAAKH,EAAMD,EACvB,OAAOK,MAAKJ,IAAI,GAAIE,EAAQH,GAAOI,IASvC5C,EAAQ8C,SAAW,SAAUd,GAC3B,MAAOA,aAAkBe,SAA2B,gBAAVf,IAQ5ChC,EAAQgD,OAAS,SAAUhB,GACzB,GAAIA,YAAkBiB,MACpB,OAAO,CACF,IAAIjD,EAAQ8C,SAASd,GAAS,CAGnC,GADYkB,EAAaC,KAAKnB,GAE5B,OAAO,CACF,KAAKoB,MAAMH,KAAKI,MAAMrB,IAC3B,OAAO,EAIX,OAAO,GAQThC,EAAQsD,WAAa,WACnB,MAAOxB,GAAKyB,MAQdvD,EAAQwD,cAAgB,SAAUtC,EAAKyB,GACrC,IAAK,GAAIc,KAAQvC,GACXA,EAAIwC,eAAeD,IACuB,YAAxC,EAAI7B,EAAkB,SAAGV,EAAIuC,MAC/BvC,EAAIuC,GAAQd,IAYpB3C,EAAQ2D,cAAgB,SAAUC,EAAGC,GACnC,GAAIC,GAAgBC,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,IAAmBA,UAAU,EAEnF,KAAK,GAAIN,KAAQG,OACCK,KAAZJ,EAAEJ,KACsC,YAAtC,EAAI7B,EAAkB,SAAGiC,EAAEJ,QACZQ,KAAZJ,EAAEJ,IAAmC,OAAZI,EAAEJ,QAA+BQ,KAAZL,EAAEH,KAAyC,IAAlBK,EAG1EF,EAAEH,GAAQI,EAAEJ,SAFLG,GAAEH,GAK+B,YAAtC,EAAI7B,EAAkB,SAAGgC,EAAEH,KAC7BzD,EAAQ2D,cAAcC,EAAEH,GAAOI,EAAEJ,GAAOK,KAclD9D,EAAQkE,YAAc,SAAUN,EAAGC,GACjC,IAAK,GAAIM,GAAI,EAAGA,EAAIJ,UAAUC,OAAQG,IAAK,CACzC,GAAIC,GAAQL,UAAUI,EACtB,KAAK,GAAIV,KAAQW,GACfR,EAAEH,GAAQW,EAAMX,GAGpB,MAAOG,IAUT5D,EAAQgB,OAAS,SAAU4C,EAAGC,GAC5B,IAAK,GAAIM,GAAI,EAAGA,EAAIJ,UAAUC,OAAQG,IAAK,CACzC,GAAIC,GAAQL,UAAUI,EACtB,KAAK,GAAIV,KAAQW,GACXA,EAAMV,eAAeD,KACvBG,EAAEH,GAAQW,EAAMX,IAItB,MAAOG,IAWT5D,EAAQqE,gBAAkB,SAAUC,EAAOV,EAAGC,GAC5C,IAAKU,MAAMC,QAAQF,GACjB,KAAM,IAAIG,OAAM,uDAGlB,KAAK,GAAIN,GAAI,EAAGA,EAAIJ,UAAUC,OAAQG,IAGpC,IAAK,GAFDC,GAAQL,UAAUI,GAEbrD,EAAI,EAAGA,EAAIwD,EAAMN,OAAQlD,IAAK,CACrC,GAAI2C,GAAOa,EAAMxD,EACbsD,IAASA,EAAMV,eAAeD,KAChCG,EAAEH,GAAQW,EAAMX,IAItB,MAAOG,IAWT5D,EAAQ0E,oBAAsB,SAAUJ,EAAOV,EAAGC,GAChD,GAAIC,GAAgBC,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,IAAmBA,UAAU,EAGnF,IAAIQ,MAAMC,QAAQX,GAChB,KAAM,IAAIc,WAAU,yCAEtB,KAAK,GAAIR,GAAI,EAAGA,EAAIJ,UAAUC,OAAQG,IAEpC,IAAK,GADDC,GAAQL,UAAUI,GACbrD,EAAI,EAAGA,EAAIwD,EAAMN,OAAQlD,IAAK,CACrC,GAAI2C,GAAOa,EAAMxD,EACjB,IAAIsD,EAAMV,eAAeD,GACvB,GAAII,EAAEJ,IAASI,EAAEJ,GAAMmB,cAAgBC,WACrBZ,KAAZL,EAAEH,KACJG,EAAEH,OAEAG,EAAEH,GAAMmB,cAAgBC,OAC1B7E,EAAQ8E,WAAWlB,EAAEH,GAAOI,EAAEJ,IAAO,EAAOK,GAE5B,OAAZD,EAAEJ,QAA8BQ,KAAZL,EAAEH,KAAyC,IAAlBK,QACxCF,GAAEH,GAETG,EAAEH,GAAQI,EAAEJ,OAGX,CAAA,GAAIc,MAAMC,QAAQX,EAAEJ,IACzB,KAAM,IAAIkB,WAAU,yCAEJ,QAAZd,EAAEJ,QAA8BQ,KAAZL,EAAEH,KAAyC,IAAlBK,QACxCF,GAAEH,GAETG,EAAEH,GAAQI,EAAEJ,IAMtB,MAAOG,IAWT5D,EAAQ+E,uBAAyB,SAAUT,EAAOV,EAAGC,GACnD,GAAIC,GAAgBC,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,IAAmBA,UAAU,EAGnF,IAAIQ,MAAMC,QAAQX,GAChB,KAAM,IAAIc,WAAU,yCAEtB,KAAK,GAAIlB,KAAQI,GACf,GAAIA,EAAEH,eAAeD,KACS,GAAxBa,EAAMU,QAAQvB,GAChB,GAAII,EAAEJ,IAASI,EAAEJ,GAAMmB,cAAgBC,WACrBZ,KAAZL,EAAEH,KACJG,EAAEH,OAEAG,EAAEH,GAAMmB,cAAgBC,OAC1B7E,EAAQ8E,WAAWlB,EAAEH,GAAOI,EAAEJ,IAEd,OAAZI,EAAEJ,QAA8BQ,KAAZL,EAAEH,KAAyC,IAAlBK,QACxCF,GAAEH,GAETG,EAAEH,GAAQI,EAAEJ,OAGX,IAAIc,MAAMC,QAAQX,EAAEJ,IAAQ,CACjCG,EAAEH,KACF,KAAK,GAAIU,GAAI,EAAGA,EAAIN,EAAEJ,GAAMO,OAAQG,IAClCP,EAAEH,GAAMwB,KAAKpB,EAAEJ,GAAMU,QAGP,QAAZN,EAAEJ,QAA8BQ,KAAZL,EAAEH,KAAyC,IAAlBK,QACxCF,GAAEH,GAETG,EAAEH,GAAQI,EAAEJ,EAMtB,OAAOG,IAYT5D,EAAQ8E,WAAa,SAAUlB,EAAGC,EAAGK,EAAaJ,GAChD,IAAK,GAAIL,KAAQI,GACf,GAAIA,EAAEH,eAAeD,KAAyB,IAAhBS,EAC5B,GAAIL,EAAEJ,IAASI,EAAEJ,GAAMmB,cAAgBC,WACrBZ,KAAZL,EAAEH,KACJG,EAAEH,OAEAG,EAAEH,GAAMmB,cAAgBC,OAC1B7E,EAAQ8E,WAAWlB,EAAEH,GAAOI,EAAEJ,GAAOS,GAErB,OAAZL,EAAEJ,QAA8BQ,KAAZL,EAAEH,KAAyC,IAAlBK,QACxCF,GAAEH,GAETG,EAAEH,GAAQI,EAAEJ,OAGX,IAAIc,MAAMC,QAAQX,EAAEJ,IAAQ,CACjCG,EAAEH,KACF,KAAK,GAAIU,GAAI,EAAGA,EAAIN,EAAEJ,GAAMO,OAAQG,IAClCP,EAAEH,GAAMwB,KAAKpB,EAAEJ,GAAMU,QAGP,QAAZN,EAAEJ,QAA8BQ,KAAZL,EAAEH,KAAyC,IAAlBK,QACxCF,GAAEH,GAETG,EAAEH,GAAQI,EAAEJ,EAKpB,OAAOG,IAUT5D,EAAQkF,WAAa,SAAUtB,EAAGC,GAChC,GAAID,EAAEI,QAAUH,EAAEG,OAAQ,OAAO,CAEjC,KAAK,GAAIG,GAAI,EAAGgB,EAAMvB,EAAEI,OAAQG,EAAIgB,EAAKhB,IACvC,GAAIP,EAAEO,IAAMN,EAAEM,GAAI,OAAO,CAG3B,QAAO,GAYTnE,EAAQoF,QAAU,SAAUpD,EAAQqD,GAClC,GAAIC,EAEJ,QAAerB,KAAXjC,EAAJ,CAGA,GAAe,OAAXA,EACF,MAAO,KAGT,KAAKqD,EACH,MAAOrD,EAET,IAAsB,gBAATqD,MAAwBA,YAAgBtC,SACnD,KAAM,IAAI0B,OAAM,wBAIlB,QAAQY,GACN,IAAK,UACL,IAAK,UACH,MAAOE,SAAQvD,EAEjB,KAAK,SACL,IAAK,SACH,MAAIhC,GAAQ8C,SAASd,KAAYoB,MAAMH,KAAKI,MAAMrB,IACzCH,EAAOG,GAAQwD,UAEfvD,OAAOD,EAAOwD,UAEzB,KAAK,SACL,IAAK,SACH,MAAOzC,QAAOf,EAEhB,KAAK,OACH,GAAIhC,EAAQ+B,SAASC,GACnB,MAAO,IAAIiB,MAAKjB,EAElB,IAAIA,YAAkBiB,MACpB,MAAO,IAAIA,MAAKjB,EAAOwD,UAClB,IAAI3D,EAAO4D,SAASzD,GACzB,MAAO,IAAIiB,MAAKjB,EAAOwD,UAEzB,IAAIxF,EAAQ8C,SAASd,GAEnB,MADAsD,GAAQpC,EAAaC,KAAKnB,GACtBsD,EAEK,GAAIrC,MAAKhB,OAAOqD,EAAM,KAEtBzD,EAAO,GAAIoB,MAAKjB,IAAS0D,QAGlC,MAAM,IAAIjB,OAAM,iCAAmCzE,EAAQ2F,QAAQ3D,GAAU,gBAGjF,KAAK,SACH,GAAIhC,EAAQ+B,SAASC,GACnB,MAAOH,GAAOG,EAEhB,IAAIA,YAAkBiB,MACpB,MAAOpB,GAAOG,EAAOwD,UAChB,IAAI3D,EAAO4D,SAASzD,GACzB,MAAOH,GAAOG,EAEhB,IAAIhC,EAAQ8C,SAASd,GAEnB,MADAsD,GAAQpC,EAAaC,KAAKnB,GAGjBH,EAFLyD,EAEYrD,OAAOqD,EAAM,IAEbtD,EAGhB,MAAM,IAAIyC,OAAM,iCAAmCzE,EAAQ2F,QAAQ3D,GAAU,gBAGjF,KAAK,UACH,GAAIhC,EAAQ+B,SAASC,GACnB,MAAO,IAAIiB,MAAKjB,EACX,IAAIA,YAAkBiB,MAC3B,MAAOjB,GAAO4D,aACT,IAAI/D,EAAO4D,SAASzD,GACzB,MAAOA,GAAO0D,SAASE,aAClB,IAAI5F,EAAQ8C,SAASd,GAE1B,MADAsD,GAAQpC,EAAaC,KAAKnB,GACtBsD,EAEK,GAAIrC,MAAKhB,OAAOqD,EAAM,KAAKM,cAE3B/D,EAAOG,GAAQ6D,QAGxB,MAAM,IAAIpB,OAAM,iCAAmCzE,EAAQ2F,QAAQ3D,GAAU,mBAGjF,KAAK,UACH,GAAIhC,EAAQ+B,SAASC,GACnB,MAAO,SAAWA,EAAS,IACtB,IAAIA,YAAkBiB,MAC3B,MAAO,SAAWjB,EAAOwD,UAAY,IAChC,IAAIxF,EAAQ8C,SAASd,GAAS,CACnCsD,EAAQpC,EAAaC,KAAKnB,EAQ1B,OAAO,UANHsD,EAEM,GAAIrC,MAAKhB,OAAOqD,EAAM,KAAKE,UAE3B,GAAIvC,MAAKjB,GAAQwD,WAED,KAE1B,KAAM,IAAIf,OAAM,iCAAmCzE,EAAQ2F,QAAQ3D,GAAU,mBAGjF,SACE,KAAM,IAAIyC,OAAM,iBAAmBY,EAAO,OAOhD,IAAInC,GAAe,qBAOnBlD,GAAQ2F,QAAU,SAAU3D,GAC1B,GAAIqD,OAAyB,KAAXrD,EAAyB,aAAc,EAAIJ,EAAkB,SAAGI,EAElF,OAAY,UAARqD,EACa,OAAXrD,EACK,OAELA,YAAkBuD,SACb,UAELvD,YAAkBC,QACb,SAELD,YAAkBe,QACb,SAELwB,MAAMC,QAAQxC,GACT,QAELA,YAAkBiB,MACb,OAEF,SACU,UAARoC,EACF,SACU,WAARA,EACF,UACU,UAARA,EACF,aACWpB,KAAToB,EACF,YAGFA,GAUTrF,EAAQ8F,mBAAqB,SAAUC,EAAKC,GAE1C,IAAK,GADDC,MACK9B,EAAI,EAAGA,EAAI4B,EAAI/B,OAAQG,IAC9B8B,EAAOhB,KAAKc,EAAI5B,GAGlB,OADA8B,GAAOhB,KAAKe,GACLC,GAUTjG,EAAQkG,UAAY,SAAUH,GAE5B,IAAK,GADDE,MACK9B,EAAI,EAAGA,EAAI4B,EAAI/B,OAAQG,IAC9B8B,EAAOhB,KAAKc,EAAI5B,GAElB,OAAO8B,IASTjG,EAAQmG,gBAAkB,SAAUC,GAClC,MAAOA,GAAKC,wBAAwBC,MAGtCtG,EAAQuG,iBAAmB,SAAUH,GACnC,MAAOA,GAAKC,wBAAwBG,OAStCxG,EAAQyG,eAAiB,SAAUL,GACjC,MAAOA,GAAKC,wBAAwBK,KAQtC1G,EAAQ2G,aAAe,SAAUP,EAAMQ,GACrC,GAAIC,GAAUT,EAAKU,UAAUC,MAAM,KAC/BC,EAAaJ,EAAWG,MAAM,IAClCF,GAAUA,EAAQI,OAAOD,EAAWE,OAAO,SAAUJ,GACnD,MAAOD,GAAQ7B,QAAQ8B,GAAa,KAEtCV,EAAKU,UAAYD,EAAQM,KAAK,MAQhCnH,EAAQoH,gBAAkB,SAAUhB,EAAMQ,GACxC,GAAIC,GAAUT,EAAKU,UAAUC,MAAM,KAC/BM,EAAaT,EAAWG,MAAM,IAClCF,GAAUA,EAAQK,OAAO,SAAUJ,GACjC,MAAOO,GAAWrC,QAAQ8B,GAAa,IAEzCV,EAAKU,UAAYD,EAAQM,KAAK,MAYhCnH,EAAQsH,QAAU,SAAUtF,EAAQuF,GAClC,GAAIpD,GAAGgB,CACP,IAAIZ,MAAMC,QAAQxC,GAEhB,IAAKmC,EAAI,EAAGgB,EAAMnD,EAAOgC,OAAQG,EAAIgB,EAAKhB,IACxCoD,EAASvF,EAAOmC,GAAIA,EAAGnC,OAIzB,KAAKmC,IAAKnC,GACJA,EAAO0B,eAAeS,IACxBoD,EAASvF,EAAOmC,GAAIA,EAAGnC,IAY/BhC,EAAQwH,QAAU,SAAUxF,GAC1B,GAAIyF,KAEJ,KAAK,GAAIhE,KAAQzB,GACXA,EAAO0B,eAAeD,IAAOgE,EAAMxC,KAAKjD,EAAOyB,GAGrD,OAAOgE,IAUTzH,EAAQ0H,eAAiB,SAAU1F,EAAQ2F,EAAKhF,GAC9C,MAAIX,GAAO2F,KAAShF,IAClBX,EAAO2F,GAAOhF,GACP,IAWX3C,EAAQ4H,SAAW,SAAUC,GAC3B,GAAIC,IAAY,CAEhB,OAAO,YACAA,IACHA,GAAY,EACZC,sBAAsB,WACpBD,GAAY,EACZD,SAcR7H,EAAQgI,iBAAmB,SAAUC,EAASC,EAAQC,EAAUC,GAC1DH,EAAQD,sBACS/D,KAAfmE,IAA0BA,GAAa,GAE5B,eAAXF,GAA2BG,UAAUC,UAAUtD,QAAQ,YAAc,IACvEkD,EAAS,kBAGXD,EAAQD,iBAAiBE,EAAQC,EAAUC,IAE3CH,EAAQM,YAAY,KAAOL,EAAQC,IAWvCnI,EAAQwI,oBAAsB,SAAUP,EAASC,EAAQC,EAAUC,GAC7DH,EAAQO,yBAESvE,KAAfmE,IAA0BA,GAAa,GAE5B,eAAXF,GAA2BG,UAAUC,UAAUtD,QAAQ,YAAc,IACvEkD,EAAS,kBAGXD,EAAQO,oBAAoBN,EAAQC,EAAUC,IAG9CH,EAAQQ,YAAY,KAAOP,EAAQC,IAOvCnI,EAAQ0I,eAAiB,SAAUC,GAC5BA,IAAOA,EAAQC,OAAOD,OAEvBA,EAAMD,eACRC,EAAMD,iBAENC,EAAME,aAAc,GASxB7I,EAAQ8I,UAAY,SAAUH,GAEvBA,IACHA,EAAQC,OAAOD,MAGjB,IAAII,EAaJ,OAXIJ,GAAMI,OACRA,EAASJ,EAAMI,OACNJ,EAAMK,aACfD,EAASJ,EAAMK,gBAGM/E,IAAnB8E,EAAOE,UAA4C,GAAnBF,EAAOE,WAEzCF,EAASA,EAAOG,YAGXH,GAQT/I,EAAQmJ,UAAY,SAAUlB,EAASmB,GAGrC,IAFA,GAAIC,GAAIpB,EAEDoB,GAAG,CACR,GAAIA,IAAMD,EACR,OAAO,CAETC,GAAIA,EAAEH,WAGR,OAAO,GAGTlJ,EAAQsJ,UAQRtJ,EAAQsJ,OAAOC,UAAY,SAAU5G,EAAO6G,GAK1C,MAJoB,kBAAT7G,KACTA,EAAQA,KAGG,MAATA,EACc,GAATA,EAGF6G,GAAgB,MASzBxJ,EAAQsJ,OAAOG,SAAW,SAAU9G,EAAO6G,GAKzC,MAJoB,kBAAT7G,KACTA,EAAQA,KAGG,MAATA,EACKV,OAAOU,IAAU6G,GAAgB,KAGnCA,GAAgB,MASzBxJ,EAAQsJ,OAAOI,SAAW,SAAU/G,EAAO6G,GAKzC,MAJoB,kBAAT7G,KACTA,EAAQA,KAGG,MAATA,EACKI,OAAOJ,GAGT6G,GAAgB,MASzBxJ,EAAQsJ,OAAOK,OAAS,SAAUhH,EAAO6G,GAKvC,MAJoB,kBAAT7G,KACTA,EAAQA,KAGN3C,EAAQ8C,SAASH,GACZA,EACE3C,EAAQ+B,SAASY,GACnBA,EAAQ,KAER6G,GAAgB,MAU3BxJ,EAAQsJ,OAAOM,UAAY,SAAUjH,EAAO6G,GAK1C,MAJoB,kBAAT7G,KACTA,EAAQA,KAGHA,GAAS6G,GAAgB,MASlCxJ,EAAQ6J,SAAW,SAAUC,GAE3B,GAAIC,GAAiB,kCACrBD,GAAMA,EAAIE,QAAQD,EAAgB,SAAUnJ,EAAGqJ,EAAGC,EAAGrG,GACnD,MAAOoG,GAAIA,EAAIC,EAAIA,EAAIrG,EAAIA,GAE7B,IAAIsG,GAAS,4CAA4ChH,KAAK2G,EAC9D,OAAOK,IACLF,EAAGG,SAASD,EAAO,GAAI,IACvBD,EAAGE,SAASD,EAAO,GAAI,IACvBtG,EAAGuG,SAASD,EAAO,GAAI,KACrB,MASNnK,EAAQqK,gBAAkB,SAAUC,EAAOC,GACzC,IAA8B,GAA1BD,EAAMtF,QAAQ,QAChB,MAAOsF,EACF,KAA6B,GAAzBA,EAAMtF,QAAQ,OAAc,CACrC,GAAIwF,GAAMF,EAAMG,OAAOH,EAAMtF,QAAQ,KAAO,GAAGgF,QAAQ,IAAK,IAAIjD,MAAM,IACtE,OAAO,QAAUyD,EAAI,GAAK,IAAMA,EAAI,GAAK,IAAMA,EAAI,GAAK,IAAMD,EAAU,IAExE,GAAIC,GAAMxK,EAAQ6J,SAASS,EAC3B,OAAW,OAAPE,EACKF,EAEA,QAAUE,EAAIP,EAAI,IAAMO,EAAIN,EAAI,IAAMM,EAAI3G,EAAI,IAAM0G,EAAU,KAa3EvK,EAAQ0K,SAAW,SAAUC,EAAKC,EAAOC,GACvC,MAAO,MAAQ,GAAK,KAAOF,GAAO,KAAOC,GAAS,GAAKC,GAAMC,SAAS,IAAIC,MAAM,IASlF/K,EAAQgL,WAAa,SAAUV,GAC7B,GAAIzJ,EACJ,KAAgC,IAA5Bb,EAAQ8C,SAASwH,GAAiB,CACpC,IAAkC,IAA9BtK,EAAQiL,WAAWX,GAAiB,CACtC,GAAIE,GAAMF,EAAMG,OAAO,GAAGA,OAAO,EAAGH,EAAMtG,OAAS,GAAG+C,MAAM,KAAKmE,IAAI,SAAUvI,GAC7E,MAAOyH,UAASzH,IAElB2H,GAAQtK,EAAQ0K,SAASF,EAAI,GAAIA,EAAI,GAAIA,EAAI,IAE/C,IAAkC,IAA9BxK,EAAQmL,WAAWb,GAAiB,CACtC,GAAIc,GAAMpL,EAAQqL,SAASf,GACvBgB,GAAoBC,EAAGH,EAAIG,EAAGC,EAAW,GAARJ,EAAII,EAASC,EAAG5I,KAAKL,IAAI,EAAW,KAAR4I,EAAIK,IACjEC,GAAmBH,EAAGH,EAAIG,EAAGC,EAAG3I,KAAKL,IAAI,EAAW,KAAR4I,EAAII,GAAWC,EAAW,GAARL,EAAIK,GAClEE,EAAiB3L,EAAQ4L,SAASF,EAAeH,EAAGG,EAAeF,EAAGE,EAAeD,GACrFI,EAAkB7L,EAAQ4L,SAASN,EAAgBC,EAAGD,EAAgBE,EAAGF,EAAgBG,EAC7F5K,IACEiL,WAAYxB,EACZyB,OAAQJ,EACRK,WACEF,WAAYD,EACZE,OAAQJ,GAEVM,OACEH,WAAYD,EACZE,OAAQJ,QAIZ9K,IACEiL,WAAYxB,EACZyB,OAAQzB,EACR0B,WACEF,WAAYxB,EACZyB,OAAQzB,GAEV2B,OACEH,WAAYxB,EACZyB,OAAQzB,QAKdzJ,MACAA,EAAEiL,WAAaxB,EAAMwB,gBAAc7H,GACnCpD,EAAEkL,OAASzB,EAAMyB,YAAU9H,GAEvBjE,EAAQ8C,SAASwH,EAAM0B,WACzBnL,EAAEmL,WACAD,OAAQzB,EAAM0B,UACdF,WAAYxB,EAAM0B,YAGpBnL,EAAEmL,aACFnL,EAAEmL,UAAUF,WAAaxB,EAAM0B,WAAa1B,EAAM0B,UAAUF,gBAAc7H,GAC1EpD,EAAEmL,UAAUD,OAASzB,EAAM0B,WAAa1B,EAAM0B,UAAUD,YAAU9H,IAGhEjE,EAAQ8C,SAASwH,EAAM2B,OACzBpL,EAAEoL,OACAF,OAAQzB,EAAM2B,MACdH,WAAYxB,EAAM2B,QAGpBpL,EAAEoL,SACFpL,EAAEoL,MAAMH,WAAaxB,EAAM2B,OAAS3B,EAAM2B,MAAMH,gBAAc7H,GAC9DpD,EAAEoL,MAAMF,OAASzB,EAAM2B,OAAS3B,EAAM2B,MAAMF,YAAU9H,GAI1D,OAAOpD,IAYTb,EAAQkM,SAAW,SAAUvB,EAAKC,EAAOC,GACvCF,GAAY,IAAIC,GAAgB,IAAIC,GAAc,GAClD,IAAIsB,GAAStJ,KAAKL,IAAImI,EAAK9H,KAAKL,IAAIoI,EAAOC,IACvCuB,EAASvJ,KAAKJ,IAAIkI,EAAK9H,KAAKJ,IAAImI,EAAOC,GAG3C,IAAIsB,GAAUC,EACZ,OAASb,EAAG,EAAGC,EAAG,EAAGC,EAAGU,EAI1B,IAAIE,GAAI1B,GAAOwB,EAASvB,EAAQC,EAAOA,GAAQsB,EAASxB,EAAMC,EAAQC,EAAOF,CAK7E,QAASY,EAHC,KADFZ,GAAOwB,EAAS,EAAItB,GAAQsB,EAAS,EAAI,GAC7BE,GAAKD,EAASD,IAAW,IAG5BX,GAFCY,EAASD,GAAUC,EAELX,EADpBW,GAId,IAAIE,IAEFvF,MAAO,SAAewF,GACpB,GAAIC,KAWJ,OATAD,GAAQxF,MAAM,KAAKO,QAAQ,SAAUmF,GACnC,GAAoB,IAAhBA,EAAMC,OAAc,CACtB,GAAIC,GAAQF,EAAM1F,MAAM,KACpBY,EAAMgF,EAAM,GAAGD,OACf/J,EAAQgK,EAAM,GAAGD,MACrBF,GAAO7E,GAAOhF,KAIX6J,GAITrF,KAAM,SAAcqF,GAClB,OAAO,EAAI9K,EAAgB,SAAG8K,GAAQtB,IAAI,SAAUvD,GAClD,MAAOA,GAAM,KAAO6E,EAAO7E,KAC1BR,KAAK,OASZnH,GAAQ4M,WAAa,SAAU3E,EAASsE,GACtC,GAAIM,GAAgBP,EAAQvF,MAAMkB,EAAQwE,MAAMF,SAC5CO,EAAYR,EAAQvF,MAAMwF,GAC1BC,EAASxM,EAAQgB,OAAO6L,EAAeC,EAE3C7E,GAAQwE,MAAMF,QAAUD,EAAQnF,KAAKqF,IAQvCxM,EAAQ+M,cAAgB,SAAU9E,EAASsE,GACzC,GAAIC,GAASF,EAAQvF,MAAMkB,EAAQwE,MAAMF,SACrCS,EAAeV,EAAQvF,MAAMwF,EAEjC,KAAK,GAAI5E,KAAOqF,GACVA,EAAatJ,eAAeiE,UACvB6E,GAAO7E,EAIlBM,GAAQwE,MAAMF,QAAUD,EAAQnF,KAAKqF,IAWvCxM,EAAQiN,SAAW,SAAU1B,EAAGC,EAAGC,GACjC,GAAIxB,GAAGC,EAAGrG,EAENM,EAAItB,KAAKqK,MAAU,EAAJ3B,GACf4B,EAAQ,EAAJ5B,EAAQpH,EACZrD,EAAI2K,GAAK,EAAID,GACb4B,EAAI3B,GAAK,EAAI0B,EAAI3B,GACjB6B,EAAI5B,GAAK,GAAK,EAAI0B,GAAK3B,EAE3B,QAAQrH,EAAI,GACV,IAAK,GACH8F,EAAIwB,EAAGvB,EAAImD,EAAGxJ,EAAI/C,CAAE,MACtB,KAAK,GACHmJ,EAAImD,EAAGlD,EAAIuB,EAAG5H,EAAI/C,CAAE,MACtB,KAAK,GACHmJ,EAAInJ,EAAGoJ,EAAIuB,EAAG5H,EAAIwJ,CAAE,MACtB,KAAK,GACHpD,EAAInJ,EAAGoJ,EAAIkD,EAAGvJ,EAAI4H,CAAE,MACtB,KAAK,GACHxB,EAAIoD,EAAGnD,EAAIpJ,EAAG+C,EAAI4H,CAAE,MACtB,KAAK,GACHxB,EAAIwB,EAAGvB,EAAIpJ,EAAG+C,EAAIuJ,EAGtB,OAASnD,EAAGpH,KAAKqK,MAAU,IAAJjD,GAAUC,EAAGrH,KAAKqK,MAAU,IAAJhD,GAAUrG,EAAGhB,KAAKqK,MAAU,IAAJrJ,KAGzE7D,EAAQ4L,SAAW,SAAUL,EAAGC,EAAGC,GACjC,GAAIjB,GAAMxK,EAAQiN,SAAS1B,EAAGC,EAAGC,EACjC,OAAOzL,GAAQ0K,SAASF,EAAIP,EAAGO,EAAIN,EAAGM,EAAI3G,IAG5C7D,EAAQqL,SAAW,SAAUvB,GAC3B,GAAIU,GAAMxK,EAAQ6J,SAASC,EAC3B,OAAO9J,GAAQkM,SAAS1B,EAAIP,EAAGO,EAAIN,EAAGM,EAAI3G,IAG5C7D,EAAQmL,WAAa,SAAUrB,GAE7B,MADW,qCAAqCwD,KAAKxD,IAIvD9J,EAAQiL,WAAa,SAAUT,GAG7B,MAFAA,GAAMA,EAAIR,QAAQ,IAAK,IACZ,wCAAwCsD,KAAK9C,IAG1DxK,EAAQuN,YAAc,SAAUC,GAG9B,MAFAA,GAAOA,EAAKxD,QAAQ,IAAK,IACd,kDAAkDsD,KAAKE,IAWpExN,EAAQyN,sBAAwB,SAAUC,EAAQC,GAChD,GAA0G,eAA1E,KAApBA,EAAkC,aAAc,EAAI/L,EAAkB,SAAG+L,IAA+B,CAElH,IAAK,GADDC,IAAW,EAAIpM,EAAkB,SAAGmM,GAC/BxJ,EAAI,EAAGA,EAAIuJ,EAAO1J,OAAQG,IAC7BwJ,EAAgBjK,eAAegK,EAAOvJ,KACoB,WAAxD,EAAIvC,EAAkB,SAAG+L,EAAgBD,EAAOvJ,OAClDyJ,EAASF,EAAOvJ,IAAMnE,EAAQ6N,aAAaF,EAAgBD,EAAOvJ,KAIxE,OAAOyJ,GAEP,MAAO,OAWX5N,EAAQ6N,aAAe,SAAUF,GAC/B,GAA0G,eAA1E,KAApBA,EAAkC,aAAc,EAAI/L,EAAkB,SAAG+L,IAA+B,CAClH,GAAIC,IAAW,EAAIpM,EAAkB,SAAGmM,EACxC,KAAK,GAAIxJ,KAAKwJ,GACRA,EAAgBjK,eAAeS,IACmB,WAAhD,EAAIvC,EAAkB,SAAG+L,EAAgBxJ,MAC3CyJ,EAASzJ,GAAKnE,EAAQ6N,aAAaF,EAAgBxJ,IAIzD,OAAOyJ,GAEP,MAAO,OAWX5N,EAAQ8N,WAAa,SAAUlK,EAAGmK,GAChC,IAAK,GAAI5J,GAAI,EAAGA,EAAIP,EAAEI,OAAQG,IAAK,CAEjC,IAAK,GADD6J,GAAIpK,EAAEO,GACD8J,EAAI9J,EAAG8J,EAAI,GAAKF,EAAQC,EAAGpK,EAAEqK,EAAI,IAAM,EAAGA,IACjDrK,EAAEqK,GAAKrK,EAAEqK,EAAI,EAEfrK,GAAEqK,GAAKD,EAET,MAAOpK,IAWT5D,EAAQkO,aAAe,SAAUC,EAAaC,EAAS9E,GACrD,GACI+E,IADgBtK,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,IAAmBA,UAAU,GAC/DA,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,MAEnF,IAAwB,OAApBqK,EAAQ9E,GACV6E,EAAY7E,IAAU,EAAI9H,EAAkB,SAAG6M,EAAc/E,QAE7D,QAAwBrF,KAApBmK,EAAQ9E,GACV,GAA+B,iBAApB8E,GAAQ9E,GACjB6E,EAAY7E,GAAQgF,QAAUF,EAAQ9E,OACjC,KAC2BrF,KAA5BmK,EAAQ9E,GAAQgF,UAClBH,EAAY7E,GAAQgF,SAAU,EAEhC,KAAK,GAAI7K,KAAQ2K,GAAQ9E,GACnB8E,EAAQ9E,GAAQ5F,eAAeD,KACjC0K,EAAY7E,GAAQ7F,GAAQ2K,EAAQ9E,GAAQ7F,MAmBxDzD,EAAQuO,mBAAqB,SAAUC,EAAcC,EAAYC,EAAOC,GAMtE,IALA,GACIC,GAAY,EACZC,EAAM,EACNC,EAAON,EAAaxK,OAAS,EAE1B6K,GAAOC,GAAQF,EALF,KAK6B,CAC/C,GAAIG,GAASlM,KAAKqK,OAAO2B,EAAMC,GAAQ,GAEnCE,EAAOR,EAAaO,GACpBpM,MAAmBsB,KAAX0K,EAAuBK,EAAKN,GAASM,EAAKN,GAAOC,GAEzDM,EAAeR,EAAW9L,EAC9B,IAAoB,GAAhBsM,EAEF,MAAOF,IACmB,GAAjBE,EAETJ,EAAME,EAAS,EAGfD,EAAOC,EAAS,EAGlBH,IAGF,OAAQ,GAgBV5O,EAAQkP,kBAAoB,SAAUV,EAAczF,EAAQ2F,EAAOS,EAAgBV,GAWjF,IAVA,GAIIW,GAAWzM,EAAO0M,EAAWN,EAH7BH,EAAY,EACZC,EAAM,EACNC,EAAON,EAAaxK,OAAS,EAG7ByK,MAA2BxK,IAAdwK,EAA0BA,EAAa,SAAU7K,EAAGC,GACnE,MAAOD,IAAKC,EAAI,EAAID,EAAIC,GAAK,EAAI,GAG5BgL,GAAOC,GAAQF,EAVF,KAU6B,CAO/C,GALAG,EAASlM,KAAKqK,MAAM,IAAO4B,EAAOD,IAClCO,EAAYZ,EAAa3L,KAAKJ,IAAI,EAAGsM,EAAS,IAAIL,GAClD/L,EAAQ6L,EAAaO,GAAQL,GAC7BW,EAAYb,EAAa3L,KAAKL,IAAIgM,EAAaxK,OAAS,EAAG+K,EAAS,IAAIL,GAEvC,GAA7BD,EAAW9L,EAAOoG,GAEpB,MAAOgG,EACF,IAAIN,EAAWW,EAAWrG,GAAU,GAAK0F,EAAW9L,EAAOoG,GAAU,EAE1E,MAAyB,UAAlBoG,EAA6BtM,KAAKJ,IAAI,EAAGsM,EAAS,GAAKA,CACzD,IAAIN,EAAW9L,EAAOoG,GAAU,GAAK0F,EAAWY,EAAWtG,GAAU,EAE1E,MAAyB,UAAlBoG,EAA6BJ,EAASlM,KAAKL,IAAIgM,EAAaxK,OAAS,EAAG+K,EAAS,EAGpFN,GAAW9L,EAAOoG,GAAU,EAE9B8F,EAAME,EAAS,EAGfD,EAAOC,EAAS,EAGpBH,IAIF,OAAQ,GAQV5O,EAAQsP,iBAENC,OAAQ,SAAgBlC,GACtB,MAAOA,IAGTmC,WAAY,SAAoBnC,GAC9B,MAAOA,GAAIA,GAGboC,YAAa,SAAqBpC,GAChC,MAAOA,IAAK,EAAIA,IAGlBqC,cAAe,SAAuBrC,GACpC,MAAOA,GAAI,GAAK,EAAIA,EAAIA,GAAU,EAAI,EAAIA,GAAKA,EAAlB,GAG/BsC,YAAa,SAAqBtC,GAChC,MAAOA,GAAIA,EAAIA,GAGjBuC,aAAc,SAAsBvC,GAClC,QAASA,EAAIA,EAAIA,EAAI,GAGvBwC,eAAgB,SAAwBxC,GACtC,MAAOA,GAAI,GAAK,EAAIA,EAAIA,EAAIA,GAAKA,EAAI,IAAM,EAAIA,EAAI,IAAM,EAAIA,EAAI,GAAK,GAGxEyC,YAAa,SAAqBzC,GAChC,MAAOA,GAAIA,EAAIA,EAAIA,GAGrB0C,aAAc,SAAsB1C,GAClC,MAAO,MAAMA,EAAIA,EAAIA,EAAIA,GAG3B2C,eAAgB,SAAwB3C,GACtC,MAAOA,GAAI,GAAK,EAAIA,EAAIA,EAAIA,EAAIA,EAAI,EAAI,IAAMA,EAAIA,EAAIA,EAAIA,GAG5D4C,YAAa,SAAqB5C,GAChC,MAAOA,GAAIA,EAAIA,EAAIA,EAAIA,GAGzB6C,aAAc,SAAsB7C,GAClC,MAAO,KAAMA,EAAIA,EAAIA,EAAIA,EAAIA,GAG/B8C,eAAgB,SAAwB9C,GACtC,MAAOA,GAAI,GAAK,GAAKA,EAAIA,EAAIA,EAAIA,EAAIA,EAAI,EAAI,KAAOA,EAAIA,EAAIA,EAAIA,EAAIA,IAIxErN,EAAQoQ,kBAAoB,WAC1B,GAAIC,GAAQC,SAASC,cAAc,IACnCF,GAAM5D,MAAM+D,MAAQ,OACpBH,EAAM5D,MAAMgE,OAAS,OAErB,IAAIC,GAAQJ,SAASC,cAAc,MACnCG,GAAMjE,MAAMkE,SAAW,WACvBD,EAAMjE,MAAM/F,IAAM,MAClBgK,EAAMjE,MAAMnG,KAAO,MACnBoK,EAAMjE,MAAMmE,WAAa,SACzBF,EAAMjE,MAAM+D,MAAQ,QACpBE,EAAMjE,MAAMgE,OAAS,QACrBC,EAAMjE,MAAMoE,SAAW,SACvBH,EAAMI,YAAYT,GAElBC,SAASS,KAAKD,YAAYJ,EAC1B,IAAIM,GAAKX,EAAMY,WACfP,GAAMjE,MAAMoE,SAAW,QACvB,IAAIK,GAAKb,EAAMY,WAKf,OAJID,IAAME,IAAIA,EAAKR,EAAMS,aAEzBb,SAASS,KAAKzO,YAAYoO,GAEnBM,EAAKE,GAGdlR,EAAQoR,QAAU,SAAUC,EAAMC,GAChC,GAAIC,OAAY,EACXhN,OAAMC,QAAQ8M,KACjBA,GAAaA,GAEf,IAAIE,IAA4B,EAC5BC,GAAoB,EACpBC,MAAiBzN,EAErB,KACE,IAAK,GAAqD0N,GAAjDC,GAAY,EAAItQ,EAAuB,SAAG+P,KAAgBG,GAA6BG,EAAQC,EAAUC,QAAQC,MAAON,GAA4B,EAAM,CACjK,GAAIO,GAASJ,EAAMhP,KAEnB,IAAIoP,EAAQ,CACVR,EAAYQ,EAAOT,EAAU,GAC7B,KAAK,GAAInN,GAAI,EAAGA,EAAImN,EAAUtN,OAAQG,IAChCoN,IACFA,EAAYA,EAAUD,EAAUnN,IAKpC,QAAwB,KAAboN,EACT,QAIN,MAAOS,GACPP,GAAoB,EACpBC,EAAiBM,EACjB,QACA,KACOR,GAA6BI,EAAkB,QAClDA,EAAkB,SAEpB,QACA,GAAIH,EACF,KAAMC,IAKZ,MAAOH,KAKL,SAAUtR,EAAQD,EAASM,GAE/BL,EAAOD,SAAYoB,QAAWd,EAAoB,GAAIa,YAAY,IAI9D,SAAUlB,EAAQD,EAASM,GAE/BA,EAAoB,GACpBA,EAAoB,IACpBL,EAAOD,QAAUM,EAAoB,KAIjC,SAAUL,EAAQD,EAASM,GAE/BA,EAAoB,EAMpB,KAAI,GALA2R,GAAgB3R,EAAoB,IACpC4R,EAAgB5R,EAAoB,IACpC6R,EAAgB7R,EAAoB,GACpC8R,EAAgB9R,EAAoB,IAAI,eAEpC+R,GAAe,WAAY,eAAgB,YAAa,iBAAkB,eAAgBlO,EAAI,EAAGA,EAAI,EAAGA,IAAI,CAClH,GAAImO,GAAaD,EAAYlO,GACzBoO,EAAaN,EAAOK,GACpBE,EAAaD,GAAcA,EAAWE,SACvCD,KAAUA,EAAMJ,IAAeF,EAAKM,EAAOJ,EAAeE,GAC7DH,EAAUG,GAAQH,EAAU5N,QAK1B,SAAUtE,EAAQD,EAASM,GAG/B,GAAIoS,GAAmBpS,EAAoB,GACvCqS,EAAmBrS,EAAoB,GACvC6R,EAAmB7R,EAAoB,GACvCsS,EAAmBtS,EAAoB,EAM3CL,GAAOD,QAAUM,EAAoB,IAAIiE,MAAO,QAAS,SAASsO,EAAUC,GAC1E1S,KAAK2S,GAAKH,EAAUC,GACpBzS,KAAK4S,GAAK,EACV5S,KAAK6S,GAAKH,GAET,WACD,GAAII,GAAQ9S,KAAK2S,GACbD,EAAQ1S,KAAK6S,GACbE,EAAQ/S,KAAK4S,IACjB,QAAIE,GAAKC,GAASD,EAAElP,QAClB5D,KAAK2S,OAAK9O,GACH0O,EAAK,IAEH,QAARG,EAAwBH,EAAK,EAAGQ,GACxB,UAARL,EAAwBH,EAAK,EAAGO,EAAEC,IAC9BR,EAAK,GAAIQ,EAAOD,EAAEC,MACxB,UAGHhB,EAAUiB,UAAYjB,EAAU5N,MAEhCmO,EAAiB,QACjBA,EAAiB,UACjBA,EAAiB,YAIb,SAAUzS,EAAQD,GAEtBC,EAAOD,QAAU,cAIb,SAAUC,EAAQD,GAEtBC,EAAOD,QAAU,SAAS8R,EAAMnP,GAC9B,OAAQA,MAAOA,EAAOmP,OAAQA,KAK5B,SAAU7R,EAAQD,GAEtBC,EAAOD,YAIH,SAAUC,EAAQD,EAASM,GAG/B,GAAI+S,GAAU/S,EAAoB,IAC9BgT,EAAUhT,EAAoB,GAClCL,GAAOD,QAAU,SAASuT,GACxB,MAAOF,GAAQC,EAAQC,MAKrB,SAAUtT,EAAQD,EAASM,GAG/B,GAAIkT,GAAMlT,EAAoB,GAC9BL,GAAOD,QAAU6E,OAAO,KAAK4O,qBAAqB,GAAK5O,OAAS,SAAS0O,GACvE,MAAkB,UAAXC,EAAID,GAAkBA,EAAGxM,MAAM,IAAMlC,OAAO0O,KAKjD,SAAUtT,EAAQD,GAEtB,GAAI8K,MAAcA,QAElB7K,GAAOD,QAAU,SAASuT,GACxB,MAAOzI,GAASnK,KAAK4S,GAAIxI,MAAM,GAAI,KAKjC,SAAU9K,EAAQD,GAGtBC,EAAOD,QAAU,SAASuT,GACxB,OAAStP,IAANsP,EAAgB,KAAM5O,WAAU,yBAA2B4O,EAC9D,OAAOA,KAKL,SAAUtT,EAAQD,EAASM,GAG/B,GAAIoT,GAAiBpT,EAAoB,IACrCqT,EAAiBrT,EAAoB,IACrCsT,EAAiBtT,EAAoB,IACrC4R,EAAiB5R,EAAoB,IACrCuT,EAAiBvT,EAAoB,IACrC6R,EAAiB7R,EAAoB,GACrCwT,EAAiBxT,EAAoB,IACrCyT,EAAiBzT,EAAoB,IACrC0T,EAAiB1T,EAAoB,IACrC2T,EAAiB3T,EAAoB,IAAI,YACzC4T,OAAsBC,MAAQ,WAAaA,QAK3CC,EAAa,WAAY,MAAOhU,MAEpCH,GAAOD,QAAU,SAASqU,EAAM/B,EAAMgC,EAAazC,EAAM0C,EAASC,EAAQC,GACxEX,EAAYQ,EAAahC,EAAMT,EAC/B,IAeI6C,GAAS/M,EAAKgN,EAfdC,EAAY,SAAS9B,GACvB,IAAIoB,GAASpB,IAAQN,GAAM,MAAOA,GAAMM,EACxC,QAAOA,GACL,IAVe,OAWf,IAVe,SAUF,MAAO,YAAmB,MAAO,IAAIwB,GAAYlU,KAAM0S,IACpE,MAAO,YAAoB,MAAO,IAAIwB,GAAYlU,KAAM0S,KAExD+B,EAAavC,EAAO,YACpBwC,EAde,UAcFP,EACbQ,GAAa,EACbvC,EAAa6B,EAAK5B,UAClBuC,EAAaxC,EAAMyB,IAAazB,EAnBjB,eAmBuC+B,GAAW/B,EAAM+B,GACvEU,EAAaD,GAAWJ,EAAUL,GAClCW,EAAaX,EAAWO,EAAwBF,EAAU,WAArBK,MAAkChR,GACvEkR,EAAqB,SAAR7C,EAAkBE,EAAM4C,SAAWJ,EAAUA,CAwB9D,IArBGG,IACDR,EAAoBX,EAAemB,EAAWxU,KAAK,GAAI0T,QAC9BxP,OAAO4N,YAE9BsB,EAAeY,EAAmBE,GAAK,GAEnCnB,GAAYG,EAAIc,EAAmBV,IAAU/B,EAAKyC,EAAmBV,EAAUG,IAIpFU,GAAcE,GAjCE,WAiCSA,EAAQK,OAClCN,GAAa,EACbE,EAAW,WAAmB,MAAOD,GAAQrU,KAAKP,QAG/CsT,IAAWe,IAAYP,IAASa,GAAevC,EAAMyB,IACxD/B,EAAKM,EAAOyB,EAAUgB,GAGxB9C,EAAUG,GAAQ2C,EAClB9C,EAAU0C,GAAQT,EACfG,EAMD,GALAG,GACEY,OAASR,EAAaG,EAAWL,EA9ClB,UA+CfT,KAASK,EAAaS,EAAWL,EAhDlB,QAiDfQ,QAASF,GAERT,EAAO,IAAI9M,IAAO+M,GACd/M,IAAO6K,IAAOoB,EAASpB,EAAO7K,EAAK+M,EAAQ/M,QAC3CgM,GAAQA,EAAQ4B,EAAI5B,EAAQ6B,GAAKtB,GAASa,GAAazC,EAAMoC,EAEtE,OAAOA,KAKL,SAAUzU,EAAQD,GAEtBC,EAAOD,SAAU,GAIb,SAAUC,EAAQD,EAASM,GAE/B,GAAI2R,GAAY3R,EAAoB,IAChCmV,EAAYnV,EAAoB,IAChCoV,EAAYpV,EAAoB,IAChC4R,EAAY5R,EAAoB,IAGhCqT,EAAU,SAAStO,EAAMgQ,EAAMM,GACjC,GASIhO,GAAKiO,EAAKC,EATVC,EAAYzQ,EAAOsO,EAAQ6B,EAC3BO,EAAY1Q,EAAOsO,EAAQqC,EAC3BC,EAAY5Q,EAAOsO,EAAQuC,EAC3BC,EAAY9Q,EAAOsO,EAAQ4B,EAC3Ba,EAAY/Q,EAAOsO,EAAQ0C,EAC3BC,EAAYjR,EAAOsO,EAAQ4C,EAC3BvW,EAAY+V,EAAYN,EAAOA,EAAKJ,KAAUI,EAAKJ,OACnDmB,EAAYxW,EAAiB,UAC7B+I,EAAYgN,EAAY9D,EAASgE,EAAYhE,EAAOoD,IAASpD,EAAOoD,QAAsB,SAE3FU,KAAUJ,EAASN,EACtB,KAAI1N,IAAOgO,IAETC,GAAOE,GAAa/M,OAA0B9E,KAAhB8E,EAAOpB,KAC3BA,IAAO3H,KAEjB6V,EAAMD,EAAM7M,EAAOpB,GAAOgO,EAAOhO,GAEjC3H,EAAQ2H,GAAOoO,GAAmC,kBAAfhN,GAAOpB,GAAqBgO,EAAOhO,GAEpEyO,GAAWR,EAAMF,EAAIG,EAAK5D,GAE1BqE,GAAWvN,EAAOpB,IAAQkO,EAAM,SAAUY,GAC1C,GAAIjB,GAAI,SAAS5R,EAAGC,EAAGhD,GACrB,GAAGT,eAAgBqW,GAAE,CACnB,OAAO1S,UAAUC,QACf,IAAK,GAAG,MAAO,IAAIyS,EACnB,KAAK,GAAG,MAAO,IAAIA,GAAE7S,EACrB,KAAK,GAAG,MAAO,IAAI6S,GAAE7S,EAAGC,GACxB,MAAO,IAAI4S,GAAE7S,EAAGC,EAAGhD,GACrB,MAAO4V,GAAEC,MAAMtW,KAAM2D,WAGzB,OADAyR,GAAW,UAAIiB,EAAW,UACnBjB,GAENK,GAAOM,GAA0B,kBAAPN,GAAoBH,EAAIiB,SAAShW,KAAMkV,GAAOA,EAExEM,KACAnW,EAAQ4W,UAAY5W,EAAQ4W,aAAejP,GAAOkO,EAEhDxQ,EAAOsO,EAAQkD,GAAKL,IAAaA,EAAS7O,IAAKuK,EAAKsE,EAAU7O,EAAKkO,KAK5ElC,GAAQ6B,EAAI,EACZ7B,EAAQqC,EAAI,EACZrC,EAAQuC,EAAI,EACZvC,EAAQ4B,EAAI,EACZ5B,EAAQ0C,EAAI,GACZ1C,EAAQ4C,EAAI,GACZ5C,EAAQmD,EAAI,GACZnD,EAAQkD,EAAI,IACZ5W,EAAOD,QAAU2T,GAIb,SAAU1T,EAAQD,GAGtB,GAAIiS,GAAShS,EAAOD,QAA2B,mBAAV4I,SAAyBA,OAAO/F,MAAQA,KACzE+F,OAAwB,mBAARmO,OAAuBA,KAAKlU,MAAQA,KAAOkU,KAAOJ,SAAS,gBAC9D,iBAAPK,OAAgBA,IAAM/E,IAI5B,SAAUhS,EAAQD,GAEtB,GAAIyV,GAAOxV,EAAOD,SAAWiX,QAAS,QACrB,iBAAPC,OAAgBA,IAAMzB,IAI5B,SAAUxV,EAAQD,EAASM,GAG/B,GAAI6W,GAAY7W,EAAoB,GACpCL,GAAOD,QAAU,SAAS6H,EAAIuP,EAAMpT,GAElC,GADAmT,EAAUtP,OACE5D,KAATmT,EAAmB,MAAOvP,EAC7B,QAAO7D,GACL,IAAK,GAAG,MAAO,UAASJ,GACtB,MAAOiE,GAAGlH,KAAKyW,EAAMxT,GAEvB,KAAK,GAAG,MAAO,UAASA,EAAGC,GACzB,MAAOgE,GAAGlH,KAAKyW,EAAMxT,EAAGC,GAE1B,KAAK,GAAG,MAAO,UAASD,EAAGC,EAAGhD,GAC5B,MAAOgH,GAAGlH,KAAKyW,EAAMxT,EAAGC,EAAGhD,IAG/B,MAAO,YACL,MAAOgH,GAAG6O,MAAMU,EAAMrT,cAMtB,SAAU9D,EAAQD,GAEtBC,EAAOD,QAAU,SAASuT,GACxB,GAAgB,kBAANA,GAAiB,KAAM5O,WAAU4O,EAAK,sBAChD,OAAOA,KAKL,SAAUtT,EAAQD,EAASM,GAE/B,GAAI+W,GAAa/W,EAAoB,IACjCgX,EAAahX,EAAoB,GACrCL,GAAOD,QAAUM,EAAoB,IAAM,SAAS0B,EAAQ2F,EAAKhF,GAC/D,MAAO0U,GAAGlK,EAAEnL,EAAQ2F,EAAK2P,EAAW,EAAG3U,KACrC,SAASX,EAAQ2F,EAAKhF,GAExB,MADAX,GAAO2F,GAAOhF,EACPX,IAKL,SAAU/B,EAAQD,EAASM,GAE/B,GAAIiX,GAAiBjX,EAAoB,IACrCkX,EAAiBlX,EAAoB,IACrCmX,EAAiBnX,EAAoB,IACrC+W,EAAiBxS,OAAO6S,cAE5B1X,GAAQmN,EAAI7M,EAAoB,IAAMuE,OAAO6S,eAAiB,SAAwBxE,EAAGqC,EAAGoC,GAI1F,GAHAJ,EAASrE,GACTqC,EAAIkC,EAAYlC,GAAG,GACnBgC,EAASI,GACNH,EAAe,IAChB,MAAOH,GAAGnE,EAAGqC,EAAGoC,GAChB,MAAMtO,IACR,GAAG,OAASsO,IAAc,OAASA,GAAW,KAAMhT,WAAU,2BAE9D,OADG,SAAWgT,KAAWzE,EAAEqC,GAAKoC,EAAWhV,OACpCuQ,IAKL,SAAUjT,EAAQD,EAASM,GAE/B,GAAIsX,GAAWtX,EAAoB,GACnCL,GAAOD,QAAU,SAASuT,GACxB,IAAIqE,EAASrE,GAAI,KAAM5O,WAAU4O,EAAK,qBACtC,OAAOA,KAKL,SAAUtT,EAAQD,GAEtBC,EAAOD,QAAU,SAASuT,GACxB,MAAqB,gBAAPA,GAAyB,OAAPA,EAA4B,kBAAPA,KAKnD,SAAUtT,EAAQD,EAASM,GAE/BL,EAAOD,SAAWM,EAAoB,MAAQA,EAAoB,IAAI,WACpE,MAAuG,IAAhGuE,OAAO6S,eAAepX,EAAoB,IAAI,OAAQ,KAAMuX,IAAK,WAAY,MAAO,MAAOjU,KAKhG,SAAU3D,EAAQD,EAASM,GAG/BL,EAAOD,SAAWM,EAAoB,IAAI,WACxC,MAA2E,IAApEuE,OAAO6S,kBAAmB,KAAMG,IAAK,WAAY,MAAO,MAAOjU,KAKpE,SAAU3D,EAAQD,GAEtBC,EAAOD,QAAU,SAASmD,GACxB,IACE,QAASA,IACT,MAAMkG,GACN,OAAO,KAMP,SAAUpJ,EAAQD,EAASM,GAE/B,GAAIsX,GAAWtX,EAAoB,IAC/BgQ,EAAWhQ,EAAoB,IAAIgQ,SAEnCwH,EAAKF,EAAStH,IAAasH,EAAStH,EAASC,cACjDtQ,GAAOD,QAAU,SAASuT,GACxB,MAAOuE,GAAKxH,EAASC,cAAcgD,QAKjC,SAAUtT,EAAQD,EAASM,GAG/B,GAAIsX,GAAWtX,EAAoB,GAGnCL,GAAOD,QAAU,SAASuT,EAAI2C,GAC5B,IAAI0B,EAASrE,GAAI,MAAOA,EACxB,IAAI1L,GAAIkQ,CACR,IAAG7B,GAAkC,mBAArBrO,EAAK0L,EAAGzI,YAA4B8M,EAASG,EAAMlQ,EAAGlH,KAAK4S,IAAK,MAAOwE,EACvF,IAA+B,mBAApBlQ,EAAK0L,EAAG/N,WAA2BoS,EAASG,EAAMlQ,EAAGlH,KAAK4S,IAAK,MAAOwE,EACjF,KAAI7B,GAAkC,mBAArBrO,EAAK0L,EAAGzI,YAA4B8M,EAASG,EAAMlQ,EAAGlH,KAAK4S,IAAK,MAAOwE,EACxF,MAAMpT,WAAU,6CAKd,SAAU1E,EAAQD,GAEtBC,EAAOD,QAAU,SAASgY,EAAQrV,GAChC,OACEsV,aAAyB,EAATD,GAChBE,eAAyB,EAATF,GAChBG,WAAyB,EAATH,GAChBrV,MAAcA,KAMd,SAAU1C,EAAQD,EAASM,GAE/BL,EAAOD,QAAUM,EAAoB,KAIjC,SAAUL,EAAQD,GAEtB,GAAI0D,MAAoBA,cACxBzD,GAAOD,QAAU,SAASuT,EAAI5L,GAC5B,MAAOjE,GAAe/C,KAAK4S,EAAI5L,KAK7B,SAAU1H,EAAQD,EAASM,GAG/B,GAAI8X,GAAiB9X,EAAoB,IACrC+X,EAAiB/X,EAAoB,IACrCyT,EAAiBzT,EAAoB,IACrCqU,IAGJrU,GAAoB,IAAIqU,EAAmBrU,EAAoB,IAAI,YAAa,WAAY,MAAOF,QAEnGH,EAAOD,QAAU,SAASsU,EAAahC,EAAMT,GAC3CyC,EAAY7B,UAAY2F,EAAOzD,GAAoB9C,KAAMwG,EAAW,EAAGxG,KACvEkC,EAAeO,EAAahC,EAAO,eAKjC,SAAUrS,EAAQD,EAASM,GAG/B,GAAIiX,GAAcjX,EAAoB,IAClCgY,EAAchY,EAAoB,IAClCiY,EAAcjY,EAAoB,IAClCkY,EAAclY,EAAoB,IAAI,YACtCmY,EAAc,aAIdC,EAAa,WAEf,GAIIC,GAJAC,EAAStY,EAAoB,IAAI,UACjC6D,EAASoU,EAAYvU,MAczB,KAVA4U,EAAOnM,MAAMoM,QAAU,OACvBvY,EAAoB,IAAIwQ,YAAY8H,GACpCA,EAAOE,IAAM,cAGbH,EAAiBC,EAAOG,cAAczI,SACtCqI,EAAeK,OACfL,EAAeM,MAAMC,uCACrBP,EAAeQ,QACfT,EAAaC,EAAenD,EACtBrR,WAAWuU,GAAoB,UAAEH,EAAYpU,GACnD,OAAOuU,KAGTzY,GAAOD,QAAU6E,OAAOuT,QAAU,SAAgBlF,EAAGkG,GACnD,GAAIjP,EAQJ,OAPS,QAAN+I,GACDuF,EAAe,UAAIlB,EAASrE,GAC5B/I,EAAS,GAAIsO,GACbA,EAAe,UAAI,KAEnBtO,EAAOqO,GAAYtF,GACd/I,EAASuO,QACMzU,KAAfmV,EAA2BjP,EAASmO,EAAInO,EAAQiP,KAMrD,SAAUnZ,EAAQD,EAASM,GAE/B,GAAI+W,GAAW/W,EAAoB,IAC/BiX,EAAWjX,EAAoB,IAC/B+Y,EAAW/Y,EAAoB,GAEnCL,GAAOD,QAAUM,EAAoB,IAAMuE,OAAOyU,iBAAmB,SAA0BpG,EAAGkG,GAChG7B,EAASrE,EAKT,KAJA,GAGIqC,GAHApB,EAASkF,EAAQD,GACjBpV,EAASmQ,EAAKnQ,OACdG,EAAI,EAEFH,EAASG,GAAEkT,EAAGlK,EAAE+F,EAAGqC,EAAIpB,EAAKhQ,KAAMiV,EAAW7D,GACnD,OAAOrC,KAKL,SAAUjT,EAAQD,EAASM,GAG/B,GAAIiZ,GAAcjZ,EAAoB,IAClCiY,EAAcjY,EAAoB,GAEtCL,GAAOD,QAAU6E,OAAOsP,MAAQ,SAAcjB,GAC5C,MAAOqG,GAAMrG,EAAGqF,KAKd,SAAUtY,EAAQD,EAASM,GAE/B,GAAIuT,GAAevT,EAAoB,IACnCsS,EAAetS,EAAoB,GACnCkZ,EAAelZ,EAAoB,KAAI,GACvCkY,EAAelY,EAAoB,IAAI,WAE3CL,GAAOD,QAAU,SAASgC,EAAQyX,GAChC,GAGI9R,GAHAuL,EAASN,EAAU5Q,GACnBmC,EAAS,EACTgG,IAEJ,KAAIxC,IAAOuL,GAAKvL,GAAO6Q,GAAS3E,EAAIX,EAAGvL,IAAQwC,EAAOlF,KAAK0C,EAE3D,MAAM8R,EAAMzV,OAASG,GAAK0P,EAAIX,EAAGvL,EAAM8R,EAAMtV,SAC1CqV,EAAarP,EAAQxC,IAAQwC,EAAOlF,KAAK0C,GAE5C,OAAOwC,KAKL,SAAUlK,EAAQD,EAASM,GAI/B,GAAIsS,GAAYtS,EAAoB,GAChCoZ,EAAYpZ,EAAoB,IAChCqZ,EAAYrZ,EAAoB,GACpCL,GAAOD,QAAU,SAAS4Z,GACxB,MAAO,UAASC,EAAOC,EAAIC,GACzB,GAGIpX,GAHAuQ,EAASN,EAAUiH,GACnB7V,EAAS0V,EAASxG,EAAElP,QACpBmP,EAASwG,EAAQI,EAAW/V,EAGhC,IAAG4V,GAAeE,GAAMA,GAAG,KAAM9V,EAASmP,GAExC,IADAxQ,EAAQuQ,EAAEC,OACExQ,EAAM,OAAO,MAEpB,MAAKqB,EAASmP,EAAOA,IAAQ,IAAGyG,GAAezG,IAASD,KAC1DA,EAAEC,KAAW2G,EAAG,MAAOF,IAAezG,GAAS,CAClD,QAAQyG,IAAgB,KAM1B,SAAU3Z,EAAQD,EAASM,GAG/B,GAAI0Z,GAAY1Z,EAAoB,IAChCkC,EAAYK,KAAKL,GACrBvC,GAAOD,QAAU,SAASuT,GACxB,MAAOA,GAAK,EAAI/Q,EAAIwX,EAAUzG,GAAK,kBAAoB,IAKrD,SAAUtT,EAAQD,GAGtB,GAAIia,GAAQpX,KAAKoX,KACb/M,EAAQrK,KAAKqK,KACjBjN,GAAOD,QAAU,SAASuT,GACxB,MAAOnQ,OAAMmQ,GAAMA,GAAM,GAAKA,EAAK,EAAIrG,EAAQ+M,GAAM1G,KAKnD,SAAUtT,EAAQD,EAASM,GAE/B,GAAI0Z,GAAY1Z,EAAoB,IAChCmC,EAAYI,KAAKJ,IACjBD,EAAYK,KAAKL,GACrBvC,GAAOD,QAAU,SAASmT,EAAOnP,GAE/B,MADAmP,GAAQ6G,EAAU7G,GACXA,EAAQ,EAAI1Q,EAAI0Q,EAAQnP,EAAQ,GAAKxB,EAAI2Q,EAAOnP,KAKrD,SAAU/D,EAAQD,EAASM,GAE/B,GAAI4Z,GAAS5Z,EAAoB,IAAI,QACjC6Z,EAAS7Z,EAAoB,GACjCL,GAAOD,QAAU,SAAS2H,GACxB,MAAOuS,GAAOvS,KAASuS,EAAOvS,GAAOwS,EAAIxS,MAKvC,SAAU1H,EAAQD,EAASM,GAE/B,GAAI2R,GAAS3R,EAAoB,IAE7B8Z,EAASnI,EADA,wBACmBA,EADnB,yBAEbhS,GAAOD,QAAU,SAAS2H,GACxB,MAAOyS,GAAMzS,KAASyS,EAAMzS,SAK1B,SAAU1H,EAAQD,GAEtB,GAAIS,GAAK,EACL4Z,EAAKxX,KAAKyX,QACdra,GAAOD,QAAU,SAAS2H,GACxB,MAAO,UAAUV,WAAehD,KAAR0D,EAAoB,GAAKA,EAAK,QAASlH,EAAK4Z,GAAIvP,SAAS,OAK/E,SAAU7K,EAAQD,GAGtBC,EAAOD,QAAU,gGAEf+G,MAAM,MAIJ,SAAU9G,EAAQD,EAASM,GAE/BL,EAAOD,QAAUM,EAAoB,IAAIgQ,UAAYA,SAASiK,iBAI1D,SAAUta,EAAQD,EAASM,GAE/B,GAAIka,GAAMla,EAAoB,IAAI6M,EAC9B0G,EAAMvT,EAAoB,IAC1BuU,EAAMvU,EAAoB,IAAI,cAElCL,GAAOD,QAAU,SAASuT,EAAIkH,EAAKC,GAC9BnH,IAAOM,EAAIN,EAAKmH,EAAOnH,EAAKA,EAAGd,UAAWoC,IAAK2F,EAAIjH,EAAIsB,GAAMqD,cAAc,EAAMvV,MAAO8X,MAKzF,SAAUxa,EAAQD,EAASM,GAE/B,GAAI8Z,GAAa9Z,EAAoB,IAAI,OACrC6Z,EAAa7Z,EAAoB,IACjCqa,EAAara,EAAoB,IAAIqa,OACrCC,EAA8B,kBAAVD,IAET1a,EAAOD,QAAU,SAASqV,GACvC,MAAO+E,GAAM/E,KAAU+E,EAAM/E,GAC3BuF,GAAcD,EAAOtF,KAAUuF,EAAaD,EAASR,GAAK,UAAY9E,MAGjE+E,MAAQA,GAIb,SAAUna,EAAQD,EAASM,GAG/B,GAAIuT,GAAcvT,EAAoB,IAClCua,EAAcva,EAAoB,IAClCkY,EAAclY,EAAoB,IAAI,YACtCwa,EAAcjW,OAAO4N,SAEzBxS,GAAOD,QAAU6E,OAAOmP,gBAAkB,SAASd,GAEjD,MADAA,GAAI2H,EAAS3H,GACVW,EAAIX,EAAGsF,GAAiBtF,EAAEsF,GACF,kBAAjBtF,GAAEtO,aAA6BsO,YAAaA,GAAEtO,YAC/CsO,EAAEtO,YAAY6N,UACdS,YAAarO,QAASiW,EAAc,OAK3C,SAAU7a,EAAQD,EAASM,GAG/B,GAAIgT,GAAUhT,EAAoB,GAClCL,GAAOD,QAAU,SAASuT,GACxB,MAAO1O,QAAOyO,EAAQC,MAKpB,SAAUtT,EAAQD,EAASM,GAG/B,GAAIya,GAAOza,EAAoB,KAAI,EAGnCA,GAAoB,IAAIyC,OAAQ,SAAU,SAAS8P,GACjDzS,KAAK2S,GAAKhQ,OAAO8P,GACjBzS,KAAK4S,GAAK,GAET,WACD,GAEIgI,GAFA9H,EAAQ9S,KAAK2S,GACbI,EAAQ/S,KAAK4S,EAEjB,OAAGG,IAASD,EAAElP,QAAerB,UAAOsB,GAAW6N,MAAM,IACrDkJ,EAAQD,EAAI7H,EAAGC,GACf/S,KAAK4S,IAAMgI,EAAMhX,QACTrB,MAAOqY,EAAOlJ,MAAM,OAK1B,SAAU7R,EAAQD,EAASM,GAE/B,GAAI0Z,GAAY1Z,EAAoB,IAChCgT,EAAYhT,EAAoB,GAGpCL,GAAOD,QAAU,SAASib,GACxB,MAAO,UAAS7D,EAAM8D,GACpB,GAGItX,GAAGC,EAHH2H,EAAIzI,OAAOuQ,EAAQ8D,IACnBjT,EAAI6V,EAAUkB,GACdC,EAAI3P,EAAExH,MAEV,OAAGG,GAAI,GAAKA,GAAKgX,EAASF,EAAY,OAAKhX,IAC3CL,EAAI4H,EAAE4P,WAAWjX,GACVP,EAAI,OAAUA,EAAI,OAAUO,EAAI,IAAMgX,IAAMtX,EAAI2H,EAAE4P,WAAWjX,EAAI,IAAM,OAAUN,EAAI,MACxFoX,EAAYzP,EAAE6P,OAAOlX,GAAKP,EAC1BqX,EAAYzP,EAAET,MAAM5G,EAAGA,EAAI,GAA2BN,EAAI,OAAzBD,EAAI,OAAU,IAAqB,UAMxE,SAAU3D,EAAQD,EAASM,GAE/B,GAAIiX,GAAWjX,EAAoB,IAC/BuX,EAAWvX,EAAoB,GACnCL,GAAOD,QAAUM,EAAoB,IAAIgb,YAAc,SAAS/H,GAC9D,GAAIgI,GAAS1D,EAAItE,EACjB,IAAoB,kBAAVgI,GAAqB,KAAM5W,WAAU4O,EAAK,oBACpD,OAAOgE,GAASgE,EAAO5a,KAAK4S,MAK1B,SAAUtT,EAAQD,EAASM,GAE/B,GAAIkb,GAAYlb,EAAoB,IAChC2T,EAAY3T,EAAoB,IAAI,YACpC6R,EAAY7R,EAAoB,EACpCL,GAAOD,QAAUM,EAAoB,IAAImb,kBAAoB,SAASlI,GACpE,OAAStP,IAANsP,EAAgB,MAAOA,GAAGU,IACxBV,EAAG,eACHpB,EAAUqJ,EAAQjI,MAKrB,SAAUtT,EAAQD,EAASM,GAG/B,GAAIkT,GAAMlT,EAAoB,IAC1BuU,EAAMvU,EAAoB,IAAI,eAE9Bob,EAAgD,aAA1ClI,EAAI,WAAY,MAAOzP,eAG7B4X,EAAS,SAASpI,EAAI5L,GACxB,IACE,MAAO4L,GAAG5L,GACV,MAAM0B,KAGVpJ,GAAOD,QAAU,SAASuT,GACxB,GAAIL,GAAG0I,EAAGvF,CACV,YAAcpS,KAAPsP,EAAmB,YAAqB,OAAPA,EAAc,OAEN,iBAApCqI,EAAID,EAAOzI,EAAIrO,OAAO0O,GAAKsB,IAAoB+G,EAEvDF,EAAMlI,EAAIN,GAEM,WAAfmD,EAAI7C,EAAIN,KAAsC,kBAAZA,GAAE2I,OAAuB,YAAcxF,IAK5E,SAAUpW,EAAQD,EAASM,GAE/BL,EAAOD,SAAYoB,QAAWd,EAAoB,IAAKa,YAAY,IAI/D,SAAUlB,EAAQD,EAASM,GAE/BA,EAAoB,GACpB,IAAIwb,GAAUxb,EAAoB,IAAIuE,MACtC5E,GAAOD,QAAU,SAAgBuV,EAAGwG,GAClC,MAAOD,GAAQ1D,OAAO7C,EAAGwG,KAKvB,SAAU9b,EAAQD,EAASM,GAE/B,GAAIqT,GAAUrT,EAAoB,GAElCqT,GAAQA,EAAQuC,EAAG,UAAWkC,OAAQ9X,EAAoB,OAItD,SAAUL,EAAQD,EAASM,GAE/BL,EAAOD,SAAYoB,QAAWd,EAAoB,IAAKa,YAAY,IAI/D,SAAUlB,EAAQD,EAASM,GAE/BA,EAAoB,IACpBL,EAAOD,QAAUM,EAAoB,IAAIuE,OAAOsP,MAI5C,SAAUlU,EAAQD,EAASM,GAG/B,GAAIua,GAAWva,EAAoB,IAC/BiZ,EAAWjZ,EAAoB,GAEnCA,GAAoB,IAAI,OAAQ,WAC9B,MAAO,UAAciT,GACnB,MAAOgG,GAAMsB,EAAStH,QAMtB,SAAUtT,EAAQD,EAASM,GAG/B,GAAIqT,GAAUrT,EAAoB,IAC9BmV,EAAUnV,EAAoB,IAC9B0b,EAAU1b,EAAoB,GAClCL,GAAOD,QAAU,SAASic,EAAK9Y,GAC7B,GAAI0E,IAAO4N,EAAK5Q,YAAcoX,IAAQpX,OAAOoX,GACzCC,IACJA,GAAID,GAAO9Y,EAAK0E,GAChB8L,EAAQA,EAAQuC,EAAIvC,EAAQ6B,EAAIwG,EAAM,WAAYnU,EAAG,KAAQ,SAAUqU,KAKrE,SAAUjc,EAAQD,EAASM,GAgB/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAASF,GAZvFlB,EAAQmB,YAAa,CAErB,IAAIyQ,GAAYtR,EAAoB,IAEhC6b,EAAalb,EAAuB2Q,GAEpCwK,EAAU9b,EAAoB,IAE9B+b,EAAWpb,EAAuBmb,GAElCE,EAAsC,kBAArBD,GAASjb,SAAwD,gBAAvB+a,GAAW/a,QAAuB,SAAUF,GAAO,aAAcA,IAAS,SAAUA,GAAO,MAAOA,IAAmC,kBAArBmb,GAASjb,SAA0BF,EAAI0D,cAAgByX,EAASjb,SAAWF,IAAQmb,EAASjb,QAAQqR,UAAY,eAAkBvR,GAIjTlB,GAAQoB,QAAsC,kBAArBib,GAASjb,SAA0D,WAAhCkb,EAAQH,EAAW/a,SAAwB,SAAUF,GAC/G,WAAsB,KAARA,EAAsB,YAAcob,EAAQpb,IACxD,SAAUA,GACZ,MAAOA,IAAmC,kBAArBmb,GAASjb,SAA0BF,EAAI0D,cAAgByX,EAASjb,SAAWF,IAAQmb,EAASjb,QAAQqR,UAAY,aAA0B,KAARvR,EAAsB,YAAcob,EAAQpb,KAKjM,SAAUjB,EAAQD,EAASM,GAE/BL,EAAOD,SAAYoB,QAAWd,EAAoB,IAAKa,YAAY,IAI/D,SAAUlB,EAAQD,EAASM,GAE/BA,EAAoB,IACpBA,EAAoB,GACpBL,EAAOD,QAAUM,EAAoB,IAAI6M,EAAE,aAIvC,SAAUlN,EAAQD,EAASM,GAE/BN,EAAQmN,EAAI7M,EAAoB,KAI5B,SAAUL,EAAQD,EAASM,GAE/BL,EAAOD,SAAYoB,QAAWd,EAAoB,IAAKa,YAAY,IAI/D,SAAUlB,EAAQD,EAASM,GAE/BA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBA,EAAoB,IACpBL,EAAOD,QAAUM,EAAoB,IAAIqa,QAIrC,SAAU1a,EAAQD,EAASM,GAI/B,GAAI2R,GAAiB3R,EAAoB,IACrCuT,EAAiBvT,EAAoB,IACrCic,EAAiBjc,EAAoB,IACrCqT,EAAiBrT,EAAoB,IACrCsT,EAAiBtT,EAAoB,IACrCkc,EAAiBlc,EAAoB,IAAI2b,IACzCQ,EAAiBnc,EAAoB,IACrC4Z,EAAiB5Z,EAAoB,IACrCyT,EAAiBzT,EAAoB,IACrC6Z,EAAiB7Z,EAAoB,IACrCoc,EAAiBpc,EAAoB,IACrCqc,EAAiBrc,EAAoB,IACrCsc,EAAiBtc,EAAoB,IACrCuc,EAAiBvc,EAAoB,IACrCwc,EAAiBxc,EAAoB,IACrCkE,EAAiBlE,EAAoB,IACrCiX,EAAiBjX,EAAoB,IACrCsS,EAAiBtS,EAAoB,GACrCmX,EAAiBnX,EAAoB,IACrCgX,EAAiBhX,EAAoB,IACrCiB,EAAiBjB,EAAoB,IACrCyc,EAAiBzc,EAAoB,IACrC0c,EAAiB1c,EAAoB,IACrC2c,EAAiB3c,EAAoB,IACrCiZ,EAAiBjZ,EAAoB,IACrC4c,EAAiBF,EAAM7P,EACvBkK,EAAiB4F,EAAI9P,EACrBgQ,EAAiBJ,EAAQ5P,EACzBiQ,EAAiBnL,EAAO0I,OACxB0C,EAAiBpL,EAAOqL,KACxBC,EAAiBF,GAASA,EAAMG,UAEhCC,EAAiBf,EAAI,WACrBgB,EAAiBhB,EAAI,eACrBiB,KAAoBlK,qBACpBmK,EAAiB1D,EAAO,mBACxB2D,EAAiB3D,EAAO,WACxB4D,EAAiB5D,EAAO,cACxBY,EAAiBjW,OAAgB,UACjCkZ,EAAmC,kBAAXX,GACxBY,EAAiB/L,EAAO+L,QAExBC,GAAUD,IAAYA,EAAiB,YAAMA,EAAiB,UAAEE,UAGhEC,EAAgB5B,GAAeE,EAAO,WACxC,MAES,IAFFlb,EAAQ8V,KAAO,KACpBQ,IAAK,WAAY,MAAOR,GAAGjX,KAAM,KAAMuC,MAAO,IAAIiB,MAChDA,IACD,SAAS2P,EAAI5L,EAAKoU,GACrB,GAAIqC,GAAYlB,EAAKpC,EAAanT,EAC/ByW,UAAiBtD,GAAYnT,GAChC0P,EAAG9D,EAAI5L,EAAKoU,GACTqC,GAAa7K,IAAOuH,GAAYzD,EAAGyD,EAAanT,EAAKyW,IACtD/G,EAEAgH,EAAO,SAAS5D,GAClB,GAAI6D,GAAMT,EAAWpD,GAAOlZ,EAAQ6b,EAAiB,UAErD,OADAkB,GAAIrL,GAAKwH,EACF6D,GAGLC,EAAWR,GAAyC,gBAApBX,GAAQoB,SAAuB,SAASjL,GAC1E,MAAoB,gBAANA,IACZ,SAASA,GACX,MAAOA,aAAc6J,IAGnBqB,EAAkB,SAAwBlL,EAAI5L,EAAKoU,GAKrD,MAJGxI,KAAOuH,GAAY2D,EAAgBX,EAAWnW,EAAKoU,GACtDxE,EAAShE,GACT5L,EAAM8P,EAAY9P,GAAK,GACvB4P,EAASwE,GACNlI,EAAIgK,EAAYlW,IACboU,EAAE9D,YAIDpE,EAAIN,EAAIkK,IAAWlK,EAAGkK,GAAQ9V,KAAK4L,EAAGkK,GAAQ9V,IAAO,GACxDoU,EAAIxa,EAAQwa,GAAI9D,WAAYX,EAAW,GAAG,OAJtCzD,EAAIN,EAAIkK,IAAQpG,EAAG9D,EAAIkK,EAAQnG,EAAW,OAC9C/D,EAAGkK,GAAQ9V,IAAO,GAIXwW,EAAc5K,EAAI5L,EAAKoU,IACzB1E,EAAG9D,EAAI5L,EAAKoU,IAEnB2C,EAAoB,SAA0BnL,EAAIgC,GACpDgC,EAAShE,EAKT,KAJA,GAGI5L,GAHAwM,EAAO2I,EAASvH,EAAI3C,EAAU2C,IAC9BpR,EAAO,EACPgX,EAAIhH,EAAKnQ,OAEPmX,EAAIhX,GAAEsa,EAAgBlL,EAAI5L,EAAMwM,EAAKhQ,KAAMoR,EAAE5N,GACnD,OAAO4L,IAELoL,EAAU,SAAgBpL,EAAIgC,GAChC,WAAatR,KAANsR,EAAkBhU,EAAQgS,GAAMmL,EAAkBnd,EAAQgS,GAAKgC,IAEpEqJ,EAAwB,SAA8BjX,GACxD,GAAIkX,GAAIlB,EAAOhd,KAAKP,KAAMuH,EAAM8P,EAAY9P,GAAK,GACjD,SAAGvH,OAAS0a,GAAejH,EAAIgK,EAAYlW,KAASkM,EAAIiK,EAAWnW,QAC5DkX,IAAMhL,EAAIzT,KAAMuH,KAASkM,EAAIgK,EAAYlW,IAAQkM,EAAIzT,KAAMqd,IAAWrd,KAAKqd,GAAQ9V,KAAOkX,IAE/FC,EAA4B,SAAkCvL,EAAI5L,GAGpE,GAFA4L,EAAMX,EAAUW,GAChB5L,EAAM8P,EAAY9P,GAAK,GACpB4L,IAAOuH,IAAejH,EAAIgK,EAAYlW,IAASkM,EAAIiK,EAAWnW,GAAjE,CACA,GAAIoU,GAAImB,EAAK3J,EAAI5L,EAEjB,QADGoU,IAAKlI,EAAIgK,EAAYlW,IAAUkM,EAAIN,EAAIkK,IAAWlK,EAAGkK,GAAQ9V,KAAMoU,EAAE9D,YAAa,GAC9E8D,IAELgD,EAAuB,SAA6BxL,GAKtD,IAJA,GAGI5L,GAHA8R,EAAS0D,EAAKvK,EAAUW,IACxBpJ,KACAhG,EAAS,EAEPsV,EAAMzV,OAASG,GACf0P,EAAIgK,EAAYlW,EAAM8R,EAAMtV,OAASwD,GAAO8V,GAAU9V,GAAO6U,GAAKrS,EAAOlF,KAAK0C,EAClF,OAAOwC,IAEP6U,EAAyB,SAA+BzL,GAM1D,IALA,GAII5L,GAJAsX,EAAS1L,IAAOuH,EAChBrB,EAAS0D,EAAK8B,EAAQnB,EAAYlL,EAAUW,IAC5CpJ,KACAhG,EAAS,EAEPsV,EAAMzV,OAASG,IAChB0P,EAAIgK,EAAYlW,EAAM8R,EAAMtV,OAAU8a,IAAQpL,EAAIiH,EAAanT,IAAawC,EAAOlF,KAAK4Y,EAAWlW,GACtG,OAAOwC,GAIP4T,KACFX,EAAU,WACR,GAAGhd,eAAgBgd,GAAQ,KAAMzY,WAAU,+BAC3C,IAAI8V,GAAMN,EAAIpW,UAAUC,OAAS,EAAID,UAAU,OAAKE,IAChDib,EAAO,SAASvc,GACfvC,OAAS0a,GAAYoE,EAAKve,KAAKmd,EAAWnb,GAC1CkR,EAAIzT,KAAMqd,IAAW5J,EAAIzT,KAAKqd,GAAShD,KAAKra,KAAKqd,GAAQhD,IAAO,GACnE0D,EAAc/d,KAAMqa,EAAKnD,EAAW,EAAG3U,IAGzC,OADG4Z,IAAe0B,GAAOE,EAAcrD,EAAaL,GAAMvC,cAAc,EAAMiH,IAAKD,IAC5Eb,EAAK5D,IAEd7G,EAASwJ,EAAiB,UAAG,WAAY,WACvC,MAAOhd,MAAK6S,KAGd+J,EAAM7P,EAAI2R,EACV7B,EAAI9P,EAAMsR,EACVne,EAAoB,IAAI6M,EAAI4P,EAAQ5P,EAAI4R,EACxCze,EAAoB,IAAI6M,EAAKyR,EAC7Bte,EAAoB,IAAI6M,EAAI6R,EAEzBzC,IAAgBjc,EAAoB,KACrCsT,EAASkH,EAAa,uBAAwB8D,GAAuB,GAGvEjC,EAAOxP,EAAI,SAASkI,GAClB,MAAOgJ,GAAK3B,EAAIrH,MAIpB1B,EAAQA,EAAQqC,EAAIrC,EAAQ4C,EAAI5C,EAAQ6B,GAAKuI,GAAapD,OAAQyC,GAElE,KAAI,GAAIgC,IAAU,iHAGhBrY,MAAM,KAAM5C,GAAI,EAAGib,GAAQpb,OAASG,IAAIuY,EAAI0C,GAAQjb,MAEtD,KAAI,GAAIib,IAAU7F,EAAMmD,EAAItC,OAAQjW,GAAI,EAAGib,GAAQpb,OAASG,IAAIyY,EAAUwC,GAAQjb,MAElFwP,GAAQA,EAAQuC,EAAIvC,EAAQ6B,GAAKuI,EAAY,UAE3CsB,IAAO,SAAS1X,GACd,MAAOkM,GAAI+J,EAAgBjW,GAAO,IAC9BiW,EAAejW,GACfiW,EAAejW,GAAOyV,EAAQzV,IAGpC2X,OAAQ,SAAgB3X,GACtB,GAAG4W,EAAS5W,GAAK,MAAOkV,GAAMe,EAAgBjW,EAC9C,MAAMhD,WAAUgD,EAAM,sBAExB4X,UAAW,WAAYtB,GAAS,GAChCuB,UAAW,WAAYvB,GAAS,KAGlCtK,EAAQA,EAAQuC,EAAIvC,EAAQ6B,GAAKuI,EAAY,UAE3C3F,OAAQuG,EAERjH,eAAgB+G,EAEhBnF,iBAAkBoF,EAElBe,yBAA0BX,EAE1BY,oBAAqBX,EAErBY,sBAAuBX,IAIzB3B,GAAS1J,EAAQA,EAAQuC,EAAIvC,EAAQ6B,IAAMuI,GAActB,EAAO,WAC9D,GAAIvG,GAAIkH,GAIR,OAA0B,UAAnBG,GAAYrH,KAAyC,MAAtBqH,GAAY3Z,EAAGsS,KAAwC,MAAzBqH,EAAW1Y,OAAOqR,OACnF,QACHsH,UAAW,SAAmBjK,GAC5B,OAAUtP,KAAPsP,IAAoBgL,EAAShL,GAAhC,CAIA,IAHA,GAEIqM,GAAUC,EAFVC,GAAQvM,GACRpP,EAAO,EAELJ,UAAUC,OAASG,GAAE2b,EAAK7a,KAAKlB,UAAUI,KAQ/C,OAPAyb,GAAWE,EAAK,GACM,kBAAZF,KAAuBC,EAAYD,IAC1CC,GAAcrb,EAAQob,KAAUA,EAAW,SAASjY,EAAKhF,GAE1D,GADGkd,IAAUld,EAAQkd,EAAUlf,KAAKP,KAAMuH,EAAKhF,KAC3C4b,EAAS5b,GAAO,MAAOA,KAE7Bmd,EAAK,GAAKF,EACHrC,EAAW7G,MAAM2G,EAAOyC,OAKnC1C,EAAiB,UAAEM,IAAiBpd,EAAoB,IAAI8c,EAAiB,UAAGM,EAAcN,EAAiB,UAAE5X,SAEjHuO,EAAeqJ,EAAS,UAExBrJ,EAAelR,KAAM,QAAQ,GAE7BkR,EAAe9B,EAAOqL,KAAM,QAAQ,IAIhC,SAAUrd,EAAQD,EAASM,GAE/B,GAAIkc,GAAWlc,EAAoB,IAAI,QACnCsX,EAAWtX,EAAoB,IAC/BuT,EAAWvT,EAAoB,IAC/Byf,EAAWzf,EAAoB,IAAI6M,EACnC1M,EAAW,EACXuf,EAAenb,OAAOmb,cAAgB,WACxC,OAAO,GAELC,GAAU3f,EAAoB,IAAI,WACpC,MAAO0f,GAAanb,OAAOqb,yBAEzBC,EAAU,SAAS5M,GACrBwM,EAAQxM,EAAIiJ,GAAO7Z,OACjBwB,EAAG,OAAQ1D,EACX2f,SAGAC,EAAU,SAAS9M,EAAI6E,GAEzB,IAAIR,EAASrE,GAAI,MAAoB,gBAANA,GAAiBA,GAAmB,gBAANA,GAAiB,IAAM,KAAOA,CAC3F,KAAIM,EAAIN,EAAIiJ,GAAM,CAEhB,IAAIwD,EAAazM,GAAI,MAAO,GAE5B,KAAI6E,EAAO,MAAO,GAElB+H,GAAQ5M,GAER,MAAOA,GAAGiJ,GAAMrY,GAEhBmc,EAAU,SAAS/M,EAAI6E,GACzB,IAAIvE,EAAIN,EAAIiJ,GAAM,CAEhB,IAAIwD,EAAazM,GAAI,OAAO,CAE5B,KAAI6E,EAAO,OAAO,CAElB+H,GAAQ5M,GAER,MAAOA,GAAGiJ,GAAM4D,GAGhBG,EAAW,SAAShN,GAEtB,MADG0M,IAAUO,EAAKC,MAAQT,EAAazM,KAAQM,EAAIN,EAAIiJ,IAAM2D,EAAQ5M,GAC9DA,GAELiN,EAAOvgB,EAAOD,SAChBic,IAAUO,EACViE,MAAU,EACVJ,QAAUA,EACVC,QAAUA,EACVC,SAAUA,IAKR,SAAUtgB,EAAQD,EAASM,GAE/B,GAAI2R,GAAiB3R,EAAoB,IACrCmV,EAAiBnV,EAAoB,IACrCoT,EAAiBpT,EAAoB,IACrCqc,EAAiBrc,EAAoB,IACrCoX,EAAiBpX,EAAoB,IAAI6M,CAC7ClN,GAAOD,QAAU,SAASqV,GACxB,GAAI+H,GAAU3H,EAAKkF,SAAWlF,EAAKkF,OAASjH,KAAezB,EAAO0I,WAC7C,MAAlBtF,EAAKgG,OAAO,IAAehG,IAAQ+H,IAAS1F,EAAe0F,EAAS/H,GAAO1S,MAAOga,EAAOxP,EAAEkI,OAK5F,SAAUpV,EAAQD,EAASM,GAE/B,GAAI+Y,GAAY/Y,EAAoB,IAChCsS,EAAYtS,EAAoB,EACpCL,GAAOD,QAAU,SAASgC,EAAQ8X,GAMhC,IALA,GAIInS,GAJAuL,EAASN,EAAU5Q,GACnBmS,EAASkF,EAAQnG,GACjBlP,EAASmQ,EAAKnQ,OACdmP,EAAS,EAEPnP,EAASmP,GAAM,GAAGD,EAAEvL,EAAMwM,EAAKhB,QAAc2G,EAAG,MAAOnS,KAK3D,SAAU1H,EAAQD,EAASM,GAG/B,GAAI+Y,GAAU/Y,EAAoB,IAC9BogB,EAAUpgB,EAAoB,IAC9BqgB,EAAUrgB,EAAoB,GAClCL,GAAOD,QAAU,SAASuT,GACxB,GAAIpJ,GAAakP,EAAQ9F,GACrBqN,EAAaF,EAAKvT,CACtB,IAAGyT,EAKD,IAJA,GAGIjZ,GAHAyX,EAAUwB,EAAWrN,GACrBoK,EAAUgD,EAAIxT,EACdhJ,EAAU,EAERib,EAAQpb,OAASG,GAAKwZ,EAAOhd,KAAK4S,EAAI5L,EAAMyX,EAAQjb,OAAMgG,EAAOlF,KAAK0C,EAC5E,OAAOwC,KAKP,SAAUlK,EAAQD,GAEtBA,EAAQmN,EAAItI,OAAO8a,uBAIf,SAAU1f,EAAQD,GAEtBA,EAAQmN,KAAOsG,sBAIX,SAAUxT,EAAQD,EAASM,GAG/B,GAAIkT,GAAMlT,EAAoB,GAC9BL,GAAOD,QAAUuE,MAAMC,SAAW,SAAiBqc,GACjD,MAAmB,SAAZrN,EAAIqN,KAKT,SAAU5gB,EAAQD,EAASM,GAG/B,GAAIsS,GAAYtS,EAAoB,GAChC6c,EAAY7c,EAAoB,IAAI6M,EACpCrC,KAAeA,SAEfgW,EAA+B,gBAAVlY,SAAsBA,QAAU/D,OAAO6a,oBAC5D7a,OAAO6a,oBAAoB9W,WAE3BmY,EAAiB,SAASxN,GAC5B,IACE,MAAO4J,GAAK5J,GACZ,MAAMlK,GACN,MAAOyX,GAAY/V,SAIvB9K,GAAOD,QAAQmN,EAAI,SAA6BoG,GAC9C,MAAOuN,IAAoC,mBAArBhW,EAASnK,KAAK4S,GAA2BwN,EAAexN,GAAM4J,EAAKvK,EAAUW,MAMjG,SAAUtT,EAAQD,EAASM,GAG/B,GAAIiZ,GAAajZ,EAAoB,IACjC0gB,EAAa1gB,EAAoB,IAAI2G,OAAO,SAAU,YAE1DjH,GAAQmN,EAAItI,OAAO6a,qBAAuB,SAA6BxM,GACrE,MAAOqG,GAAMrG,EAAG8N,KAKd,SAAU/gB,EAAQD,EAASM,GAE/B,GAAIqgB,GAAiBrgB,EAAoB,IACrCgX,EAAiBhX,EAAoB,IACrCsS,EAAiBtS,EAAoB,GACrCmX,EAAiBnX,EAAoB,IACrCuT,EAAiBvT,EAAoB,IACrCkX,EAAiBlX,EAAoB,IACrC4c,EAAiBrY,OAAO4a,wBAE5Bzf,GAAQmN,EAAI7M,EAAoB,IAAM4c,EAAO,SAAkChK,EAAGqC,GAGhF,GAFArC,EAAIN,EAAUM,GACdqC,EAAIkC,EAAYlC,GAAG,GAChBiC,EAAe,IAChB,MAAO0F,GAAKhK,EAAGqC,GACf,MAAMlM,IACR,GAAGwK,EAAIX,EAAGqC,GAAG,MAAO+B,IAAYqJ,EAAIxT,EAAExM,KAAKuS,EAAGqC,GAAIrC,EAAEqC,MAKlD,SAAUtV,EAAQD,KAMlB,SAAUC,EAAQD,EAASM,GAE/BA,EAAoB,IAAI,kBAIpB,SAAUL,EAAQD,EAASM,GAE/BA,EAAoB,IAAI,eAIpB,SAAUL,EAAQD,EAASM,GAM/BL,EAAOD,QAA4B,mBAAX4I,SAA0BA,OAAe,QAAKtI,EAAoB,KAItF,SAAUL,EAAQD,EAASM,IAEH,SAASL,IAMnC,SAAUgS,EAAQlS,GACRE,EAAOD,QAAUD,KAG3BK,EAAM,WAIR,QAAS6gB,KACL,MAAOC,IAAaxK,MAAM,KAAM3S,WASpC,QAASS,GAAQ2c,GACb,MAAOA,aAAiB5c,QAAmD,mBAA1CM,OAAO4N,UAAU3H,SAASnK,KAAKwgB,GAGpE,QAASvJ,GAASuJ,GAGd,MAAgB,OAATA,GAA2D,oBAA1Ctc,OAAO4N,UAAU3H,SAASnK,KAAKwgB,GAG3D,QAASC,GAAclgB,GACnB,GAAI8M,EACJ,KAAKA,IAAK9M,GAEN,OAAO,CAEX,QAAO,EAGX,QAASmgB,GAAYF,GACjB,WAAiB,KAAVA,EAGX,QAASpf,GAASof,GACd,MAAwB,gBAAVA,IAAgE,oBAA1Ctc,OAAO4N,UAAU3H,SAASnK,KAAKwgB,GAGvE,QAASne,GAAOme,GACZ,MAAOA,aAAiBle,OAAkD,kBAA1C4B,OAAO4N,UAAU3H,SAASnK,KAAKwgB,GAGnE,QAASjW,GAAInF,EAAK8B,GACd,GAAc1D,GAAVmd,IACJ,KAAKnd,EAAI,EAAGA,EAAI4B,EAAI/B,SAAUG,EAC1Bmd,EAAIrc,KAAK4C,EAAG9B,EAAI5B,GAAIA,GAExB,OAAOmd,GAGX,QAASC,GAAW3d,EAAGC,GACnB,MAAOgB,QAAO4N,UAAU/O,eAAe/C,KAAKiD,EAAGC,GAGnD,QAAS7C,GAAO4C,EAAGC,GACf,IAAK,GAAIM,KAAKN,GACN0d,EAAW1d,EAAGM,KACdP,EAAEO,GAAKN,EAAEM,GAYjB,OARIod,GAAW1d,EAAG,cACdD,EAAEkH,SAAWjH,EAAEiH,UAGfyW,EAAW1d,EAAG,aACdD,EAAE4B,QAAU3B,EAAE2B,SAGX5B,EAGX,QAAS4d,GAAWL,EAAOtb,EAAQ4b,EAAQC,GACvC,MAAOC,IAAiBR,EAAOtb,EAAQ4b,EAAQC,GAAQ,GAAME,MAGjE,QAASC,KAEL,OACIC,OAAkB,EAClBC,gBACAC,eACAnR,UAAmB,EACnBoR,cAAkB,EAClBC,WAAkB,EAClBC,aAAkB,KAClBC,eAAkB,EAClBC,iBAAkB,EAClBC,KAAkB,EAClBC,mBACAC,SAAkB,KAClBC,SAAkB,EAClBC,iBAAkB,GAI1B,QAASC,GAAgB/hB,GAIrB,MAHa,OAATA,EAAEgiB,MACFhiB,EAAEgiB,IAAMf,KAELjhB,EAAEgiB,IAuBb,QAASC,GAAQjiB,GACb,GAAkB,MAAdA,EAAEkiB,SAAkB,CACpB,GAAIC,GAAQJ,EAAgB/hB,GACxBoiB,EAAcC,GAAOtiB,KAAKoiB,EAAMR,gBAAiB,SAAUpe,GAC3D,MAAY,OAALA,IAEP+e,GAAc9f,MAAMxC,EAAEuiB,GAAGC,YACzBL,EAAMlS,SAAW,IAChBkS,EAAMjB,QACNiB,EAAMZ,eACNY,EAAMM,iBACNN,EAAMb,YACNa,EAAMX,gBACNW,EAAMV,mBACLU,EAAMP,UAAaO,EAAMP,UAAYQ,EAS3C,IAPIpiB,EAAE0iB,UACFJ,EAAaA,GACe,IAAxBH,EAAMd,eACwB,IAA9Bc,EAAMhB,aAAa/d,YACDC,KAAlB8e,EAAMQ,SAGS,MAAnB1e,OAAO2e,UAAqB3e,OAAO2e,SAAS5iB,GAI5C,MAAOsiB,EAHPtiB,GAAEkiB,SAAWI,EAMrB,MAAOtiB,GAAEkiB,SAGb,QAASW,GAAeV,GACpB,GAAIniB,GAAI4gB,EAAUkC,IAQlB,OAPa,OAATX,EACA/hB,EAAO2hB,EAAgB/hB,GAAImiB,GAG3BJ,EAAgB/hB,GAAGyhB,iBAAkB,EAGlCzhB,EAOX,QAAS+iB,GAAWC,EAAIC,GACpB,GAAI1f,GAAGV,EAAMsU,CAiCb,IA/BKsJ,EAAYwC,EAAKC,oBAClBF,EAAGE,iBAAmBD,EAAKC,kBAE1BzC,EAAYwC,EAAK7Q,MAClB4Q,EAAG5Q,GAAK6Q,EAAK7Q,IAEZqO,EAAYwC,EAAKE,MAClBH,EAAGG,GAAKF,EAAKE,IAEZ1C,EAAYwC,EAAKG,MAClBJ,EAAGI,GAAKH,EAAKG,IAEZ3C,EAAYwC,EAAKP,WAClBM,EAAGN,QAAUO,EAAKP,SAEjBjC,EAAYwC,EAAKI,QAClBL,EAAGK,KAAOJ,EAAKI;2BAEd5C,EAAYwC,EAAKK,UAClBN,EAAGM,OAASL,EAAKK,QAEhB7C,EAAYwC,EAAKM,WAClBP,EAAGO,QAAUN,EAAKM,SAEjB9C,EAAYwC,EAAKjB,OAClBgB,EAAGhB,IAAMD,EAAgBkB,IAExBxC,EAAYwC,EAAKO,WAClBR,EAAGQ,QAAUP,EAAKO,SAGlBC,GAAiBrgB,OAAS,EAC1B,IAAKG,EAAI,EAAGA,EAAIkgB,GAAiBrgB,OAAQG,IACrCV,EAAO4gB,GAAiBlgB,GACxB4T,EAAM8L,EAAKpgB,GACN4d,EAAYtJ,KACb6L,EAAGngB,GAAQsU,EAKvB,OAAO6L,GAMX,QAASU,GAAOC,GACZZ,EAAWvjB,KAAMmkB,GACjBnkB,KAAK+iB,GAAK,GAAIlgB,MAAkB,MAAbshB,EAAOpB,GAAaoB,EAAOpB,GAAGC,UAAYM,KACxDtjB,KAAKyiB,YACNziB,KAAK+iB,GAAK,GAAIlgB,MAAKygB,OAIE,IAArBc,KACAA,IAAmB,EACnBvD,EAAMwD,aAAarkB,MACnBokB,IAAmB,GAI3B,QAAS/e,GAAUvE,GACf,MAAOA,aAAeojB,IAAkB,MAAPpjB,GAAuC,MAAxBA,EAAI4iB,iBAGxD,QAASY,GAAUC,GACf,MAAIA,GAAS,EAEF9hB,KAAKoX,KAAK0K,IAAW,EAErB9hB,KAAKqK,MAAMyX,GAI1B,QAASC,GAAMC,GACX,GAAIC,IAAiBD,EACjBliB,EAAQ,CAMZ,OAJsB,KAAlBmiB,GAAuBC,SAASD,KAChCniB,EAAQ+hB,EAASI,IAGdniB,EAIX,QAASqiB,GAAcC,EAAQC,EAAQC,GACnC,GAGIhhB,GAHAgB,EAAMtC,KAAKL,IAAIyiB,EAAOjhB,OAAQkhB,EAAOlhB,QACrCohB,EAAaviB,KAAKwiB,IAAIJ,EAAOjhB,OAASkhB,EAAOlhB,QAC7CshB,EAAQ,CAEZ,KAAKnhB,EAAI,EAAGA,EAAIgB,EAAKhB,KACZghB,GAAeF,EAAO9gB,KAAO+gB,EAAO/gB,KACnCghB,GAAeP,EAAMK,EAAO9gB,MAAQygB,EAAMM,EAAO/gB,MACnDmhB,GAGR,OAAOA,GAAQF,EAGnB,QAASG,GAAKC,IACgC,IAAtCvE,EAAMwE,6BACmB,mBAAbC,UAA6BA,QAAQH,MACjDG,QAAQH,KAAK,wBAA0BC,GAI/C,QAASG,GAAUH,EAAK3d,GACpB,GAAI+d,IAAY,CAEhB,OAAO5kB,GAAO,WAIV,GAHgC,MAA5BigB,EAAM4E,oBACN5E,EAAM4E,mBAAmB,KAAML,GAE/BI,EAAW,CAGX,IAAK,GADD/E,GADAf,KAEK3b,EAAI,EAAGA,EAAIJ,UAAUC,OAAQG,IAAK,CAEvC,GADA0c,EAAM,GACsB,gBAAjB9c,WAAUI,GAAiB,CAClC0c,GAAO,MAAQ1c,EAAI,IACnB,KAAK,GAAIwD,KAAO5D,WAAU,GACtB8c,GAAOlZ,EAAM,KAAO5D,UAAU,GAAG4D,GAAO,IAE5CkZ,GAAMA,EAAI9V,MAAM,GAAI,OAEpB8V,GAAM9c,UAAUI,EAEpB2b,GAAK7a,KAAK4b,GAEd0E,EAAKC,EAAM,gBAAkBjhB,MAAMkO,UAAU1H,MAAMpK,KAAKmf,GAAM3Y,KAAK,IAAM,MAAO,GAAK1C,QAASqhB,OAC9FF,GAAY,EAEhB,MAAO/d,GAAG6O,MAAMtW,KAAM2D,YACvB8D,GAKP,QAASke,GAAgB1Q,EAAMmQ,GACK,MAA5BvE,EAAM4E,oBACN5E,EAAM4E,mBAAmBxQ,EAAMmQ,GAE9BQ,GAAa3Q,KACdkQ,EAAKC,GACLQ,GAAa3Q,IAAQ,GAO7B,QAAS4Q,GAAW9E,GAChB,MAAOA,aAAiBxK,WAAsD,sBAA1C9R,OAAO4N,UAAU3H,SAASnK,KAAKwgB,GAGvE,QAAShC,GAAKoF,GACV,GAAI9gB,GAAMU,CACV,KAAKA,IAAKogB,GACN9gB,EAAO8gB,EAAOpgB,GACV8hB,EAAWxiB,GACXrD,KAAK+D,GAAKV,EAEVrD,KAAK,IAAM+D,GAAKV,CAGxBrD,MAAK8lB,QAAU3B,EAIfnkB,KAAK+lB,+BAAiC,GAAIC,SACrChmB,KAAKimB,wBAAwB1Q,QAAUvV,KAAKkmB,cAAc3Q,QACvD,IAAM,UAAYA,QAG9B,QAAS4Q,GAAaC,EAAcC,GAChC,GAAoChjB,GAAhC6d,EAAMtgB,KAAWwlB,EACrB,KAAK/iB,IAAQgjB,GACLlF,EAAWkF,EAAahjB,KACpBmU,EAAS4O,EAAa/iB,KAAUmU,EAAS6O,EAAYhjB,KACrD6d,EAAI7d,MACJzC,EAAOsgB,EAAI7d,GAAO+iB,EAAa/iB,IAC/BzC,EAAOsgB,EAAI7d,GAAOgjB,EAAYhjB,KACF,MAArBgjB,EAAYhjB,GACnB6d,EAAI7d,GAAQgjB,EAAYhjB,SAEjB6d,GAAI7d,GAIvB,KAAKA,IAAQ+iB,GACLjF,EAAWiF,EAAc/iB,KACpB8d,EAAWkF,EAAahjB,IACzBmU,EAAS4O,EAAa/iB,MAE1B6d,EAAI7d,GAAQzC,KAAWsgB,EAAI7d,IAGnC,OAAO6d,GAGX,QAASoF,GAAOnC,GACE,MAAVA,GACAnkB,KAAK+e,IAAIoF,GA+BjB,QAASoC,GAAUhf,EAAKif,EAAKC,GACzB,GAAIC,GAAS1mB,KAAK2mB,UAAUpf,IAAQvH,KAAK2mB,UAAoB,QAC7D,OAAOd,GAAWa,GAAUA,EAAOnmB,KAAKimB,EAAKC,GAAOC,EAYxD,QAASE,GAAgBrf,GACrB,GAAI9B,GAASzF,KAAK6mB,gBAAgBtf,GAC9Buf,EAAc9mB,KAAK6mB,gBAAgBtf,EAAIwf,cAE3C,OAAIthB,KAAWqhB,EACJrhB,GAGXzF,KAAK6mB,gBAAgBtf,GAAOuf,EAAYld,QAAQ,mBAAoB,SAAU+N,GAC1E,MAAOA,GAAIhN,MAAM,KAGd3K,KAAK6mB,gBAAgBtf,IAKhC,QAASyf,KACL,MAAOhnB,MAAKinB,aAMhB,QAASC,GAAS3C,GACd,MAAOvkB,MAAKmnB,SAASvd,QAAQ,KAAM2a,GAoBvC,QAAS6C,GAAc7C,EAAQ8C,EAAeC,EAAQC,GAClD,GAAIb,GAAS1mB,KAAKwnB,cAAcF,EAChC,OAAQzB,GAAWa,GACfA,EAAOnC,EAAQ8C,EAAeC,EAAQC,GACtCb,EAAO9c,QAAQ,MAAO2a,GAG9B,QAASkD,GAAYC,EAAMhB,GACvB,GAAIjhB,GAASzF,KAAKwnB,cAAcE,EAAO,EAAI,SAAW,OACtD,OAAO7B,GAAWpgB,GAAUA,EAAOihB,GAAUjhB,EAAOmE,QAAQ,MAAO8c,GAKvE,QAASiB,GAAcC,EAAMC,GACzB,GAAIC,GAAYF,EAAKG,aACrBC,IAAQF,GAAaE,GAAQF,EAAY,KAAOE,GAAQH,GAAaD,EAGzE,QAASK,GAAeC,GACpB,MAAwB,gBAAVA,GAAqBF,GAAQE,IAAUF,GAAQE,EAAMH,mBAAiBlkB,GAGxF,QAASskB,GAAqBC,GAC1B,GACIC,GACAhlB,EAFAilB,IAIJ,KAAKjlB,IAAQ+kB,GACLjH,EAAWiH,EAAa/kB,KACxBglB,EAAiBJ,EAAe5kB,MAE5BilB,EAAgBD,GAAkBD,EAAY/kB,GAK1D,OAAOilB,GAKX,QAASC,GAAgBX,EAAMY,GAC3BC,GAAWb,GAAQY,EAGvB,QAASE,GAAoBC,GACzB,GAAIT,KACJ,KAAK,GAAIU,KAAKD,GACVT,EAAMrjB,MAAM+iB,KAAMgB,EAAGJ,SAAUC,GAAWG,IAK9C,OAHAV,GAAMW,KAAK,SAAUrlB,EAAGC,GACpB,MAAOD,GAAEglB,SAAW/kB,EAAE+kB,WAEnBN,EAGX,QAASY,GAAYlB,EAAMmB,GACvB,MAAO,UAAUxmB,GACb,MAAa,OAATA,GACAymB,EAAMhpB,KAAM4nB,EAAMrlB,GAClBse,EAAMwD,aAAarkB,KAAM+oB,GAClB/oB,MAEAyX,EAAIzX,KAAM4nB,IAK7B,QAASnQ,GAAK+O,EAAKoB,GACf,MAAOpB,GAAI/D,UACP+D,EAAIzD,GAAG,OAASyD,EAAI1C,OAAS,MAAQ,IAAM8D,KAAUtE,IAG7D,QAAS0F,GAAOxC,EAAKoB,EAAMrlB,GACnBikB,EAAI/D,WACJ+D,EAAIzD,GAAG,OAASyD,EAAI1C,OAAS,MAAQ,IAAM8D,GAAMrlB,GAMzD,QAAS0mB,GAAWf,GAEhB,MADAA,GAAQD,EAAeC,GACnBrC,EAAW7lB,KAAKkoB,IACTloB,KAAKkoB,KAETloB,KAIX,QAASkpB,GAAWhB,EAAO3lB,GACvB,GAAqB,gBAAV2lB,GAAoB,CAC3BA,EAAQC,EAAqBD,EAE7B,KAAK,GADDiB,GAAcT,EAAoBR,GAC7BnkB,EAAI,EAAGA,EAAIolB,EAAYvlB,OAAQG,IACpC/D,KAAKmpB,EAAYplB,GAAG6jB,MAAMM,EAAMiB,EAAYplB,GAAG6jB,WAInD,IADAM,EAAQD,EAAeC,GACnBrC,EAAW7lB,KAAKkoB,IAChB,MAAOloB,MAAKkoB,GAAO3lB,EAG3B,OAAOvC,MAGX,QAASopB,GAAS7E,EAAQ8E,EAAcC,GACpC,GAAIC,GAAY,GAAK9mB,KAAKwiB,IAAIV,GAC1BiF,EAAcH,EAAeE,EAAU3lB,MAE3C,QADW2gB,GAAU,EACL+E,EAAY,IAAM,GAAM,KACpC7mB,KAAKgnB,IAAI,GAAIhnB,KAAKJ,IAAI,EAAGmnB,IAAc9e,WAAWL,OAAO,GAAKkf,EAetE,QAASG,GAAgBC,EAAOC,EAAQ1C,EAAS/f,GAC7C,GAAI0iB,GAAO1iB,CACa,iBAAbA,KACP0iB,EAAO,WACH,MAAO7pB,MAAKmH,OAGhBwiB,IACAG,GAAqBH,GAASE,GAE9BD,IACAE,GAAqBF,EAAO,IAAM,WAC9B,MAAOR,GAASS,EAAKvT,MAAMtW,KAAM2D,WAAYimB,EAAO,GAAIA,EAAO,MAGnE1C,IACA4C,GAAqB5C,GAAW,WAC5B,MAAOlnB,MAAK+pB,aAAa7C,QAAQ2C,EAAKvT,MAAMtW,KAAM2D,WAAYgmB,KAK1E,QAASK,GAAuBjJ,GAC5B,MAAIA,GAAM7b,MAAM,YACL6b,EAAMnX,QAAQ,WAAY,IAE9BmX,EAAMnX,QAAQ,MAAO,IAGhC,QAASqgB,GAAmBxkB,GACxB,GAA4C1B,GAAGH,EAA3CyD,EAAQ5B,EAAOP,MAAMglB,GAEzB,KAAKnmB,EAAI,EAAGH,EAASyD,EAAMzD,OAAQG,EAAIH,EAAQG,IACvC+lB,GAAqBziB,EAAMtD,IAC3BsD,EAAMtD,GAAK+lB,GAAqBziB,EAAMtD,IAEtCsD,EAAMtD,GAAKimB,EAAuB3iB,EAAMtD,GAIhD,OAAO,UAAUyiB,GACb,GAAiBziB,GAAb2iB,EAAS,EACb,KAAK3iB,EAAI,EAAGA,EAAIH,EAAQG,IACpB2iB,GAAUb,EAAWxe,EAAMtD,IAAMsD,EAAMtD,GAAGxD,KAAKimB,EAAK/gB,GAAU4B,EAAMtD,EAExE,OAAO2iB,IAKf,QAASyD,GAAa3pB,EAAGiF,GACrB,MAAKjF,GAAEiiB,WAIPhd,EAAS2kB,EAAa3kB,EAAQjF,EAAEupB,cAChCM,GAAgB5kB,GAAU4kB,GAAgB5kB,IAAWwkB,EAAmBxkB,GAEjE4kB,GAAgB5kB,GAAQjF,IANpBA,EAAEupB,aAAa/C,cAS9B,QAASoD,GAAa3kB,EAAQ4b,GAG1B,QAASiJ,GAA4BvJ,GACjC,MAAOM,GAAOuF,eAAe7F,IAAUA,EAH3C,GAAIhd,GAAI,CAOR,KADAwmB,GAAsBC,UAAY,EAC3BzmB,GAAK,GAAKwmB,GAAsBrd,KAAKzH,IACxCA,EAASA,EAAOmE,QAAQ2gB,GAAuBD,GAC/CC,GAAsBC,UAAY,EAClCzmB,GAAK,CAGT,OAAO0B,GA8BX,QAASglB,GAAed,EAAOe,EAAOC,GAClCC,GAAQjB,GAAS9D,EAAW6E,GAASA,EAAQ,SAAUG,EAAUd,GAC7D,MAAQc,IAAYF,EAAeA,EAAcD,GAIzD,QAASI,GAAuBnB,EAAOxF,GACnC,MAAKhD,GAAWyJ,GAASjB,GAIlBiB,GAAQjB,GAAOxF,EAAOjB,QAASiB,EAAOH,SAHlC,GAAIgC,QAAO+E,EAAepB,IAOzC,QAASoB,GAAe3f,GACpB,MAAO4f,IAAY5f,EAAExB,QAAQ,KAAM,IAAIA,QAAQ,sCAAuC,SAAUqhB,EAASC,EAAIC,EAAIC,EAAIC,GACjH,MAAOH,IAAMC,GAAMC,GAAMC,KAIjC,QAASL,IAAY5f,GACjB,MAAOA,GAAExB,QAAQ,yBAA0B,QAK/C,QAAS0hB,IAAe3B,EAAOxiB,GAC3B,GAAIpD,GAAG8lB,EAAO1iB,CASd,KARqB,gBAAVwiB,KACPA,GAASA,IAEThoB,EAASwF,KACT0iB,EAAO,SAAU9I,EAAO1Z,GACpBA,EAAMF,GAAYqd,EAAMzD,KAG3Bhd,EAAI,EAAGA,EAAI4lB,EAAM/lB,OAAQG,IAC1BwnB,GAAO5B,EAAM5lB,IAAM8lB,EAI3B,QAAS2B,IAAmB7B,EAAOxiB,GAC/BmkB,GAAc3B,EAAO,SAAU5I,EAAO1Z,EAAO8c,EAAQwF,GACjDxF,EAAOsH,GAAKtH,EAAOsH,OACnBtkB,EAAS4Z,EAAOoD,EAAOsH,GAAItH,EAAQwF,KAI3C,QAAS+B,IAAwB/B,EAAO5I,EAAOoD,GAC9B,MAATpD,GAAiBI,EAAWoK,GAAQ5B,IACpC4B,GAAO5B,GAAO5I,EAAOoD,EAAOwH,GAAIxH,EAAQwF,GAiChD,QAASiC,IAAYC,EAAMC,GACvB,MAAO,IAAIjpB,MAAKA,KAAKkpB,IAAIF,EAAMC,EAAQ,EAAG,IAAIE,aAsDlD,QAASC,IAAczrB,EAAGiF,GACtB,MAAKjF,GAIE4D,EAAQpE,KAAKksB,SAAWlsB,KAAKksB,QAAQ1rB,EAAEsrB,SAC1C9rB,KAAKksB,SAASlsB,KAAKksB,QAAQC,UAAYC,IAAkBlf,KAAKzH,GAAU,SAAW,cAAcjF,EAAEsrB,SAJ5F1nB,EAAQpE,KAAKksB,SAAWlsB,KAAKksB,QAChClsB,KAAKksB,QAAoB,WAOrC,QAASG,IAAmB7rB,EAAGiF,GAC3B,MAAKjF,GAIE4D,EAAQpE,KAAKssB,cAAgBtsB,KAAKssB,aAAa9rB,EAAEsrB,SACpD9rB,KAAKssB,aAAaF,GAAiBlf,KAAKzH,GAAU,SAAW,cAAcjF,EAAEsrB,SAJtE1nB,EAAQpE,KAAKssB,cAAgBtsB,KAAKssB,aACrCtsB,KAAKssB,aAAyB,WAM1C,QAASC,IAAkBC,EAAW/mB,EAAQ6b,GAC1C,GAAIvd,GAAG0oB,EAAIjG,EAAKkG,EAAMF,EAAUG,mBAChC,KAAK3sB,KAAK4sB,aAKN,IAHA5sB,KAAK4sB,gBACL5sB,KAAK6sB,oBACL7sB,KAAK8sB,qBACA/oB,EAAI,EAAGA,EAAI,KAAMA,EAClByiB,EAAMpF,GAAW,IAAMrd,IACvB/D,KAAK8sB,kBAAkB/oB,GAAK/D,KAAK+sB,YAAYvG,EAAK,IAAImG,oBACtD3sB,KAAK6sB,iBAAiB9oB,GAAK/D,KAAKgtB,OAAOxG,EAAK,IAAImG,mBAIxD,OAAIrL,GACe,QAAX7b,GACAgnB,EAAKQ,GAAU1sB,KAAKP,KAAK8sB,kBAAmBJ,IAC7B,IAARD,EAAYA,EAAK,OAExBA,EAAKQ,GAAU1sB,KAAKP,KAAK6sB,iBAAkBH,IAC5B,IAARD,EAAYA,EAAK,MAGb,QAAXhnB,GAEY,KADZgnB,EAAKQ,GAAU1sB,KAAKP,KAAK8sB,kBAAmBJ,IAEjCD,GAEXA,EAAKQ,GAAU1sB,KAAKP,KAAK6sB,iBAAkBH,IAC5B,IAARD,EAAYA,EAAK,OAGZ,KADZA,EAAKQ,GAAU1sB,KAAKP,KAAK6sB,iBAAkBH,IAEhCD,GAEXA,EAAKQ,GAAU1sB,KAAKP,KAAK8sB,kBAAmBJ,IAC7B,IAARD,EAAYA,EAAK,MAKpC,QAASS,IAAmBV,EAAW/mB,EAAQ6b,GAC3C,GAAIvd,GAAGyiB,EAAKkE,CAEZ,IAAI1qB,KAAKmtB,kBACL,MAAOZ,IAAkBhsB,KAAKP,KAAMwsB,EAAW/mB,EAAQ6b,EAY3D,KATKthB,KAAK4sB,eACN5sB,KAAK4sB,gBACL5sB,KAAK6sB,oBACL7sB,KAAK8sB,sBAMJ/oB,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAYrB,GAVAyiB,EAAMpF,GAAW,IAAMrd,IACnBud,IAAWthB,KAAK6sB,iBAAiB9oB,KACjC/D,KAAK6sB,iBAAiB9oB,GAAK,GAAIiiB,QAAO,IAAMhmB,KAAKgtB,OAAOxG,EAAK,IAAI5c,QAAQ,IAAK,IAAM,IAAK,KACzF5J,KAAK8sB,kBAAkB/oB,GAAK,GAAIiiB,QAAO,IAAMhmB,KAAK+sB,YAAYvG,EAAK,IAAI5c,QAAQ,IAAK,IAAM,IAAK,MAE9F0X,GAAWthB,KAAK4sB,aAAa7oB,KAC9B2mB,EAAQ,IAAM1qB,KAAKgtB,OAAOxG,EAAK,IAAM,KAAOxmB,KAAK+sB,YAAYvG,EAAK,IAClExmB,KAAK4sB,aAAa7oB,GAAK,GAAIiiB,QAAO0E,EAAM9gB,QAAQ,IAAK,IAAK,MAG1D0X,GAAqB,SAAX7b,GAAqBzF,KAAK6sB,iBAAiB9oB,GAAGmJ,KAAKsf,GAC7D,MAAOzoB,EACJ,IAAIud,GAAqB,QAAX7b,GAAoBzF,KAAK8sB,kBAAkB/oB,GAAGmJ,KAAKsf,GACpE,MAAOzoB,EACJ,KAAKud,GAAUthB,KAAK4sB,aAAa7oB,GAAGmJ,KAAKsf,GAC5C,MAAOzoB,IAOnB,QAASqpB,IAAU5G,EAAKjkB,GACpB,GAAI8qB,EAEJ,KAAK7G,EAAI/D,UAEL,MAAO+D,EAGX,IAAqB,gBAAVjkB,GACP,GAAI,QAAQ2K,KAAK3K,GACbA,EAAQiiB,EAAMjiB,OAId,IAFAA,EAAQikB,EAAIuD,aAAauD,YAAY/qB,IAEhCZ,EAASY,GACV,MAAOikB,EAOnB,OAFA6G,GAAa5qB,KAAKL,IAAIokB,EAAI+G,OAAQ3B,GAAYpF,EAAIqF,OAAQtpB,IAC1DikB,EAAIzD,GAAG,OAASyD,EAAI1C,OAAS,MAAQ,IAAM,SAASvhB,EAAO8qB,GACpD7G,EAGX,QAASgH,IAAajrB,GAClB,MAAa,OAATA,GACA6qB,GAASptB,KAAMuC,GACfse,EAAMwD,aAAarkB,MAAM,GAClBA,MAEAyX,EAAIzX,KAAM,SAIzB,QAASytB,MACL,MAAO7B,IAAY5rB,KAAK6rB,OAAQ7rB,KAAK8rB,SAIzC,QAAS4B,IAAkB7C,GACvB,MAAI7qB,MAAKmtB,mBACAhM,EAAWnhB,KAAM,iBAClB2tB,GAAmBptB,KAAKP,MAExB6qB,EACO7qB,KAAK4tB,wBAEL5tB,KAAK6tB,oBAGX1M,EAAWnhB,KAAM,uBAClBA,KAAK6tB,kBAAoBC,IAEtB9tB,KAAK4tB,yBAA2B/C,EACnC7qB,KAAK4tB,wBAA0B5tB,KAAK6tB,mBAKhD,QAASE,IAAalD,GAClB,MAAI7qB,MAAKmtB,mBACAhM,EAAWnhB,KAAM,iBAClB2tB,GAAmBptB,KAAKP,MAExB6qB,EACO7qB,KAAKguB,mBAELhuB,KAAKiuB,eAGX9M,EAAWnhB,KAAM,kBAClBA,KAAKiuB,aAAeC,IAEjBluB,KAAKguB,oBAAsBnD,EAC9B7qB,KAAKguB,mBAAqBhuB,KAAKiuB,cAI3C,QAASN,MACL,QAASQ,GAAU3qB,EAAGC,GAClB,MAAOA,GAAEG,OAASJ,EAAEI,OAGxB,GACIG,GAAGyiB,EADH4H,KAAkBC,KAAiBC,IAEvC,KAAKvqB,EAAI,EAAGA,EAAI,GAAIA,IAEhByiB,EAAMpF,GAAW,IAAMrd,IACvBqqB,EAAYvpB,KAAK7E,KAAK+sB,YAAYvG,EAAK,KACvC6H,EAAWxpB,KAAK7E,KAAKgtB,OAAOxG,EAAK,KACjC8H,EAAYzpB,KAAK7E,KAAKgtB,OAAOxG,EAAK,KAClC8H,EAAYzpB,KAAK7E,KAAK+sB,YAAYvG,EAAK,IAO3C,KAHA4H,EAAYvF,KAAKsF,GACjBE,EAAWxF,KAAKsF,GAChBG,EAAYzF,KAAKsF,GACZpqB,EAAI,EAAGA,EAAI,GAAIA,IAChBqqB,EAAYrqB,GAAKinB,GAAYoD,EAAYrqB,IACzCsqB,EAAWtqB,GAAKinB,GAAYqD,EAAWtqB,GAE3C,KAAKA,EAAI,EAAGA,EAAI,GAAIA,IAChBuqB,EAAYvqB,GAAKinB,GAAYsD,EAAYvqB,GAG7C/D,MAAKiuB,aAAe,GAAIjI,QAAO,KAAOsI,EAAYvnB,KAAK,KAAO,IAAK,KACnE/G,KAAK6tB,kBAAoB7tB,KAAKiuB,aAC9BjuB,KAAKguB,mBAAqB,GAAIhI,QAAO,KAAOqI,EAAWtnB,KAAK,KAAO,IAAK,KACxE/G,KAAK4tB,wBAA0B,GAAI5H,QAAO,KAAOoI,EAAYrnB,KAAK,KAAO,IAAK,KA+ClF,QAASwnB,IAAW1C,GAChB,MAAO2C,IAAW3C,GAAQ,IAAM,IAGpC,QAAS2C,IAAW3C,GAChB,MAAQA,GAAO,GAAM,GAAKA,EAAO,KAAQ,GAAMA,EAAO,KAAQ,EAalE,QAAS4C,MACL,MAAOD,IAAWxuB,KAAK6rB,QAG3B,QAAS6C,IAAYC,EAAGnuB,EAAGyL,EAAGd,EAAGyjB,EAAGxjB,EAAGyjB,GAGnC,GAAItB,GAAO,GAAI1qB,MAAK8rB,EAAGnuB,EAAGyL,EAAGd,EAAGyjB,EAAGxjB,EAAGyjB,EAMtC,OAHIF,GAAI,KAAOA,GAAK,GAAKhK,SAAS4I,EAAKuB,gBACnCvB,EAAKwB,YAAYJ,GAEdpB,EAGX,QAASyB,IAAeL,GACpB,GAAIpB,GAAO,GAAI1qB,MAAKA,KAAKkpB,IAAIzV,MAAM,KAAM3S,WAMzC,OAHIgrB,GAAI,KAAOA,GAAK,GAAKhK,SAAS4I,EAAK0B,mBACnC1B,EAAK2B,eAAeP,GAEjBpB,EAIX,QAAS4B,IAAgBtD,EAAMuD,EAAKC,GAChC,GACIC,GAAM,EAAIF,EAAMC,CAIpB,SAFa,EAAIL,GAAcnD,EAAM,EAAGyD,GAAKC,YAAcH,GAAO,EAElDE,EAAM,EAI1B,QAASE,IAAmB3D,EAAM4D,EAAMC,EAASN,EAAKC,GAClD,GAGIM,GAASC,EAHTC,GAAgB,EAAIH,EAAUN,GAAO,EACrCU,EAAaX,GAAgBtD,EAAMuD,EAAKC,GACxCU,EAAY,EAAI,GAAKN,EAAO,GAAKI,EAAeC,CAcpD,OAXIC,IAAa,GACbJ,EAAU9D,EAAO,EACjB+D,EAAerB,GAAWoB,GAAWI,GAC9BA,EAAYxB,GAAW1C,IAC9B8D,EAAU9D,EAAO,EACjB+D,EAAeG,EAAYxB,GAAW1C,KAEtC8D,EAAU9D,EACV+D,EAAeG,IAIflE,KAAM8D,EACNI,UAAWH,GAInB,QAASI,IAAWxJ,EAAK4I,EAAKC,GAC1B,GAEIY,GAASN,EAFTG,EAAaX,GAAgB3I,EAAIqF,OAAQuD,EAAKC,GAC9CI,EAAOhtB,KAAKqK,OAAO0Z,EAAIuJ,YAAcD,EAAa,GAAK,GAAK,CAchE,OAXIL,GAAO,GACPE,EAAUnJ,EAAIqF,OAAS,EACvBoE,EAAUR,EAAOS,GAAYP,EAASP,EAAKC,IACpCI,EAAOS,GAAY1J,EAAIqF,OAAQuD,EAAKC,IAC3CY,EAAUR,EAAOS,GAAY1J,EAAIqF,OAAQuD,EAAKC,GAC9CM,EAAUnJ,EAAIqF,OAAS,IAEvB8D,EAAUnJ,EAAIqF,OACdoE,EAAUR,IAIVA,KAAMQ,EACNpE,KAAM8D,GAId,QAASO,IAAYrE,EAAMuD,EAAKC,GAC5B,GAAIS,GAAaX,GAAgBtD,EAAMuD,EAAKC,GACxCc,EAAiBhB,GAAgBtD,EAAO,EAAGuD,EAAKC,EACpD,QAAQd,GAAW1C,GAAQiE,EAAaK,GAAkB,EAiC9D,QAASC,IAAY5J,GACjB,MAAOwJ,IAAWxJ,EAAKxmB,KAAKqwB,MAAMjB,IAAKpvB,KAAKqwB,MAAMhB,KAAKI,KAQ3D,QAASa,MACL,MAAOtwB,MAAKqwB,MAAMjB,IAGtB,QAASmB,MACL,MAAOvwB,MAAKqwB,MAAMhB,IAKtB,QAASmB,IAAYzP,GACjB,GAAI0O,GAAOzvB,KAAK+pB,aAAa0F,KAAKzvB,KAClC,OAAgB,OAAT+gB,EAAgB0O,EAAOzvB,KAAKywB,IAAqB,GAAhB1P,EAAQ0O,GAAW,KAG/D,QAASiB,IAAe3P,GACpB,GAAI0O,GAAOO,GAAWhwB,KAAM,EAAG,GAAGyvB,IAClC,OAAgB,OAAT1O,EAAgB0O,EAAOzvB,KAAKywB,IAAqB,GAAhB1P,EAAQ0O,GAAW,KAgE/D,QAASkB,IAAa5P,EAAOM,GACzB,MAAqB,gBAAVN,GACAA,EAGN/d,MAAM+d,IAIXA,EAAQM,EAAOuP,cAAc7P,GACR,gBAAVA,GACAA,EAGJ,MARI/W,SAAS+W,EAAO,IAW/B,QAAS8P,IAAgB9P,EAAOM,GAC5B,MAAqB,gBAAVN,GACAM,EAAOuP,cAAc7P,GAAS,GAAK,EAEvC/d,MAAM+d,GAAS,KAAOA,EAMjC,QAAS+P,IAAgBtwB,EAAGiF,GACxB,MAAKjF,GAIE4D,EAAQpE,KAAK+wB,WAAa/wB,KAAK+wB,UAAUvwB,EAAEwwB,OAC9ChxB,KAAK+wB,UAAU/wB,KAAK+wB,UAAU5E,SAASjf,KAAKzH,GAAU,SAAW,cAAcjF,EAAEwwB,OAJ1E5sB,EAAQpE,KAAK+wB,WAAa/wB,KAAK+wB,UAClC/wB,KAAK+wB,UAAsB,WAOvC,QAASE,IAAqBzwB,GAC1B,MAAO,GAAMR,KAAKkxB,eAAe1wB,EAAEwwB,OAAShxB,KAAKkxB,eAIrD,QAASC,IAAmB3wB,GACxB,MAAO,GAAMR,KAAKoxB,aAAa5wB,EAAEwwB,OAAShxB,KAAKoxB,aAGnD,QAASC,IAAoBC,EAAa7rB,EAAQ6b,GAC9C,GAAIvd,GAAG0oB,EAAIjG,EAAKkG,EAAM4E,EAAY3E,mBAClC,KAAK3sB,KAAKuxB,eAKN,IAJAvxB,KAAKuxB,kBACLvxB,KAAKwxB,uBACLxxB,KAAKyxB,qBAEA1tB,EAAI,EAAGA,EAAI,IAAKA,EACjByiB,EAAMpF,GAAW,IAAM,IAAI4P,IAAIjtB,GAC/B/D,KAAKyxB,kBAAkB1tB,GAAK/D,KAAK0xB,YAAYlL,EAAK,IAAImG,oBACtD3sB,KAAKwxB,oBAAoBztB,GAAK/D,KAAK2xB,cAAcnL,EAAK,IAAImG,oBAC1D3sB,KAAKuxB,eAAextB,GAAK/D,KAAK4xB,SAASpL,EAAK,IAAImG,mBAIxD,OAAIrL,GACe,SAAX7b,GACAgnB,EAAKQ,GAAU1sB,KAAKP,KAAKuxB,eAAgB7E,IAC1B,IAARD,EAAYA,EAAK,MACN,QAAXhnB,GACPgnB,EAAKQ,GAAU1sB,KAAKP,KAAKwxB,oBAAqB9E,IAC/B,IAARD,EAAYA,EAAK,OAExBA,EAAKQ,GAAU1sB,KAAKP,KAAKyxB,kBAAmB/E,IAC7B,IAARD,EAAYA,EAAK,MAGb,SAAXhnB,GAEY,KADZgnB,EAAKQ,GAAU1sB,KAAKP,KAAKuxB,eAAgB7E,IAE9BD,GAGC,KADZA,EAAKQ,GAAU1sB,KAAKP,KAAKwxB,oBAAqB9E,IAEnCD,GAEXA,EAAKQ,GAAU1sB,KAAKP,KAAKyxB,kBAAmB/E,IAC7B,IAARD,EAAYA,EAAK,MACN,QAAXhnB,GAEK,KADZgnB,EAAKQ,GAAU1sB,KAAKP,KAAKwxB,oBAAqB9E,IAEnCD,GAGC,KADZA,EAAKQ,GAAU1sB,KAAKP,KAAKuxB,eAAgB7E,IAE9BD,GAEXA,EAAKQ,GAAU1sB,KAAKP,KAAKyxB,kBAAmB/E,IAC7B,IAARD,EAAYA,EAAK,OAGZ,KADZA,EAAKQ,GAAU1sB,KAAKP,KAAKyxB,kBAAmB/E,IAEjCD,GAGC,KADZA,EAAKQ,GAAU1sB,KAAKP,KAAKuxB,eAAgB7E,IAE9BD,GAEXA,EAAKQ,GAAU1sB,KAAKP,KAAKwxB,oBAAqB9E,IAC/B,IAARD,EAAYA,EAAK,MAKpC,QAASoF,IAAqBP,EAAa7rB,EAAQ6b,GAC/C,GAAIvd,GAAGyiB,EAAKkE,CAEZ,IAAI1qB,KAAK8xB,oBACL,MAAOT,IAAoB9wB,KAAKP,KAAMsxB,EAAa7rB,EAAQ6b,EAU/D,KAPKthB,KAAKuxB,iBACNvxB,KAAKuxB,kBACLvxB,KAAKyxB,qBACLzxB,KAAKwxB,uBACLxxB,KAAK+xB,uBAGJhuB,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAcpB,GAXAyiB,EAAMpF,GAAW,IAAM,IAAI4P,IAAIjtB,GAC3Bud,IAAWthB,KAAK+xB,mBAAmBhuB,KACnC/D,KAAK+xB,mBAAmBhuB,GAAK,GAAIiiB,QAAO,IAAMhmB,KAAK4xB,SAASpL,EAAK,IAAI5c,QAAQ,IAAK,MAAS,IAAK,KAChG5J,KAAKwxB,oBAAoBztB,GAAK,GAAIiiB,QAAO,IAAMhmB,KAAK2xB,cAAcnL,EAAK,IAAI5c,QAAQ,IAAK,MAAS,IAAK,KACtG5J,KAAKyxB,kBAAkB1tB,GAAK,GAAIiiB,QAAO,IAAMhmB,KAAK0xB,YAAYlL,EAAK,IAAI5c,QAAQ,IAAK,MAAS,IAAK,MAEjG5J,KAAKuxB,eAAextB,KACrB2mB,EAAQ,IAAM1qB,KAAK4xB,SAASpL,EAAK,IAAM,KAAOxmB,KAAK2xB,cAAcnL,EAAK,IAAM,KAAOxmB,KAAK0xB,YAAYlL,EAAK,IACzGxmB,KAAKuxB,eAAextB,GAAK,GAAIiiB,QAAO0E,EAAM9gB,QAAQ,IAAK,IAAK,MAG5D0X,GAAqB,SAAX7b,GAAqBzF,KAAK+xB,mBAAmBhuB,GAAGmJ,KAAKokB,GAC/D,MAAOvtB,EACJ,IAAIud,GAAqB,QAAX7b,GAAoBzF,KAAKwxB,oBAAoBztB,GAAGmJ,KAAKokB,GACtE,MAAOvtB,EACJ,IAAIud,GAAqB,OAAX7b,GAAmBzF,KAAKyxB,kBAAkB1tB,GAAGmJ,KAAKokB,GACnE,MAAOvtB,EACJ,KAAKud,GAAUthB,KAAKuxB,eAAextB,GAAGmJ,KAAKokB,GAC9C,MAAOvtB,IAOnB,QAASiuB,IAAiBjR,GACtB,IAAK/gB,KAAKyiB,UACN,MAAgB,OAAT1B,EAAgB/gB,KAAOsjB,GAElC,IAAI0N,GAAMhxB,KAAK8jB,OAAS9jB,KAAK+iB,GAAGwM,YAAcvvB,KAAK+iB,GAAGkP,QACtD,OAAa,OAATlR,GACAA,EAAQ4P,GAAa5P,EAAO/gB,KAAK+pB,cAC1B/pB,KAAKywB,IAAI1P,EAAQiQ,EAAK,MAEtBA,EAIf,QAASkB,IAAuBnR,GAC5B,IAAK/gB,KAAKyiB,UACN,MAAgB,OAAT1B,EAAgB/gB,KAAOsjB,GAElC,IAAIoM,IAAW1vB,KAAKgxB,MAAQ,EAAIhxB,KAAK+pB,aAAasG,MAAMjB,KAAO,CAC/D,OAAgB,OAATrO,EAAgB2O,EAAU1vB,KAAKywB,IAAI1P,EAAQ2O,EAAS,KAG/D,QAASyC,IAAoBpR,GACzB,IAAK/gB,KAAKyiB,UACN,MAAgB,OAAT1B,EAAgB/gB,KAAOsjB,GAOlC,IAAa,MAATvC,EAAe,CACf,GAAI2O,GAAUmB,GAAgB9P,EAAO/gB,KAAK+pB,aAC1C,OAAO/pB,MAAKgxB,IAAIhxB,KAAKgxB,MAAQ,EAAItB,EAAUA,EAAU,GAErD,MAAO1vB,MAAKgxB,OAAS,EAK7B,QAASoB,IAAevH,GACpB,MAAI7qB,MAAK8xB,qBACA3Q,EAAWnhB,KAAM,mBAClBqyB,GAAqB9xB,KAAKP,MAE1B6qB,EACO7qB,KAAKsyB,qBAELtyB,KAAKuyB,iBAGXpR,EAAWnhB,KAAM,oBAClBA,KAAKuyB,eAAiBC,IAEnBxyB,KAAKsyB,sBAAwBzH,EAChC7qB,KAAKsyB,qBAAuBtyB,KAAKuyB,gBAK7C,QAASE,IAAoB5H,GACzB,MAAI7qB,MAAK8xB,qBACA3Q,EAAWnhB,KAAM,mBAClBqyB,GAAqB9xB,KAAKP,MAE1B6qB,EACO7qB,KAAK0yB,0BAEL1yB,KAAK2yB,sBAGXxR,EAAWnhB,KAAM,yBAClBA,KAAK2yB,oBAAsBC,IAExB5yB,KAAK0yB,2BAA6B7H,EACrC7qB,KAAK0yB,0BAA4B1yB,KAAK2yB,qBAKlD,QAASE,IAAkBhI,GACvB,MAAI7qB,MAAK8xB,qBACA3Q,EAAWnhB,KAAM,mBAClBqyB,GAAqB9xB,KAAKP,MAE1B6qB,EACO7qB,KAAK8yB,wBAEL9yB,KAAK+yB,oBAGX5R,EAAWnhB,KAAM,uBAClBA,KAAK+yB,kBAAoBC,IAEtBhzB,KAAK8yB,yBAA2BjI,EACnC7qB,KAAK8yB,wBAA0B9yB,KAAK+yB,mBAKhD,QAASV,MACL,QAASlE,GAAU3qB,EAAGC,GAClB,MAAOA,GAAEG,OAASJ,EAAEI,OAGxB,GACIG,GAAGyiB,EAAKyM,EAAMC,EAAQC,EADtBC,KAAgBhF,KAAkBC,KAAiBC,IAEvD,KAAKvqB,EAAI,EAAGA,EAAI,EAAGA,IAEfyiB,EAAMpF,GAAW,IAAM,IAAI4P,IAAIjtB,GAC/BkvB,EAAOjzB,KAAK0xB,YAAYlL,EAAK,IAC7B0M,EAASlzB,KAAK2xB,cAAcnL,EAAK,IACjC2M,EAAQnzB,KAAK4xB,SAASpL,EAAK,IAC3B4M,EAAUvuB,KAAKouB,GACf7E,EAAYvpB,KAAKquB,GACjB7E,EAAWxpB,KAAKsuB,GAChB7E,EAAYzpB,KAAKouB,GACjB3E,EAAYzpB,KAAKquB,GACjB5E,EAAYzpB,KAAKsuB,EAQrB,KAJAC,EAAUvK,KAAKsF,GACfC,EAAYvF,KAAKsF,GACjBE,EAAWxF,KAAKsF,GAChBG,EAAYzF,KAAKsF,GACZpqB,EAAI,EAAGA,EAAI,EAAGA,IACfqqB,EAAYrqB,GAAKinB,GAAYoD,EAAYrqB,IACzCsqB,EAAWtqB,GAAKinB,GAAYqD,EAAWtqB,IACvCuqB,EAAYvqB,GAAKinB,GAAYsD,EAAYvqB,GAG7C/D,MAAKuyB,eAAiB,GAAIvM,QAAO,KAAOsI,EAAYvnB,KAAK,KAAO,IAAK,KACrE/G,KAAK2yB,oBAAsB3yB,KAAKuyB,eAChCvyB,KAAK+yB,kBAAoB/yB,KAAKuyB,eAE9BvyB,KAAKsyB,qBAAuB,GAAItM,QAAO,KAAOqI,EAAWtnB,KAAK,KAAO,IAAK,KAC1E/G,KAAK0yB,0BAA4B,GAAI1M,QAAO,KAAOoI,EAAYrnB,KAAK,KAAO,IAAK,KAChF/G,KAAK8yB,wBAA0B,GAAI9M,QAAO,KAAOoN,EAAUrsB,KAAK,KAAO,IAAK,KAKhF,QAASssB,MACL,MAAOrzB,MAAKszB,QAAU,IAAM,GAGhC,QAASC,MACL,MAAOvzB,MAAKszB,SAAW,GAyB3B,QAASlR,IAAUuH,EAAO6J,GACtB9J,EAAeC,EAAO,EAAG,EAAG,WACxB,MAAO3pB,MAAK+pB,aAAa3H,SAASpiB,KAAKszB,QAAStzB,KAAKyzB,UAAWD,KAgBxE,QAASE,IAAe7I,EAAUxJ,GAC9B,MAAOA,GAAOsS,eA2DlB,QAASC,IAAY7S,GAGjB,MAAiD,OAAxCA,EAAQ,IAAIgH,cAAc9M,OAAO,GAI9C,QAAS4Y,IAAgBP,EAAOG,EAASK,GACrC,MAAIR,GAAQ,GACDQ,EAAU,KAAO,KAEjBA,EAAU,KAAO,KA0ChC,QAASC,IAAgBxsB,GACrB,MAAOA,GAAMA,EAAIwgB,cAAcne,QAAQ,IAAK,KAAOrC,EAMvD,QAASysB,IAAa3a,GAGlB,IAFA,GAAWxL,GAAG4D,EAAM4P,EAAQ1a,EAAxB5C,EAAI,EAEDA,EAAIsV,EAAMzV,QAAQ,CAKrB,IAJA+C,EAAQotB,GAAgB1a,EAAMtV,IAAI4C,MAAM,KACxCkH,EAAIlH,EAAM/C,OACV6N,EAAOsiB,GAAgB1a,EAAMtV,EAAI,IACjC0N,EAAOA,EAAOA,EAAK9K,MAAM,KAAO,KACzBkH,EAAI,GAAG,CAEV,GADAwT,EAAS4S,GAAWttB,EAAMgE,MAAM,EAAGkD,GAAG9G,KAAK,MAEvC,MAAOsa,EAEX,IAAI5P,GAAQA,EAAK7N,QAAUiK,GAAK+W,EAAcje,EAAO8K,GAAM,IAAS5D,EAAI,EAEpE,KAEJA,KAEJ9J,IAEJ,MAAO,MAGX,QAASkwB,IAAWhf,GAChB,GAAIif,GAAY,IAEhB,KAAKC,GAAQlf,QAA4B,KAAXpV,GACtBA,GAAUA,EAAOD,QACrB,IACIs0B,EAAYE,GAAaC,MACvB,WAAkC,GAAIprB,GAAI,GAAI5E,OAAM,gCAAiE,MAA7B4E,GAAEqrB,KAAO,mBAA0BrrB,KAG7HsrB,GAAmBL,GACrB,MAAOjrB,IAEb,MAAOkrB,IAAQlf,GAMnB,QAASsf,IAAoBhtB,EAAK2N,GAC9B,GAAIsf,EAeJ,OAdIjtB,KAEIitB,EADAvT,EAAY/L,GACLuf,GAAUltB,GAGVmtB,GAAantB,EAAK2N,MAKzBkf,GAAeI,GAIhBJ,GAAaC,MAGxB,QAASK,IAAczf,EAAMkP,GACzB,GAAe,OAAXA,EAAiB,CACjB,GAAIiC,GAAeuO,EAEnB,IADAxQ,EAAOyQ,KAAO3f,EACO,MAAjBkf,GAAQlf,GACR0Q,EAAgB,uBACR,2OAIRS,EAAe+N,GAAQlf,GAAM6Q,YAC1B,IAA2B,MAAvB3B,EAAO0Q,aAAsB,CACpC,GAAoC,MAAhCV,GAAQhQ,EAAO0Q,cAUf,MAPKC,IAAe3Q,EAAO0Q,gBACvBC,GAAe3Q,EAAO0Q,kBAE1BC,GAAe3Q,EAAO0Q,cAAchwB,MAChCoQ,KAAMA,EACNkP,OAAQA,IAEL,IATPiC,GAAe+N,GAAQhQ,EAAO0Q,cAAc/O,QA0BpD,MAdAqO,IAAQlf,GAAQ,GAAIqR,GAAOH,EAAaC,EAAcjC,IAElD2Q,GAAe7f,IACf6f,GAAe7f,GAAM/N,QAAQ,SAAU6tB,GACnCL,GAAaK,EAAE9f,KAAM8f,EAAE5Q,UAO/BoQ,GAAmBtf,GAGZkf,GAAQlf,GAIf,aADOkf,IAAQlf,GACR,KAIf,QAAS+f,IAAa/f,EAAMkP,GACxB,GAAc,MAAVA,EAAgB,CAChB,GAAI9C,GAAQ+E,EAAeuO,EAEN,OAAjBR,GAAQlf,KACRmR,EAAe+N,GAAQlf,GAAM6Q,SAEjC3B,EAASgC,EAAaC,EAAcjC,GACpC9C,EAAS,GAAIiF,GAAOnC,GACpB9C,EAAOwT,aAAeV,GAAQlf,GAC9Bkf,GAAQlf,GAAQoM,EAGhBkT,GAAmBtf,OAGE,OAAjBkf,GAAQlf,KAC0B,MAA9Bkf,GAAQlf,GAAM4f,aACdV,GAAQlf,GAAQkf,GAAQlf,GAAM4f,aACN,MAAjBV,GAAQlf,UACRkf,IAAQlf,GAI3B,OAAOkf,IAAQlf,GAInB,QAASwf,IAAWltB,GAChB,GAAI8Z,EAMJ,IAJI9Z,GAAOA,EAAIyc,SAAWzc,EAAIyc,QAAQqQ,QAClC9sB,EAAMA,EAAIyc,QAAQqQ,QAGjB9sB,EACD,MAAO6sB,GAGX,KAAKhwB,EAAQmD,GAAM,CAGf,GADA8Z,EAAS4S,GAAW1sB,GAEhB,MAAO8Z,EAEX9Z,IAAOA,GAGX,MAAOysB,IAAazsB,GAGxB,QAAS0tB,MACL,MAAOC,IAAOf,IAGlB,QAASgB,IAAe30B,GACpB,GAAIiQ,GACAjN,EAAIhD,EAAEmrB,EAyBV,OAvBInoB,KAAsC,IAAjC+e,EAAgB/hB,GAAGiQ,WACxBA,EACIjN,EAAE4xB,IAAe,GAAK5xB,EAAE4xB,IAAe,GAAMA,GAC7C5xB,EAAE6xB,IAAe,GAAK7xB,EAAE6xB,IAAezJ,GAAYpoB,EAAE8xB,IAAO9xB,EAAE4xB,KAAUC,GACxE7xB,EAAE+xB,IAAe,GAAK/xB,EAAE+xB,IAAe,IAAmB,KAAZ/xB,EAAE+xB,MAA+B,IAAd/xB,EAAEgyB,KAA+B,IAAdhyB,EAAEiyB,KAAoC,IAAnBjyB,EAAEkyB,KAAuBH,GAChI/xB,EAAEgyB,IAAe,GAAKhyB,EAAEgyB,IAAe,GAAMA,GAC7ChyB,EAAEiyB,IAAe,GAAKjyB,EAAEiyB,IAAe,GAAMA,GAC7CjyB,EAAEkyB,IAAe,GAAKlyB,EAAEkyB,IAAe,IAAMA,IAC5C,EAEDnT,EAAgB/hB,GAAGm1B,qBAAuBllB,EAAW6kB,IAAQ7kB,EAAW4kB,MACxE5kB,EAAW4kB,IAEX9S,EAAgB/hB,GAAGo1B,iBAAgC,IAAdnlB,IACrCA,EAAWolB,IAEXtT,EAAgB/hB,GAAGs1B,mBAAkC,IAAdrlB,IACvCA,EAAWslB,IAGfxT,EAAgB/hB,GAAGiQ,SAAWA,GAG3BjQ,EAyCX,QAASw1B,IAAc7R,GACnB,GAAIpgB,GAAGgX,EAGHkb,EAAWC,EAAYC,EAAYC,EAFnC9O,EAASnD,EAAOvR,GAChB1N,EAAQmxB,GAAiBtzB,KAAKukB,IAAWgP,GAAcvzB,KAAKukB,EAGhE,IAAIpiB,EAAO,CAGP,IAFAqd,EAAgB4B,GAAQjC,KAAM,EAEzBne,EAAI,EAAGgX,EAAIwb,GAAS3yB,OAAQG,EAAIgX,EAAGhX,IACpC,GAAIwyB,GAASxyB,GAAG,GAAGhB,KAAKmC,EAAM,IAAK,CAC/BgxB,EAAaK,GAASxyB,GAAG,GACzBkyB,GAA+B,IAAnBM,GAASxyB,GAAG,EACxB,OAGR,GAAkB,MAAdmyB,EAEA,YADA/R,EAAOzB,UAAW,EAGtB,IAAIxd,EAAM,GAAI,CACV,IAAKnB,EAAI,EAAGgX,EAAIyb,GAAS5yB,OAAQG,EAAIgX,EAAGhX,IACpC,GAAIyyB,GAASzyB,GAAG,GAAGhB,KAAKmC,EAAM,IAAK,CAE/BixB,GAAcjxB,EAAM,IAAM,KAAOsxB,GAASzyB,GAAG,EAC7C,OAGR,GAAkB,MAAdoyB,EAEA,YADAhS,EAAOzB,UAAW,GAI1B,IAAKuT,GAA2B,MAAdE,EAEd,YADAhS,EAAOzB,UAAW,EAGtB,IAAIxd,EAAM,GAAI,CACV,IAAIuxB,GAAQ1zB,KAAKmC,EAAM,IAInB,YADAif,EAAOzB,UAAW,EAFlB0T,GAAW,IAMnBjS,EAAOR,GAAKuS,GAAcC,GAAc,KAAOC,GAAY,IAC3DM,GAA0BvS,OAE1BA,GAAOzB,UAAW,EAQ1B,QAASiU,IAAkBxS,GACvB,GAAImD,GAAQpiB,EAAO0xB,EACfV,EAAYC,EAAYC,EAaxBS,EAAUC,EAZVC,GACAC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,UAERC,EAAW,2BASf,IANAnQ,EAASnD,EAAOvR,GACXhJ,QAAQ,qBAAsB,KAC9BA,QAAQ,WAAY,KACpBA,QAAQ,WAAY,IACzB1E,EAAQwyB,GAAc30B,KAAKukB,GAEhB,CAMP,GALAsP,EAAY1xB,EAAM,GAAK,OAA8B,IAApBA,EAAM,GAAGtB,OAAgB,KAAO,KAAO,GACxEsyB,EAAa,UAAahxB,EAAM,GAAGtB,OAAS,GAAM,QAAU,OAC5DuyB,EAAa,SAAWjxB,EAAM,GAAK,MAAQ,IAGvCA,EAAM,GAAI,CACV,GAAIyyB,GAAa,GAAI90B,MAAKqC,EAAM,IAC5B0yB,GAAa,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,OAAOD,EAAW1F,SAEvE,IAAI/sB,EAAM,GAAGmF,OAAO,EAAE,KAAOutB,EAGzB,MAFArV,GAAgB4B,GAAQ7B,iBAAkB,OAC1C6B,EAAOzB,UAAW,GAK1B,OAAQxd,EAAM,GAAGtB,QACb,IAAK,GACqB,IAAlBkzB,EACAD,EAAW,UAEXC,EAAgBW,EAAS7yB,QAAQM,EAAM,GAAG,GAAG6hB,eAAiB,GAC9D8P,GAAaC,EAAgB,EAAK,KAAO,OACnC,GAAKA,GAAeltB,QAAQ,MAAO,KAAM1E,MAAM,OAAO,GAAK,KAErE,MACJ,KAAK,GACD2xB,EAAWE,EAAU7xB,EAAM,GAC3B,MACJ,SACI2xB,EAAWE,EAAU,QAE7B7xB,EAAM,GAAK2xB,EACX1S,EAAOvR,GAAK1N,EAAM2yB,OAAO,GAAG9wB,KAAK,IACjCqvB,EAAW,MACXjS,EAAOR,GAAKiT,EAAYV,EAAaC,EAAaC,EAClDM,GAA0BvS,GAC1B5B,EAAgB4B,GAAQ9B,SAAU,MAElC8B,GAAOzB,UAAW,EAK1B,QAASoV,IAAiB3T,GACtB,GAAI8G,GAAU8M,GAAgBh1B,KAAKohB,EAAOvR,GAE1C,IAAgB,OAAZqY,EAEA,YADA9G,EAAOpB,GAAK,GAAIlgB,OAAMooB,EAAQ,IAIlC+K,IAAc7R,IACU,IAApBA,EAAOzB,iBACAyB,GAAOzB,SAKlBiU,GAAkBxS,IACM,IAApBA,EAAOzB,iBACAyB,GAAOzB,SAMlB7B,EAAMmX,wBAAwB7T,KAclC,QAAS8T,IAASz0B,EAAGC,EAAGhD,GACpB,MAAS,OAAL+C,EACOA,EAEF,MAALC,EACOA,EAEJhD,EAGX,QAASy3B,IAAiB/T,GAEtB,GAAIgU,GAAW,GAAIt1B,MAAKge,EAAM4F,MAC9B,OAAItC,GAAOiU,SACCD,EAASlJ,iBAAkBkJ,EAASE,cAAeF,EAASnM,eAEhEmM,EAASrJ,cAAeqJ,EAASG,WAAYH,EAASI,WAOlE,QAASC,IAAiBrU,GACtB,GAAIpgB,GAAGwpB,EAAkBkL,EAAaC,EAAzB3X,IAEb,KAAIoD,EAAOpB,GAAX,CA6BA,IAzBA0V,EAAcP,GAAiB/T,GAG3BA,EAAOsH,IAAyB,MAAnBtH,EAAOwH,GAAG0J,KAAqC,MAApBlR,EAAOwH,GAAGyJ,KAClDuD,GAAsBxU,GAID,MAArBA,EAAOyU,aACPF,EAAYT,GAAS9T,EAAOwH,GAAG2J,IAAOmD,EAAYnD,MAE9CnR,EAAOyU,WAAarK,GAAWmK,IAAoC,IAAtBvU,EAAOyU,cACpDrW,EAAgB4B,GAAQwR,oBAAqB,GAGjDpI,EAAOyB,GAAc0J,EAAW,EAAGvU,EAAOyU,YAC1CzU,EAAOwH,GAAGyJ,IAAS7H,EAAK8K,cACxBlU,EAAOwH,GAAG0J,IAAQ9H,EAAKvB,cAQtBjoB,EAAI,EAAGA,EAAI,GAAqB,MAAhBogB,EAAOwH,GAAG5nB,KAAcA,EACzCogB,EAAOwH,GAAG5nB,GAAKgd,EAAMhd,GAAK00B,EAAY10B,EAI1C,MAAOA,EAAI,EAAGA,IACVogB,EAAOwH,GAAG5nB,GAAKgd,EAAMhd,GAAsB,MAAhBogB,EAAOwH,GAAG5nB,GAAqB,IAANA,EAAU,EAAI,EAAKogB,EAAOwH,GAAG5nB,EAI7D,MAApBogB,EAAOwH,GAAG4J,KACgB,IAAtBpR,EAAOwH,GAAG6J,KACY,IAAtBrR,EAAOwH,GAAG8J,KACiB,IAA3BtR,EAAOwH,GAAG+J,MACdvR,EAAO0U,UAAW,EAClB1U,EAAOwH,GAAG4J,IAAQ,GAGtBpR,EAAOpB,IAAMoB,EAAOiU,QAAUpJ,GAAgBN,IAAYpY,MAAM,KAAMyK,GAGnD,MAAfoD,EAAON,MACPM,EAAOpB,GAAG+V,cAAc3U,EAAOpB,GAAGgW,gBAAkB5U,EAAON,MAG3DM,EAAO0U,WACP1U,EAAOwH,GAAG4J,IAAQ,KAI1B,QAASoD,IAAsBxU,GAC3B,GAAInE,GAAGgZ,EAAUvJ,EAAMC,EAASN,EAAKC,EAAK4J,EAAMC,CAGhD,IADAlZ,EAAImE,EAAOsH,GACC,MAARzL,EAAEmZ,IAAqB,MAAPnZ,EAAE7J,GAAoB,MAAP6J,EAAEvB,EACjC2Q,EAAM,EACNC,EAAM,EAMN2J,EAAWf,GAASjY,EAAEmZ,GAAIhV,EAAOwH,GAAG2J,IAAOtF,GAAWoJ,KAAe,EAAG,GAAGvN,MAC3E4D,EAAOwI,GAASjY,EAAE7J,EAAG,KACrBuZ,EAAUuI,GAASjY,EAAEvB,EAAG,IACV,GAAKiR,EAAU,KACzBwJ,GAAkB,OAEnB,CACH9J,EAAMjL,EAAOH,QAAQqM,MAAMjB,IAC3BC,EAAMlL,EAAOH,QAAQqM,MAAMhB,GAE3B,IAAIgK,GAAUrJ,GAAWoJ,KAAehK,EAAKC,EAE7C2J,GAAWf,GAASjY,EAAEsZ,GAAInV,EAAOwH,GAAG2J,IAAO+D,EAAQxN,MAGnD4D,EAAOwI,GAASjY,EAAEA,EAAGqZ,EAAQ5J,MAElB,MAAPzP,EAAE/T,IAEFyjB,EAAU1P,EAAE/T,GACE,GAAKyjB,EAAU,KACzBwJ,GAAkB,GAER,MAAPlZ,EAAE/W,GAETymB,EAAU1P,EAAE/W,EAAImmB,GACZpP,EAAE/W,EAAI,GAAK+W,EAAE/W,EAAI,KACjBiwB,GAAkB,IAItBxJ,EAAUN,EAGdK,EAAO,GAAKA,EAAOS,GAAY8I,EAAU5J,EAAKC,GAC9C9M,EAAgB4B,GAAQyR,gBAAiB,EACf,MAAnBsD,EACP3W,EAAgB4B,GAAQ2R,kBAAmB,GAE3CmD,EAAOzJ,GAAmBwJ,EAAUvJ,EAAMC,EAASN,EAAKC,GACxDlL,EAAOwH,GAAG2J,IAAQ2D,EAAKpN,KACvB1H,EAAOyU,WAAaK,EAAKlJ,WAWjC,QAAS2G,IAA0BvS,GAE/B,GAAIA,EAAOR,KAAO9C,EAAM0Y,SAEpB,WADAvD,IAAc7R,EAGlB,IAAIA,EAAOR,KAAO9C,EAAM2Y,SAEpB,WADA7C,IAAkBxS,EAGtBA,GAAOwH,MACPpJ,EAAgB4B,GAAQzC,OAAQ,CAGhC,IACI3d,GAAG01B,EAAalO,EAAQ5B,EAAO+P,EAD/BpS,EAAS,GAAKnD,EAAOvR,GAErB+mB,EAAerS,EAAO1jB,OACtBg2B,EAAyB,CAI7B,KAFArO,EAASnB,EAAajG,EAAOR,GAAIQ,EAAOH,SAAS9e,MAAMglB,QAElDnmB,EAAI,EAAGA,EAAIwnB,EAAO3nB,OAAQG,IAC3B4lB,EAAQ4B,EAAOxnB,GACf01B,GAAenS,EAAOpiB,MAAM4lB,EAAsBnB,EAAOxF,SAAgB,GAGrEsV,IACAC,EAAUpS,EAAOjd,OAAO,EAAGid,EAAO1iB,QAAQ60B,IACtCC,EAAQ91B,OAAS,GACjB2e,EAAgB4B,GAAQvC,YAAY/c,KAAK60B,GAE7CpS,EAASA,EAAO3c,MAAM2c,EAAO1iB,QAAQ60B,GAAeA,EAAY71B,QAChEg2B,GAA0BH,EAAY71B,QAGtCkmB,GAAqBH,IACjB8P,EACAlX,EAAgB4B,GAAQzC,OAAQ,EAGhCa,EAAgB4B,GAAQxC,aAAa9c,KAAK8kB,GAE9C+B,GAAwB/B,EAAO8P,EAAatV,IAEvCA,EAAOjB,UAAYuW,GACxBlX,EAAgB4B,GAAQxC,aAAa9c,KAAK8kB,EAKlDpH,GAAgB4B,GAAQtC,cAAgB8X,EAAeC,EACnDtS,EAAO1jB,OAAS,GAChB2e,EAAgB4B,GAAQvC,YAAY/c,KAAKyiB,GAIzCnD,EAAOwH,GAAG4J,KAAS,KACiB,IAApChT,EAAgB4B,GAAQhB,SACxBgB,EAAOwH,GAAG4J,IAAQ,IAClBhT,EAAgB4B,GAAQhB,YAAUtf,IAGtC0e,EAAgB4B,GAAQhC,gBAAkBgC,EAAOwH,GAAGhhB,MAAM,GAC1D4X,EAAgB4B,GAAQ/B,SAAW+B,EAAO0V,UAE1C1V,EAAOwH,GAAG4J,IAAQuE,GAAgB3V,EAAOH,QAASG,EAAOwH,GAAG4J,IAAOpR,EAAO0V,WAE1ErB,GAAgBrU,GAChBgR,GAAchR,GAIlB,QAAS2V,IAAiBzY,EAAQ0Y,EAAM3X,GACpC,GAAI4X,EAEJ,OAAgB,OAAZ5X,EAEO2X,EAEgB,MAAvB1Y,EAAO4Y,aACA5Y,EAAO4Y,aAAaF,EAAM3X,GACX,MAAff,EAAO6Y,MAEdF,EAAO3Y,EAAO6Y,KAAK9X,GACf4X,GAAQD,EAAO,KACfA,GAAQ,IAEPC,GAAiB,KAATD,IACTA,EAAO,GAEJA,GAGAA,EAKf,QAASI,IAAyBhW,GAC9B,GAAIiW,GACAC,EAEAC,EACAv2B,EACAw2B,CAEJ,IAAyB,IAArBpW,EAAOR,GAAG/f,OAGV,MAFA2e,GAAgB4B,GAAQnC,eAAgB,OACxCmC,EAAOpB,GAAK,GAAIlgB,MAAKygB,KAIzB,KAAKvf,EAAI,EAAGA,EAAIogB,EAAOR,GAAG/f,OAAQG,IAC9Bw2B,EAAe,EACfH,EAAa7W,KAAeY,GACN,MAAlBA,EAAOiU,UACPgC,EAAWhC,QAAUjU,EAAOiU,SAEhCgC,EAAWzW,GAAKQ,EAAOR,GAAG5f,GAC1B2yB,GAA0B0D,GAErB3X,EAAQ2X,KAKbG,GAAgBhY,EAAgB6X,GAAYvY,cAG5C0Y,GAAkE,GAAlDhY,EAAgB6X,GAAYzY,aAAa/d,OAEzD2e,EAAgB6X,GAAYI,MAAQD,GAEjB,MAAfD,GAAuBC,EAAeD,KACtCA,EAAcC,EACdF,EAAaD,GAIrBx5B,GAAOujB,EAAQkW,GAAcD,GAGjC,QAASK,IAAiBtW,GACtB,IAAIA,EAAOpB,GAAX,CAIA,GAAIhf,GAAIokB,EAAqBhE,EAAOvR,GACpCuR,GAAOwH,GAAK7gB,GAAK/G,EAAE8nB,KAAM9nB,EAAE+nB,MAAO/nB,EAAEitB,KAAOjtB,EAAEwpB,KAAMxpB,EAAEg2B,KAAMh2B,EAAE22B,OAAQ32B,EAAE42B,OAAQ52B,EAAE62B,aAAc,SAAU95B,GACrG,MAAOA,IAAOkJ,SAASlJ,EAAK,MAGhC03B,GAAgBrU,IAGpB,QAAS0W,IAAkB1W,GACvB,GAAIjD,GAAM,GAAIgD,GAAOiR,GAAc2F,GAAc3W,IAOjD,OANIjD,GAAI2X,WAEJ3X,EAAIuP,IAAI,EAAG,KACXvP,EAAI2X,aAAWh1B,IAGZqd,EAGX,QAAS4Z,IAAe3W,GACpB,GAAIpD,GAAQoD,EAAOvR,GACfnN,EAAS0e,EAAOR,EAIpB,OAFAQ,GAAOH,QAAUG,EAAOH,SAAWyQ,GAAUtQ,EAAOP,IAEtC,OAAV7C,OAA8Bld,KAAX4B,GAAkC,KAAVsb,EACpCsC,GAAevB,WAAW,KAGhB,gBAAVf,KACPoD,EAAOvR,GAAKmO,EAAQoD,EAAOH,QAAQ+W,SAASha,IAG5C1b,EAAS0b,GACF,GAAImD,GAAOiR,GAAcpU,KACzBne,EAAOme,GACdoD,EAAOpB,GAAKhC,EACL3c,EAAQqB,GACf00B,GAAyBhW,GAClB1e,EACPixB,GAA0BvS,GAE1B6W,GAAgB7W,GAGf1B,EAAQ0B,KACTA,EAAOpB,GAAK,MAGToB,IAGX,QAAS6W,IAAgB7W,GACrB,GAAIpD,GAAQoD,EAAOvR,EACfqO,GAAYF,GACZoD,EAAOpB,GAAK,GAAIlgB,MAAKge,EAAM4F,OACpB7jB,EAAOme,GACdoD,EAAOpB,GAAK,GAAIlgB,MAAKke,EAAM3b,WACH,gBAAV2b,GACd+W,GAAiB3T,GACV/f,EAAQ2c,IACfoD,EAAOwH,GAAK7gB,EAAIiW,EAAMpW,MAAM,GAAI,SAAU7J,GACtC,MAAOkJ,UAASlJ,EAAK,MAEzB03B,GAAgBrU,IACT3M,EAASuJ,GAChB0Z,GAAiBtW,GACVxiB,EAASof,GAEhBoD,EAAOpB,GAAK,GAAIlgB,MAAKke,GAErBF,EAAMmX,wBAAwB7T,GAItC,QAAS5C,IAAkBR,EAAOtb,EAAQ4b,EAAQC,EAAQ2Z,GACtD,GAAIx6B,KAoBJ,QAlBe,IAAX4gB,IAA8B,IAAXA,IACnBC,EAASD,EACTA,MAASxd,KAGR2T,EAASuJ,IAAUC,EAAcD,IAC7B3c,EAAQ2c,IAA2B,IAAjBA,EAAMnd,UAC7Bmd,MAAQld,IAIZpD,EAAEijB,kBAAmB,EACrBjjB,EAAE23B,QAAU33B,EAAEqjB,OAASmX,EACvBx6B,EAAEmjB,GAAKvC,EACP5gB,EAAEmS,GAAKmO,EACPtgB,EAAEkjB,GAAKle,EACPhF,EAAEyiB,QAAU5B,EAELuZ,GAAiBp6B,GAG5B,QAAS24B,IAAarY,EAAOtb,EAAQ4b,EAAQC,GACzC,MAAOC,IAAiBR,EAAOtb,EAAQ4b,EAAQC,GAAQ,GAgC3D,QAAS4Z,IAAOzzB,EAAI0zB,GAChB,GAAIja,GAAKnd,CAIT,IAHuB,IAAnBo3B,EAAQv3B,QAAgBQ,EAAQ+2B,EAAQ,MACxCA,EAAUA,EAAQ,KAEjBA,EAAQv3B,OACT,MAAOw1B,KAGX,KADAlY,EAAMia,EAAQ,GACTp3B,EAAI,EAAGA,EAAIo3B,EAAQv3B,SAAUG,EACzBo3B,EAAQp3B,GAAG0e,YAAa0Y,EAAQp3B,GAAG0D,GAAIyZ,KACxCA,EAAMia,EAAQp3B,GAGtB,OAAOmd,GAIX,QAAS9e,MAGL,MAAO84B,IAAO,cAFAvwB,MAAMpK,KAAKoD,UAAW,IAKxC,QAAStB,MAGL,MAAO64B,IAAO,aAFAvwB,MAAMpK,KAAKoD,UAAW,IAWxC,QAASy3B,IAAgB56B,GACrB,IAAK,GAAI+G,KAAO/G,GACZ,IAAiC,IAA3B66B,GAASz2B,QAAQ2C,IAA0B,MAAV/G,EAAE+G,IAAiBvE,MAAMxC,EAAE+G,IAC9D,OAAO,CAKf,KAAK,GADD+zB,IAAiB,EACZv3B,EAAI,EAAGA,EAAIs3B,GAASz3B,SAAUG,EACnC,GAAIvD,EAAE66B,GAASt3B,IAAK,CAChB,GAAIu3B,EACA,OAAO,CAEPC,YAAW/6B,EAAE66B,GAASt3B,OAASygB,EAAMhkB,EAAE66B,GAASt3B,OAChDu3B,GAAiB,GAK7B,OAAO,EAGX,QAASE,MACL,MAAOx7B,MAAK0iB,SAGhB,QAAS+Y,MACL,MAAOC,IAAepY,KAG1B,QAASqY,IAAUC,GACf,GAAItT,GAAkBH,EAAqByT,GACvCC,EAAQvT,EAAgBuD,MAAQ,EAChCiQ,EAAWxT,EAAgByT,SAAW,EACtC/O,EAAS1E,EAAgBwD,OAAS,EAClCkQ,EAAQ1T,EAAgBmH,MAAQ,EAChCwM,EAAO3T,EAAgB0I,KAAO,EAC9BsC,EAAQhL,EAAgByR,MAAQ,EAChCtG,EAAUnL,EAAgBoS,QAAU,EACpCwB,EAAU5T,EAAgBqS,QAAU,EACpCwB,EAAe7T,EAAgBsS,aAAe,CAElD56B,MAAK0iB,SAAW0Y,GAAgB9S,GAGhCtoB,KAAKo8B,eAAiBD,EACR,IAAVD,EACU,IAAVzI,EACQ,IAARH,EAAe,GAAK,GAGxBtzB,KAAKq8B,OAASJ,EACF,EAARD,EAIJh8B,KAAKksB,SAAWc,EACD,EAAX8O,EACQ,GAARD,EAEJ77B,KAAKs8B,SAELt8B,KAAKgkB,QAAUyQ,KAEfz0B,KAAKu8B,UAGT,QAASC,IAAY17B,GACjB,MAAOA,aAAe66B,IAG1B,QAASc,IAAUlY,GACf,MAAIA,GAAS,GACyB,EAA3B9hB,KAAKi6B,OAAO,EAAInY,GAEhB9hB,KAAKi6B,MAAMnY,GAM1B,QAASoY,IAAQhT,EAAOiT,GACpBlT,EAAeC,EAAO,EAAG,EAAG,WACxB,GAAIgT,GAAS38B,KAAK68B,YACdC,EAAO,GAKX,OAJIH,GAAS,IACTA,GAAUA,EACVG,EAAO,KAEJA,EAAO1T,KAAYuT,EAAS,IAAK,GAAKC,EAAYxT,IAAW,EAAW,GAAI,KAuB3F,QAAS2T,IAAiBC,EAAS1V,GAC/B,GAAI2V,IAAW3V,GAAU,IAAIpiB,MAAM83B,EAEnC,IAAgB,OAAZC,EACA,MAAO,KAGX,IAAIC,GAAUD,EAAQA,EAAQr5B,OAAS,OACnC2I,GAAW2wB,EAAQ,IAAIh4B,MAAMi4B,MAAiB,IAAK,EAAG,GACtD1J,EAAuB,GAAXlnB,EAAM,GAAWiY,EAAMjY,EAAM,GAE7C,OAAmB,KAAZknB,EACL,EACa,MAAblnB,EAAM,GAAaknB,GAAWA,EAIpC,QAAS2J,IAAgBrc,EAAOsc,GAC5B,GAAInc,GAAKwG,CACT,OAAI2V,GAAMvZ,QACN5C,EAAMmc,EAAMC,QACZ5V,GAAQriB,EAAS0b,IAAUne,EAAOme,GAASA,EAAM3b,UAAYg0B,GAAYrY,GAAO3b,WAAa8b,EAAI9b,UAEjG8b,EAAI6B,GAAGwa,QAAQrc,EAAI6B,GAAG3d,UAAYsiB,GAClC7G,EAAMwD,aAAanD,GAAK,GACjBA,GAEAkY,GAAYrY,GAAOyc,QAIlC,QAASC,IAAej9B,GAGpB,MAAoD,KAA5CiC,KAAKi6B,MAAMl8B,EAAEuiB,GAAG2a,oBAAsB,IAqBlD,QAASC,IAAc5c,EAAO6c,EAAeC,GACzC,GACIC,GADAnB,EAAS38B,KAAK+jB,SAAW,CAE7B,KAAK/jB,KAAKyiB,UACN,MAAgB,OAAT1B,EAAgB/gB,KAAOsjB,GAElC,IAAa,MAATvC,EAAe,CACf,GAAqB,gBAAVA,IAEP,GAAc,QADdA,EAAQgc,GAAiBgB,GAAkBhd,IAEvC,MAAO/gB,UAEJyC,MAAKwiB,IAAIlE,GAAS,KAAO8c,IAChC9c,GAAgB,GAmBpB,QAjBK/gB,KAAK8jB,QAAU8Z,IAChBE,EAAcL,GAAcz9B,OAEhCA,KAAK+jB,QAAUhD,EACf/gB,KAAK8jB,QAAS,EACK,MAAfga,GACA99B,KAAKywB,IAAIqN,EAAa,KAEtBnB,IAAW5b,KACN6c,GAAiB59B,KAAKg+B,kBACvBC,GAAYj+B,KAAM07B,GAAe3a,EAAQ4b,EAAQ,KAAM,GAAG,GAClD38B,KAAKg+B,oBACbh+B,KAAKg+B,mBAAoB,EACzBnd,EAAMwD,aAAarkB,MAAM,GACzBA,KAAKg+B,kBAAoB,OAG1Bh+B,KAEP,MAAOA,MAAK8jB,OAAS6Y,EAASc,GAAcz9B,MAIpD,QAASk+B,IAAYnd,EAAO6c,GACxB,MAAa,OAAT7c,GACqB,gBAAVA,KACPA,GAASA,GAGb/gB,KAAK68B,UAAU9b,EAAO6c,GAEf59B,OAECA,KAAK68B,YAIrB,QAASsB,IAAgBP,GACrB,MAAO59B,MAAK68B,UAAU,EAAGe,GAG7B,QAASQ,IAAkBR,GASvB,MARI59B,MAAK8jB,SACL9jB,KAAK68B,UAAU,EAAGe,GAClB59B,KAAK8jB,QAAS,EAEV8Z,GACA59B,KAAKq+B,SAASZ,GAAcz9B,MAAO,MAGpCA,KAGX,QAASs+B,MACL,GAAiB,MAAbt+B,KAAK6jB,KACL7jB,KAAK68B,UAAU78B,KAAK6jB,MAAM,GAAO,OAC9B,IAAuB,gBAAZ7jB,MAAK4S,GAAiB,CACpC,GAAI2rB,GAAQxB,GAAiByB,GAAax+B,KAAK4S,GAClC,OAAT2rB,EACAv+B,KAAK68B,UAAU0B,GAGfv+B,KAAK68B,UAAU,GAAG,GAG1B,MAAO78B,MAGX,QAASy+B,IAAsB1d,GAC3B,QAAK/gB,KAAKyiB,YAGV1B,EAAQA,EAAQqY,GAAYrY,GAAO8b,YAAc,GAEzC78B,KAAK68B,YAAc9b,GAAS,IAAO,GAG/C,QAAS2d,MACL,MACI1+B,MAAK68B,YAAc78B,KAAKs9B,QAAQxR,MAAM,GAAG+Q,aACzC78B,KAAK68B,YAAc78B,KAAKs9B,QAAQxR,MAAM,GAAG+Q,YAIjD,QAAS8B,MACL,IAAK1d,EAAYjhB,KAAK4+B,eAClB,MAAO5+B,MAAK4+B,aAGhB,IAAIn+B,KAKJ,IAHA8iB,EAAW9iB,EAAGT,MACdS,EAAIq6B,GAAcr6B,GAEdA,EAAEkrB,GAAI,CACN,GAAI3nB,GAAQvD,EAAEqjB,OAAS1C,EAAU3gB,EAAEkrB,IAAMyN,GAAY34B,EAAEkrB,GACvD3rB,MAAK4+B,cAAgB5+B,KAAKyiB,WACtBmC,EAAcnkB,EAAEkrB,GAAI3nB,EAAMoD,WAAa,MAE3CpH,MAAK4+B,eAAgB,CAGzB,OAAO5+B,MAAK4+B,cAGhB,QAASC,MACL,QAAO7+B,KAAKyiB,YAAaziB,KAAK8jB,OAGlC,QAASgb,MACL,QAAO9+B,KAAKyiB,WAAYziB,KAAK8jB,OAGjC,QAASib,MACL,QAAO/+B,KAAKyiB,YAAYziB,KAAK8jB,QAA2B,IAAjB9jB,KAAK+jB,SAWhD,QAAS2X,IAAgB3a,EAAOxZ,GAC5B,GAGIu1B,GACAkC,EACAC,EALArD,EAAW7a,EAEX7b,EAAQ,IAuDZ,OAlDIs3B,IAAWzb,GACX6a,GACI/M,GAAK9N,EAAMqb,cACXnwB,EAAK8U,EAAMsb,MACXzN,EAAK7N,EAAMmL,SAERvqB,EAASof,IAChB6a,KACIr0B,EACAq0B,EAASr0B,GAAOwZ,EAEhB6a,EAASO,aAAepb,IAElB7b,EAAQg6B,GAAYn8B,KAAKge,KACnC+b,EAAqB,MAAb53B,EAAM,IAAe,EAAI,EACjC02B,GACIjN,EAAK,EACL1iB,EAAKuY,EAAMtf,EAAMmwB,KAAiCyH,EAClD3xB,EAAKqZ,EAAMtf,EAAMqwB,KAAiCuH,EAClDt8B,EAAKgkB,EAAMtf,EAAMswB,KAAiCsH,EAClD1xB,EAAKoZ,EAAMtf,EAAMuwB,KAAiCqH,EAClDjO,GAAKrK,EAAMiY,GAA8B,IAArBv3B,EAAMwwB,MAAwBoH,KAE5C53B,EAAQi6B,GAASp8B,KAAKge,KAChC+b,EAAqB,MAAb53B,EAAM,IAAe,EAAI,EACjC02B,GACIjN,EAAIyQ,GAASl6B,EAAM,GAAI43B,GACvBlO,EAAIwQ,GAASl6B,EAAM,GAAI43B,GACvB9c,EAAIof,GAASl6B,EAAM,GAAI43B,GACvB7wB,EAAImzB,GAASl6B,EAAM,GAAI43B,GACvB3xB,EAAIi0B,GAASl6B,EAAM,GAAI43B,GACvBt8B,EAAI4+B,GAASl6B,EAAM,GAAI43B,GACvB1xB,EAAIg0B,GAASl6B,EAAM,GAAI43B,KAER,MAAZlB,EACPA,KAC2B,gBAAbA,KAA0B,QAAUA,IAAY,MAAQA,MACtEqD,EAAUI,GAAkBjG,GAAYwC,EAASnY,MAAO2V,GAAYwC,EAASpY,KAE7EoY,KACAA,EAAS/M,GAAKoQ,EAAQ9C,aACtBP,EAAShN,EAAIqQ,EAAQjS,QAGzBgS,EAAM,GAAIrD,IAASC,GAEfY,GAAWzb,IAAUI,EAAWJ,EAAO,aACvCie,EAAIhb,QAAUjD,EAAMiD,SAGjBgb,EAMX,QAASI,IAAUE,EAAKxC,GAIpB,GAAI5b,GAAMoe,GAAO/D,WAAW+D,EAAI11B,QAAQ,IAAK,KAE7C,QAAQ5G,MAAMke,GAAO,EAAIA,GAAO4b,EAGpC,QAASyC,IAA0BC,EAAMx7B,GACrC,GAAIkd,IAAOib,aAAc,EAAGnP,OAAQ,EAUpC,OARA9L,GAAI8L,OAAShpB,EAAM8nB,QAAU0T,EAAK1T,QACC,IAA9B9nB,EAAM6nB,OAAS2T,EAAK3T,QACrB2T,EAAKlC,QAAQ7M,IAAIvP,EAAI8L,OAAQ,KAAKyS,QAAQz7B,MACxCkd,EAAI8L,OAGV9L,EAAIib,cAAgBn4B,GAAUw7B,EAAKlC,QAAQ7M,IAAIvP,EAAI8L,OAAQ,KAEpD9L,EAGX,QAASme,IAAkBG,EAAMx7B,GAC7B,GAAIkd,EACJ,OAAMse,GAAK/c,WAAaze,EAAMye,WAI9Bze,EAAQo5B,GAAgBp5B,EAAOw7B,GAC3BA,EAAKE,SAAS17B,GACdkd,EAAMqe,GAA0BC,EAAMx7B,IAEtCkd,EAAMqe,GAA0Bv7B,EAAOw7B,GACvCte,EAAIib,cAAgBjb,EAAIib,aACxBjb,EAAI8L,QAAU9L,EAAI8L,QAGf9L,IAZKib,aAAc,EAAGnP,OAAQ,GAgBzC,QAAS2S,IAAYC,EAAW3qB,GAC5B,MAAO,UAAU0C,EAAKkoB,GAClB,GAAIC,GAAKC,CAWT,OATe,QAAXF,GAAoB78B,OAAO68B,KAC3Bla,EAAgB1Q,EAAM,YAAcA,EAAQ,uDAAyDA,EAAO,kGAE5G8qB,EAAMpoB,EAAKA,EAAMkoB,EAAQA,EAASE,GAGtCpoB,EAAqB,gBAARA,IAAoBA,EAAMA,EACvCmoB,EAAMpE,GAAe/jB,EAAKkoB,GAC1B5B,GAAYj+B,KAAM8/B,EAAKF,GAChB5/B,MAIf,QAASi+B,IAAazX,EAAKoV,EAAUoE,EAAU3b,GAC3C,GAAI8X,GAAeP,EAASQ,cACxBH,EAAOQ,GAASb,EAASS,OACzBrP,EAASyP,GAASb,EAAS1P,QAE1B1F,GAAI/D,YAKT4B,EAA+B,MAAhBA,GAA8BA,EAEzC8X,GACA3V,EAAIzD,GAAGwa,QAAQ/W,EAAIzD,GAAG3d,UAAY+2B,EAAe6D,GAEjD/D,GACAjT,EAAMxC,EAAK,OAAQ/O,EAAI+O,EAAK,QAAUyV,EAAO+D,GAE7ChT,GACAI,GAAS5G,EAAK/O,EAAI+O,EAAK,SAAWwG,EAASgT,GAE3C3b,GACAxD,EAAMwD,aAAamC,EAAKyV,GAAQjP,IAOxC,QAASiT,IAAkBC,EAAUzZ,GACjC,GAAIiB,GAAOwY,EAASxY,KAAKjB,EAAK,QAAQ,EACtC,OAAOiB,IAAQ,EAAI,WACXA,GAAQ,EAAI,WACZA,EAAO,EAAI,UACXA,EAAO,EAAI,UACXA,EAAO,EAAI,UACXA,EAAO,EAAI,WAAa,WAGpC,QAASyY,IAAYC,EAAMC,GAGvB,GAAI5Z,GAAM2Z,GAAQhH,KACdkH,EAAMlD,GAAgB3W,EAAKzmB,MAAMugC,QAAQ,OACzC96B,EAASob,EAAM2f,eAAexgC,KAAMsgC,IAAQ,WAE5C5Z,EAAS2Z,IAAYxa,EAAWwa,EAAQ56B,IAAW46B,EAAQ56B,GAAQlF,KAAKP,KAAMymB,GAAO4Z,EAAQ56B,GAEjG,OAAOzF,MAAKyF,OAAOihB,GAAU1mB,KAAK+pB,aAAaxD,SAAS9gB,EAAQzF,KAAMo5B,GAAY3S,KAGtF,QAAS6W,MACL,MAAO,IAAIpZ,GAAOlkB,MAGtB,QAASy/B,IAAS1e,EAAOmH,GACrB,GAAIuY,GAAap7B,EAAS0b,GAASA,EAAQqY,GAAYrY,EACvD,UAAM/gB,KAAKyiB,YAAage,EAAWhe,aAGnCyF,EAAQD,EAAgBhH,EAAYiH,GAAiB,cAARA,GAC/B,gBAAVA,EACOloB,KAAKoF,UAAYq7B,EAAWr7B,UAE5Bq7B,EAAWr7B,UAAYpF,KAAKs9B,QAAQiD,QAAQrY,GAAO9iB,WAIlE,QAASs6B,IAAU3e,EAAOmH,GACtB,GAAIuY,GAAap7B,EAAS0b,GAASA,EAAQqY,GAAYrY,EACvD,UAAM/gB,KAAKyiB,YAAage,EAAWhe,aAGnCyF,EAAQD,EAAgBhH,EAAYiH,GAAiB,cAARA,GAC/B,gBAAVA,EACOloB,KAAKoF,UAAYq7B,EAAWr7B,UAE5BpF,KAAKs9B,QAAQoD,MAAMxY,GAAO9iB,UAAYq7B,EAAWr7B,WAIhE,QAASu7B,IAAWld,EAAMD,EAAI0E,EAAO0Y,GAEjC,MADAA,GAAcA,GAAe,MACF,MAAnBA,EAAY,GAAa5gC,KAAKy/B,QAAQhc,EAAMyE,IAAUloB,KAAK0/B,SAASjc,EAAMyE,MAC1D,MAAnB0Y,EAAY,GAAa5gC,KAAK0/B,SAASlc,EAAI0E,IAAUloB,KAAKy/B,QAAQjc,EAAI0E,IAG/E,QAAS2Y,IAAQ9f,EAAOmH,GACpB,GACI4Y,GADAL,EAAap7B,EAAS0b,GAASA,EAAQqY,GAAYrY,EAEvD,UAAM/gB,KAAKyiB,YAAage,EAAWhe,aAGnCyF,EAAQD,EAAeC,GAAS,eAClB,gBAAVA,EACOloB,KAAKoF,YAAcq7B,EAAWr7B,WAErC07B,EAAUL,EAAWr7B,UACdpF,KAAKs9B,QAAQiD,QAAQrY,GAAO9iB,WAAa07B,GAAWA,GAAW9gC,KAAKs9B,QAAQoD,MAAMxY,GAAO9iB,YAIxG,QAAS27B,IAAehgB,EAAOmH,GAC3B,MAAOloB,MAAK6gC,OAAO9f,EAAOmH,IAAUloB,KAAKy/B,QAAQ1e,EAAMmH,GAG3D,QAAS8Y,IAAgBjgB,EAAOmH,GAC5B,MAAOloB,MAAK6gC,OAAO9f,EAAOmH,IAAUloB,KAAK0/B,SAAS3e,EAAMmH,GAG5D,QAASR,IAAM3G,EAAOmH,EAAO+Y,GACzB,GAAIjqB,GACAkqB,EACAC,EAAOza,CAEX,OAAK1mB,MAAKyiB,WAIVzL,EAAOomB,GAAgBrc,EAAO/gB,MAEzBgX,EAAKyL,WAIVye,EAAoD,KAAvClqB,EAAK6lB,YAAc78B,KAAK68B,aAErC3U,EAAQD,EAAeC,GAET,SAAVA,GAA8B,UAAVA,GAA+B,YAAVA,GACzCxB,EAAS0a,GAAUphC,KAAMgX,GACX,YAAVkR,EACAxB,GAAkB,EACD,SAAVwB,IACPxB,GAAkB,MAGtBya,EAAQnhC,KAAOgX,EACf0P,EAAmB,WAAVwB,EAAqBiZ,EAAQ,IACxB,WAAVjZ,EAAqBiZ,EAAQ,IACnB,SAAVjZ,EAAmBiZ,EAAQ,KACjB,QAAVjZ,GAAmBiZ,EAAQD,GAAa,MAC9B,SAAVhZ,GAAoBiZ,EAAQD,GAAa,OACzCC,GAEDF,EAAUva,EAASpC,EAASoC,IAvBxBpD,KANAA,IAgCf,QAAS8d,IAAW59B,EAAGC,GAEnB,GAGI49B,GAASC,EAHTC,EAA0C,IAAvB99B,EAAEooB,OAASroB,EAAEqoB,SAAiBpoB,EAAEqoB,QAAUtoB,EAAEsoB,SAE/D0V,EAASh+B,EAAE85B,QAAQ7M,IAAI8Q,EAAgB,SAc3C,OAXI99B,GAAI+9B,EAAS,GACbH,EAAU79B,EAAE85B,QAAQ7M,IAAI8Q,EAAiB,EAAG,UAE5CD,GAAU79B,EAAI+9B,IAAWA,EAASH,KAElCA,EAAU79B,EAAE85B,QAAQ7M,IAAI8Q,EAAiB,EAAG,UAE5CD,GAAU79B,EAAI+9B,IAAWH,EAAUG,MAI9BD,EAAiBD,IAAW,EAMzC,QAAS52B,MACL,MAAO1K,MAAKs9B,QAAQjc,OAAO,MAAM5b,OAAO,oCAG5C,QAASD,MACL,IAAKxF,KAAKyiB,UACN,MAAO,KAEX,IAAIjiB,GAAIR,KAAKs9B,QAAQ9b,KACrB,OAAIhhB,GAAEqrB,OAAS,GAAKrrB,EAAEqrB,OAAS,KACpB1B,EAAa3pB,EAAG,kCAEvBqlB,EAAWhjB,KAAKwP,UAAU7M,aAEnBxF,KAAKsF,SAASE,cAElB2kB,EAAa3pB,EAAG,gCAS3B,QAASihC,MACL,IAAKzhC,KAAKyiB,UACN,MAAO,qBAAuBziB,KAAK4S,GAAK,MAE5C,IAAIiX,GAAO,SACP6X,EAAO,EACN1hC,MAAK6+B,YACNhV,EAA4B,IAArB7pB,KAAK68B,YAAoB,aAAe,mBAC/C6E,EAAO,IAEX,IAAIC,GAAS,IAAM9X,EAAO,MACtBgC,EAAQ,GAAK7rB,KAAK6rB,QAAU7rB,KAAK6rB,QAAU,KAAQ,OAAS,SAE5D+V,EAASF,EAAO,MAEpB,OAAO1hC,MAAKyF,OAAOk8B,EAAS9V,EAHb,wBAG+B+V,GAGlD,QAASn8B,IAAQo8B,GACRA,IACDA,EAAc7hC,KAAK++B,QAAUle,EAAMihB,iBAAmBjhB,EAAMkhB,cAEhE,IAAIrb,GAASyD,EAAanqB,KAAM6hC,EAChC,OAAO7hC,MAAK+pB,aAAaiY,WAAWtb,GAGxC,QAASjD,IAAM2c,EAAM/Y,GACjB,MAAIrnB,MAAKyiB,YACCpd,EAAS+6B,IAASA,EAAK3d,WACxB2W,GAAYgH,GAAM3d,WAChBiZ,IAAgBlY,GAAIxjB,KAAMyjB,KAAM2c,IAAO/e,OAAOrhB,KAAKqhB,UAAU4gB,UAAU5a,GAEvErnB,KAAK+pB,aAAa/C,cAIjC,QAASkb,IAAS7a,GACd,MAAOrnB,MAAKyjB,KAAK2V,KAAe/R,GAGpC,QAAS7D,IAAI4c,EAAM/Y,GACf,MAAIrnB,MAAKyiB,YACCpd,EAAS+6B,IAASA,EAAK3d,WACxB2W,GAAYgH,GAAM3d,WAChBiZ,IAAgBjY,KAAMzjB,KAAMwjB,GAAI4c,IAAO/e,OAAOrhB,KAAKqhB,UAAU4gB,UAAU5a,GAEvErnB,KAAK+pB,aAAa/C,cAIjC,QAASmb,IAAO9a,GACZ,MAAOrnB,MAAKwjB,GAAG4V,KAAe/R,GAMlC,QAAShG,IAAQ9Z,GACb,GAAI66B,EAEJ,YAAYv+B,KAAR0D,EACOvH,KAAKgkB,QAAQqQ,OAEpB+N,EAAgB3N,GAAUltB,GACL,MAAjB66B,IACApiC,KAAKgkB,QAAUoe,GAEZpiC,MAef,QAAS+pB,MACL,MAAO/pB,MAAKgkB,QAGhB,QAASuc,IAASrY,GAId,OAHAA,EAAQD,EAAeC,IAInB,IAAK,OACDloB,KAAK8rB,MAAM,EAEf,KAAK,UACL,IAAK,QACD9rB,KAAKutB,KAAK,EAEd,KAAK,OACL,IAAK,UACL,IAAK,MACL,IAAK,OACDvtB,KAAKszB,MAAM,EAEf,KAAK,OACDtzB,KAAKyzB,QAAQ,EAEjB,KAAK,SACDzzB,KAAKk8B,QAAQ,EAEjB,KAAK,SACDl8B,KAAKm8B,aAAa,GAgB1B,MAZc,SAAVjU,GACAloB,KAAK0vB,QAAQ,GAEH,YAAVxH,GACAloB,KAAKqiC,WAAW,GAIN,YAAVna,GACAloB,KAAK8rB,MAAqC,EAA/BrpB,KAAKqK,MAAM9M,KAAK8rB,QAAU,IAGlC9rB,KAGX,QAAS0gC,IAAOxY,GAEZ,WAAcrkB,MADdqkB,EAAQD,EAAeC,KACc,gBAAVA,EAChBloB,MAIG,SAAVkoB,IACAA,EAAQ,OAGLloB,KAAKugC,QAAQrY,GAAOuI,IAAI,EAAc,YAAVvI,EAAsB,OAASA,GAAQmW,SAAS,EAAG,OAG1F,QAASj5B,MACL,MAAOpF,MAAK+iB,GAAG3d,UAAmC,KAArBpF,KAAK+jB,SAAW,GAGjD,QAASue,MACL,MAAO7/B,MAAKqK,MAAM9M,KAAKoF,UAAY,KAGvC,QAASE,MACL,MAAO,IAAIzC,MAAK7C,KAAKoF,WAGzB,QAASgC,MACL,GAAI5G,GAAIR,IACR,QAAQQ,EAAEqrB,OAAQrrB,EAAEsrB,QAAStrB,EAAE+sB,OAAQ/sB,EAAEu5B,OAAQv5B,EAAEk6B,SAAUl6B,EAAEm6B,SAAUn6B,EAAEo6B,eAG/E,QAASngB,MACL,GAAIja,GAAIR,IACR,QACI67B,MAAOr7B,EAAEqrB,OACTmB,OAAQxsB,EAAEsrB,QACVyB,KAAM/sB,EAAE+sB,OACR+F,MAAO9yB,EAAE8yB,QACTG,QAASjzB,EAAEizB,UACXyI,QAAS17B,EAAE07B,UACXC,aAAc37B,EAAE27B,gBAIxB,QAASoG,MAEL,MAAOviC,MAAKyiB,UAAYziB,KAAKwF,cAAgB,KAGjD,QAASg9B,MACL,MAAO/f,GAAQziB,MAGnB,QAASyiC,MACL,MAAO7hC,MAAW2hB,EAAgBviB,OAGtC,QAAS0iC,MACL,MAAOngB,GAAgBviB,MAAMyQ,SAGjC,QAASkyB,MACL,OACI5hB,MAAO/gB,KAAK4S,GACZnN,OAAQzF,KAAK2jB,GACbtC,OAAQrhB,KAAKgkB,QACbiX,MAAOj7B,KAAK8jB,OACZxC,OAAQthB,KAAKkjB,SAcrB,QAAS0f,IAAwBjZ,EAAOkZ,GACpCnZ,EAAe,GAAIC,EAAOA,EAAM/lB,QAAS,EAAGi/B,GAwChD,QAASC,IAAgB/hB,GACrB,MAAOgiB,IAAqBxiC,KAAKP,KACzB+gB,EACA/gB,KAAKyvB,OACLzvB,KAAK0vB,UACL1vB,KAAK+pB,aAAasG,MAAMjB,IACxBpvB,KAAK+pB,aAAasG,MAAMhB,KAGpC,QAAS2T,IAAmBjiB,GACxB,MAAOgiB,IAAqBxiC,KAAKP,KACzB+gB,EAAO/gB,KAAKijC,UAAWjjC,KAAKqiC,aAAc,EAAG,GAGzD,QAASa,MACL,MAAOhT,IAAYlwB,KAAK6rB,OAAQ,EAAG,GAGvC,QAASsX,MACL,GAAIC,GAAWpjC,KAAK+pB,aAAasG,KACjC,OAAOH,IAAYlwB,KAAK6rB,OAAQuX,EAAShU,IAAKgU,EAAS/T,KAG3D,QAAS0T,IAAqBhiB,EAAO0O,EAAMC,EAASN,EAAKC,GACrD,GAAIgU,EACJ,OAAa,OAATtiB,EACOiP,GAAWhwB,KAAMovB,EAAKC,GAAKxD,MAElCwX,EAAcnT,GAAYnP,EAAOqO,EAAKC,GAClCI,EAAO4T,IACP5T,EAAO4T,GAEJC,GAAW/iC,KAAKP,KAAM+gB,EAAO0O,EAAMC,EAASN,EAAKC,IAIhE,QAASiU,IAAWtK,EAAUvJ,EAAMC,EAASN,EAAKC,GAC9C,GAAIkU,GAAgB/T,GAAmBwJ,EAAUvJ,EAAMC,EAASN,EAAKC,GACjE9B,EAAOyB,GAAcuU,EAAc1X,KAAM,EAAG0X,EAAcxT,UAK9D,OAHA/vB,MAAK6rB,KAAK0B,EAAK0B,kBACfjvB,KAAK8rB,MAAMyB,EAAK8K,eAChBr4B,KAAKutB,KAAKA,EAAKvB,cACRhsB,KAwBX,QAASwjC,IAAeziB,GACpB,MAAgB,OAATA,EAAgBte,KAAKoX,MAAM7Z,KAAK8rB,QAAU,GAAK,GAAK9rB,KAAK8rB,MAAoB,GAAb/K,EAAQ,GAAS/gB,KAAK8rB,QAAU,GAyD3G,QAAS2X,IAAiB1iB,GACtB,GAAIgP,GAAYttB,KAAKi6B,OAAO18B,KAAKs9B,QAAQiD,QAAQ,OAASvgC,KAAKs9B,QAAQiD,QAAQ,SAAW,OAAS,CACnG,OAAgB,OAATxf,EAAgBgP,EAAY/vB,KAAKywB,IAAK1P,EAAQgP,EAAY,KAiGrE,QAAS2T,IAAQ3iB,EAAO1Z,GACpBA,EAAMquB,IAAelR,EAAuB,KAAhB,KAAOzD,IAiBvC,QAAS4iB,MACL,MAAO3jC,MAAK8jB,OAAS,MAAQ,GAGjC,QAAS8f,MACL,MAAO5jC,MAAK8jB,OAAS,6BAA+B,GA2GxD,QAAS+f,IAAY9iB,GACjB,MAAOqY,IAAoB,IAARrY,GAGvB,QAAS+iB,MACL,MAAO1K,IAAY9iB,MAAM,KAAM3S,WAAWogC,YAG9C,QAASC,IAAoB1c,GACzB,MAAOA,GAyCX,QAAS2c,IAAOx+B,EAAQsN,EAAOzE,EAAOuP,GAClC,GAAIwD,GAASoT,KACTjT,EAAMJ,IAAYrC,IAAIlB,EAAQ9K,EAClC,OAAOsO,GAAO/S,GAAOkT,EAAK/b,GAG9B,QAASy+B,IAAgBz+B,EAAQsN,EAAOzE,GAQpC,GAPI3M,EAAS8D,KACTsN,EAAQtN,EACRA,MAAS5B,IAGb4B,EAASA,GAAU,GAEN,MAATsN,EACA,MAAOkxB,IAAMx+B,EAAQsN,EAAOzE,EAAO,QAGvC,IAAIvK,GACA0R,IACJ,KAAK1R,EAAI,EAAGA,EAAI,GAAIA,IAChB0R,EAAI1R,GAAKkgC,GAAMx+B,EAAQ1B,EAAGuK,EAAO,QAErC,OAAOmH,GAWX,QAAS0uB,IAAkBC,EAAc3+B,EAAQsN,EAAOzE,GACxB,iBAAjB81B,IACHziC,EAAS8D,KACTsN,EAAQtN,EACRA,MAAS5B,IAGb4B,EAASA,GAAU,KAEnBA,EAAS2+B,EACTrxB,EAAQtN,EACR2+B,GAAe,EAEXziC,EAAS8D,KACTsN,EAAQtN,EACRA,MAAS5B,IAGb4B,EAASA,GAAU,GAGvB,IAAI4b,GAASoT,KACT4P,EAAQD,EAAe/iB,EAAOgP,MAAMjB,IAAM,CAE9C,IAAa,MAATrc,EACA,MAAOkxB,IAAMx+B,GAASsN,EAAQsxB,GAAS,EAAG/1B,EAAO,MAGrD,IAAIvK,GACA0R,IACJ,KAAK1R,EAAI,EAAGA,EAAI,EAAGA,IACf0R,EAAI1R,GAAKkgC,GAAMx+B,GAAS1B,EAAIsgC,GAAS,EAAG/1B,EAAO,MAEnD,OAAOmH,GAGX,QAAS6uB,IAAY7+B,EAAQsN,GACzB,MAAOmxB,IAAez+B,EAAQsN,EAAO,UAGzC,QAASwxB,IAAiB9+B,EAAQsN,GAC9B,MAAOmxB,IAAez+B,EAAQsN,EAAO,eAGzC,QAASyxB,IAAcJ,EAAc3+B,EAAQsN,GACzC,MAAOoxB,IAAiBC,EAAc3+B,EAAQsN,EAAO,YAGzD,QAAS0xB,IAAmBL,EAAc3+B,EAAQsN,GAC9C,MAAOoxB,IAAiBC,EAAc3+B,EAAQsN,EAAO,iBAGzD,QAAS2xB,IAAiBN,EAAc3+B,EAAQsN,GAC5C,MAAOoxB,IAAiBC,EAAc3+B,EAAQsN,EAAO,eAqBzD,QAASkS,MACL,GAAIuP,GAAiBx0B,KAAKs8B;gBAa1B,OAXAt8B,MAAKo8B,cAAgBuI,GAAQ3kC,KAAKo8B,eAClCp8B,KAAKq8B,MAAgBsI,GAAQ3kC,KAAKq8B,OAClCr8B,KAAKksB,QAAgByY,GAAQ3kC,KAAKksB,SAElCsI,EAAK2H,aAAgBwI,GAAQnQ,EAAK2H,cAClC3H,EAAK0H,QAAgByI,GAAQnQ,EAAK0H,SAClC1H,EAAKf,QAAgBkR,GAAQnQ,EAAKf,SAClCe,EAAKlB,MAAgBqR,GAAQnQ,EAAKlB,OAClCkB,EAAKxH,OAAgB2X,GAAQnQ,EAAKxH,QAClCwH,EAAKqH,MAAgB8I,GAAQnQ,EAAKqH,OAE3B77B,KAGX,QAAS4kC,IAAehJ,EAAU7a,EAAOxe,EAAOq9B,GAC5C,GAAI57B,GAAQ03B,GAAe3a,EAAOxe,EAMlC,OAJAq5B,GAASQ,eAAiBwD,EAAY57B,EAAMo4B,cAC5CR,EAASS,OAAiBuD,EAAY57B,EAAMq4B,MAC5CT,EAAS1P,SAAiB0T,EAAY57B,EAAMkoB,QAErC0P,EAASW,UAIpB,QAASsI,IAAO9jB,EAAOxe,GACnB,MAAOqiC,IAAc5kC,KAAM+gB,EAAOxe,EAAO,GAI7C,QAASuiC,IAAY/jB,EAAOxe,GACxB,MAAOqiC,IAAc5kC,KAAM+gB,EAAOxe,GAAQ,GAG9C,QAASwiC,IAASxgB,GACd,MAAIA,GAAS,EACF9hB,KAAKqK,MAAMyX,GAEX9hB,KAAKoX,KAAK0K,GAIzB,QAASygB,MACL,GAII9I,GAASzI,EAASH,EAAOuI,EAAOoJ,EAJhC9I,EAAen8B,KAAKo8B,cACpBH,EAAej8B,KAAKq8B,MACpBrP,EAAehtB,KAAKksB,QACpBsI,EAAex0B,KAAKs8B,KAwCxB,OAnCOH,IAAgB,GAAKF,GAAQ,GAAKjP,GAAU,GAC1CmP,GAAgB,GAAKF,GAAQ,GAAKjP,GAAU,IACjDmP,GAAuD,MAAvC4I,GAAQG,GAAalY,GAAUiP,GAC/CA,EAAO,EACPjP,EAAS,GAKbwH,EAAK2H,aAAeA,EAAe,IAEnCD,EAAoB5X,EAAS6X,EAAe,KAC5C3H,EAAK0H,QAAeA,EAAU,GAE9BzI,EAAoBnP,EAAS4X,EAAU,IACvC1H,EAAKf,QAAeA,EAAU,GAE9BH,EAAoBhP,EAASmP,EAAU,IACvCe,EAAKlB,MAAeA,EAAQ,GAE5B2I,GAAQ3X,EAASgP,EAAQ,IAGzB2R,EAAiB3gB,EAAS6gB,GAAalJ,IACvCjP,GAAUiY,EACVhJ,GAAQ8I,GAAQG,GAAaD,IAG7BpJ,EAAQvX,EAAS0I,EAAS,IAC1BA,GAAU,GAEVwH,EAAKyH,KAASA,EACdzH,EAAKxH,OAASA,EACdwH,EAAKqH,MAASA,EAEP77B,KAGX,QAASmlC,IAAclJ,GAGnB,MAAc,MAAPA,EAAc,OAGzB,QAASiJ,IAAclY,GAEnB,MAAgB,QAATA,EAAkB,KAG7B,QAASoY,IAAIld,GACT,IAAKloB,KAAKyiB,UACN,MAAOa,IAEX,IAAI2Y,GACAjP,EACAmP,EAAen8B,KAAKo8B,aAIxB,IAAc,WAFdlU,EAAQD,EAAeC,KAEY,SAAVA,EAGrB,MAFA+T,GAASj8B,KAAKq8B,MAAUF,EAAe,MACvCnP,EAAShtB,KAAKksB,QAAUiZ,GAAalJ,GACpB,UAAV/T,EAAoB8E,EAASA,EAAS,EAI7C,QADAiP,EAAOj8B,KAAKq8B,MAAQ55B,KAAKi6B,MAAMwI,GAAallC,KAAKksB,UACzChE,GACJ,IAAK,OAAW,MAAO+T,GAAO,EAAQE,EAAe,MACrD,KAAK,MAAW,MAAOF,GAAeE,EAAe,KACrD,KAAK,OAAW,MAAc,IAAPF,EAAeE,EAAe,IACrD,KAAK,SAAW,MAAc,MAAPF,EAAeE,EAAe,GACrD,KAAK,SAAW,MAAc,OAAPF,EAAeE,EAAe,GAErD,KAAK,cAAe,MAAO15B,MAAKqK,MAAa,MAAPmvB,GAAgBE,CACtD,SAAS,KAAM,IAAI93B,OAAM,gBAAkB6jB,IAMvD,QAASmd,MACL,MAAKrlC,MAAKyiB,UAINziB,KAAKo8B,cACQ,MAAbp8B,KAAKq8B,MACJr8B,KAAKksB,QAAU,GAAM,OACK,QAA3B1H,EAAMxkB,KAAKksB,QAAU,IANd5I,IAUf,QAASgiB,IAAQC,GACb,MAAO,YACH,MAAOvlC,MAAKolC,GAAGG,IAavB,QAASC,IAAOtd,GAEZ,MADAA,GAAQD,EAAeC,GAChBloB,KAAKyiB,UAAYziB,KAAKkoB,EAAQ,OAAS5E,IAGlD,QAASmiB,IAAWxwB,GAChB,MAAO,YACH,MAAOjV,MAAKyiB,UAAYziB,KAAKs8B,MAAMrnB,GAAQqO,KAYnD,QAAS0Y,MACL,MAAO1X,GAAStkB,KAAKi8B,OAAS,GAclC,QAASyJ,IAAkBpe,EAAQ/C,EAAQ8C,EAAeE,EAAUlG,GAChE,MAAOA,GAAO+F,aAAa7C,GAAU,IAAK8C,EAAeC,EAAQC,GAGrE,QAASoe,IAAgBC,EAAgBve,EAAehG,GACpD,GAAIua,GAAWF,GAAekK,GAAgB3gB,MAC1CiX,EAAWQ,GAAMd,EAASwJ,GAAG,MAC7B3R,EAAWiJ,GAAMd,EAASwJ,GAAG,MAC7B9R,EAAWoJ,GAAMd,EAASwJ,GAAG,MAC7BnJ,EAAWS,GAAMd,EAASwJ,GAAG,MAC7BpY,EAAW0P,GAAMd,EAASwJ,GAAG,MAC7BvJ,EAAWa,GAAMd,EAASwJ,GAAG,MAE7B5hC,EAAI04B,GAAW2J,GAAWC,KAAO,IAAK5J,IAClCA,EAAU2J,GAAWz6B,IAAQ,KAAM8wB,IACnCzI,GAAW,IAAkB,MAC7BA,EAAUoS,GAAWrlC,IAAQ,KAAMizB,IACnCH,GAAW,IAAkB,MAC7BA,EAAUuS,GAAW16B,IAAQ,KAAMmoB,IACnC2I,GAAW,IAAkB,MAC7BA,EAAU4J,GAAW55B,IAAQ,KAAMgwB,IACnCjP,GAAW,IAAkB,MAC7BA,EAAU6Y,GAAWjX,IAAQ,KAAM5B,IACnC6O,GAAW,IAAkB,OAAmB,KAAMA,EAK9D,OAHAr4B,GAAE,GAAK6jB,EACP7jB,EAAE,IAAMoiC,EAAiB,EACzBpiC,EAAE,GAAK6d,EACAqkB,GAAkBpvB,MAAM,KAAM9S,GAIzC,QAASuiC,IAA4BC,GACjC,WAAyBniC,KAArBmiC,EACOtJ,GAEsB,kBAAvB,KACNA,GAAQsJ,GACD,GAMf,QAASC,IAA6BC,EAAWC,GAC7C,WAA8BtiC,KAA1BgiC,GAAWK,SAGDriC,KAAVsiC,EACON,GAAWK,IAEtBL,GAAWK,GAAaC,EACN,MAAdD,IACAL,GAAWC,GAAKK,EAAQ,IAErB,IAGX,QAASlE,IAAUmE,GACf,IAAKpmC,KAAKyiB,UACN,MAAOziB,MAAK+pB,aAAa/C,aAG7B,IAAI3F,GAASrhB,KAAK+pB,aACdrD,EAASif,GAAe3lC,MAAOomC,EAAY/kB,EAM/C,OAJI+kB,KACA1f,EAASrF,EAAOoG,YAAYznB,KAAM0mB,IAG/BrF,EAAO2gB,WAAWtb,GAK7B,QAAS2f,MAQL,IAAKrmC,KAAKyiB,UACN,MAAOziB,MAAK+pB,aAAa/C,aAG7B,IAGIyM,GAASH,EAAOuI,EAHhBK,EAAUoK,GAAMtmC,KAAKo8B,eAAiB,IACtCH,EAAeqK,GAAMtmC,KAAKq8B,OAC1BrP,EAAesZ,GAAMtmC,KAAKksB,QAI9BuH,GAAoBnP,EAAS4X,EAAU,IACvC5I,EAAoBhP,EAASmP,EAAU,IACvCyI,GAAW,GACXzI,GAAW,GAGXoI,EAASvX,EAAS0I,EAAS,IAC3BA,GAAU,EAIV,IAAIuZ,GAAI1K,EACJjN,EAAI5B,EACJrR,EAAIsgB,EACJ9wB,EAAImoB,EACJ9yB,EAAIizB,EACJroB,EAAI8wB,EACJ55B,EAAQtC,KAAKwmC,WAEjB,OAAKlkC,IAMGA,EAAQ,EAAI,IAAM,IACtB,KACCikC,EAAIA,EAAI,IAAM,KACd3X,EAAIA,EAAI,IAAM,KACdjT,EAAIA,EAAI,IAAM,KACbxQ,GAAK3K,GAAK4K,EAAK,IAAM,KACtBD,EAAIA,EAAI,IAAM,KACd3K,EAAIA,EAAI,IAAM,KACd4K,EAAIA,EAAI,IAAM,IAXR,MAxvIf,GAAI0V,IAwGA2lB,EAEAA,IADAtiC,MAAMkO,UAAUo0B,KACTtiC,MAAMkO,UAAUo0B,KAEhB,SAAUC,GAIb,IAAK,GAHDz5B,GAAIxI,OAAOzE,MACX+E,EAAMkI,EAAErJ,SAAW,EAEdG,EAAI,EAAGA,EAAIgB,EAAKhB,IACrB,GAAIA,IAAKkJ,IAAKy5B,EAAInmC,KAAKP,KAAMiN,EAAElJ,GAAIA,EAAGkJ,GAClC,OAAO,CAIf,QAAO,EAIf,IAAI4V,IAAS4jB,GAiDTxiB,GAAmBpD,EAAMoD,oBAiDzBG,IAAmB,EA8FnBwB,KAYJ/E,GAAMwE,6BAA8B,EACpCxE,EAAM4E,mBAAqB,IAyD3B,IAAI1R,GAGAA,IADAtP,OAAOsP,KACAtP,OAAOsP,KAEP,SAAUjT,GACb,GAAIiD,GAAGmd,IACP,KAAKnd,IAAKjD,GACFqgB,EAAWrgB,EAAKiD,IAChBmd,EAAIrc,KAAKd,EAGjB,OAAOmd,GAIf,IA+WItc,IA/WAswB,GAASnhB,GAET4yB,IACAC,QAAU,gBACVC,QAAU,mBACVC,SAAW,eACXC,QAAU,oBACVC,SAAW,sBACXC,SAAW,KAQXC,IACAC,IAAO,YACPC,GAAO,SACPC,EAAO,aACPC,GAAO,eACPC,IAAO,sBACPC,KAAO,6BAyBPC,GAAgC,UAMhCC,IACAC,OAAS,QACTC,KAAS,SACTx8B,EAAK,gBACL06B,GAAK,aACLtlC,EAAK,WACLqnC,GAAK,aACL18B,EAAK,UACL28B,GAAK,WACL77B,EAAK,QACL87B,GAAK,UACLnZ,EAAK,UACLoZ,GAAK,YACLrZ,EAAK,SACLsZ,GAAK,YAeLjgB,MA4BAS,MA2EAyB,GAAmB,uLAEnBK,GAAwB,6CAExBF,MAEAP,MAoFAoe,GAAiB,KACjBC,GAAiB,OACjBC,GAAiB,QACjBC,GAAiB,QACjBC,GAAiB,aACjBC,GAAiB,QACjBC,GAAiB,YACjBC,GAAiB,gBACjBC,GAAiB,UACjBC,GAAiB,UACjBC,GAAiB,eAEjBC,GAAiB,MACjBC,GAAiB,WAEjBtK,GAAiB,qBACjBT,GAAmB,0BAEnBgL,GAAiB,uBAIjBC,GAAY,mHAGZpe,MA2BAW,MA8BA+J,GAAO,EACPF,GAAQ,EACRC,GAAO,EACPE,GAAO,EACPC,GAAS,EACTC,GAAS,EACTC,GAAc,EACdG,GAAO,EACPE,GAAU,CAKVnxB,IADAT,MAAMkO,UAAUzN,QACNT,MAAMkO,UAAUzN,QAEhB,SAAUqkC,GAEhB,GAAIllC,EACJ,KAAKA,EAAI,EAAGA,EAAI/D,KAAK4D,SAAUG,EAC3B,GAAI/D,KAAK+D,KAAOklC,EACZ,MAAOllC,EAGf,QAAQ,EAIhB,IAAIkpB,IAAYroB,EAQhB8kB,GAAe,KAAM,KAAM,GAAI,KAAM,WACjC,MAAO1pB,MAAK8rB,QAAU,IAG1BpC,EAAe,MAAO,EAAG,EAAG,SAAUjkB,GAClC,MAAOzF,MAAK+pB,aAAagD,YAAY/sB,KAAMyF,KAG/CikB,EAAe,OAAQ,EAAG,EAAG,SAAUjkB,GACnC,MAAOzF,MAAK+pB,aAAaiD,OAAOhtB,KAAMyF,KAK1CkiB,EAAa,QAAS,KAItBY,EAAgB,QAAS,GAIzBkC,EAAc,IAAQ8d,IACtB9d,EAAc,KAAQ8d,GAAWJ,IACjC1d,EAAc,MAAQ,SAAUI,EAAUxJ,GACtC,MAAOA,GAAOqM,iBAAiB7C,KAEnCJ,EAAc,OAAQ,SAAUI,EAAUxJ,GACtC,MAAOA,GAAO0M,YAAYlD,KAG9BS,IAAe,IAAK,MAAO,SAAUvK,EAAO1Z,GACxCA,EAAM+tB,IAAS5Q,EAAMzD,GAAS,IAGlCuK,IAAe,MAAO,QAAS,SAAUvK,EAAO1Z,EAAO8c,EAAQwF,GAC3D,GAAImC,GAAQ3H,EAAOH,QAAQsJ,YAAYvM,EAAO4I,EAAOxF,EAAOjB,QAE/C,OAAT4I,EACAzkB,EAAM+tB,IAAStJ,EAEfvJ,EAAgB4B,GAAQpC,aAAehB,GAM/C,IAAIqL,IAAmB,gCACnB8c,GAAsB,wFAAwFviC,MAAM,KAUpHwiC,GAA2B,kDAAkDxiC,MAAM,KAkInFmnB,GAA0Bkb,GAoB1B9a,GAAqB8a,EAwDzBtf,GAAe,IAAK,EAAG,EAAG,WACtB,GAAIiF,GAAI3uB,KAAK6rB,MACb,OAAO8C,IAAK,KAAO,GAAKA,EAAI,IAAMA,IAGtCjF,EAAe,GAAI,KAAM,GAAI,EAAG,WAC5B,MAAO1pB,MAAK6rB,OAAS,MAGzBnC,EAAe,GAAI,OAAU,GAAU,EAAG,QAC1CA,EAAe,GAAI,QAAU,GAAU,EAAG,QAC1CA,EAAe,GAAI,SAAU,GAAG,GAAO,EAAG,QAI1C/B,EAAa,OAAQ,KAIrBY,EAAgB,OAAQ,GAIxBkC,EAAc,IAAUqe,IACxBre,EAAc,KAAU8d,GAAWJ,IACnC1d,EAAc,OAAUke,GAAWN,IACnC5d,EAAc,QAAUme,GAAWN,IACnC7d,EAAc,SAAUme,GAAWN,IAEnChd,IAAe,QAAS,UAAWgK,IACnChK,GAAc,OAAQ,SAAUvK,EAAO1Z,GACnCA,EAAMiuB,IAAyB,IAAjBvU,EAAMnd,OAAeid,EAAMuoB,kBAAkBroB,GAASyD,EAAMzD,KAE9EuK,GAAc,KAAM,SAAUvK,EAAO1Z,GACjCA,EAAMiuB,IAAQzU,EAAMuoB,kBAAkBroB,KAE1CuK,GAAc,IAAK,SAAUvK,EAAO1Z,GAChCA,EAAMiuB,IAAQtrB,SAAS+W,EAAO,MAelCF,EAAMuoB,kBAAoB,SAAUroB,GAChC,MAAOyD,GAAMzD,IAAUyD,EAAMzD,GAAS,GAAK,KAAO,KAKtD,IAAIsoB,IAAavgB,EAAW,YAAY,EA4FxCY,GAAe,KAAM,KAAM,GAAI,KAAM,QACrCA,EAAe,KAAM,KAAM,GAAI,KAAM,WAIrC/B,EAAa,OAAQ,KACrBA,EAAa,UAAW,KAIxBY,EAAgB,OAAQ,GACxBA,EAAgB,UAAW,GAI3BkC,EAAc,IAAM8d,IACpB9d,EAAc,KAAM8d,GAAWJ,IAC/B1d,EAAc,IAAM8d,IACpB9d,EAAc,KAAM8d,GAAWJ,IAE/B3c,IAAmB,IAAK,KAAM,IAAK,MAAO,SAAUzK,EAAO0O,EAAMtL,EAAQwF,GACrE8F,EAAK9F,EAAMtf,OAAO,EAAG,IAAMma,EAAMzD,IAWrC,IAAIuoB,KACAla,IAAM,EACNC,IAAM,EAyBV3F,GAAe,IAAK,EAAG,KAAM,OAE7BA,EAAe,KAAM,EAAG,EAAG,SAAUjkB,GACjC,MAAOzF,MAAK+pB,aAAa2H,YAAY1xB,KAAMyF,KAG/CikB,EAAe,MAAO,EAAG,EAAG,SAAUjkB,GAClC,MAAOzF,MAAK+pB,aAAa4H,cAAc3xB,KAAMyF,KAGjDikB,EAAe,OAAQ,EAAG,EAAG,SAAUjkB,GACnC,MAAOzF,MAAK+pB,aAAa6H,SAAS5xB,KAAMyF,KAG5CikB,EAAe,IAAK,EAAG,EAAG,WAC1BA,EAAe,IAAK,EAAG,EAAG,cAI1B/B,EAAa,MAAO,KACpBA,EAAa,UAAW,KACxBA,EAAa,aAAc,KAG3BY,EAAgB,MAAO,IACvBA,EAAgB,UAAW,IAC3BA,EAAgB,aAAc,IAI9BkC,EAAc,IAAQ8d,IACtB9d,EAAc,IAAQ8d,IACtB9d,EAAc,IAAQ8d,IACtB9d,EAAc,KAAQ,SAAUI,EAAUxJ,GACtC,MAAOA,GAAOwR,iBAAiBhI,KAEnCJ,EAAc,MAAS,SAAUI,EAAUxJ,GACvC,MAAOA,GAAOoR,mBAAmB5H,KAErCJ,EAAc,OAAU,SAAUI,EAAUxJ,GACxC,MAAOA,GAAO+Q,cAAcvH,KAGhCW,IAAmB,KAAM,MAAO,QAAS,SAAUzK,EAAO0O,EAAMtL,EAAQwF,GACpE,GAAI+F,GAAUvL,EAAOH,QAAQ4M,cAAc7P,EAAO4I,EAAOxF,EAAOjB,QAEjD,OAAXwM,EACAD,EAAKxjB,EAAIyjB,EAETnN,EAAgB4B,GAAQlB,eAAiBlC,IAIjDyK,IAAmB,IAAK,IAAK,KAAM,SAAUzK,EAAO0O,EAAMtL,EAAQwF,GAC9D8F,EAAK9F,GAASnF,EAAMzD,IA+BxB,IAAIwoB,IAAwB,2DAA2D5iC,MAAM,KAUzF6iC,GAA6B,8BAA8B7iC,MAAM,KAKjE8iC,GAA2B,uBAAuB9iC,MAAM,KAqJxD6rB,GAAuBwW,GAoBvBpW,GAA4BoW,GAoB5BhW,GAA0BgW,EAwE9Btf,GAAe,KAAM,KAAM,GAAI,EAAG,QAClCA,EAAe,KAAM,KAAM,GAAI,EAAG2J,IAClC3J,EAAe,KAAM,KAAM,GAAI,EAAG6J,IAElC7J,EAAe,MAAO,EAAG,EAAG,WACxB,MAAO,GAAK2J,GAAQ/c,MAAMtW,MAAQopB,EAASppB,KAAKyzB,UAAW,KAG/D/J,EAAe,QAAS,EAAG,EAAG,WAC1B,MAAO,GAAK2J,GAAQ/c,MAAMtW,MAAQopB,EAASppB,KAAKyzB,UAAW,GACvDrK,EAASppB,KAAKk8B,UAAW,KAGjCxS,EAAe,MAAO,EAAG,EAAG,WACxB,MAAO,GAAK1pB,KAAKszB,QAAUlK,EAASppB,KAAKyzB,UAAW,KAGxD/J,EAAe,QAAS,EAAG,EAAG,WAC1B,MAAO,GAAK1pB,KAAKszB,QAAUlK,EAASppB,KAAKyzB,UAAW,GAChDrK,EAASppB,KAAKk8B,UAAW,KASjC9Z,GAAS,KAAK,GACdA,GAAS,KAAK,GAIduF,EAAa,OAAQ,KAGrBY,EAAgB,OAAQ,IAQxBkC,EAAc,IAAMiJ,IACpBjJ,EAAc,IAAMiJ,IACpBjJ,EAAc,IAAM8d,IACpB9d,EAAc,IAAM8d,IACpB9d,EAAc,IAAM8d,IACpB9d,EAAc,KAAM8d,GAAWJ,IAC/B1d,EAAc,KAAM8d,GAAWJ,IAC/B1d,EAAc,KAAM8d,GAAWJ,IAE/B1d,EAAc,MAAO+d,IACrB/d,EAAc,QAASge,IACvBhe,EAAc,MAAO+d,IACrB/d,EAAc,QAASge,IAEvBnd,IAAe,IAAK,MAAOiK,IAC3BjK,IAAe,IAAK,MAAO,SAAUvK,EAAO1Z,EAAO8c,GAC/C,GAAIulB,GAASllB,EAAMzD,EACnB1Z,GAAMkuB,IAAmB,KAAXmU,EAAgB,EAAIA,IAEtCpe,IAAe,IAAK,KAAM,SAAUvK,EAAO1Z,EAAO8c,GAC9CA,EAAOwlB,MAAQxlB,EAAOH,QAAQkW,KAAKnZ,GACnCoD,EAAO0V,UAAY9Y,IAEvBuK,IAAe,IAAK,MAAO,SAAUvK,EAAO1Z,EAAO8c,GAC/C9c,EAAMkuB,IAAQ/Q,EAAMzD,GACpBwB,EAAgB4B,GAAQhB,SAAU,IAEtCmI,GAAc,MAAO,SAAUvK,EAAO1Z,EAAO8c,GACzC,GAAIrJ,GAAMiG,EAAMnd,OAAS,CACzByD,GAAMkuB,IAAQ/Q,EAAMzD,EAAM1W,OAAO,EAAGyQ,IACpCzT,EAAMmuB,IAAUhR,EAAMzD,EAAM1W,OAAOyQ,IACnCyH,EAAgB4B,GAAQhB,SAAU,IAEtCmI,GAAc,QAAS,SAAUvK,EAAO1Z,EAAO8c,GAC3C,GAAIylB,GAAO7oB,EAAMnd,OAAS,EACtBimC,EAAO9oB,EAAMnd,OAAS,CAC1ByD,GAAMkuB,IAAQ/Q,EAAMzD,EAAM1W,OAAO,EAAGu/B,IACpCviC,EAAMmuB,IAAUhR,EAAMzD,EAAM1W,OAAOu/B,EAAM,IACzCviC,EAAMouB,IAAUjR,EAAMzD,EAAM1W,OAAOw/B,IACnCtnB,EAAgB4B,GAAQhB,SAAU,IAEtCmI,GAAc,MAAO,SAAUvK,EAAO1Z,EAAO8c,GACzC,GAAIrJ,GAAMiG,EAAMnd,OAAS,CACzByD,GAAMkuB,IAAQ/Q,EAAMzD,EAAM1W,OAAO,EAAGyQ,IACpCzT,EAAMmuB,IAAUhR,EAAMzD,EAAM1W,OAAOyQ,MAEvCwQ,GAAc,QAAS,SAAUvK,EAAO1Z,EAAO8c,GAC3C,GAAIylB,GAAO7oB,EAAMnd,OAAS,EACtBimC,EAAO9oB,EAAMnd,OAAS,CAC1ByD,GAAMkuB,IAAQ/Q,EAAMzD,EAAM1W,OAAO,EAAGu/B,IACpCviC,EAAMmuB,IAAUhR,EAAMzD,EAAM1W,OAAOu/B,EAAM,IACzCviC,EAAMouB,IAAUjR,EAAMzD,EAAM1W,OAAOw/B,KAWvC,IA6CIzV,IA7CA0V,GAA6B,gBAgB7BC,GAAajhB,EAAW,SAAS,GAMjC6L,IACApO,SAAUogB,GACV/f,eAAgBsgB,GAChBlgB,YAryCqB,eAsyCrBE,QAhyCiB,KAiyCjB8iB,uBAAwBvC,GACxBrgB,aAAcsgB,GAEd1a,OAAQkc,GACRnc,YAAaoc,GAEb1Z,KAAM6Z,GAEN1X,SAAU2X,GACV7X,YAAa+X,GACb9X,cAAe6X,GAEfS,cAAeH,IAIf3V,MACAW,MA8MAuB,GAAmB,mJACnBC,GAAgB,8IAEhBG,GAAU,wBAEVF,KACC,eAAgB,wBAChB,aAAc,oBACd,eAAgB,mBAChB,aAAc,eAAe,IAC7B,WAAY,gBACZ,UAAW,cAAc,IACzB,aAAc,eACd,WAAY,UAEZ,aAAc,gBACd,YAAa,eAAe,IAC5B,UAAW,UAIZC,KACC,gBAAiB,wBACjB,gBAAiB,uBACjB,WAAY,mBACZ,QAAS,cACT,cAAe,sBACf,cAAe,qBACf,SAAU,iBACV,OAAQ,aACR,KAAM,SAGPuB,GAAkB,sBAwDlBL,GAAgB,8LAiGpB7W,GAAMmX,wBAA0BzS,EAC5B,iVAIA,SAAUpB,GACNA,EAAOpB,GAAK,GAAIlgB,MAAKshB,EAAOvR,IAAMuR,EAAOiU,QAAU,OAAS,OAoJpEvX,EAAM0Y,SAAW,aAGjB1Y,EAAM2Y,SAAW,YA6PjB,IAAI0Q,IAAe3kB,EACf,qGACA,WACI,GAAIvhB,GAAQo1B,GAAY9iB,MAAM,KAAM3S,UACpC,OAAI3D,MAAKyiB,WAAaze,EAAMye,UACjBze,EAAQhE,KAAOA,KAAOgE,EAEtBqf,MAKf8mB,GAAe5kB,EACf,qGACA,WACI,GAAIvhB,GAAQo1B,GAAY9iB,MAAM,KAAM3S,UACpC,OAAI3D,MAAKyiB,WAAaze,EAAMye,UACjBze,EAAQhE,KAAOA,KAAOgE,EAEtBqf,MAwCfoD,GAAM,WACN,MAAO5jB,MAAK4jB,IAAM5jB,KAAK4jB,OAAS,GAAK5jB,OAGrCw4B,IAAY,OAAQ,UAAW,QAAS,OAAQ,MAAO,OAAQ,SAAU,SAAU,cA+FvFsB,IAAO,IAAK,KACZA,GAAO,KAAM,IAIblS,EAAc,IAAMsT,IACpBtT,EAAc,KAAMsT,IACpBzS,IAAe,IAAK,MAAO,SAAUvK,EAAO1Z,EAAO8c,GAC/CA,EAAOiU,SAAU,EACjBjU,EAAON,KAAOkZ,GAAiBgB,GAAkBhd,IAQrD,IAAIoc,IAAc,iBA2ClBtc,GAAMwD,aAAe,YAmJrB,IAAI6a,IAAc,wDAKdC,GAAW,6IA+DfzD,IAAej0B,GAAKk0B,GAAStpB,UAC7BqpB,GAAe0O,QAAU3O,EAuFzB,IAAIhL,IAAWkP,GAAY,EAAG,OAC1BtB,GAAWsB,IAAa,EAAG,WA8I/B9e,GAAMkhB,cAAgB,uBACtBlhB,EAAMihB,iBAAmB,wBAkGzB,IAAIuI,IAAO9kB,EACP,kJACA,SAAUhe,GACN,WAAY1D,KAAR0D,EACOvH,KAAK+pB,aAEL/pB,KAAKqhB,OAAO9Z,IA8H/BmiB,GAAe,GAAI,KAAM,GAAI,EAAG,WAC5B,MAAO1pB,MAAKg5B,WAAa,MAG7BtP,EAAe,GAAI,KAAM,GAAI,EAAG,WAC5B,MAAO1pB,MAAKsqC,cAAgB,MAOhC1H,GAAuB,OAAY,YACnCA,GAAuB,QAAY,YACnCA,GAAuB,OAAS,eAChCA,GAAuB,QAAS,eAIhCjb,EAAa,WAAY,MACzBA,EAAa,cAAe,MAI5BY,EAAgB,WAAY,GAC5BA,EAAgB,cAAe,GAK/BkC,EAAc,IAAUqe,IACxBre,EAAc,IAAUqe,IACxBre,EAAc,KAAU8d,GAAWJ,IACnC1d,EAAc,KAAU8d,GAAWJ,IACnC1d,EAAc,OAAUke,GAAWN,IACnC5d,EAAc,OAAUke,GAAWN,IACnC5d,EAAc,QAAUme,GAAWN,IACnC7d,EAAc,QAAUme,GAAWN,IAEnC9c,IAAmB,OAAQ,QAAS,OAAQ,SAAU,SAAUzK,EAAO0O,EAAMtL,EAAQwF,GACjF8F,EAAK9F,EAAMtf,OAAO,EAAG,IAAMma,EAAMzD,KAGrCyK,IAAmB,KAAM,MAAO,SAAUzK,EAAO0O,EAAMtL,EAAQwF,GAC3D8F,EAAK9F,GAAS9I,EAAMuoB,kBAAkBroB,KAqD1C2I,EAAe,IAAK,EAAG,KAAM,WAI7B/B,EAAa,UAAW,KAIxBY,EAAgB,UAAW,GAI3BkC,EAAc,IAAKyd,IACnB5c,GAAc,IAAK,SAAUvK,EAAO1Z,GAChCA,EAAM+tB,IAA8B,GAApB5Q,EAAMzD,GAAS,KAWnC2I,EAAe,KAAM,KAAM,GAAI,KAAM,QAIrC/B,EAAa,OAAQ,KAGrBY,EAAgB,OAAQ,GAIxBkC,EAAc,IAAM8d,IACpB9d,EAAc,KAAM8d,GAAWJ,IAC/B1d,EAAc,KAAM,SAAUI,EAAUxJ,GAEpC,MAAOwJ,GACJxJ,EAAO4E,yBAA2B5E,EAAO6E,cAC1C7E,EAAO0E,iCAGbuF,IAAe,IAAK,MAAO+J,IAC3B/J,GAAc,KAAM,SAAUvK,EAAO1Z,GACjCA,EAAMguB,IAAQ7Q,EAAMzD,EAAM7b,MAAMqjC,IAAW,GAAI,KAKnD,IAAIgC,IAAmBzhB,EAAW,QAAQ,EAI1CY,GAAe,OAAQ,OAAQ,GAAI,OAAQ,aAI3C/B,EAAa,YAAa,OAG1BY,EAAgB,YAAa,GAI7BkC,EAAc,MAAQie,IACtBje,EAAc,OAAQ2d,IACtB9c,IAAe,MAAO,QAAS,SAAUvK,EAAO1Z,EAAO8c,GACnDA,EAAOyU,WAAapU,EAAMzD,KAc9B2I,EAAe,KAAM,KAAM,GAAI,EAAG,UAIlC/B,EAAa,SAAU,KAIvBY,EAAgB,SAAU,IAI1BkC,EAAc,IAAM8d,IACpB9d,EAAc,KAAM8d,GAAWJ,IAC/B7c,IAAe,IAAK,MAAOkK,GAI3B,IAAIgV,IAAe1hB,EAAW,WAAW,EAIzCY,GAAe,KAAM,KAAM,GAAI,EAAG,UAIlC/B,EAAa,SAAU,KAIvBY,EAAgB,SAAU,IAI1BkC,EAAc,IAAM8d,IACpB9d,EAAc,KAAM8d,GAAWJ,IAC/B7c,IAAe,IAAK,MAAOmK,GAI3B,IAAIgV,IAAe3hB,EAAW,WAAW,EAIzCY,GAAe,IAAK,EAAG,EAAG,WACtB,SAAU1pB,KAAK46B,cAAgB,OAGnClR,EAAe,GAAI,KAAM,GAAI,EAAG,WAC5B,SAAU1pB,KAAK46B,cAAgB,MAGnClR,EAAe,GAAI,MAAO,GAAI,EAAG,eACjCA,EAAe,GAAI,OAAQ,GAAI,EAAG,WAC9B,MAA4B,IAArB1pB,KAAK46B,gBAEhBlR,EAAe,GAAI,QAAS,GAAI,EAAG,WAC/B,MAA4B,KAArB1pB,KAAK46B,gBAEhBlR,EAAe,GAAI,SAAU,GAAI,EAAG,WAChC,MAA4B,KAArB1pB,KAAK46B,gBAEhBlR,EAAe,GAAI,UAAW,GAAI,EAAG,WACjC,MAA4B,KAArB1pB,KAAK46B,gBAEhBlR,EAAe,GAAI,WAAY,GAAI,EAAG,WAClC,MAA4B,KAArB1pB,KAAK46B,gBAEhBlR,EAAe,GAAI,YAAa,GAAI,EAAG,WACnC,MAA4B,KAArB1pB,KAAK46B,gBAMhBjT,EAAa,cAAe,MAI5BY,EAAgB,cAAe,IAI/BkC,EAAc,IAAQie,GAAWR,IACjCzd,EAAc,KAAQie,GAAWP,IACjC1d,EAAc,MAAQie,GAAWN,GAEjC,IAAIze,GACJ,KAAKA,GAAQ,OAAQA,GAAM/lB,QAAU,EAAG+lB,IAAS,IAC7Cc,EAAcd,GAAOkf,GAOzB,KAAKlf,GAAQ,IAAKA,GAAM/lB,QAAU,EAAG+lB,IAAS,IAC1C2B,GAAc3B,GAAO+Z,GAIzB,IAAIgH,IAAoB5hB,EAAW,gBAAgB,EAInDY,GAAe,IAAM,EAAG,EAAG,YAC3BA,EAAe,KAAM,EAAG,EAAG,WAY3B,IAAItX,IAAQ8R,EAAO7R,SAEnBD,IAAMqe,IAAoBA,GAC1Bre,GAAMmU,SAAoB4Z,GAC1B/tB,GAAMkrB,MAAoBA,GAC1BlrB,GAAMsV,KAAoBA,GAC1BtV,GAAMsuB,MAAoBA,GAC1BtuB,GAAM3M,OAAoBA,GAC1B2M,GAAMqR,KAAoBA,GAC1BrR,GAAM8vB,QAAoBA,GAC1B9vB,GAAMoR,GAAoBA,GAC1BpR,GAAM+vB,MAAoBA,GAC1B/vB,GAAMqF,IAAoBwR,EAC1B7W,GAAMswB,UAAoBA,GAC1BtwB,GAAMqtB,QAAoBA,GAC1BrtB,GAAMstB,SAAoBA,GAC1BttB,GAAMuuB,UAAoBA,GAC1BvuB,GAAMyuB,OAAoBA,GAC1BzuB,GAAM2uB,cAAoBA,GAC1B3uB,GAAM4uB,eAAoBA,GAC1B5uB,GAAMqQ,QAAoB+f,GAC1BpwB,GAAMi4B,KAAoBA,GAC1Bj4B,GAAMiP,OAAoBA,GAC1BjP,GAAM2X,WAAoBA,GAC1B3X,GAAM/P,IAAoB8nC,GAC1B/3B,GAAMhQ,IAAoB8nC,GAC1B93B,GAAMqwB,aAAoBA,GAC1BrwB,GAAM2M,IAAoBmK,EAC1B9W,GAAMmuB,QAAoBA,GAC1BnuB,GAAMisB,SAAoBA,GAC1BjsB,GAAMhL,QAAoBA,GAC1BgL,GAAMqI,SAAoBA,GAC1BrI,GAAM9M,OAAoBA,GAC1B8M,GAAM5M,YAAoBA,GAC1B4M,GAAMqvB,QAAoBA,GAC1BrvB,GAAMmwB,OAAoBA,GAC1BnwB,GAAM1H,SAAoBA,GAC1B0H,GAAMkwB,KAAoBA,GAC1BlwB,GAAMhN,QAAoBA,GAC1BgN,GAAMuwB,aAAoBA,GAG1BvwB,GAAMyZ,KAAawd,GACnBj3B,GAAMoc,WAAaC,GAGnBrc,GAAM4mB,SAAc8J,GACpB1wB,GAAMk4B,YAActH,GAGpB5wB,GAAM2pB,QAAU3pB,GAAM0pB,SAAW0H,GAGjCpxB,GAAM0Z,MAAc0B,GACpBpb,GAAMwZ,YAAc6B,GAGpBrb,GAAMqd,KAAiBrd,GAAM4pB,MAAexL,GAC5Cpe,GAAM6wB,QAAiB7wB,GAAMu4B,SAAeja,GAC5Cte,GAAM8d,YAAiBiT,GACvB/wB,GAAMw4B,eAAiB1H,GAGvB9wB,GAAMmb,KAAagd,GACnBn4B,GAAM4e,IAAa5e,GAAM6pB,KAAmBjK,GAC5C5f,GAAMsd,QAAawC,GACnB9f,GAAMiwB,WAAalQ,GACnB/f,GAAM2d,UAAa0T,GAGnBrxB,GAAM2nB,KAAO3nB,GAAMkhB,MAAQyW,GAG3B33B,GAAMsoB,OAAStoB,GAAMqhB,QAAU+W,GAG/Bp4B,GAAMuoB,OAASvoB,GAAM8pB,QAAUuO,GAG/Br4B,GAAMwoB,YAAcxoB,GAAM+pB,aAAeuO,GAGzCt4B,GAAMyqB,UAAuBc,GAC7BvrB,GAAMoP,IAAuB2c,GAC7B/rB,GAAMorB,MAAuBY,GAC7BhsB,GAAM2xB,UAAuBzF,GAC7BlsB,GAAMqsB,qBAAuBA,GAC7BrsB,GAAMy4B,MAAuBnM,GAC7BtsB,GAAMysB,QAAuBA,GAC7BzsB,GAAM0sB,YAAuBA,GAC7B1sB,GAAM2sB,MAAuBA,GAC7B3sB,GAAM6oB,MAAuB8D,GAG7B3sB,GAAM04B,SAAWnH,GACjBvxB,GAAM24B,SAAWnH,GAGjBxxB,GAAM44B,MAASzlB,EAAU,kDAAmDglB,IAC5En4B,GAAM4a,OAASzH,EAAU,mDAAoDiI,IAC7Epb,GAAMypB,MAAStW,EAAU,iDAAkD8jB,IAC3Ej3B,GAAMsvB,KAASnc,EAAU,2GAA4G2Y,IACrI9rB,GAAM64B,aAAe1lB,EAAU,0GAA2GoZ,GAc1I,IAAIuM,IAAU5kB,EAAOjU,SAErB64B,IAAQ3kB,SAAkBA,EAC1B2kB,GAAQtkB,eAAkBA,EAC1BskB,GAAQlkB,YAAkBA,EAC1BkkB,GAAQhkB,QAAkBA,EAC1BgkB,GAAQnQ,SAAkBiJ,GAC1BkH,GAAQlJ,WAAkBgC,GAC1BkH,GAAQ9jB,aAAkBA,EAC1B8jB,GAAQzjB,WAAkBA,EAC1ByjB,GAAQnsB,IAAkBA,EAG1BmsB,GAAQle,OAA2Bf,GACnCif,GAAQne,YAA2BV,GACnC6e,GAAQ5d,YAA2BJ,GACnCge,GAAQnd,YAAoBA,GAC5Bmd,GAAQxd,iBAAoBA,GAG5Bwd,GAAQzb,KAAOW,GACf8a,GAAQC,eAAiB5a,GACzB2a,GAAQE,eAAiB9a,GAGzB4a,GAAQtZ,SAAwBd,GAChCoa,GAAQxZ,YAAwBP,GAChC+Z,GAAQvZ,cAAwBV,GAChCia,GAAQta,cAAwBiB,GAEhCqZ,GAAQ9Y,cAA6BA,GACrC8Y,GAAQzY,mBAA6BA,GACrCyY,GAAQrY,iBAA6BA,GAGrCqY,GAAQhR,KAAOtG,GACfsX,GAAQ9oB,SAAWyR,GA4FnBU,GAAmB,MACfyV,uBAAwB,uBACxB9iB,QAAU,SAAU3C,GAChB,GAAI9gB,GAAI8gB,EAAS,EAKjB,OAAOA,IAJoC,IAA7BC,EAAMD,EAAS,IAAM,IAAa,KACrC,IAAN9gB,EAAW,KACL,IAANA,EAAW,KACL,IAANA,EAAW,KAAO,SAM/Bod,EAAMwpB,KAAO9kB,EAAU,wDAAyDgP,IAChF1T,EAAMwqB,SAAW9lB,EAAU,gEAAiEkP,GAE5F,IAAIkQ,IAAUliC,KAAKwiB,IA0JfqmB,GAAiBhG,GAAO,MACxBkB,GAAiBlB,GAAO,KACxBiG,GAAiBjG,GAAO,KACxBkG,GAAiBlG,GAAO,KACxBmG,GAAiBnG,GAAO,KACxBoG,GAAiBpG,GAAO,KACxBqG,GAAiBrG,GAAO,KACxBsG,GAAiBtG,GAAO,KAaxBnJ,GAAesJ,GAAW,gBAC1BvJ,GAAeuJ,GAAW,WAC1BhS,GAAegS,GAAW,WAC1BnS,GAAemS,GAAW,SAC1BxJ,GAAewJ,GAAW,QAC1BzY,GAAeyY,GAAW,UAC1B5J,GAAe4J,GAAW,SAM1B/I,GAAQj6B,KAAKi6B,MACbmJ,IACAC,GAAI,GACJ16B,EAAI,GACJ5K,EAAI,GACJ2K,EAAI,GACJc,EAAI,GACJ2iB,EAAI,IA6EJ0X,GAAQ7jC,KAAKwiB,IAwDb4mB,GAAUlQ,GAAStpB,SA0FvB,OAxFAw5B,IAAQppB,QAAiB+Y,GACzBqQ,GAAQ5mB,IAAiBA,GACzB4mB,GAAQpb,IAAiBoU,GACzBgH,GAAQxN,SAAiByG,GACzB+G,GAAQzG,GAAiBA,GACzByG,GAAQP,eAAiBA,GACzBO,GAAQrF,UAAiBA,GACzBqF,GAAQN,UAAiBA,GACzBM,GAAQL,QAAiBA,GACzBK,GAAQJ,OAAiBA,GACzBI,GAAQH,QAAiBA,GACzBG,GAAQF,SAAiBA,GACzBE,GAAQD,QAAiBA,GACzBC,GAAQzmC,QAAiBigC,GACzBwG,GAAQtP,QAAiByI,GACzB6G,GAAQp0B,IAAiB+tB,GACzBqG,GAAQ1P,aAAiBA,GACzB0P,GAAQ3P,QAAiBA,GACzB2P,GAAQpY,QAAiBA,GACzBoY,GAAQvY,MAAiBA,GACzBuY,GAAQ5P,KAAiBA,GACzB4P,GAAQ7P,MAAiBA,GACzB6P,GAAQ7e,OAAiBA,GACzB6e,GAAQhQ,MAAiBA,GACzBgQ,GAAQ5J,SAAiBA,GACzB4J,GAAQrmC,YAAiB6gC,GACzBwF,GAAQnhC,SAAiB27B,GACzBwF,GAAQtJ,OAAiB8D,GACzBwF,GAAQxqB,OAAiBA,GACzBwqB,GAAQ9hB,WAAiBA,GAGzB8hB,GAAQC,YAAcvmB,EAAU,sFAAuF8gB,IACvHwF,GAAQxB,KAAOA,GAMf3gB,EAAe,IAAK,EAAG,EAAG,QAC1BA,EAAe,IAAK,EAAG,EAAG,WAI1Be,EAAc,IAAKqe,IACnBre,EAAc,IAAKse,IACnBzd,GAAc,IAAK,SAAUvK,EAAO1Z,EAAO8c,GACvCA,EAAOpB,GAAK,GAAIlgB,MAA6B,IAAxB04B,WAAWxa,EAAO,OAE3CuK,GAAc,IAAK,SAAUvK,EAAO1Z,EAAO8c,GACvCA,EAAOpB,GAAK,GAAIlgB,MAAK2hB,EAAMzD,MAM/BF,EAAMhK,QAAU,SAxzIhB,SAA0B1P,GACtB2Z,GAAe3Z,GAyzIHiyB,IAEhBvY,EAAMpZ,GAAwB2K,GAC9ByO,EAAMze,IAAwBA,GAC9Bye,EAAMxe,IAAwBA,GAC9Bwe,EAAM4F,IAAwBA,GAC9B5F,EAAMW,IAAwBJ,EAC9BP,EAAMyhB,KAAwBuB,GAC9BhjB,EAAMmM,OAAwBsX,GAC9BzjB,EAAMje,OAAwBA,EAC9Bie,EAAMQ,OAAwBkT,GAC9B1T,EAAMupB,QAAwB/mB,EAC9BxC,EAAM+a,SAAwBF,GAC9B7a,EAAMxb,SAAwBA,EAC9Bwb,EAAM+Q,SAAwB4S,GAC9B3jB,EAAMkjB,UAAwBD,GAC9BjjB,EAAMkJ,WAAwB0K,GAC9B5T,EAAM2b,WAAwBA,GAC9B3b,EAAMkM,YAAwBwX,GAC9B1jB,EAAM6Q,YAAwBgT,GAC9B7jB,EAAM6T,aAAwBA,GAC9B7T,EAAMmU,aAAwBA,GAC9BnU,EAAMsT,QAAwBc,GAC9BpU,EAAM8Q,cAAwB8S,GAC9B5jB,EAAMoH,eAAwBA,EAC9BpH,EAAMkrB,qBAAuBhG,GAC7BllB,EAAMmrB,sBAAwB/F,GAC9BplB,EAAM2f,eAAwBP,GAC9Bpf,EAAMxO,UAAwBD,GAEvByO,MAIsBtgB,KAAKX,EAASM,EAAoB,IAAIL,KAI/D,SAAUA,EAAQD,GAEtBC,EAAOD,QAAU,SAASC,GAQzB,MAPIA,GAAOosC,kBACVpsC,EAAO0lB,UAAY,aACnB1lB,EAAOqsC,SAEPrsC,EAAOssC,YACPtsC,EAAOosC,gBAAkB,GAEnBpsC,IAMJ,SAAUA,EAAQD,GAEtB,QAASwsC,GAAeC,GACvB,KAAM,IAAIhoC,OAAM,uBAAyBgoC,EAAM,MAEhDD,EAAer4B,KAAO,WAAa,UACnCq4B,EAAeE,QAAUF,EACzBvsC,EAAOD,QAAUwsC,EACjBA,EAAe/rC,GAAK,IAKhB,SAAUR,EAAQD,IAEM,SAASiS,GAoDrC,QAAS5O,GAAMmI,EAAGmhC,EAAK5P,GACrB,GAAI54B,GAAIwoC,GAAO5P,GAAU,EACrBlQ,EAAK,CAWT,KATA8f,EAAMA,MACNnhC,EAAE2c,cAAcne,QAAQ,eAAgB,SAAU4iC,GAC5C/f,EAAK,KAEP8f,EAAIxoC,EAAI0oB,KAAQggB,EAAWD,MAKxB/f,EAAK,IACV8f,EAAIxoC,EAAI0oB,KAAQ,CAGlB,OAAO8f,GAIT,QAASG,GAAQH,EAAK5P,GACpB,GAAI54B,GAAI44B,GAAU,EACdgQ,EAAMC,CACV,OAAOD,GAAIJ,EAAIxoC,MAAQ4oC,EAAIJ,EAAIxoC,MAAQ4oC,EAAIJ,EAAIxoC,MAAQ4oC,EAAIJ,EAAIxoC,MAAQ,IAAM4oC,EAAIJ,EAAIxoC,MAAQ4oC,EAAIJ,EAAIxoC,MAAQ,IAAM4oC,EAAIJ,EAAIxoC,MAAQ4oC,EAAIJ,EAAIxoC,MAAQ,IAAM4oC,EAAIJ,EAAIxoC,MAAQ4oC,EAAIJ,EAAIxoC,MAAQ,IAAM4oC,EAAIJ,EAAIxoC,MAAQ4oC,EAAIJ,EAAIxoC,MAAQ4oC,EAAIJ,EAAIxoC,MAAQ4oC,EAAIJ,EAAIxoC,MAAQ4oC,EAAIJ,EAAIxoC,MAAQ4oC,EAAIJ,EAAIxoC,MAsBzR,QAAS8oC,GAAG7+B,EAASu+B,EAAK5P,GACxB,GAAI54B,GAAIwoC,GAAO5P,GAAU,EACrBl5B,EAAI8oC,KAERv+B,GAAUA,KAEV,IAAI8+B,OAAgCjpC,KAArBmK,EAAQ8+B,SAAyB9+B,EAAQ8+B,SAAWC,EAM/DC,MAA0BnpC,KAAlBmK,EAAQg/B,MAAsBh/B,EAAQg/B,OAAQ,GAAInqC,OAAOmgB,UAIjEiqB,MAA0BppC,KAAlBmK,EAAQi/B,MAAsBj/B,EAAQi/B,MAAQC,EAAa,EAGnEC,EAAKH,EAAQI,GAAcH,EAAQC,GAAc,GAcrD,IAXIC,EAAK,OAA0BtpC,KAArBmK,EAAQ8+B,WACpBA,EAAWA,EAAW,EAAI,QAKvBK,EAAK,GAAKH,EAAQI,QAAiCvpC,KAAlBmK,EAAQi/B,QAC5CA,EAAQ,GAINA,GAAS,IACX,KAAM,IAAI5oC,OAAM,kDAGlB+oC,GAAaJ,EACbE,EAAaD,EACbF,EAAYD,EAGZE,GAAS,WAGT,IAAIK,IAA4B,KAAb,UAARL,GAA6BC,GAAS,UACjDxpC,GAAEM,KAAOspC,IAAO,GAAK,IACrB5pC,EAAEM,KAAOspC,IAAO,GAAK,IACrB5pC,EAAEM,KAAOspC,IAAO,EAAI,IACpB5pC,EAAEM,KAAY,IAALspC,CAGT,IAAIC,GAAMN,EAAQ,WAAc,IAAQ,SACxCvpC,GAAEM,KAAOupC,IAAQ,EAAI,IACrB7pC,EAAEM,KAAa,IAANupC,EAGT7pC,EAAEM,KAAOupC,IAAQ,GAAK,GAAM,GAC5B7pC,EAAEM,KAAOupC,IAAQ,GAAK,IAGtB7pC,EAAEM,KAAO+oC,IAAa,EAAI,IAG1BrpC,EAAEM,KAAkB,IAAX+oC,CAIT,KAAK,GADDS,GAAOv/B,EAAQu/B,MAAQC,EAClBC,EAAI,EAAGA,EAAI,EAAGA,IACrBhqC,EAAEM,EAAI0pC,GAAKF,EAAKE,EAGlB,OAAOlB,IAAYG,EAAQjpC,GAM7B,QAASN,GAAG6K,EAASu+B,EAAK5P,GAExB,GAAI54B,GAAIwoC,GAAO5P,GAAU,CAEH,iBAAX3uB,KACTu+B,EAAiB,UAAXv+B,EAAsB,GAAI7J,OAAM,IAAM,KAC5C6J,EAAU,MAEZA,EAAUA,KAEV,IAAI0/B,GAAO1/B,EAAQkM,SAAWlM,EAAQ2/B,KAAOC,IAO7C,IAJAF,EAAK,GAAe,GAAVA,EAAK,GAAY,GAC3BA,EAAK,GAAe,GAAVA,EAAK,GAAY,IAGvBnB,EACF,IAAK,GAAI9f,GAAK,EAAGA,EAAK,GAAIA,IACxB8f,EAAIxoC,EAAI0oB,GAAMihB,EAAKjhB,EAIvB,OAAO8f,IAAOG,EAAQgB,GArMxB,GAAIE,GAEAC,EAA8B,mBAAXrlC,QAAyBA,WAA2B,KAAXqJ,EAAyBA,EAAS,IAElG,IAAIg8B,GAAaA,EAAUC,QAAUA,OAAOC,gBAAiB,CAG3D,GAAIC,GAAS,GAAIC,YAAW,GAC5BL,GAAO,WAEL,MADAE,QAAOC,gBAAgBC,GAChBA,GAIX,IAAKJ,EAAM,CAKT,GAAIM,GAAQ,GAAI/pC,OAAM,GACtBypC,GAAO,WACL,IAAK,GAAW/jC,GAAP9F,EAAI,EAAMA,EAAI,GAAIA,IACN,IAAV,EAAJA,KAAiB8F,EAAoB,WAAhBpH,KAAKyX,UAC/Bg0B,EAAMnqC,GAAK8F,MAAY,EAAJ9F,IAAa,GAAK,GAGvC,OAAOmqC,IAkBX,IAAK,GAFDtB,MACAH,KACK1oC,EAAI,EAAGA,EAAI,IAAKA,IACvB6oC,EAAW7oC,IAAMA,EAAI,KAAO2G,SAAS,IAAIL,OAAO,GAChDoiC,EAAWG,EAAW7oC,IAAMA,CAqC9B,IAAIoqC,GAAaP,IAGbJ,GAA2B,EAAhBW,EAAW,GAAWA,EAAW,GAAIA,EAAW,GAAIA,EAAW,GAAIA,EAAW,GAAIA,EAAW,IAGxGpB,EAAmD,OAAtCoB,EAAW,IAAM,EAAIA,EAAW,IAG7Cf,EAAa,EACbF,EAAa,EA4GbxrC,EAAOyB,CACXzB,GAAKmrC,GAAKA,EACVnrC,EAAKyB,GAAKA,EACVzB,EAAKuB,MAAQA,EACbvB,EAAKgrC,QAAUA,EAEf7sC,EAAOD,QAAU8B,IACYnB,KAAKX,EAAU,WAAa,MAAOI,WAI5D,SAAUH,EAAQD,EAASM,GAK/BN,EAAQe,KAAOT,EAAoB,GACnCN,EAAQwuC,QAAUluC,EAAoB,IAGtCN,EAAQyuC,QAAUnuC,EAAoB,IACtCN,EAAQ0uC,SAAWpuC,EAAoB,IACvCN,EAAQ2uC,MAAQruC,EAAoB,IAGpCN,EAAQ4uC,QAAUtuC,EAAoB,IACtCN,EAAQ6uC,SACNC,OAAQxuC,EAAoB,KAC5ByuC,OAAQzuC,EAAoB,KAC5B0uC,QAAS1uC,EAAoB,KAC7B2uC,QAAS3uC,EAAoB,KAC7B4uC,OAAQ5uC,EAAoB,KAC5B6uC,WAAY7uC,EAAoB,MAIlCN,EAAQ6B,OAASvB,EAAoB,IACrCN,EAAQovC,OAAS9uC,EAAoB,KACrCN,EAAQqvC,SAAW/uC,EAAoB,MAInC,SAAUL,EAAQD,GAWtBA,EAAQsvC,gBAAkB,SAAUC,GAElC,IAAK,GAAIC,KAAeD,GAClBA,EAAc7rC,eAAe8rC,KAC/BD,EAAcC,GAAaC,UAAYF,EAAcC,GAAaE,KAClEH,EAAcC,GAAaE,UAYjC1vC,EAAQ2vC,gBAAkB,SAAUJ,GAElC,IAAK,GAAIC,KAAeD,GACtB,GAAIA,EAAc7rC,eAAe8rC,IAC3BD,EAAcC,GAAaC,UAAW,CACxC,IAAK,GAAItrC,GAAI,EAAGA,EAAIorC,EAAcC,GAAaC,UAAUzrC,OAAQG,IAC/DorC,EAAcC,GAAaC,UAAUtrC,GAAG+E,WAAW5G,YAAYitC,EAAcC,GAAaC,UAAUtrC,GAEtGorC,GAAcC,GAAaC,eAUnCzvC,EAAQ4vC,cAAgB,SAAUL,GAChCvvC,EAAQsvC,gBAAgBC,GACxBvvC,EAAQ2vC,gBAAgBJ,GACxBvvC,EAAQsvC,gBAAgBC,IAa1BvvC,EAAQ6vC,cAAgB,SAAUL,EAAaD,EAAeO,GAC5D,GAAI7nC,EAoBJ,OAlBIsnC,GAAc7rC,eAAe8rC,GAG3BD,EAAcC,GAAaC,UAAUzrC,OAAS,GAChDiE,EAAUsnC,EAAcC,GAAaC,UAAU,GAC/CF,EAAcC,GAAaC,UAAUhL,UAGrCx8B,EAAUqI,SAASy/B,gBAAgB,6BAA8BP,GACjEM,EAAah/B,YAAY7I,KAI3BA,EAAUqI,SAASy/B,gBAAgB,6BAA8BP,GACjED,EAAcC,IAAiBE,QAAUD,cACzCK,EAAah/B,YAAY7I,IAE3BsnC,EAAcC,GAAaE,KAAKzqC,KAAKgD,GAC9BA,GAaTjI,EAAQgwC,cAAgB,SAAUR,EAAaD,EAAeU,EAAcC,GAC1E,GAAIjoC,EA4BJ,OA1BIsnC,GAAc7rC,eAAe8rC,GAG3BD,EAAcC,GAAaC,UAAUzrC,OAAS,GAChDiE,EAAUsnC,EAAcC,GAAaC,UAAU,GAC/CF,EAAcC,GAAaC,UAAUhL,UAGrCx8B,EAAUqI,SAASC,cAAci/B,OACZvrC,KAAjBisC,EACFD,EAAaC,aAAajoC,EAASioC,GAEnCD,EAAan/B,YAAY7I,KAK7BA,EAAUqI,SAASC,cAAci/B,GACjCD,EAAcC,IAAiBE,QAAUD,kBACpBxrC,KAAjBisC,EACFD,EAAaC,aAAajoC,EAASioC,GAEnCD,EAAan/B,YAAY7I,IAG7BsnC,EAAcC,GAAaE,KAAKzqC,KAAKgD,GAC9BA,GAgBTjI,EAAQmwC,UAAY,SAAUhb,EAAGpG,EAAGqhB,EAAeb,EAAeO,EAAcO,GAC9E,GAAIr1B,EAqBJ,IApB2B,UAAvBo1B,EAAc3jC,OAChBuO,EAAQhb,EAAQ6vC,cAAc,SAAUN,EAAeO,GACvD90B,EAAMs1B,eAAe,KAAM,KAAMnb,GACjCna,EAAMs1B,eAAe,KAAM,KAAMvhB,GACjC/T,EAAMs1B,eAAe,KAAM,IAAK,GAAMF,EAAcG,QAEpDv1B,EAAQhb,EAAQ6vC,cAAc,OAAQN,EAAeO,GACrD90B,EAAMs1B,eAAe,KAAM,IAAKnb,EAAI,GAAMib,EAAcG,MACxDv1B,EAAMs1B,eAAe,KAAM,IAAKvhB,EAAI,GAAMqhB,EAAcG,MACxDv1B,EAAMs1B,eAAe,KAAM,QAASF,EAAcG,MAClDv1B,EAAMs1B,eAAe,KAAM,SAAUF,EAAcG,WAGxBtsC,KAAzBmsC,EAAc5jC,QAChBwO,EAAMs1B,eAAe,KAAM,QAASF,EAAc5jC,QAEpDwO,EAAMs1B,eAAe,KAAM,QAASF,EAActpC,UAAY,cAI1DupC,EAAU,CACZ,GAAIG,GAAQxwC,EAAQ6vC,cAAc,OAAQN,EAAeO,EACrDO,GAASI,UACXtb,GAAQkb,EAASI,SAGfJ,EAASK,UACX3hB,GAAQshB,EAASK,SAEfL,EAASM,UACXH,EAAMI,YAAcP,EAASM,SAG3BN,EAASvpC,WACX0pC,EAAMF,eAAe,KAAM,QAASD,EAASvpC,UAAY,cAE3D0pC,EAAMF,eAAe,KAAM,IAAKnb,GAChCqb,EAAMF,eAAe,KAAM,IAAKvhB,GAGlC,MAAO/T,IAUThb,EAAQ6wC,QAAU,SAAU1b,EAAGpG,EAAGve,EAAOC,EAAQ3J,EAAWyoC,EAAeO,EAAcrjC,GACvF,GAAc,GAAVgE,EAAa,CACXA,EAAS,IACXA,IAAW,EACXse,GAAKte,EAEP,IAAIqgC,GAAO9wC,EAAQ6vC,cAAc,OAAQN,EAAeO,EACxDgB,GAAKR,eAAe,KAAM,IAAKnb,EAAI,GAAM3kB,GACzCsgC,EAAKR,eAAe,KAAM,IAAKvhB,GAC/B+hB,EAAKR,eAAe,KAAM,QAAS9/B,GACnCsgC,EAAKR,eAAe,KAAM,SAAU7/B,GACpCqgC,EAAKR,eAAe,KAAM,QAASxpC,GAC/B2F,GACFqkC,EAAKR,eAAe,KAAM,QAAS7jC,MAOrC,SAAUxM,EAAQD,EAASM,GAgB/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAgDzF,QAASutC,GAAQ7Z,EAAMxmB,GAerB,GAbIwmB,IAASrwB,MAAMC,QAAQowB,KACzBxmB,EAAUwmB,EACVA,EAAO,MAGTx0B,KAAK2wC,SAAW3iC,MAChBhO,KAAKs8B,SACLt8B,KAAK4D,OAAS,EACd5D,KAAK4wC,SAAW5wC,KAAK2wC,SAASE,SAAW,KACzC7wC,KAAK8wC,SAID9wC,KAAK2wC,SAAS1rC,KAEhB,IAAK,GADDqI,IAAS,EAAIhM,EAAgB,SAAGtB,KAAK2wC,SAAS1rC,MACzClB,EAAI,EAAGgB,EAAMuI,EAAO1J,OAAQG,EAAIgB,EAAKhB,IAAK,CACjD,GAAIuK,GAAQhB,EAAOvJ,GACfxB,EAAQvC,KAAK2wC,SAAS1rC,KAAKqJ,EAE7BtO,MAAK8wC,MAAMxiC,GADA,QAAT/L,GAA4B,WAATA,GAA+B,WAATA,EACvB,OAEAA,EAM1B,GAAIvC,KAAK2wC,SAAS3rC,QAChB,KAAM,IAAIX,OAAM,sDAGlBrE,MAAK+wC,gBAGDvc,GACFx0B,KAAKywB,IAAI+D,GAGXx0B,KAAKgxC,WAAWhjC,GApGlB,GAAImP,GAAajd,EAAoB,IAEjC+wC,EAAcpwC,EAAuBsc,GAErC5b,EAAWrB,EAAoB,IAE/BsB,EAAWX,EAAuBU,GAElCF,EAAQnB,EAAoB,IAE5BoB,EAAST,EAAuBQ,GAIhCV,EAAOT,EAAoB,GAC3BquC,EAAQruC,EAAoB,GAiGhCmuC,GAAQh8B,UAAU2+B,WAAa,SAAUhjC,GACnCA,OAA6BnK,KAAlBmK,EAAQkjC,SACC,IAAlBljC,EAAQkjC,MAENlxC,KAAKmxC,SACPnxC,KAAKmxC,OAAOC,gBACLpxC,MAAKmxC,SAITnxC,KAAKmxC,SACRnxC,KAAKmxC,OAAS5C,EAAM3tC,OAAOZ,MACzB4J,SAAU,MAAO,SAAU,aAIiB,YAA5C,EAAIpI,EAAkB,SAAGwM,EAAQkjC,QACnClxC,KAAKmxC,OAAOH,WAAWhjC,EAAQkjC,UAevC7C,EAAQh8B,UAAUg/B,GAAK,SAAU9oC,EAAOpB,GACtC,GAAImqC,GAActxC,KAAK+wC,aAAaxoC,EAC/B+oC,KACHA,KACAtxC,KAAK+wC,aAAaxoC,GAAS+oC,GAG7BA,EAAYzsC,MACVsC,SAAUA,KAKdknC,EAAQh8B,UAAUk/B,UAAY,WAC5B,KAAM,IAAIltC,OAAM,6DAQlBgqC,EAAQh8B,UAAUm/B,IAAM,SAAUjpC,EAAOpB,GACvC,GAAImqC,GAActxC,KAAK+wC,aAAaxoC,EAChC+oC,KACFtxC,KAAK+wC,aAAaxoC,GAAS+oC,EAAYxqC,OAAO,SAAUiB,GACtD,MAAOA,GAASZ,UAAYA,MAMlCknC,EAAQh8B,UAAUo/B,YAAc,WAC9B,KAAM,IAAIptC,OAAM,gEAUlBgqC,EAAQh8B,UAAUq/B,SAAW,SAAUnpC,EAAOopC,EAAQC,GACpD,GAAa,KAATrpC,EACF,KAAM,IAAIlE,OAAM,yBAGlB,IAAIitC,KACA/oC,KAASvI,MAAK+wC,eAChBO,EAAcA,EAAYzqC,OAAO7G,KAAK+wC,aAAaxoC,KAEjD,KAAOvI,MAAK+wC,eACdO,EAAcA,EAAYzqC,OAAO7G,KAAK+wC,aAAa,MAGrD,KAAK,GAAIhtC,GAAI,EAAGgB,EAAMusC,EAAY1tC,OAAQG,EAAIgB,EAAKhB,IAAK,CACtD,GAAI8tC,GAAaP,EAAYvtC,EACzB8tC,GAAW1qC,UACb0qC,EAAW1qC,SAASoB,EAAOopC,EAAQC,GAAY,QAYrDvD,EAAQh8B,UAAUoe,IAAM,SAAU+D,EAAMod,GACtC,GACIvxC,GADAyxC,KAEAC,EAAK/xC,IAET,IAAImE,MAAMC,QAAQowB,GAEhB,IAAK,GAAIzwB,GAAI,EAAGgB,EAAMyvB,EAAK5wB,OAAQG,EAAIgB,EAAKhB,IAC1C1D,EAAK0xC,EAAGC,SAASxd,EAAKzwB,IACtB+tC,EAASjtC,KAAKxE,OAEX,CAAA,IAAIm0B,GAAyF,gBAAhE,KAATA,EAAuB,aAAc,EAAIhzB,EAAkB,SAAGgzB,IAKvF,KAAM,IAAInwB,OAAM,mBAHhBhE,GAAK0xC,EAAGC,SAASxd,GACjBsd,EAASjtC,KAAKxE,GAShB,MAJIyxC,GAASluC,QACX5D,KAAK0xC,SAAS,OAASO,MAAOH,GAAYF,GAGrCE,GASTzD,EAAQh8B,UAAU6/B,OAAS,SAAU1d,EAAMod,GACzC,GAAIE,MACAK,KACAC,KACAC,KACAN,EAAK/xC,KACL6wC,EAAUkB,EAAGnB,SAEb0B,EAAc,SAAqB1jC,GACrC,GAAIvO,GAAKuO,EAAKiiC,EACd,IAAIkB,EAAGzV,MAAMj8B,GAAK,CAChB,GAAIkyC,GAAU5xC,EAAKC,UAAWmxC,EAAGzV,MAAMj8B,GAEvCA,GAAK0xC,EAAGS,YAAY5jC,GACpBujC,EAAWttC,KAAKxE,GAChBgyC,EAAYxtC,KAAK+J,GACjBwjC,EAAQvtC,KAAK0tC,OAGblyC,GAAK0xC,EAAGC,SAASpjC,GACjBkjC,EAASjtC,KAAKxE,GAIlB,IAAI8D,MAAMC,QAAQowB,GAEhB,IAAK,GAAIzwB,GAAI,EAAGgB,EAAMyvB,EAAK5wB,OAAQG,EAAIgB,EAAKhB,IACtCywB,EAAKzwB,IAA4C,YAAtC,EAAIvC,EAAkB,SAAGgzB,EAAKzwB,IAC3CuuC,EAAY9d,EAAKzwB,IAEjBuhB,QAAQH,KAAK,wDAA0DphB,OAGtE,CAAA,IAAIywB,GAAyF,gBAAhE,KAATA,EAAuB,aAAc,EAAIhzB,EAAkB,SAAGgzB,IAIvF,KAAM,IAAInwB,OAAM,mBAFhBiuC,GAAY9d,GAQd,GAHIsd,EAASluC,QACX5D,KAAK0xC,SAAS,OAASO,MAAOH,GAAYF,GAExCO,EAAWvuC,OAAQ,CACrB,GAAIM,IAAU+tC,MAAOE,EAAYC,QAASA,EAAS5d,KAAM6d,EAQzDryC,MAAK0xC,SAAS,SAAUxtC,EAAO0tC,GAGjC,MAAOE,GAASjrC,OAAOsrC,IA8BzB9D,EAAQh8B,UAAUoF,IAAM,SAAUiI,GAChC,GAGIrf,GAAIoyC,EAAKzkC,EAHT+jC,EAAK/xC,KAIL0yC,EAAY/xC,EAAK4E,QAAQ5B,UAAU,GACtB,WAAb+uC,GAAsC,UAAbA,GAE3BryC,EAAKsD,UAAU,GACfqK,EAAUrK,UAAU,IACE,SAAb+uC,GAETD,EAAM9uC,UAAU,GAChBqK,EAAUrK,UAAU,IAGpBqK,EAAUrK,UAAU,EAItB,IAAIgvC,EACJ,IAAI3kC,GAAWA,EAAQ2kC,WAAY,CAEjCA,GAA2D,IADtC,QAAS,UACH/tC,QAAQoJ,EAAQ2kC,YAAoB,QAAU3kC,EAAQ2kC,eAEjFA,GAAa,OAIf,IAGI/jC,GACAgkC,EACAC,EACA9uC,EACAgB,EAPAE,EAAO+I,GAAWA,EAAQ/I,MAAQjF,KAAK2wC,SAAS1rC,KAChD6B,EAASkH,GAAWA,EAAQlH,OAC5BmrC,IAQJ,QAAUpuC,IAANxD,GAEFuO,EAAOmjC,EAAGe,SAASzyC,EAAI4E,KACX6B,IAAWA,EAAO8H,KAC5BA,EAAO,UAEJ,QAAW/K,IAAP4uC,EAET,IAAK1uC,EAAI,EAAGgB,EAAM0tC,EAAI7uC,OAAQG,EAAIgB,EAAKhB,IACrC6K,EAAOmjC,EAAGe,SAASL,EAAI1uC,GAAIkB,GACtB6B,IAAUA,EAAO8H,IACpBqjC,EAAMptC,KAAK+J,OAMf,KADAgkC,GAAU,EAAItxC,EAAgB,SAAGtB,KAAKs8B,OACjCv4B,EAAI,EAAGgB,EAAM6tC,EAAQhvC,OAAQG,EAAIgB,EAAKhB,IACzC8uC,EAASD,EAAQ7uC,GACjB6K,EAAOmjC,EAAGe,SAASD,EAAQ5tC,GACtB6B,IAAUA,EAAO8H,IACpBqjC,EAAMptC,KAAK+J,EAWjB,IALIZ,GAAWA,EAAQ+kC,WAAelvC,IAANxD,GAC9BL,KAAKgzC,MAAMf,EAAOjkC,EAAQ+kC,OAIxB/kC,GAAWA,EAAQV,OAAQ,CAC7B,GAAIA,GAASU,EAAQV,MACrB,QAAUzJ,IAANxD,EACFuO,EAAO5O,KAAKizC,cAAcrkC,EAAMtB,OAEhC,KAAKvJ,EAAI,EAAGgB,EAAMktC,EAAMruC,OAAQG,EAAIgB,EAAKhB,IACvCkuC,EAAMluC,GAAK/D,KAAKizC,cAAchB,EAAMluC,GAAIuJ,GAM9C,GAAkB,UAAdqlC,EAAwB,CAC1B,GACIO,GADAnpC,IAEJ,KAAKhG,EAAI,EAAGgB,EAAMktC,EAAMruC,OAAQG,EAAIgB,EAAKhB,IACvCmvC,EAAYjB,EAAMluC,GAClBgG,EAAOmpC,EAAU7yC,IAAM6yC,CAEzB,OAAOnpC,GAEP,WAAUlG,IAANxD,EAEKuO,EAGAqjC,GAab5D,EAAQh8B,UAAU8gC,OAAS,SAAUnlC,GACnC,GAKIjK,GACAgB,EACA1E,EACAuO,EACAqjC,EATAzd,EAAOx0B,KAAKs8B,MACZx1B,EAASkH,GAAWA,EAAQlH,OAC5BisC,EAAQ/kC,GAAWA,EAAQ+kC,MAC3B9tC,EAAO+I,GAAWA,EAAQ/I,MAAQjF,KAAK2wC,SAAS1rC,KAChD2tC,GAAU,EAAItxC,EAAgB,SAAGkzB,GAMjCie,IAEJ,IAAI3rC,EAEF,GAAIisC,EAAO,CAGT,IADAd,KACKluC,EAAI,EAAGgB,EAAM6tC,EAAQhvC,OAAQG,EAAIgB,EAAKhB,IACzC1D,EAAKuyC,EAAQ7uC,GACb6K,EAAO5O,KAAK8yC,SAASzyC,EAAI4E,GACrB6B,EAAO8H,IACTqjC,EAAMptC,KAAK+J,EAMf,KAFA5O,KAAKgzC,MAAMf,EAAOc,GAEbhvC,EAAI,EAAGgB,EAAMktC,EAAMruC,OAAQG,EAAIgB,EAAKhB,IACvC0uC,EAAI5tC,KAAKotC,EAAMluC,GAAG/D,KAAK4wC,eAIzB,KAAK7sC,EAAI,EAAGgB,EAAM6tC,EAAQhvC,OAAQG,EAAIgB,EAAKhB,IACzC1D,EAAKuyC,EAAQ7uC,GACb6K,EAAO5O,KAAK8yC,SAASzyC,EAAI4E,GACrB6B,EAAO8H,IACT6jC,EAAI5tC,KAAK+J,EAAK5O,KAAK4wC,eAMzB,IAAImC,EAAO,CAGT,IADAd,KACKluC,EAAI,EAAGgB,EAAM6tC,EAAQhvC,OAAQG,EAAIgB,EAAKhB,IACzC1D,EAAKuyC,EAAQ7uC,GACbkuC,EAAMptC,KAAK2vB,EAAKn0B,GAKlB,KAFAL,KAAKgzC,MAAMf,EAAOc,GAEbhvC,EAAI,EAAGgB,EAAMktC,EAAMruC,OAAQG,EAAIgB,EAAKhB,IACvC0uC,EAAI5tC,KAAKotC,EAAMluC,GAAG/D,KAAK4wC,eAIzB,KAAK7sC,EAAI,EAAGgB,EAAM6tC,EAAQhvC,OAAQG,EAAIgB,EAAKhB,IACzC1D,EAAKuyC,EAAQ7uC,GACb6K,EAAO4lB,EAAKn0B,GACZoyC,EAAI5tC,KAAK+J,EAAK5O,KAAK4wC,UAKzB,OAAO6B,IAOTpE,EAAQh8B,UAAU+gC,WAAa,WAC7B,MAAOpzC,OAaTquC,EAAQh8B,UAAUnL,QAAU,SAAUC,EAAU6G,GAC9C,GAIIjK,GACAgB,EACA6J,EACAvO,EAPAyG,EAASkH,GAAWA,EAAQlH,OAC5B7B,EAAO+I,GAAWA,EAAQ/I,MAAQjF,KAAK2wC,SAAS1rC,KAChDuvB,EAAOx0B,KAAKs8B,MACZsW,GAAU,EAAItxC,EAAgB,SAAGkzB,EAMrC,IAAIxmB,GAAWA,EAAQ+kC,MAAO,CAE5B,GAAId,GAAQjyC,KAAKyX,IAAIzJ,EAErB,KAAKjK,EAAI,EAAGgB,EAAMktC,EAAMruC,OAAQG,EAAIgB,EAAKhB,IACvC6K,EAAOqjC,EAAMluC,GACb1D,EAAKuO,EAAK5O,KAAK4wC,UACfzpC,EAASyH,EAAMvO,OAIjB,KAAK0D,EAAI,EAAGgB,EAAM6tC,EAAQhvC,OAAQG,EAAIgB,EAAKhB,IACzC1D,EAAKuyC,EAAQ7uC,GACb6K,EAAO5O,KAAK8yC,SAASzyC,EAAI4E,GACpB6B,IAAUA,EAAO8H,IACpBzH,EAASyH,EAAMvO,IAiBvBguC,EAAQh8B,UAAUvH,IAAM,SAAU3D,EAAU6G,GAC1C,GAKIjK,GACAgB,EACA1E,EACAuO,EARA9H,EAASkH,GAAWA,EAAQlH,OAC5B7B,EAAO+I,GAAWA,EAAQ/I,MAAQjF,KAAK2wC,SAAS1rC,KAChDouC,KACA7e,EAAOx0B,KAAKs8B,MACZsW,GAAU,EAAItxC,EAAgB,SAAGkzB,EAOrC,KAAKzwB,EAAI,EAAGgB,EAAM6tC,EAAQhvC,OAAQG,EAAIgB,EAAKhB,IACzC1D,EAAKuyC,EAAQ7uC,GACb6K,EAAO5O,KAAK8yC,SAASzyC,EAAI4E,GACpB6B,IAAUA,EAAO8H,IACpBykC,EAAYxuC,KAAKsC,EAASyH,EAAMvO,GASpC,OAJI2N,IAAWA,EAAQ+kC,OACrB/yC,KAAKgzC,MAAMK,EAAarlC,EAAQ+kC,OAG3BM,GAUThF,EAAQh8B,UAAU4gC,cAAgB,SAAUrkC,EAAMtB,GAChD,IAAKsB,EAEH,MAAOA,EAGT,IAGI7K,GACAuK,EAJAglC,KACAC,GAAa,EAAIjyC,EAAgB,SAAGsN,GACpC7J,EAAMwuC,EAAW3vC,MAIrB,IAAIO,MAAMC,QAAQkJ,GAChB,IAAKvJ,EAAI,EAAGA,EAAIgB,EAAKhB,IACnBuK,EAAQilC,EAAWxvC,IACW,GAA1BuJ,EAAO1I,QAAQ0J,KACjBglC,EAAahlC,GAASM,EAAKN,QAI/B,KAAKvK,EAAI,EAAGA,EAAIgB,EAAKhB,IACnBuK,EAAQilC,EAAWxvC,GACfuJ,EAAOhK,eAAegL,KACxBglC,EAAahmC,EAAOgB,IAAUM,EAAKN,GAKzC,OAAOglC,IASTjF,EAAQh8B,UAAU2gC,MAAQ,SAAUf,EAAOc,GACzC,GAAIpyC,EAAK+B,SAASqwC,GAAQ,CAExB,GAAI99B,GAAO89B,CACXd,GAAMppB,KAAK,SAAUrlB,EAAGC,GACtB,GAAI+vC,GAAKhwC,EAAEyR,GACPw+B,EAAKhwC,EAAEwR,EACX,OAAOu+B,GAAKC,EAAK,EAAID,EAAKC,GAAM,EAAI,QAEjC,CAAA,GAAqB,kBAAVV,GAOd,KAAM,IAAIxuC,WAAU,uCALtB0tC,GAAMppB,KAAKkqB,KAgBf1E,EAAQh8B,UAAUqhC,OAAS,SAAUrzC,EAAIuxC,GACvC,GAGI7tC,GACAgB,EACA8tC,EACAjkC,EANA+kC,KACAC,KACAnB,IASJ,KAFAA,EAAMtuC,MAAMC,QAAQ/D,GAAMA,GAAMA,GAE3B0D,EAAI,EAAGgB,EAAM0tC,EAAI7uC,OAAQG,EAAIgB,EAAKhB,KACrC6K,EAAO5O,KAAK6zC,QAAQpB,EAAI1uC,UAGRF,KADdgvC,EAASjkC,EAAK5O,KAAK4wC,aAEjB+C,EAAW9uC,KAAKguC,GAChBe,EAAa/uC,KAAK+J,GASxB,OAJI+kC,GAAW/vC,QACb5D,KAAK0xC,SAAS,UAAYO,MAAO0B,EAAYvB,QAASwB,GAAgBhC,GAGjE+B,GASTtF,EAAQh8B,UAAUwhC,QAAU,SAAUxzC,GACpC,GAAIuO,GAAMklC,CAUV,OAPInzC,GAAKgB,SAAStB,IAAOM,EAAK+B,SAASrC,GACrCyzC,EAAQzzC,EACCA,GAAmF,gBAA9D,KAAPA,EAAqB,aAAc,EAAImB,EAAkB,SAAGnB,MACnFyzC,EAAQzzC,EAAGL,KAAK4wC,eAIJ/sC,KAAViwC,GAAuB9zC,KAAKs8B,MAAMwX,IACpCllC,EAAO5O,KAAKs8B,MAAMwX,SACX9zC,MAAKs8B,MAAMwX,GAClB9zC,KAAK4D,SACEgL,GAEF,MAQTy/B,EAAQh8B,UAAU0hC,MAAQ,SAAUnC,GAClC,GAAI7tC,GAAGgB,EACH0tC,GAAM,EAAInxC,EAAgB,SAAGtB,KAAKs8B,OAClC2V,IAEJ,KAAKluC,EAAI,EAAGgB,EAAM0tC,EAAI7uC,OAAQG,EAAIgB,EAAKhB,IACrCkuC,EAAMptC,KAAK7E,KAAKs8B,MAAMmW,EAAI1uC,IAQ5B,OALA/D,MAAKs8B,SACLt8B,KAAK4D,OAAS,EAEd5D,KAAK0xC,SAAS,UAAYO,MAAOQ,EAAKL,QAASH,GAASL,GAEjDa,GAQTpE,EAAQh8B,UAAUhQ,IAAM,SAAUiM,GAChC,GAIIvK,GACAgB,EALAyvB,EAAOx0B,KAAKs8B,MACZsW,GAAU,EAAItxC,EAAgB,SAAGkzB,GACjCnyB,EAAM,KACN2xC,EAAW,IAIf,KAAKjwC,EAAI,EAAGgB,EAAM6tC,EAAQhvC,OAAQG,EAAIgB,EAAKhB,IAAK,CAC9C,GAAI1D,GAAKuyC,EAAQ7uC,GACb6K,EAAO4lB,EAAKn0B,GACZ4zC,EAAYrlC,EAAKN,EACJ,OAAb2lC,KAAuB5xC,GAAO4xC,EAAYD,KAC5C3xC,EAAMuM,EACNolC,EAAWC,GAIf,MAAO5xC,IAQTgsC,EAAQh8B,UAAUjQ,IAAM,SAAUkM,GAChC,GAIIvK,GACAgB,EALAyvB,EAAOx0B,KAAKs8B,MACZsW,GAAU,EAAItxC,EAAgB,SAAGkzB,GACjCpyB,EAAM,KACN8xC,EAAW,IAIf,KAAKnwC,EAAI,EAAGgB,EAAM6tC,EAAQhvC,OAAQG,EAAIgB,EAAKhB,IAAK,CAC9C,GAAI1D,GAAKuyC,EAAQ7uC,GACb6K,EAAO4lB,EAAKn0B,GACZ4zC,EAAYrlC,EAAKN,EACJ,OAAb2lC,KAAuB7xC,GAAO6xC,EAAYC,KAC5C9xC,EAAMwM,EACNslC,EAAWD,GAIf,MAAO7xC,IAUTisC,EAAQh8B,UAAU8hC,SAAW,SAAU7lC,GACrC,GAKIvK,GAAG8J,EAAG9I,EALNyvB,EAAOx0B,KAAKs8B,MACZsW,GAAU,EAAItxC,EAAgB,SAAGkzB,GACjCtf,KACAk/B,EAAYp0C,KAAK2wC,SAAS1rC,MAAQjF,KAAK2wC,SAAS1rC,KAAKqJ,IAAU,KAC/D+lC,EAAQ,CAGZ,KAAKtwC,EAAI,EAAGgB,EAAM6tC,EAAQhvC,OAAQG,EAAIgB,EAAKhB,IAAK,CAC9C,GAAI1D,GAAKuyC,EAAQ7uC,GACb6K,EAAO4lB,EAAKn0B,GACZkC,EAAQqM,EAAKN,GACbgmC,GAAS,CACb,KAAKzmC,EAAI,EAAGA,EAAIwmC,EAAOxmC,IACrB,GAAIqH,EAAOrH,IAAMtL,EAAO,CACtB+xC,GAAS,CACT,OAGCA,OAAoBzwC,KAAVtB,IACb2S,EAAOm/B,GAAS9xC,EAChB8xC,KAIJ,GAAID,EACF,IAAKrwC,EAAI,EAAGgB,EAAMmQ,EAAOtR,OAAQG,EAAIgB,EAAKhB,IACxCmR,EAAOnR,GAAKpD,EAAKqE,QAAQkQ,EAAOnR,GAAIqwC,EAIxC,OAAOl/B,IASTm5B,EAAQh8B,UAAU2/B,SAAW,SAAUpjC,GACrC,GAAIvO,GAAKuO,EAAK5O,KAAK4wC,SAEnB,QAAU/sC,IAANxD,GAEF,GAAIL,KAAKs8B,MAAMj8B,GAEb,KAAM,IAAIgE,OAAM,iCAAmChE,EAAK,uBAI1DA,GAAKM,EAAKuC,aACV0L,EAAK5O,KAAK4wC,UAAYvwC,CAGxB,IAEI0D,GACAgB,EAHAkH,KACAqB,GAAS,EAAIhM,EAAgB,SAAGsN,EAGpC,KAAK7K,EAAI,EAAGgB,EAAMuI,EAAO1J,OAAQG,EAAIgB,EAAKhB,IAAK,CAC7C,GAAIuK,GAAQhB,EAAOvJ,GACfqwC,EAAYp0C,KAAK8wC,MAAMxiC,EAC3BrC,GAAEqC,GAAS3N,EAAKqE,QAAQ4J,EAAKN,GAAQ8lC,GAKvC,MAHAp0C,MAAKs8B,MAAMj8B,GAAM4L,EACjBjM,KAAK4D,SAEEvD,GAUTguC,EAAQh8B,UAAUygC,SAAW,SAAUzyC,EAAIk0C,GACzC,GAAIjmC,GAAO/L,EAAOwB,EAAGgB,EAGjByvC,EAAMx0C,KAAKs8B,MAAMj8B,EACrB,KAAKm0C,EACH,MAAO,KAIT,IAAIC,MACAnnC,GAAS,EAAIhM,EAAgB,SAAGkzC,EAEpC,IAAID,EACF,IAAKxwC,EAAI,EAAGgB,EAAMuI,EAAO1J,OAAQG,EAAIgB,EAAKhB,IACxCuK,EAAQhB,EAAOvJ,GACfxB,EAAQiyC,EAAIlmC,GACZmmC,EAAUnmC,GAAS3N,EAAKqE,QAAQzC,EAAOgyC,EAAMjmC,QAI/C,KAAKvK,EAAI,EAAGgB,EAAMuI,EAAO1J,OAAQG,EAAIgB,EAAKhB,IACxCuK,EAAQhB,EAAOvJ,GACfxB,EAAQiyC,EAAIlmC,GACZmmC,EAAUnmC,GAAS/L,CAQvB,OAJKkyC,GAAUz0C,KAAK4wC,YAClB6D,EAAUz0C,KAAK4wC,UAAY4D,EAAIn0C,IAG1Bo0C,GAWTpG,EAAQh8B,UAAUmgC,YAAc,SAAU5jC,GACxC,GAAIvO,GAAKuO,EAAK5O,KAAK4wC,SACnB,QAAU/sC,IAANxD,EACF,KAAM,IAAIgE,OAAM,8CAA+C,EAAI4sC,EAAqB,SAAGriC,GAAQ,IAErG,IAAI3C,GAAIjM,KAAKs8B,MAAMj8B,EACnB,KAAK4L,EAEH,KAAM,IAAI5H,OAAM,uCAAyChE,EAAK,SAKhE,KAAK,GADDiN,IAAS,EAAIhM,EAAgB,SAAGsN,GAC3B7K,EAAI,EAAGgB,EAAMuI,EAAO1J,OAAQG,EAAIgB,EAAKhB,IAAK,CACjD,GAAIuK,GAAQhB,EAAOvJ,GACfqwC,EAAYp0C,KAAK8wC,MAAMxiC,EAC3BrC,GAAEqC,GAAS3N,EAAKqE,QAAQ4J,EAAKN,GAAQ8lC,GAGvC,MAAO/zC,IAGTR,EAAOD,QAAUyuC,GAIb,SAAUxuC,EAAQD,EAASM,GAE/BL,EAAOD,SAAYoB,QAAWd,EAAoB,IAAKa,YAAY,IAI/D,SAAUlB,EAAQD,EAASM,GAE/B,GAAImV,GAAQnV,EAAoB,IAC5B+c,EAAQ5H,EAAK6H,OAAS7H,EAAK6H,MAAQE,UAAWF,KAAKE,WACvDvd,GAAOD,QAAU,SAAmBuT,GAClC,MAAO8J,GAAMG,UAAU9G,MAAM2G,EAAOtZ,aAKlC,SAAU9D,EAAQD,GAiBtB,QAAS2uC,GAAMvgC,GAEbhO,KAAK00C,MAAQ,KACb10C,KAAKqC,IAAMsyC,EAAAA,EAGX30C,KAAKmxC,UACLnxC,KAAK40C,SAAW,KAChB50C,KAAK60C,UAAY,KAEjB70C,KAAKgxC,WAAWhjC,GAgBlBugC,EAAMl8B,UAAU2+B,WAAa,SAAUhjC,GACjCA,OAAoC,KAAlBA,EAAQ0mC,QAC5B10C,KAAK00C,MAAQ1mC,EAAQ0mC,OAEnB1mC,OAAkC,KAAhBA,EAAQ3L,MAC5BrC,KAAKqC,IAAM2L,EAAQ3L,KAGrBrC,KAAK80C,kBAsBPvG,EAAM3tC,OAAS,SAAUgB,EAAQoM,GAC/B,GAAIkjC,GAAQ,GAAI3C,GAAMvgC,EAEtB,QAAqBnK,KAAjBjC,EAAOmzC,MACT,KAAM,IAAI1wC,OAAM,6CAElBzC,GAAOmzC,MAAQ,WACb7D,EAAM6D,QAGR,IAAIzgC,KACFW,KAAM,QACN+/B,aAAUnxC,IAGZ,IAAImK,GAAWA,EAAQpE,QACrB,IAAK,GAAI7F,GAAI,EAAGA,EAAIiK,EAAQpE,QAAQhG,OAAQG,IAAK,CAC/C,GAAIkR,GAAOjH,EAAQpE,QAAQ7F,EAC3BuQ,GAAQzP,MACNoQ,KAAMA,EACN+/B,SAAUpzC,EAAOqT,KAEnBi8B,EAAMtnC,QAAQhI,EAAQqT,GAS1B,MALAi8B,GAAM2D,WACJjzC,OAAQA,EACR0S,QAASA,GAGJ48B,GAOT3C,EAAMl8B,UAAU++B,QAAU,WAGxB,GAFApxC,KAAK+0C,QAED/0C,KAAK60C,UAAW,CAGlB,IAAK,GAFDjzC,GAAS5B,KAAK60C,UAAUjzC,OACxB0S,EAAUtU,KAAK60C,UAAUvgC,QACpBvQ,EAAI,EAAGA,EAAIuQ,EAAQ1Q,OAAQG,IAAK,CACvC,GAAIkxC,GAAS3gC,EAAQvQ,EACjBkxC,GAAOD,SACTpzC,EAAOqzC,EAAOhgC,MAAQggC,EAAOD,eAEtBpzC,GAAOqzC,EAAOhgC,MAGzBjV,KAAK60C,UAAY,OASrBtG,EAAMl8B,UAAUzI,QAAU,SAAUhI,EAAQqzC,GAC1C,GAAIlD,GAAK/xC,KACLg1C,EAAWpzC,EAAOqzC,EACtB,KAAKD,EACH,KAAM,IAAI3wC,OAAM,UAAY4wC,EAAS,aAGvCrzC,GAAOqzC,GAAU,WAGf,IAAK,GADDv1B,MACK3b,EAAI,EAAGA,EAAIJ,UAAUC,OAAQG,IACpC2b,EAAK3b,GAAKJ,UAAUI,EAItBguC,GAAGb,OACDxxB,KAAMA,EACNjY,GAAIutC,EACJE,QAASl1C,SASfuuC,EAAMl8B,UAAU6+B,MAAQ,SAAUiE,GACX,kBAAVA,GACTn1C,KAAKmxC,OAAOtsC,MAAO4C,GAAI0tC,IAEvBn1C,KAAKmxC,OAAOtsC,KAAKswC,GAGnBn1C,KAAK80C,kBAOPvG,EAAMl8B,UAAUyiC,eAAiB,WAQ/B,GANI90C,KAAKmxC,OAAOvtC,OAAS5D,KAAKqC,KAC5BrC,KAAK+0C,QAIPK,aAAap1C,KAAK40C,UACd50C,KAAKkxC,MAAMttC,OAAS,GAA2B,gBAAf5D,MAAK00C,MAAoB,CAC3D,GAAI3C,GAAK/xC,IACTA,MAAK40C,SAAWS,WAAW,WACzBtD,EAAGgD,SACF/0C,KAAK00C,SAOZnG,EAAMl8B,UAAU0iC,MAAQ,WACtB,KAAO/0C,KAAKmxC,OAAOvtC,OAAS,GAAG,CAC7B,GAAIuxC,GAAQn1C,KAAKmxC,OAAO9M,OACxB8Q,GAAM1tC,GAAG6O,MAAM6+B,EAAMD,SAAWC,EAAM1tC,GAAI0tC,EAAMz1B,YAIpD7f,EAAOD,QAAU2uC,GAIb,SAAU1uC,EAAQD,EAASM,GAuB/B,QAASouC,GAAS9Z,EAAMxmB,GACtBhO,KAAKs8B,MAAQ,KACbt8B,KAAKs1C,QACLt1C,KAAK4D,OAAS,EACd5D,KAAK2wC,SAAW3iC,MAChBhO,KAAK4wC,SAAW,KAChB5wC,KAAK+wC,eAEL,IAAIgB,GAAK/xC,IACTA,MAAK+H,SAAW,WACdgqC,EAAGwD,SAASj/B,MAAMy7B,EAAIpuC,YAGxB3D,KAAKw1C,QAAQhhB,GAhCf,GAAInzB,GAAQnB,EAAoB,IAE5BoB,EAEJ,SAAgCR,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,IAFrDO,GAIhCV,EAAOT,EAAoB,GAC3BmuC,EAAUnuC,EAAoB,GAmClCouC,GAASj8B,UAAUmjC,QAAU,SAAUhhB,GACrC,GAAIie,GAAKpyC,EAAI0D,EAAGgB,EAAKktC,CAErB,IAAIjyC,KAAKs8B,MAAO,CAUd,IARIt8B,KAAKs8B,MAAMkV,KACbxxC,KAAKs8B,MAAMkV,IAAI,IAAKxxC,KAAK+H,UAI3B0qC,EAAMzyC,KAAKs8B,MAAM6W,QAASrsC,OAAQ9G,KAAK2wC,UAAY3wC,KAAK2wC,SAAS7pC,SACjEmrC,KAEKluC,EAAI,EAAGgB,EAAM0tC,EAAI7uC,OAAQG,EAAIgB,EAAKhB,IACrCkuC,EAAMptC,KAAK7E,KAAKs8B,MAAMA,MAAMmW,EAAI1uC,IAGlC/D,MAAKs1C,QACLt1C,KAAK4D,OAAS,EACd5D,KAAK0xC,SAAS,UAAYO,MAAOQ,EAAKL,QAASH,IAKjD,GAFAjyC,KAAKs8B,MAAQ9H,EAETx0B,KAAKs8B,MAAO,CAMd,IAJAt8B,KAAK4wC,SAAW5wC,KAAK2wC,SAASE,SAAW7wC,KAAKs8B,OAASt8B,KAAKs8B,MAAMtuB,SAAWhO,KAAKs8B,MAAMtuB,QAAQ6iC,SAAW,KAG3G4B,EAAMzyC,KAAKs8B,MAAM6W,QAASrsC,OAAQ9G,KAAK2wC,UAAY3wC,KAAK2wC,SAAS7pC,SAC5D/C,EAAI,EAAGgB,EAAM0tC,EAAI7uC,OAAQG,EAAIgB,EAAKhB,IACrC1D,EAAKoyC,EAAI1uC,GACT/D,KAAKs1C,KAAKj1C,IAAM,CAElBL,MAAK4D,OAAS6uC,EAAI7uC,OAClB5D,KAAK0xC,SAAS;qBAASO,MAAOQ,IAG1BzyC,KAAKs8B,MAAM+U,IACbrxC,KAAKs8B,MAAM+U,GAAG,IAAKrxC,KAAK+H,YAS9BumC,EAASj8B,UAAUojC,QAAU,WAC3B,GAAIp1C,GAAI0D,EAAGgB,EACP0tC,EAAMzyC,KAAKs8B,MAAM6W,QAASrsC,OAAQ9G,KAAK2wC,UAAY3wC,KAAK2wC,SAAS7pC,SACjE4uC,GAAS,EAAIp0C,EAAgB,SAAGtB,KAAKs1C,MACrCK,KACA7D,KACA6B,KACAC,IAGJ,KAAK7vC,EAAI,EAAGgB,EAAM0tC,EAAI7uC,OAAQG,EAAIgB,EAAKhB,IACrC1D,EAAKoyC,EAAI1uC,GACT4xC,EAAOt1C,IAAM,EACRL,KAAKs1C,KAAKj1C,KACbyxC,EAASjtC,KAAKxE,GACdL,KAAKs1C,KAAKj1C,IAAM,EAKpB,KAAK0D,EAAI,EAAGgB,EAAM2wC,EAAO9xC,OAAQG,EAAIgB,EAAKhB,IACxC1D,EAAKq1C,EAAO3xC,GACP4xC,EAAOt1C,KACVszC,EAAW9uC,KAAKxE,GAChBuzC,EAAa/uC,KAAK7E,KAAKs8B,MAAMA,MAAMj8B,UAC5BL,MAAKs1C,KAAKj1C,GAIrBL,MAAK4D,QAAUkuC,EAASluC,OAAS+vC,EAAW/vC,OAGxCkuC,EAASluC,QACX5D,KAAK0xC,SAAS,OAASO,MAAOH,IAE5B6B,EAAW/vC,QACb5D,KAAK0xC,SAAS,UAAYO,MAAO0B,EAAYvB,QAASwB,KAsC1DtF,EAASj8B,UAAUoF,IAAM,SAAUiI,GACjC,GAGI+yB,GAAKzkC,EAASwmB,EAHdud,EAAK/xC,KAIL0yC,EAAY/xC,EAAK4E,QAAQ5B,UAAU,GACtB,WAAb+uC,GAAsC,UAAbA,GAAsC,SAAbA,GAEpDD,EAAM9uC,UAAU,GAChBqK,EAAUrK,UAAU,GACpB6wB,EAAO7wB,UAAU,KAGjBqK,EAAUrK,UAAU,GACpB6wB,EAAO7wB,UAAU,GAInB,IAAIiyC,GAAcj1C,EAAKC,UAAWZ,KAAK2wC,SAAU3iC,EAG7ChO,MAAK2wC,SAAS7pC,QAAUkH,GAAWA,EAAQlH,SAC7C8uC,EAAY9uC,OAAS,SAAU8H,GAC7B,MAAOmjC,GAAGpB,SAAS7pC,OAAO8H,IAASZ,EAAQlH,OAAO8H,IAKtD,IAAIinC,KAOJ,YANWhyC,IAAP4uC,GACFoD,EAAahxC,KAAK4tC,GAEpBoD,EAAahxC,KAAK+wC,GAClBC,EAAahxC,KAAK2vB,GAEXx0B,KAAKs8B,OAASt8B,KAAKs8B,MAAM7kB,IAAInB,MAAMtW,KAAKs8B,MAAOuZ,IAWxDvH,EAASj8B,UAAU8gC,OAAS,SAAUnlC,GACpC,GAAIykC,EAEJ,IAAIzyC,KAAKs8B,MAAO,CACd,GACIx1B,GADAgvC,EAAgB91C,KAAK2wC,SAAS7pC,MAK9BA,GAFAkH,GAAWA,EAAQlH,OACjBgvC,EACO,SAAgBlnC,GACvB,MAAOknC,GAAclnC,IAASZ,EAAQlH,OAAO8H,IAGtCZ,EAAQlH,OAGVgvC,EAGXrD,EAAMzyC,KAAKs8B,MAAM6W,QACfrsC,OAAQA,EACRisC,MAAO/kC,GAAWA,EAAQ+kC,YAG5BN,KAGF,OAAOA,IAcTnE,EAASj8B,UAAUvH,IAAM,SAAU3D,EAAU6G,GAC3C,GAAIqlC,KACJ,IAAIrzC,KAAKs8B,MAAO,CACd,GACIx1B,GADAgvC,EAAgB91C,KAAK2wC,SAAS7pC,MAK9BA,GAFAkH,GAAWA,EAAQlH,OACjBgvC,EACO,SAAgBlnC,GACvB,MAAOknC,GAAclnC,IAASZ,EAAQlH,OAAO8H,IAGtCZ,EAAQlH,OAGVgvC,EAGXzC,EAAcrzC,KAAKs8B,MAAMxxB,IAAI3D,GAC3BL,OAAQA,EACRisC,MAAO/kC,GAAWA,EAAQ+kC,YAG5BM,KAGF,OAAOA,IAQT/E,EAASj8B,UAAU+gC,WAAa,WAE9B,IADA,GAAI2C,GAAU/1C,KACP+1C,YAAmBzH,IACxByH,EAAUA,EAAQzZ,KAEpB,OAAOyZ,IAAW,MAYpBzH,EAASj8B,UAAUkjC,SAAW,SAAUhtC,EAAOopC,EAAQC,GACrD,GAAI7tC,GAAGgB,EAAK1E,EAAIuO,EACZ6jC,EAAMd,GAAUA,EAAOM,MACvBH,KACAK,KACAwB,KACAqC,KACAC,KACArC,IAEJ,IAAInB,GAAOzyC,KAAKs8B,MAAO,CACrB,OAAQ/zB,GACN,IAAK,MAEH,IAAKxE,EAAI,EAAGgB,EAAM0tC,EAAI7uC,OAAQG,EAAIgB,EAAKhB,IACrC1D,EAAKoyC,EAAI1uC,IACT6K,EAAO5O,KAAKyX,IAAIpX,MAEdL,KAAKs1C,KAAKj1C,IAAM,EAChByxC,EAASjtC,KAAKxE,GAIlB,MAEF,KAAK,SAGH,IAAK0D,EAAI,EAAGgB,EAAM0tC,EAAI7uC,OAAQG,EAAIgB,EAAKhB,IACrC1D,EAAKoyC,EAAI1uC,GACT6K,EAAO5O,KAAKyX,IAAIpX,GAEZuO,EACE5O,KAAKs1C,KAAKj1C,IACZ8xC,EAAWttC,KAAKxE,GAChB41C,EAAapxC,KAAK8sC,EAAOnd,KAAKzwB,IAC9BiyC,EAASnxC,KAAK8sC,EAAOS,QAAQruC,MAE7B/D,KAAKs1C,KAAKj1C,IAAM,EAChByxC,EAASjtC,KAAKxE,IAGZL,KAAKs1C,KAAKj1C,WACLL,MAAKs1C,KAAKj1C,GACjBszC,EAAW9uC,KAAKxE,GAChBuzC,EAAa/uC,KAAK8sC,EAAOS,QAAQruC,IAOvC,MAEF,KAAK,SAEH,IAAKA,EAAI,EAAGgB,EAAM0tC,EAAI7uC,OAAQG,EAAIgB,EAAKhB,IACrC1D,EAAKoyC,EAAI1uC,GACL/D,KAAKs1C,KAAKj1C,WACLL,MAAKs1C,KAAKj1C,GACjBszC,EAAW9uC,KAAKxE,GAChBuzC,EAAa/uC,KAAK8sC,EAAOS,QAAQruC,KAOzC/D,KAAK4D,QAAUkuC,EAASluC,OAAS+vC,EAAW/vC,OAExCkuC,EAASluC,QACX5D,KAAK0xC,SAAS,OAASO,MAAOH,GAAYF,GAExCO,EAAWvuC,QACb5D,KAAK0xC,SAAS,UAAYO,MAAOE,EAAYC,QAAS4D,EAAUxhB,KAAMyhB,GAAgBrE,GAEpF+B,EAAW/vC,QACb5D,KAAK0xC,SAAS,UAAYO,MAAO0B,EAAYvB,QAASwB,GAAgBhC,KAM5EtD,EAASj8B,UAAUg/B,GAAKhD,EAAQh8B,UAAUg/B,GAC1C/C,EAASj8B,UAAUm/B,IAAMnD,EAAQh8B,UAAUm/B,IAC3ClD,EAASj8B,UAAUq/B,SAAWrD,EAAQh8B,UAAUq/B,SAGhDpD,EAASj8B,UAAUk/B,UAAYjD,EAASj8B,UAAUg/B,GAClD/C,EAASj8B,UAAUo/B,YAAcnD,EAASj8B,UAAUm/B,IAEpD3xC,EAAOD,QAAU0uC,GAIb,SAAUzuC,EAAQD,EAASM,GA0J/B,QAASsuC,GAAQ0H,EAAW1hB,EAAMxmB,GAChC,KAAMhO,eAAgBwuC,IACpB,KAAM,IAAI2H,aAAY,mDAIxBn2C,MAAKo2C,iBAAmBF,EAExBl2C,KAAKq2C,UAAY,KACjBr2C,KAAKs2C,WAAa,KAGlBt2C,KAAKgY,SAELu+B,EAASC,YAAYC,EAAUz2C,MAG/BA,KAAK02C,SAAO7yC,GACZ7D,KAAK22C,SAAO9yC,GACZ7D,KAAK42C,SAAO/yC,GACZ7D,KAAK62C,aAAWhzC,GAChB7D,KAAK82C,cAAYjzC,GAKjB7D,KAAKgxC,WAAWhjC,GAGZwmB,GACFx0B,KAAKw1C,QAAQhhB,GA8mEjB,QAASuiB,GAAUxuC,GACjB,MAAI,WAAaA,GAAcA,EAAMyuC,QAC9BzuC,EAAM0uC,cAAc,IAAM1uC,EAAM0uC,cAAc,GAAGD,SAAW,EASrE,QAASE,GAAU3uC,GACjB,MAAI,WAAaA,GAAcA,EAAM4uC,QAC9B5uC,EAAM0uC,cAAc,IAAM1uC,EAAM0uC,cAAc,GAAGE,SAAW,EA/yErE,GAAIC,GAAUl3C,EAAoB,IAE9Bm3C,EAEJ,SAAgCv2C,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,IAFnDs2C,GAIlCE,EAAUp3C,EAAoB,IAAQmuC,EAAUnuC,EAAoB,IACpEouC,EAAWpuC,EAAoB,IAC/BS,EAAOT,EAAoB,GAC3B2uC,EAAU3uC,EAAoB,KAC9B0uC,EAAU1uC,EAAoB,KAE9ByuC,GADSzuC,EAAoB,KACpBA,EAAoB,MAC7B4uC,EAAS5uC,EAAoB,KAC7B6uC,EAAa7uC,EAAoB,KACjCq3C,EAAQr3C,EAAoB,KAC5Bq2C,EAAWr2C,EAAoB,IAGnCsuC,GAAQgJ,MAAQjB,EAASiB,KASzB,IAWIf,IACFrmC,MAAO,QACPC,OAAQ,QACRonC,YAAa,OACbC,YAAa,QACbC,OAAQ,IACRC,OAAQ,IACRC,OAAQ,IACRC,YAAa,SAAqBzsC,GAChC,MAAOA,IAET0sC,YAAa,SAAqB1sC,GAChC,MAAOA,IAET2sC,YAAa,SAAqB3sC,GAChC,MAAOA,IAET4sC,WAAW,EACXC,WAAW,EACXC,WAAW,EACXC,UAAU,EACVC,iBAAiB,EACjBC,YAAY,EACZC,iBAAiB,EACjBC,cAAe,GAEfC,aAAc,IACdC,mBAAoB,GACpBC,mBAAoB,IAEpBC,0BAzCkB/0C,GA0ClBg1C,kBAAmB,IACnBC,kBAAkB,EAClBC,uBA5CkBl1C,GA8ClBm1C,UAAW,UACXC,UAAW,UACXC,QAAS,MACTC,QAAS,MAET9sC,MAAOmiC,EAAQgJ,MAAM4B,IACrBC,SAAS,EAETC,cACE/I,SACEgJ,QAAS,OACT5tC,OAAQ,oBACRzB,MAAO,UACPwB,WAAY,wBACZ8tC,aAAc,MACdC,UAAW,sCAEbC,MACErpC,OAAQ,OACRD,MAAO,IACPupC,WAAY,qBAEdC,KACEvpC,OAAQ,IACRD,MAAO,IACPzE,OAAQ,oBACR6tC,aAAc,QAIlBK,eA5EkBh2C,GA6ElBi2C,oBA7EkBj2C,GA+ElBk2C,WACEC,KAAM,UACNC,OAAQ,UACRC,YAAa,GAGfC,gBACEC,WAAY,EACZC,SAAU,GACVC,SAAU,KAGZC,cA3FkB12C,GA4FlB22C,cA5FkB32C,GA6FlB42C,aA7FkB52C,GA8FlB62C,aA9FkB72C,GA+FlB82C,SA/FkB92C,GAgGlB+2C,SAhGkB/2C,GAiGlBg3C,UAjGkBh3C,GAkGlBi3C,SAlGkBj3C,GAmGlBk3C,SAnGkBl3C,GAoGlBm3C,UApGkBn3C,GAqGlBo3C,SArGkBp3C,GAsGlBq3C,SAtGkBr3C,GAuGlBs3C,UAvGkBt3C,GA6JpByzC,GAAQ9I,EAAQn8B,WAKhBm8B,EAAQn8B,UAAU+oC,UAAY,WAC5Bp7C,KAAKwC,MAAQ,GAAIqsC,GAAQ,EAAI7uC,KAAKq7C,OAAOC,QAAS,EAAIt7C,KAAKu7C,OAAOD,QAAS,EAAIt7C,KAAKw7C,OAAOF,SAGvFt7C,KAAKu4C,kBACHv4C,KAAKwC,MAAMuyB,EAAI/0B,KAAKwC,MAAMmsB,EAE5B3uB,KAAKwC,MAAMmsB,EAAI3uB,KAAKwC,MAAMuyB,EAG1B/0B,KAAKwC,MAAMuyB,EAAI/0B,KAAKwC,MAAMmsB,GAK9B3uB,KAAKwC,MAAMi5C,GAAKz7C,KAAKw4C,kBAIG30C,KAApB7D,KAAK07C,aACP17C,KAAKwC,MAAMD,MAAQ,EAAIvC,KAAK07C,WAAWJ,QAIzC,IAAIpC,GAAUl5C,KAAKq7C,OAAOM,SAAW37C,KAAKwC,MAAMuyB,EAC5CokB,EAAUn5C,KAAKu7C,OAAOI,SAAW37C,KAAKwC,MAAMmsB,EAC5CitB,EAAU57C,KAAKw7C,OAAOG,SAAW37C,KAAKwC,MAAMi5C,CAChDz7C,MAAK67C,OAAOC,eAAe5C,EAASC,EAASyC,IAU/CpN,EAAQn8B,UAAU0pC,eAAiB,SAAUC,GAC3C,GAAIC,GAAcj8C,KAAKk8C,2BAA2BF,EAClD,OAAOh8C,MAAKm8C,4BAA4BF,IAY1CzN,EAAQn8B,UAAU6pC,2BAA6B,SAAUF,GACvD,GAAII,GAAiBp8C,KAAK67C,OAAOQ,oBAC7BC,EAAiBt8C,KAAK67C,OAAOU,oBAC7BC,EAAKR,EAAQjnB,EAAI/0B,KAAKwC,MAAMuyB,EAC5B0nB,EAAKT,EAAQrtB,EAAI3uB,KAAKwC,MAAMmsB,EAC5B+tB,EAAKV,EAAQP,EAAIz7C,KAAKwC,MAAMi5C,EAC5BkB,EAAKP,EAAernB,EACpB6nB,EAAKR,EAAeztB,EACpBkuB,EAAKT,EAAeX,EAIxBqB,EAAQr6C,KAAKs6C,IAAIT,EAAevnB,GAC5BioB,EAAQv6C,KAAKw6C,IAAIX,EAAevnB,GAChCmoB,EAAQz6C,KAAKs6C,IAAIT,EAAe3tB,GAChCwuB,EAAQ16C,KAAKw6C,IAAIX,EAAe3tB,GAChCyuB,EAAQ36C,KAAKs6C,IAAIT,EAAeb,GAChC4B,EAAQ56C,KAAKw6C,IAAIX,EAAeb,EAQpC,OAAO,IAAI5M,GAJNsO,GAASC,GAASX,EAAKG,GAAMS,GAASb,EAAKG,IAAOO,GAASR,EAAKG,GAC5DC,GAASK,GAAST,EAAKG,GAAMK,GAASE,GAASX,EAAKG,GAAMS,GAASb,EAAKG,KAAQK,GAASK,GAASZ,EAAKG,GAAMQ,GAASZ,EAAKG,IAC3HK,GAASG,GAAST,EAAKG,GAAMK,GAASE,GAASX,EAAKG,GAAMS,GAASb,EAAKG,KAAQG,GAASO,GAASZ,EAAKG,GAAMQ,GAASZ,EAAKG,MAatInO,EAAQn8B,UAAU8pC,4BAA8B,SAAUF,GACxD,GAQIqB,GACAC,EATAC,EAAKx9C,KAAKy9C,IAAI1oB,EACd2oB,EAAK19C,KAAKy9C,IAAI9uB,EACdgvB,EAAK39C,KAAKy9C,IAAIhC,EACdmC,EAAK3B,EAAYlnB,EACjB8oB,EAAK5B,EAAYttB,EACjBmvB,EAAK7B,EAAYR,CAerB,OAVIz7C,MAAKq4C,iBACPiF,EAAkBK,EAAKG,GAAjBF,EAAKJ,GACXD,EAAkBI,EAAKG,GAAjBD,EAAKH,KAEXJ,EAAKM,IAAOD,EAAK39C,KAAK67C,OAAOkC,gBAC7BR,EAAKM,IAAOF,EAAK39C,KAAK67C,OAAOkC,iBAKxB,GAAInP,GAAQ5uC,KAAKg+C,eAAiBV,EAAKt9C,KAAKi+C,MAAMC,OAAOntC,YAAa/Q,KAAKm+C,eAAiBZ,EAAKv9C,KAAKi+C,MAAMC,OAAOntC,cAM5Hy9B,EAAQn8B,UAAU+rC,kBAAoB,SAAUC,EAAQx1B,OACzChlB,KAATglB,IACFA,GAAO,EAGT,KAAK,GAAI9kB,GAAI,EAAGA,EAAIs6C,EAAOz6C,OAAQG,IAAK,CACtC,GAAI6W,GAAQyjC,EAAOt6C,EACnB6W,GAAM0jC,MAAQt+C,KAAKk8C,2BAA2BthC,EAAMA,OACpDA,EAAM2jC,OAASv+C,KAAKm8C,4BAA4BvhC,EAAM0jC,MAGtD,IAAIE,GAAcx+C,KAAKk8C,2BAA2BthC,EAAM6jC,OACxD7jC,GAAM8jC,KAAO1+C,KAAKq4C,gBAAkBmG,EAAY56C,UAAY46C,EAAY/C,EAG1E,GAAK5yB,EAAL,CAKA,GAAI81B,GAAY,SAAmBn7C,EAAGC,GACpC,MAAOA,GAAEi7C,KAAOl7C,EAAEk7C,KAEpBL,GAAOx1B,KAAK81B,KAGdnQ,EAAQn8B,UAAUusC,gBAAkB,SAAUpqB,GAC5C,MAAOA,GAAK5wB,QAGd4qC,EAAQn8B,UAAUwsC,mBAAqB,SAAUrqB,GAC/C,GAAIsqB,GAAU,CACd,KAAK,GAAIC,KAAUvqB,GAAK,GAClBA,EAAK,GAAGlxB,eAAey7C,IACzBD,GAGJ,OAAOA,IAGTtQ,EAAQn8B,UAAU2sC,kBAAoB,SAAUxqB,EAAMuqB,GAEpD,IAAK,GADDE,MACKl7C,EAAI,EAAGA,EAAIywB,EAAK5wB,OAAQG,KACiB,GAA5Ck7C,EAAer6C,QAAQ4vB,EAAKzwB,GAAGg7C,KACjCE,EAAep6C,KAAK2vB,EAAKzwB,GAAGg7C,GAGhC,OAAOE,GAAep2B,KAAK,SAAUrlB,EAAGC,GACtC,MAAOD,GAAIC,KAWf+qC,EAAQn8B,UAAU6sC,sBAAwB,SAAU1qB,EAAMuqB,GAQxD,IAAK,GAPD7pC,GAASlV,KAAKg/C,kBAAkBxqB,EAAMuqB,GAKtCI,EAAgB,KAEXp7C,EAAI,EAAGA,EAAImR,EAAOtR,OAAQG,IAAK,CACtC,GAAI2jB,GAAOxS,EAAOnR,GAAKmR,EAAOnR,EAAI,IAEb,MAAjBo7C,GAAyBA,EAAgBz3B,KAC3Cy3B,EAAgBz3B,GAIpB,MAAOy3B,IAQT3Q,EAAQn8B,UAAU+sC,eAAiB,SAAU5qB,EAAMuqB,GAIjD,IAAK,GAHDzD,GAAQ,GAAI/D,GAGPxzC,EAAI,EAAGA,EAAIywB,EAAK5wB,OAAQG,IAAK,CACpC,GAAI6K,GAAO4lB,EAAKzwB,GAAGg7C,EACnBzD,GAAMha,OAAO1yB,GAGf,MAAO0sC,IAQT9M,EAAQn8B,UAAUgtC,iBAAmB,SAAU7qB,GAI7C,GAFoBx0B,KAAKqM,QAAUmiC,EAAQgJ,MAAM8H,UAAYt/C,KAAKqM,QAAUmiC,EAAQgJ,MAAM+H,SAAWv/C,KAAKqM,QAAUmiC,EAAQgJ,MAAMgI,UAAYx/C,KAAKqM,QAAUmiC,EAAQgJ,MAAMiI,QAE3K,CAKA,OAAsB57C,KAAlB7D,KAAK62C,SACP,KAAM,IAAIxyC,OAAM,0DAAyErE,KAAKqM,MAAQ,IAKxG,QAA+BxI,KAA3B2wB,EAAK,GAAGx0B,KAAK62C,UACf,KAAM,IAAIxyC,OAAM,iCAAyCrE,KAAK62C,SAAW,uBAAgC72C,KAAKqM,MAAQ,OAa1HmiC,EAAQn8B,UAAUqtC,kBAAoB,SAAUpE,EAAOqE,EAAYC,OAC9C/7C,KAAf87C,IACFrE,EAAMl5C,IAAMu9C,OAGK97C,KAAf+7C,IACFtE,EAAMj5C,IAAMu9C,GAMVtE,EAAMj5C,KAAOi5C,EAAMl5C,MAAKk5C,EAAMj5C,IAAMi5C,EAAMl5C,IAAM,IAUtDosC,EAAQn8B,UAAUwtC,gBAAkB,SAAUC,EAASzzC,GACrD,GAAI0lC,GAAK/xC,IAOT,IAJIA,KAAK+1C,SACP/1C,KAAK+1C,QAAQvE,IAAI,IAAKxxC,KAAK+/C,eAGbl8C,KAAZi8C,EAAJ,CAEI37C,MAAMC,QAAQ07C,KAChBA,EAAU,GAAIzR,GAAQyR,GAGxB,IAAItrB,EACJ,MAAIsrB,YAAmBzR,IAAWyR,YAAmBxR,IAGnD,KAAM,IAAIjqC,OAAM,uCAGlB,IALEmwB,EAAOsrB,EAAQroC,MAKE,GAAf+c,EAAK5wB,OAAT,CAEA5D,KAAK+1C,QAAU+J,EACf9/C,KAAKq2C,UAAY7hB,EAGjBx0B,KAAK+/C,UAAY,WACfhO,EAAGyD,QAAQzD,EAAGgE,UAEhB/1C,KAAK+1C,QAAQ1E,GAAG,IAAKrxC,KAAK+/C,WAG1B//C,KAAK02C,KAAO,IACZ12C,KAAK22C,KAAO,IACZ32C,KAAK42C,KAAO,GAEZ,IAAIoJ,GAAWhgD,KAAKqM,OAASmiC,EAAQgJ,MAAMyI,KAAOjgD,KAAKqM,OAASmiC,EAAQgJ,MAAM8H,UAAYt/C,KAAKqM,OAASmiC,EAAQgJ,MAAM+H,OAGlHS,SAC4Bn8C,KAA1B7D,KAAKkgD,iBACPlgD,KAAKu6C,UAAYv6C,KAAKkgD,iBAEtBlgD,KAAKu6C,UAAYv6C,KAAKk/C,sBAAsB1qB,EAAMx0B,KAAK02C,OAAS,MAGpC7yC,KAA1B7D,KAAKmgD,iBACPngD,KAAKw6C,UAAYx6C,KAAKmgD,iBAEtBngD,KAAKw6C,UAAYx6C,KAAKk/C,sBAAsB1qB,EAAMx0B,KAAK22C,OAAS,EAKpE,IAEI0E,GAASr7C,KAAKo/C,eAAe5qB,EAAMx0B,KAAK02C,KACxCsJ,IACF3E,EAAO+E,OAAOpgD,KAAKu6C,UAAY,GAEjCv6C,KAAK0/C,kBAAkBrE,EAAQr7C,KAAKqgD,YAAargD,KAAKsgD,aACtDtgD,KAAKq7C,OAASA,EACdr7C,KAAK66C,UAA8Bh3C,KAAtB7D,KAAKugD,aAA6BvgD,KAAKugD,aAAelF,EAAOC,QAR3D,CAUf,IAAIC,GAASv7C,KAAKo/C,eAAe5qB,EAAMx0B,KAAK22C,KACxCqJ,IACFzE,EAAO6E,OAAOpgD,KAAKw6C,UAAY,GAEjCx6C,KAAK0/C,kBAAkBnE,EAAQv7C,KAAKwgD,YAAaxgD,KAAKygD,aACtDzgD,KAAKu7C,OAASA,EACdv7C,KAAKg7C,UAA8Bn3C,KAAtB7D,KAAK0gD,aAA6B1gD,KAAK0gD,aAAenF,EAAOD,QAhB3D,CAkBf,IAAIE,GAASx7C,KAAKo/C,eAAe5qB,EAAMx0B,KAAK42C,KAK5C,IAJA52C,KAAK0/C,kBAAkBlE,EAAQx7C,KAAK2gD,YAAa3gD,KAAK4gD,aACtD5gD,KAAKw7C,OAASA,EACdx7C,KAAKm7C,UAA8Bt3C,KAAtB7D,KAAK6gD,aAA6B7gD,KAAK6gD,aAAerF,EAAOF,QArB3D,EAuBX9mB,EAAK,GAAGlxB,eAAe,SAAU,CACnCtD,KAAK62C,SAAW,OAChB,IAAI6E,GAAa17C,KAAKo/C,eAAe5qB,EAAMx0B,KAAK62C,SAChD72C,MAAK0/C,kBAAkBhE,EAAY17C,KAAK8gD,gBAAiB9gD,KAAK+gD,iBAC9D/gD,KAAK07C,WAAaA,EAKhBlnB,EAAK,GAAGlxB,eAAe,YAEzBtD,KAAK82C,UAAY,aAEOjzC,KAApB7D,KAAKghD,aACPhhD,KAAKghD,WAAa,GAAIrS,GAAOmR,EAAS9/C,KAAK82C,UAAW92C,MACtDA,KAAKghD,WAAWC,kBAAkB,WAChClP,EAAGmP,aAMTlhD,KAAKo7C,eAUP5M,EAAQn8B,UAAU8uC,eAAiB,SAAU3sB,GAG3C,GAAIO,GAAGpG,EAAG5qB,EAAG03C,EAAG36C,EAAK8Z,EAEjB07B,IAEJ,IAAIt2C,KAAKqM,QAAUmiC,EAAQgJ,MAAM4J,MAAQphD,KAAKqM,QAAUmiC,EAAQgJ,MAAM6J,QAAS,CAK7E,GAAIC,MACAC,IACJ,KAAKx9C,EAAI,EAAGA,EAAI/D,KAAK4+C,gBAAgBpqB,GAAOzwB,IAC1CgxB,EAAIP,EAAKzwB,GAAG/D,KAAK02C,OAAS,EAC1B/nB,EAAI6F,EAAKzwB,GAAG/D,KAAK22C,OAAS,GAEA,IAAtB2K,EAAM18C,QAAQmwB,IAChBusB,EAAMz8C,KAAKkwB,IAEa,IAAtBwsB,EAAM38C,QAAQ+pB,IAChB4yB,EAAM18C,KAAK8pB,EAIf,IAAI6yB,GAAa,SAAoBh+C,EAAGC,GACtC,MAAOD,GAAIC,EAEb69C,GAAMz4B,KAAK24B,GACXD,EAAM14B,KAAK24B,EAGX,IAAIC,KACJ,KAAK19C,EAAI,EAAGA,EAAIywB,EAAK5wB,OAAQG,IAAK,CAChCgxB,EAAIP,EAAKzwB,GAAG/D,KAAK02C,OAAS,EAC1B/nB,EAAI6F,EAAKzwB,GAAG/D,KAAK22C,OAAS,EAC1B8E,EAAIjnB,EAAKzwB,GAAG/D,KAAK42C,OAAS,CAG1B,IAAI8K,GAASJ,EAAM18C,QAAQmwB,GACvB4sB,EAASJ,EAAM38C,QAAQ+pB,OAEA9qB,KAAvB49C,EAAWC,KACbD,EAAWC,MAGb,IAAI1F,GAAU,GAAInN,EAClBmN,GAAQjnB,EAAIA,EACZinB,EAAQrtB,EAAIA,EACZqtB,EAAQP,EAAIA,EACZO,EAAQxnB,KAAOA,EAAKzwB,GAEpBjD,KACAA,EAAI8Z,MAAQohC,EACZl7C,EAAIw9C,UAAQz6C,GACZ/C,EAAIy9C,WAAS16C,GACb/C,EAAI29C,OAAS,GAAI5P,GAAQ9Z,EAAGpG,EAAG3uB,KAAKw7C,OAAOp5C,KAE3Cq/C,EAAWC,GAAQC,GAAU7gD,EAE7Bw1C,EAAWzxC,KAAK/D,GAIlB,IAAKi0B,EAAI,EAAGA,EAAI0sB,EAAW79C,OAAQmxB,IACjC,IAAKpG,EAAI,EAAGA,EAAI8yB,EAAW1sB,GAAGnxB,OAAQ+qB,IAChC8yB,EAAW1sB,GAAGpG,KAChB8yB,EAAW1sB,GAAGpG,GAAGizB,WAAa7sB,EAAI0sB,EAAW79C,OAAS,EAAI69C,EAAW1sB,EAAI,GAAGpG,OAAK9qB,GACjF49C,EAAW1sB,GAAGpG,GAAGkzB,SAAWlzB,EAAI8yB,EAAW1sB,GAAGnxB,OAAS,EAAI69C,EAAW1sB,GAAGpG,EAAI,OAAK9qB,GAClF49C,EAAW1sB,GAAGpG,GAAGmzB,WAAa/sB,EAAI0sB,EAAW79C,OAAS,GAAK+qB,EAAI8yB,EAAW1sB,GAAGnxB,OAAS,EAAI69C,EAAW1sB,EAAI,GAAGpG,EAAI,OAAK9qB,QAS3H,KAHA7D,KAAKq/C,iBAAiB7qB,GAGjBzwB,EAAI,EAAGA,EAAIywB,EAAK5wB,OAAQG,IAC3B6W,EAAQ,GAAIi0B,GACZj0B,EAAMma,EAAIP,EAAKzwB,GAAG/D,KAAK02C,OAAS,EAChC97B,EAAM+T,EAAI6F,EAAKzwB,GAAG/D,KAAK22C,OAAS,EAChC/7B,EAAM6gC,EAAIjnB,EAAKzwB,GAAG/D,KAAK42C,OAAS,EAChCh8B,EAAM4Z,KAAOA,EAAKzwB,OAEIF,KAAlB7D,KAAK62C,WACPj8B,EAAMrY,MAAQiyB,EAAKzwB,GAAG/D,KAAK62C,WAAa,GAG1C/1C,KACAA,EAAI8Z,MAAQA,EACZ9Z,EAAI29C,OAAS,GAAI5P,GAAQj0B,EAAMma,EAAGna,EAAM+T,EAAG3uB,KAAKw7C,OAAOp5C,KACvDtB,EAAIw9C,UAAQz6C,GACZ/C,EAAIy9C,WAAS16C,GAET7D,KAAKqM,QAAUmiC,EAAQgJ,MAAMuK,MAC3Bh+C,EAAI,IAENuyC,EAAWvyC,EAAI,GAAGi+C,UAAYlhD,GAIlCw1C,EAAWzxC,KAAK/D,EAIpB,OAAOw1C,IAUT9H,EAAQn8B,UAAU2F,OAAS,WAEzB,KAAOhY,KAAKo2C,iBAAiBp0C,iBAC3BhC,KAAKo2C,iBAAiBl0C,YAAYlC,KAAKo2C,iBAAiBn0C,WAG1DjC,MAAKi+C,MAAQ/tC,SAASC,cAAc,OACpCnQ,KAAKi+C,MAAM5xC,MAAMkE,SAAW,WAC5BvQ,KAAKi+C,MAAM5xC,MAAMoE,SAAW,SAG5BzQ,KAAKi+C,MAAMC,OAAShuC,SAASC,cAAc,UAC3CnQ,KAAKi+C,MAAMC,OAAO7xC,MAAMkE,SAAW,WACnCvQ,KAAKi+C,MAAMvtC,YAAY1Q,KAAKi+C,MAAMC,OAGhC,IAAI+D,GAAW/xC,SAASC,cAAc,MACtC8xC,GAAS51C,MAAMnC,MAAQ,MACvB+3C,EAAS51C,MAAM61C,WAAa,OAC5BD,EAAS51C,MAAMktC,QAAU,OACzB0I,EAASE,UAAY,mDACrBniD,KAAKi+C,MAAMC,OAAOxtC,YAAYuxC,GAGhCjiD,KAAKi+C,MAAMn3C,OAASoJ,SAASC,cAAc,OAC3CnQ,KAAKi+C,MAAMn3C,OAAOuF,MAAMkE,SAAW,WACnCvQ,KAAKi+C,MAAMn3C,OAAOuF,MAAMoyC,OAAS,MACjCz+C,KAAKi+C,MAAMn3C,OAAOuF,MAAMnG,KAAO,MAC/BlG,KAAKi+C,MAAMn3C,OAAOuF,MAAM+D,MAAQ,OAChCpQ,KAAKi+C,MAAMvtC,YAAY1Q,KAAKi+C,MAAMn3C,OAGlC,IAAIirC,GAAK/xC,KACLoiD,EAAc,SAAqB75C,GACrCwpC,EAAGsQ,aAAa95C,IAEd+5C,EAAe,SAAsB/5C,GACvCwpC,EAAGwQ,cAAch6C,IAEfi6C,EAAe,SAAsBj6C,GACvCwpC,EAAG0Q,SAASl6C,IAEVm6C,EAAY,SAAmBn6C,GACjCwpC,EAAG4Q,WAAWp6C,IAEZq6C,EAAU,SAAiBr6C,GAC7BwpC,EAAG8Q,SAASt6C,GAId5H,GAAKiH,iBAAiB5H,KAAKi+C,MAAMC,OAAQ,YAAakE,GACtDzhD,EAAKiH,iBAAiB5H,KAAKi+C,MAAMC,OAAQ,aAAcoE,GACvD3hD,EAAKiH,iBAAiB5H,KAAKi+C,MAAMC,OAAQ,aAAcsE,GACvD7hD,EAAKiH,iBAAiB5H,KAAKi+C,MAAMC,OAAQ,YAAawE,GACtD/hD,EAAKiH,iBAAiB5H,KAAKi+C,MAAMC,OAAQ,QAAS0E,GAGlD5iD,KAAKo2C,iBAAiB1lC,YAAY1Q,KAAKi+C,QAMzCzP,EAAQn8B,UAAUywC,SAAW,SAAU1yC,EAAOC,GAC5CrQ,KAAKi+C,MAAM5xC,MAAM+D,MAAQA,EACzBpQ,KAAKi+C,MAAM5xC,MAAMgE,OAASA,EAE1BrQ,KAAK+iD,iBAMPvU,EAAQn8B,UAAU0wC,cAAgB,WAChC/iD,KAAKi+C,MAAMC,OAAO7xC,MAAM+D,MAAQ,OAChCpQ,KAAKi+C,MAAMC,OAAO7xC,MAAMgE,OAAS,OAEjCrQ,KAAKi+C,MAAMC,OAAO9tC,MAAQpQ,KAAKi+C,MAAMC,OAAOntC,YAC5C/Q,KAAKi+C,MAAMC,OAAO7tC,OAASrQ,KAAKi+C,MAAMC,OAAO8E,aAG7ChjD,KAAKi+C,MAAMn3C,OAAOuF,MAAM+D,MAAQpQ,KAAKi+C,MAAMC,OAAOntC,YAAc,GAAS,MAM3Ey9B,EAAQn8B,UAAU4wC,eAAiB,WACjC,IAAKjjD,KAAKi+C,MAAMn3C,SAAW9G,KAAKi+C,MAAMn3C,OAAOo8C,OAAQ,KAAM,IAAI7+C,OAAM,yBAErErE,MAAKi+C,MAAMn3C,OAAOo8C,OAAOC,QAM3B3U,EAAQn8B,UAAU+wC,cAAgB,WAC3BpjD,KAAKi+C,MAAMn3C,QAAW9G,KAAKi+C,MAAMn3C,OAAOo8C,QAE7CljD,KAAKi+C,MAAMn3C,OAAOo8C,OAAOG,QAS3B7U,EAAQn8B,UAAUixC,cAAgB,WAEqB,MAAjDtjD,KAAKk5C,QAAQj+B,OAAOjb,KAAKk5C,QAAQt1C,OAAS,GAC5C5D,KAAKg+C,eAAiBziB,WAAWv7B,KAAKk5C,SAAW,IAAMl5C,KAAKi+C,MAAMC,OAAOntC,YAEzE/Q,KAAKg+C,eAAiBziB,WAAWv7B,KAAKk5C,SAIa,MAAjDl5C,KAAKm5C,QAAQl+B,OAAOjb,KAAKm5C,QAAQv1C,OAAS,GAC5C5D,KAAKm+C,eAAiB5iB,WAAWv7B,KAAKm5C,SAAW,KAAOn5C,KAAKi+C,MAAMC,OAAO8E,aAAehjD,KAAKi+C,MAAMn3C,OAAOk8C,cAE3GhjD,KAAKm+C,eAAiB5iB,WAAWv7B,KAAKm5C,UAU1C3K,EAAQn8B,UAAUkxC,kBAAoB,WACpC,GAAIzoC,GAAM9a,KAAK67C,OAAO2H,gBAEtB,OADA1oC,GAAIw/B,SAAWt6C,KAAK67C,OAAOkC,eACpBjjC,GAMT0zB,EAAQn8B,UAAUoxC,UAAY,SAAUjvB,GAEtCx0B,KAAK6/C,gBAAgBrrB,EAAMx0B,KAAKqM,OAE5BrM,KAAKghD,WAEPhhD,KAAKs2C,WAAat2C,KAAKghD,WAAWG,iBAGlCnhD,KAAKs2C,WAAat2C,KAAKmhD,eAAenhD,KAAKq2C,WAI7Cr2C,KAAK0jD,iBAQPlV,EAAQn8B,UAAUmjC,QAAU,SAAUhhB,GACpCx0B,KAAKyjD,UAAUjvB,GACfx0B,KAAKkhD,SAGDlhD,KAAK+4C,oBAAsB/4C,KAAKghD,YAClChhD,KAAKijD,kBASTzU,EAAQn8B,UAAU2+B,WAAa,SAAUhjC,GAGvChO,KAAKojD,gBAEL7M,EAASvF,WAAWhjC,EAAShO,MAE7BA,KAAK2jD,wBACL3jD,KAAK8iD,SAAS9iD,KAAKoQ,MAAOpQ,KAAKqQ,QAG3BrQ,KAAKq2C,WACPr2C,KAAKw1C,QAAQx1C,KAAKq2C,WAIhBr2C,KAAK+4C,oBAAsB/4C,KAAKghD,YAClChhD,KAAKijD,kBAOTzU,EAAQn8B,UAAUsxC,sBAAwB,WACxC,GAAI1O,OAASpxC,EAEb,QAAQ7D,KAAKqM,OACX,IAAKmiC,GAAQgJ,MAAMyI,IACjBhL,EAASzG,EAAQn8B,UAAUuxC,oBAC3B,MACF,KAAKpV,GAAQgJ,MAAM8H,SACjBrK,EAASzG,EAAQn8B,UAAUwxC,yBAC3B,MACF,KAAKrV,GAAQgJ,MAAM+H,QACjBtK,EAASzG,EAAQn8B,UAAUyxC,wBAC3B,MACF,KAAKtV,GAAQgJ,MAAM4B,IACjBnE,EAASzG,EAAQn8B,UAAU0xC,oBAC3B,MACF,KAAKvV,GAAQgJ,MAAMwM,QACjB/O,EAASzG,EAAQn8B,UAAU4xC,wBAC3B,MACF,KAAKzV,GAAQgJ,MAAMgI,SACjBvK,EAASzG,EAAQn8B,UAAU6xC,yBAC3B,MACF,KAAK1V,GAAQgJ,MAAMiI,QACjBxK,EAASzG,EAAQn8B,UAAU8xC,wBAC3B,MACF,KAAK3V,GAAQgJ,MAAM6J,QACjBpM,EAASzG,EAAQn8B,UAAU+xC,wBAC3B,MACF,KAAK5V,GAAQgJ,MAAM4J,KACjBnM,EAASzG,EAAQn8B,UAAUgyC,qBAC3B,MACF,KAAK7V,GAAQgJ,MAAMuK,KACjB9M,EAASzG,EAAQn8B,UAAUiyC,qBAC3B,MACF,SACE,KAAM,IAAIjgD,OAAM,2DAAmErE,KAAKqM,MAAQ,KAGpGrM,KAAKukD,oBAAsBtP,GAM7BzG,EAAQn8B,UAAU6uC,OAAS,WACzB,OAAwBr9C,KAApB7D,KAAKs2C,WACP,KAAM,IAAIjyC,OAAM,6BAGlBrE,MAAK+iD,gBACL/iD,KAAKsjD,gBACLtjD,KAAKwkD,gBACLxkD,KAAKykD,eACLzkD,KAAK0kD,cAEL1kD,KAAK2kD,mBAEL3kD,KAAK4kD,cACL5kD,KAAK6kD,iBAMPrW,EAAQn8B,UAAUyyC,YAAc,WAC9B,GAAI5G,GAASl+C,KAAKi+C,MAAMC,OACpB5oC,EAAM4oC,EAAO6G,WAAW,KAK5B,OAHAzvC,GAAI0vC,SAAW,QACf1vC,EAAI2vC,QAAU,QAEP3vC,GAMTk5B,EAAQn8B,UAAUoyC,aAAe,WAC/B,GAAIvG,GAASl+C,KAAKi+C,MAAMC,MACdA,GAAO6G,WAAW,MAExBG,UAAU,EAAG,EAAGhH,EAAO9tC,MAAO8tC,EAAO7tC,SAG3Cm+B,EAAQn8B,UAAU8yC,SAAW,WAC3B,MAAOnlD,MAAKi+C,MAAMltC,YAAc/Q,KAAKy4C,cAMvCjK,EAAQn8B,UAAU+yC,gBAAkB,WAClC,GAAIh1C,EAEJ,IAAIpQ,KAAKqM,QAAUmiC,EAAQgJ,MAAMiI,QAAS,CAGxCrvC,EAFcpQ,KAAKmlD,WAEDnlD,KAAK24C,uBAEvBvoC,GADSpQ,KAAKqM,QAAUmiC,EAAQgJ,MAAM+H,QAC9Bv/C,KAAKu6C,UAEL,EAEV,OAAOnqC,IAMTo+B,EAAQn8B,UAAUwyC,cAAgB,WAGhC,IAAwB,IAApB7kD,KAAK65C,YAKL75C,KAAKqM,QAAUmiC,EAAQgJ,MAAMuK,MAAQ/hD,KAAKqM,QAAUmiC,EAAQgJ,MAAM+H,QAAtE,CAMA,GAAI8F,GAAerlD,KAAKqM,QAAUmiC,EAAQgJ,MAAM+H,SAAWv/C,KAAKqM,QAAUmiC,EAAQgJ,MAAMiI,QAGpF6F,EAAgBtlD,KAAKqM,QAAUmiC,EAAQgJ,MAAMiI,SAAWz/C,KAAKqM,QAAUmiC,EAAQgJ,MAAMgI,UAAYx/C,KAAKqM,QAAUmiC,EAAQgJ,MAAM8H,SAE9HjvC,EAAS5N,KAAKJ,IAA8B,IAA1BrC,KAAKi+C,MAAM+E,aAAqB,KAClD18C,EAAMtG,KAAKulD,OACXn1C,EAAQpQ,KAAKolD,kBACbh/C,EAAQpG,KAAKi+C,MAAMltC,YAAc/Q,KAAKulD,OACtCr/C,EAAOE,EAAQgK,EACfquC,EAASn4C,EAAM+J,EAEfiF,EAAMtV,KAAK8kD,aAIf,IAHAxvC,EAAIkwC,UAAY,EAChBlwC,EAAImwC,KAAO,cAEU,IAAjBJ,EAAwB,CAE1B,GAEI12B,GADA+2B,EAAOr1C,CAGX,KAAKse,EAJM,EAIIA,EAAI+2B,EAAM/2B,IAAK,CAC5B,GAAI5hB,IAAK4hB,EALA,IAKa+2B,EALb,GAMLC,EAAU,IAAJ54C,EACN7C,EAAQlK,KAAK4lD,SAASD,EAAK,EAAG,EAElCrwC,GAAIuwC,YAAc37C,EAClBoL,EAAIwwC,YACJxwC,EAAIywC,OAAO7/C,EAAMI,EAAMqoB,GACvBrZ,EAAI0wC,OAAO5/C,EAAOE,EAAMqoB,GACxBrZ,EAAI2kC,SAEN3kC,EAAIuwC,YAAc7lD,KAAKg5C,UACvB1jC,EAAI2wC,WAAW//C,EAAMI,EAAK8J,EAAOC,OAC5B,CAGL,GAAI61C,EACAlmD,MAAKqM,QAAUmiC,EAAQgJ,MAAMiI,QAE/ByG,EAAW91C,GAASpQ,KAAK04C,mBAAqB14C,KAAK24C,qBAC1C34C,KAAKqM,MAAUmiC,EAAQgJ,MAAM+H,SAGxCjqC,EAAIuwC,YAAc7lD,KAAKg5C,UACvB1jC,EAAI6wC,UAAYnmD,KAAK+5C,UAAUC,KAC/B1kC,EAAIwwC,YACJxwC,EAAIywC,OAAO7/C,EAAMI,GACjBgP,EAAI0wC,OAAO5/C,EAAOE,GAClBgP,EAAI0wC,OAAO9/C,EAAOggD,EAAUzH,GAC5BnpC,EAAI0wC,OAAO9/C,EAAMu4C,GACjBnpC,EAAI8wC,YACJ9wC,EAAI0kC,OACJ1kC,EAAI2kC,SAIN,GAEIoM,GAAYf,EAAgBtlD,KAAK07C,WAAWt5C,IAAMpC,KAAKw7C,OAAOp5C,IAC9DkkD,EAAYhB,EAAgBtlD,KAAK07C,WAAWr5C,IAAMrC,KAAKw7C,OAAOn5C,IAC9DkQ,EAAO,GAAIw8B,GAAWsX,EAAWC,GAAYA,EAAYD,GAAa,GAAG,EAC7E9zC,GAAKg0C,OAAM,EAKX,KAHA,GAAI53B,GACAlL,EACAD,GACIjR,EAAKi0C,OACX73B,EAAI8vB,GAAUlsC,EAAKk0C,aAAeJ,IAAcC,EAAYD,GAAah2C,EACzEoT,EAAO,GAAImrB,GAAQ1oC,EAZH,EAYuByoB,GACvCnL,EAAK,GAAIorB,GAAQ1oC,EAAMyoB,GACvB3uB,KAAK0mD,MAAMpxC,EAAKmO,EAAMD,GAEtBlO,EAAIqxC,UAAY,QAChBrxC,EAAIsxC,aAAe,SACnBtxC,EAAI6wC,UAAYnmD,KAAKg5C,UACrB1jC,EAAIuxC,SAASt0C,EAAKk0C,aAAcvgD,EAAO,GAAiByoB,GAExDpc,EAAKd,MAGP6D,GAAIqxC,UAAY,QAChBrxC,EAAIsxC,aAAe,KACnB,IAAIxW,GAAQpwC,KAAK03C,WACjBpiC,GAAIuxC,SAASzW,EAAOhqC,EAAOq4C,EAASz+C,KAAKulD,UAM3C/W,EAAQn8B,UAAUqxC,cAAgB,WAGhC,GAFA1jD,KAAKi+C,MAAMn3C,OAAOq7C,UAAY,GAE1BniD,KAAKghD,WAAY,CACnB,GAAIhzC,IACF84C,QAAW9mD,KAAK44C,uBAEdsK,EAAS,GAAIpU,GAAO9uC,KAAKi+C,MAAMn3C,OAAQkH,EAC3ChO,MAAKi+C,MAAMn3C,OAAOo8C,OAASA,EAG3BljD,KAAKi+C,MAAMn3C,OAAOuF,MAAMktC,QAAU,OAGlC2J,EAAO6D,UAAU/mD,KAAKghD,WAAW9rC,QACjCguC,EAAO8D,gBAAgBhnD,KAAK64C,kBAG5B,IAAI9G,GAAK/xC,KACLinD,EAAW,WACb,GAAIl0C,GAAQmwC,EAAOgE,UAEnBnV,GAAGiP,WAAWmG,YAAYp0C,GAC1Bg/B,EAAGuE,WAAavE,EAAGiP,WAAWG,iBAE9BpP,EAAGmP,SAELgC,GAAOkE,oBAAoBH,OAE3BjnD,MAAKi+C,MAAMn3C,OAAOo8C,WAASr/C,IAO/B2qC,EAAQn8B,UAAUmyC,cAAgB,eACC3gD,KAA7B7D,KAAKi+C,MAAMn3C,OAAOo8C,QACpBljD,KAAKi+C,MAAMn3C,OAAOo8C,OAAOhC,UAO7B1S,EAAQn8B,UAAUuyC,YAAc,WAC9B,GAAI5kD,KAAKghD,WAAY,CACnB,GAAI1rC,GAAMtV,KAAK8kD,aAEfxvC,GAAImwC,KAAO,aACXnwC,EAAI+xC,UAAY,OAChB/xC,EAAI6wC,UAAY,OAChB7wC,EAAIqxC,UAAY,OAChBrxC,EAAIsxC,aAAe,KAEnB,IAAI7xB,GAAI/0B,KAAKulD,OACT52B,EAAI3uB,KAAKulD,MACbjwC,GAAIuxC,SAAS7mD,KAAKghD,WAAWsG,WAAa,KAAOtnD,KAAKghD,WAAWuG,mBAAoBxyB,EAAGpG,KAS5F6f,EAAQn8B,UAAUq0C,MAAQ,SAAUpxC,EAAKmO,EAAMD,EAAIqiC,OAC7BhiD,KAAhBgiD,IACFvwC,EAAIuwC,YAAcA,GAGpBvwC,EAAIwwC,YACJxwC,EAAIywC,OAAOtiC,EAAKsR,EAAGtR,EAAKkL,GACxBrZ,EAAI0wC,OAAOxiC,EAAGuR,EAAGvR,EAAGmL,GACpBrZ,EAAI2kC,UAGNzL,EAAQn8B,UAAUm1C,eAAiB,SAAUlyC,EAAK0mC,EAASyL,EAAMC,EAAUC,OACzD9jD,KAAZ8jD,IACFA,EAAU,EAGZ,IAAIC,GAAU5nD,KAAK+7C,eAAeC,EAE9Bv5C,MAAKw6C,IAAe,EAAXyK,GAAgB,GAC3BpyC,EAAIqxC,UAAY,SAChBrxC,EAAIsxC,aAAe,MACnBgB,EAAQj5B,GAAKg5B,GACJllD,KAAKs6C,IAAe,EAAX2K,GAAgB,GAClCpyC,EAAIqxC,UAAY,QAChBrxC,EAAIsxC,aAAe,WAEnBtxC,EAAIqxC,UAAY,OAChBrxC,EAAIsxC,aAAe,UAGrBtxC,EAAI6wC,UAAYnmD,KAAKg5C,UACrB1jC,EAAIuxC,SAASY,EAAMG,EAAQ7yB,EAAG6yB,EAAQj5B,IAGxC6f,EAAQn8B,UAAUw1C,eAAiB,SAAUvyC,EAAK0mC,EAASyL,EAAMC,EAAUC,OACzD9jD,KAAZ8jD,IACFA,EAAU,EAGZ,IAAIC,GAAU5nD,KAAK+7C,eAAeC,EAE9Bv5C,MAAKw6C,IAAe,EAAXyK,GAAgB,GAC3BpyC,EAAIqxC,UAAY,SAChBrxC,EAAIsxC,aAAe,MACnBgB,EAAQj5B,GAAKg5B,GACJllD,KAAKs6C,IAAe,EAAX2K,GAAgB,GAClCpyC,EAAIqxC,UAAY,QAChBrxC,EAAIsxC,aAAe,WAEnBtxC,EAAIqxC,UAAY,OAChBrxC,EAAIsxC,aAAe,UAGrBtxC,EAAI6wC,UAAYnmD,KAAKg5C,UACrB1jC,EAAIuxC,SAASY,EAAMG,EAAQ7yB,EAAG6yB,EAAQj5B,IAGxC6f,EAAQn8B,UAAUy1C,eAAiB,SAAUxyC,EAAK0mC,EAASyL,EAAM9qB,OAChD94B,KAAX84B,IACFA,EAAS,EAGX,IAAIirB,GAAU5nD,KAAK+7C,eAAeC,EAClC1mC,GAAIqxC,UAAY,QAChBrxC,EAAIsxC,aAAe,SACnBtxC,EAAI6wC,UAAYnmD,KAAKg5C,UACrB1jC,EAAIuxC,SAASY,EAAMG,EAAQ7yB,EAAI4H,EAAQirB,EAAQj5B,IAWjD6f,EAAQn8B,UAAU01C,QAAU,SAAUzyC,EAAKmO,EAAMD,EAAIqiC,GACnD,GAAImC,GAAShoD,KAAK+7C,eAAet4B,GAC7BwkC,EAAOjoD,KAAK+7C,eAAev4B,EAE/BxjB,MAAK0mD,MAAMpxC,EAAK0yC,EAAQC,EAAMpC,IAMhCrX,EAAQn8B,UAAUqyC,YAAc,WAC9B,GACIjhC,GACAD,EACAjR,EACA21C,EACAT,EACAU,EACAC,EACAC,EACA1rB,EACA0T,EACAC,EAXAh7B,EAAMtV,KAAK8kD,aAefxvC,GAAImwC,KAAO,GAAKzlD,KAAK67C,OAAOkC,eAAiB,UAG7C,IAAIuK,GAAW,KAAQtoD,KAAKwC,MAAMuyB,EAC9BwzB,EAAW,KAAQvoD,KAAKwC,MAAMmsB,EAC9B65B,EAAa,EAAIxoD,KAAK67C,OAAOkC,eAC7B2J,EAAW1nD,KAAK67C,OAAO2H,iBAAiBpJ,WACxCqO,EAAY,GAAI7Z,GAAQnsC,KAAKw6C,IAAIyK,GAAWjlD,KAAKs6C,IAAI2K,IAErDrM,EAASr7C,KAAKq7C,OACdE,EAASv7C,KAAKu7C,OACdC,EAASx7C,KAAKw7C,MAQlB,KALAlmC,EAAIkwC,UAAY,EAChB0C,MAAmCrkD,KAAtB7D,KAAKugD,aAClBhuC,EAAO,GAAIw8B,GAAWsM,EAAOj5C,IAAKi5C,EAAOh5C,IAAKrC,KAAK66C,MAAOqN,GAC1D31C,EAAKg0C,OAAM,IAEHh0C,EAAKi0C,OAAO,CAClB,GAAIzxB,GAAIxiB,EAAKk0C,YAgBb,IAdIzmD,KAAKo4C,UACP30B,EAAO,GAAIorB,GAAQ9Z,EAAGwmB,EAAOn5C,IAAKo5C,EAAOp5C,KACzCohB,EAAK,GAAIqrB,GAAQ9Z,EAAGwmB,EAAOl5C,IAAKm5C,EAAOp5C,KACvCpC,KAAK+nD,QAAQzyC,EAAKmO,EAAMD,EAAIxjB,KAAKi5C,YACxBj5C,KAAKi4C,YACdx0B,EAAO,GAAIorB,GAAQ9Z,EAAGwmB,EAAOn5C,IAAKo5C,EAAOp5C,KACzCohB,EAAK,GAAIqrB,GAAQ9Z,EAAGwmB,EAAOn5C,IAAMkmD,EAAU9M,EAAOp5C,KAClDpC,KAAK+nD,QAAQzyC,EAAKmO,EAAMD,EAAIxjB,KAAKg5C,WAEjCv1B,EAAO,GAAIorB,GAAQ9Z,EAAGwmB,EAAOl5C,IAAKm5C,EAAOp5C,KACzCohB,EAAK,GAAIqrB,GAAQ9Z,EAAGwmB,EAAOl5C,IAAMimD,EAAU9M,EAAOp5C,KAClDpC,KAAK+nD,QAAQzyC,EAAKmO,EAAMD,EAAIxjB,KAAKg5C,YAG/Bh5C,KAAKi4C,UAAW,CAClBmQ,EAAQK,EAAU1zB,EAAI,EAAIwmB,EAAOn5C,IAAMm5C,EAAOl5C,GAC9C,IAAI25C,GAAU,GAAInN,GAAQ9Z,EAAGqzB,EAAO5M,EAAOp5C,KACvCgjB,EAAM,KAAOplB,KAAK83C,YAAY/iB,GAAK,IACvC/0B,MAAKwnD,eAAelyC,EAAK0mC,EAAS52B,EAAKsiC,EAAUc,GAGnDj2C,EAAKd,OASP,IALA6D,EAAIkwC,UAAY,EAChB0C,MAAmCrkD,KAAtB7D,KAAK0gD,aAClBnuC,EAAO,GAAIw8B,GAAWwM,EAAOn5C,IAAKm5C,EAAOl5C,IAAKrC,KAAKg7C,MAAOkN,GAC1D31C,EAAKg0C,OAAM,IAEHh0C,EAAKi0C,OAAO,CAClB,GAAI73B,GAAIpc,EAAKk0C,YAgBb,IAdIzmD,KAAKo4C,UACP30B,EAAO,GAAIorB,GAAQwM,EAAOj5C,IAAKusB,EAAG6sB,EAAOp5C,KACzCohB,EAAK,GAAIqrB,GAAQwM,EAAOh5C,IAAKssB,EAAG6sB,EAAOp5C,KACvCpC,KAAK+nD,QAAQzyC,EAAKmO,EAAMD,EAAIxjB,KAAKi5C,YACxBj5C,KAAKk4C,YACdz0B,EAAO,GAAIorB,GAAQwM,EAAOj5C,IAAKusB,EAAG6sB,EAAOp5C,KACzCohB,EAAK,GAAIqrB,GAAQwM,EAAOj5C,IAAMmmD,EAAU55B,EAAG6sB,EAAOp5C,KAClDpC,KAAK+nD,QAAQzyC,EAAKmO,EAAMD,EAAIxjB,KAAKg5C,WAEjCv1B,EAAO,GAAIorB,GAAQwM,EAAOh5C,IAAKssB,EAAG6sB,EAAOp5C,KACzCohB,EAAK,GAAIqrB,GAAQwM,EAAOh5C,IAAMkmD,EAAU55B,EAAG6sB,EAAOp5C,KAClDpC,KAAK+nD,QAAQzyC,EAAKmO,EAAMD,EAAIxjB,KAAKg5C,YAG/Bh5C,KAAKk4C,UAAW,CAClBiQ,EAAQM,EAAU95B,EAAI,EAAI0sB,EAAOj5C,IAAMi5C,EAAOh5C,IAC9C25C,EAAU,GAAInN,GAAQsZ,EAAOx5B,EAAG6sB,EAAOp5C,IACvC,IAAIgjB,GAAM,KAAOplB,KAAK+3C,YAAYppB,GAAK,IACvC3uB,MAAK6nD,eAAevyC,EAAK0mC,EAAS52B,EAAKsiC,EAAUc,GAGnDj2C,EAAKd,OAIP,GAAIzR,KAAKm4C,UAAW,CASlB,IARA7iC,EAAIkwC,UAAY,EAChB0C,MAAmCrkD,KAAtB7D,KAAK6gD,aAClBtuC,EAAO,GAAIw8B,GAAWyM,EAAOp5C,IAAKo5C,EAAOn5C,IAAKrC,KAAKm7C,MAAO+M,GAC1D31C,EAAKg0C,OAAM,GAEX4B,EAAQM,EAAU1zB,EAAI,EAAIsmB,EAAOj5C,IAAMi5C,EAAOh5C,IAC9C+lD,EAAQK,EAAU95B,EAAI,EAAI4sB,EAAOn5C,IAAMm5C,EAAOl5C,KAEtCkQ,EAAKi0C,OAAO,CAClB,GAAI/K,GAAIlpC,EAAKk0C,aAGTiC,EAAS,GAAI7Z,GAAQsZ,EAAOC,EAAO3M,GACnCuM,EAAShoD,KAAK+7C,eAAe2M,EACjCllC,GAAK,GAAIorB,GAAQoZ,EAAOjzB,EAAIyzB,EAAYR,EAAOr5B,GAC/C3uB,KAAK0mD,MAAMpxC,EAAK0yC,EAAQxkC,EAAIxjB,KAAKg5C,UAEjC,IAAI5zB,GAAMplB,KAAKg4C,YAAYyD,GAAK,GAChCz7C,MAAK8nD,eAAexyC,EAAKozC,EAAQtjC,EAAK,GAEtC7S,EAAKd,OAGP6D,EAAIkwC,UAAY,EAChB/hC,EAAO,GAAIorB,GAAQsZ,EAAOC,EAAO5M,EAAOp5C,KACxCohB,EAAK,GAAIqrB,GAAQsZ,EAAOC,EAAO5M,EAAOn5C,KACtCrC,KAAK+nD,QAAQzyC,EAAKmO,EAAMD,EAAIxjB,KAAKg5C,WAInC,GAAIh5C,KAAKi4C,UAAW,CAClB,GAAI0Q,GACAC,CACJtzC,GAAIkwC,UAAY,EAGhBmD,EAAS,GAAI9Z,GAAQwM,EAAOj5C,IAAKm5C,EAAOn5C,IAAKo5C,EAAOp5C,KACpDwmD,EAAS,GAAI/Z,GAAQwM,EAAOh5C,IAAKk5C,EAAOn5C,IAAKo5C,EAAOp5C,KACpDpC,KAAK+nD,QAAQzyC,EAAKqzC,EAAQC,EAAQ5oD,KAAKg5C,WAEvC2P,EAAS,GAAI9Z,GAAQwM,EAAOj5C,IAAKm5C,EAAOl5C,IAAKm5C,EAAOp5C,KACpDwmD,EAAS,GAAI/Z,GAAQwM,EAAOh5C,IAAKk5C,EAAOl5C,IAAKm5C,EAAOp5C,KACpDpC,KAAK+nD,QAAQzyC,EAAKqzC,EAAQC,EAAQ5oD,KAAKg5C,WAIrCh5C,KAAKk4C,YACP5iC,EAAIkwC,UAAY,EAEhB/hC,EAAO,GAAIorB,GAAQwM,EAAOj5C,IAAKm5C,EAAOn5C,IAAKo5C,EAAOp5C,KAClDohB,EAAK,GAAIqrB,GAAQwM,EAAOj5C,IAAKm5C,EAAOl5C,IAAKm5C,EAAOp5C,KAChDpC,KAAK+nD,QAAQzyC,EAAKmO,EAAMD,EAAIxjB,KAAKg5C,WAEjCv1B,EAAO,GAAIorB,GAAQwM,EAAOh5C,IAAKk5C,EAAOn5C,IAAKo5C,EAAOp5C,KAClDohB,EAAK,GAAIqrB,GAAQwM,EAAOh5C,IAAKk5C,EAAOl5C,IAAKm5C,EAAOp5C,KAChDpC,KAAK+nD,QAAQzyC,EAAKmO,EAAMD,EAAIxjB,KAAKg5C,WAInC,IAAIrB,GAAS33C,KAAK23C,MACdA,GAAO/zC,OAAS,GAAK5D,KAAKi4C,YAC5B3H,EAAU,GAAMtwC,KAAKwC,MAAMmsB,EAC3Bw5B,GAAS9M,EAAOh5C,IAAM,EAAIg5C,EAAOj5C,KAAO,EACxCgmD,EAAQK,EAAU1zB,EAAI,EAAIwmB,EAAOn5C,IAAMkuC,EAAUiL,EAAOl5C,IAAMiuC,EAC9DmX,EAAO,GAAI5Y,GAAQsZ,EAAOC,EAAO5M,EAAOp5C,KACxCpC,KAAKwnD,eAAelyC,EAAKmyC,EAAM9P,EAAQ+P,GAIzC,IAAI9P,GAAS53C,KAAK43C,MACdA,GAAOh0C,OAAS,GAAK5D,KAAKk4C,YAC5B7H,EAAU,GAAMrwC,KAAKwC,MAAMuyB,EAC3BozB,EAAQM,EAAU95B,EAAI,EAAI0sB,EAAOj5C,IAAMiuC,EAAUgL,EAAOh5C,IAAMguC,EAC9D+X,GAAS7M,EAAOl5C,IAAM,EAAIk5C,EAAOn5C,KAAO,EACxCqlD,EAAO,GAAI5Y,GAAQsZ,EAAOC,EAAO5M,EAAOp5C,KAExCpC,KAAK6nD,eAAevyC,EAAKmyC,EAAM7P,EAAQ8P,GAIzC,IAAI7P,GAAS73C,KAAK63C,MACdA,GAAOj0C,OAAS,GAAK5D,KAAKm4C,YAC5Bxb,EAAS,GACTwrB,EAAQM,EAAU1zB,EAAI,EAAIsmB,EAAOj5C,IAAMi5C,EAAOh5C,IAC9C+lD,EAAQK,EAAU95B,EAAI,EAAI4sB,EAAOn5C,IAAMm5C,EAAOl5C,IAC9CgmD,GAAS7M,EAAOn5C,IAAM,EAAIm5C,EAAOp5C,KAAO,EACxCqlD,EAAO,GAAI5Y,GAAQsZ,EAAOC,EAAOC,GAEjCroD,KAAK8nD,eAAexyC,EAAKmyC,EAAM5P,EAAQlb,KAU3C6R,EAAQn8B,UAAUuzC,SAAW,SAAUiD,EAAG/yC,EAAGgzC,GAC3C,GAAIryC,GAAGb,EAAGK,EAAGI,EAAG0yC,EAAIC,CAMpB,QAJA3yC,EAAIyyC,EAAIhzC,EACRizC,EAAKtmD,KAAKqK,MAAM+7C,EAAI,IACpBG,EAAI3yC,GAAK,EAAI5T,KAAKwiB,IAAI4jC,EAAI,GAAK,EAAI,IAE3BE,GACN,IAAK,GACHtyC,EAAIJ,EAAET,EAAIozC,EAAE/yC,EAAI,CAAE,MACpB,KAAK,GACHQ,EAAIuyC,EAAEpzC,EAAIS,EAAEJ,EAAI,CAAE,MACpB,KAAK,GACHQ,EAAI,EAAEb,EAAIS,EAAEJ,EAAI+yC,CAAE,MACpB,KAAK,GACHvyC,EAAI,EAAEb,EAAIozC,EAAE/yC,EAAII,CAAE,MACpB,KAAK,GACHI,EAAIuyC,EAAEpzC,EAAI,EAAEK,EAAII,CAAE,MACpB,KAAK,GACHI,EAAIJ,EAAET,EAAI,EAAEK,EAAI+yC,CAAE,MAEpB,SACEvyC,EAAI,EAAEb,EAAI,EAAEK,EAAI,EAGpB,MAAO,OAASjM,SAAa,IAAJyM,GAAW,IAAMzM,SAAa,IAAJ4L,GAAW,IAAM5L,SAAa,IAAJiM,GAAW,KAG1Fu4B,EAAQn8B,UAAU42C,gBAAkB,SAAUruC,GAC5C,WAAc/W,KAAV+W,EACE5a,KAAKq4C,gBACA,GAAKz9B,EAAM0jC,MAAM7C,EAAIz7C,KAAK+5C,UAAUG,aAElCl6C,KAAKy9C,IAAIhC,EAAIz7C,KAAK67C,OAAOkC,eAAkB/9C,KAAK+5C,UAAUG,YAIhEl6C,KAAK+5C,UAAUG,aAWxB1L,EAAQn8B,UAAU62C,WAAa,SAAU5zC,EAAKsF,EAAOuuC,EAAQC,EAAQl/C,EAAOm/C,GAC1E,GAAOx7C,GAAGy7C,EAGNvX,EAAK/xC,KACLg8C,EAAUphC,EAAMA,MAChBqgC,EAAOj7C,KAAKw7C,OAAOp5C,IACnBkE,IAASsU,MAAO,GAAIi0B,GAAQmN,EAAQjnB,EAAIo0B,EAAQnN,EAAQrtB,EAAIy6B,EAAQpN,EAAQP,KAAQ7gC,MAAO,GAAIi0B,GAAQmN,EAAQjnB,EAAIo0B,EAAQnN,EAAQrtB,EAAIy6B,EAAQpN,EAAQP,KAAQ7gC,MAAO,GAAIi0B,GAAQmN,EAAQjnB,EAAIo0B,EAAQnN,EAAQrtB,EAAIy6B,EAAQpN,EAAQP,KAAQ7gC,MAAO,GAAIi0B,GAAQmN,EAAQjnB,EAAIo0B,EAAQnN,EAAQrtB,EAAIy6B,EAAQpN,EAAQP,KAC7SgD,IAAY7jC,MAAO,GAAIi0B,GAAQmN,EAAQjnB,EAAIo0B,EAAQnN,EAAQrtB,EAAIy6B,EAAQnO,KAAWrgC,MAAO,GAAIi0B,GAAQmN,EAAQjnB,EAAIo0B,EAAQnN,EAAQrtB,EAAIy6B,EAAQnO,KAAWrgC,MAAO,GAAIi0B,GAAQmN,EAAQjnB,EAAIo0B,EAAQnN,EAAQrtB,EAAIy6B,EAAQnO,KAAWrgC,MAAO,GAAIi0B,GAAQmN,EAAQjnB,EAAIo0B,EAAQnN,EAAQrtB,EAAIy6B,EAAQnO,IAG7R30C,GAAIY,QAAQ,SAAUpG,GACpBA,EAAIy9C,OAASxM,EAAGgK,eAAej7C,EAAI8Z,SAErC6jC,EAAOv3C,QAAQ,SAAUpG,GACvBA,EAAIy9C,OAASxM,EAAGgK,eAAej7C,EAAI8Z,QAIrC,IAAI2uC,KAAcC,QAASljD,EAAKq1C,OAAQ9M,EAAQ4a,IAAIhL,EAAO,GAAG7jC,MAAO6jC,EAAO,GAAG7jC,SAAY4uC,SAAUljD,EAAI,GAAIA,EAAI,GAAIm4C,EAAO,GAAIA,EAAO,IAAK9C,OAAQ9M,EAAQ4a,IAAIhL,EAAO,GAAG7jC,MAAO6jC,EAAO,GAAG7jC,SAAY4uC,SAAUljD,EAAI,GAAIA,EAAI,GAAIm4C,EAAO,GAAIA,EAAO,IAAK9C,OAAQ9M,EAAQ4a,IAAIhL,EAAO,GAAG7jC,MAAO6jC,EAAO,GAAG7jC,SAAY4uC,SAAUljD,EAAI,GAAIA,EAAI,GAAIm4C,EAAO,GAAIA,EAAO,IAAK9C,OAAQ9M,EAAQ4a,IAAIhL,EAAO,GAAG7jC,MAAO6jC,EAAO,GAAG7jC,SAAY4uC,SAAUljD,EAAI,GAAIA,EAAI,GAAIm4C,EAAO,GAAIA,EAAO,IAAK9C,OAAQ9M,EAAQ4a,IAAIhL,EAAO,GAAG7jC,MAAO6jC,EAAO,GAAG7jC,QAI/f,KAHAA,EAAM2uC,SAAWA,EAGZ17C,EAAI,EAAGA,EAAI07C,EAAS3lD,OAAQiK,IAAK,CACpCy7C,EAAUC,EAAS17C,EACnB,IAAI67C,GAAc1pD,KAAKk8C,2BAA2BoN,EAAQ3N,OAC1D2N,GAAQ5K,KAAO1+C,KAAKq4C,gBAAkBqR,EAAY9lD,UAAY8lD,EAAYjO,EAwB5E,IAjBA8N,EAAS1gC,KAAK,SAAUrlB,EAAGC,GACzB,GAAIikB,GAAOjkB,EAAEi7C,KAAOl7C,EAAEk7C,IACtB,OAAIh3B,KAGAlkB,EAAEgmD,UAAYljD,EAAY,EAC1B7C,EAAE+lD,UAAYljD,GAAa,EAGxB,KAITgP,EAAIkwC,UAAYxlD,KAAKipD,gBAAgBruC,GACrCtF,EAAIuwC,YAAcwD,EAClB/zC,EAAI6wC,UAAYj8C,EAEX2D,EAAI,EAAGA,EAAI07C,EAAS3lD,OAAQiK,IAC/By7C,EAAUC,EAAS17C,GACnB7N,KAAK2pD,SAASr0C,EAAKg0C,EAAQE,UAW/Bhb,EAAQn8B,UAAUs3C,SAAW,SAAUr0C,EAAK+oC,EAAQ8H,EAAWN,GAC7D,KAAIxH,EAAOz6C,OAAS,GAApB,KAIkBC,KAAdsiD,IACF7wC,EAAI6wC,UAAYA,OAEEtiD,KAAhBgiD,IACFvwC,EAAIuwC,YAAcA,GAEpBvwC,EAAIwwC,YACJxwC,EAAIywC,OAAO1H,EAAO,GAAGE,OAAOxpB,EAAGspB,EAAO,GAAGE,OAAO5vB,EAEhD,KAAK,GAAI5qB,GAAI,EAAGA,EAAIs6C,EAAOz6C,SAAUG,EAAG,CACtC,GAAI6W,GAAQyjC,EAAOt6C,EACnBuR,GAAI0wC,OAAOprC,EAAM2jC,OAAOxpB,EAAGna,EAAM2jC,OAAO5vB,GAG1CrZ,EAAI8wC,YACJ9wC,EAAI0kC,OACJ1kC,EAAI2kC,WAMNzL,EAAQn8B,UAAUu3C,YAAc,SAAUt0C,EAAKsF,EAAO1Q,EAAOm/C,EAAalZ,GACxE,GAAI0Z,GAAS7pD,KAAK8pD,YAAYlvC,EAAOu1B,EAErC76B,GAAIkwC,UAAYxlD,KAAKipD,gBAAgBruC,GACrCtF,EAAIuwC,YAAcwD,EAClB/zC,EAAI6wC,UAAYj8C,EAChBoL,EAAIwwC,YACJxwC,EAAIy0C,IAAInvC,EAAM2jC,OAAOxpB,EAAGna,EAAM2jC,OAAO5vB,EAAGk7B,EAAQ,EAAa,EAAVpnD,KAAKunD,IAAQ,GAChE10C,EAAI0kC,OACJ1kC,EAAI2kC,UAMNzL,EAAQn8B,UAAU43C,kBAAoB,SAAUrvC,GAE9C,GAAI+qC,GAAoF,KAA7E,GAAK/qC,EAAMA,MAAM6gC,EAAIz7C,KAAKw7C,OAAOp5C,KAAOpC,KAAKwC,MAAMi5C,EAAIz7C,KAAKw4C,cAIvE,QACEwB,KAJUh6C,KAAK4lD,SAASD,EAAK,EAAG,GAKhCh6C,OAJgB3L,KAAK4lD,SAASD,EAAK,EAAG,MAiB1CnX,EAAQn8B,UAAU63C,gBAAkB,SAAUtvC,GAE5C,GAAI1Q,GAAOm/C,CAEX,IAAiC,gBAAtBzuC,GAAMA,MAAMrY,MACrB2H,EAAQ0Q,EAAMA,MAAMrY,MACpB8mD,EAAczuC,EAAMA,MAAMrY,UACrB,CACL,GAAIojD,GAA2E,KAApE,GAAK/qC,EAAMA,MAAMrY,MAAQvC,KAAK07C,WAAWt5C,KAAOpC,KAAKwC,MAAMD,MACtE2H,GAAQlK,KAAK4lD,SAASD,EAAK,EAAG,GAC9B0D,EAAcrpD,KAAK4lD,SAASD,EAAK,EAAG,IAEtC,OACE3L,KAAM9vC,EACNyB,OAAQ09C,IAQZ7a,EAAQn8B,UAAU83C,eAAiB,WACjC,OACEnQ,KAAMh6C,KAAK+5C,UAAUC,KACrBruC,OAAQ3L,KAAK+5C,UAAUE,SAW3BzL,EAAQn8B,UAAUy3C,YAAc,SAAUlvC,EAAOu1B,OAClCtsC,KAATssC,IACFA,EAAOnwC,KAAKmlD,WAGd,IAAI0E,EAUJ,OAREA,GADE7pD,KAAKq4C,gBACElI,GAAQv1B,EAAM0jC,MAAM7C,EAEpBtL,IAASnwC,KAAKy9C,IAAIhC,EAAIz7C,KAAK67C,OAAOkC,gBAEzC8L,EAAS,IACXA,EAAS,GAGJA,GAWTrb,EAAQn8B,UAAUuxC,qBAAuB,SAAUtuC,EAAKsF,GACtD,GAAIuuC,GAASnpD,KAAKu6C,UAAY,EAC1B6O,EAASppD,KAAKw6C,UAAY,EAC1B4P,EAASpqD,KAAKiqD,kBAAkBrvC,EAEpC5a,MAAKkpD,WAAW5zC,EAAKsF,EAAOuuC,EAAQC,EAAQgB,EAAOpQ,KAAMoQ,EAAOz+C,SAMlE6iC,EAAQn8B,UAAUwxC,0BAA4B,SAAUvuC,EAAKsF,GAC3D,GAAIuuC,GAASnpD,KAAKu6C,UAAY,EAC1B6O,EAASppD,KAAKw6C,UAAY,EAC1B4P,EAASpqD,KAAKkqD,gBAAgBtvC,EAElC5a,MAAKkpD,WAAW5zC,EAAKsF,EAAOuuC,EAAQC,EAAQgB,EAAOpQ,KAAMoQ,EAAOz+C,SAMlE6iC,EAAQn8B,UAAUyxC,yBAA2B,SAAUxuC,EAAKsF,GAE1D,GAAIyvC,IAAYzvC,EAAMA,MAAMrY,MAAQvC,KAAK07C,WAAWt5C,KAAOpC,KAAK07C,WAAWJ,QACvE6N,EAASnpD,KAAKu6C,UAAY,GAAgB,GAAX8P,EAAiB,IAChDjB,EAASppD,KAAKw6C,UAAY,GAAgB,GAAX6P,EAAiB,IAEhDD,EAASpqD,KAAKmqD,gBAElBnqD,MAAKkpD,WAAW5zC,EAAKsF,EAAOuuC,EAAQC,EAAQgB,EAAOpQ,KAAMoQ,EAAOz+C,SAMlE6iC,EAAQn8B,UAAU0xC,qBAAuB,SAAUzuC,EAAKsF,GACtD,GAAIwvC,GAASpqD,KAAKiqD,kBAAkBrvC,EAEpC5a,MAAK4pD,YAAYt0C,EAAKsF,EAAOwvC,EAAOpQ,KAAMoQ,EAAOz+C,SAMnD6iC,EAAQn8B,UAAU4xC,yBAA2B,SAAU3uC,EAAKsF,GAE1D,GAAI6I,GAAOzjB,KAAK+7C,eAAenhC,EAAM6jC,OACrCnpC,GAAIkwC,UAAY,EAChBxlD,KAAK0mD,MAAMpxC,EAAKmO,EAAM7I,EAAM2jC,OAAQv+C,KAAKi5C,WAEzCj5C,KAAK+jD,qBAAqBzuC,EAAKsF,IAMjC4zB,EAAQn8B,UAAU6xC,0BAA4B,SAAU5uC,EAAKsF,GAC3D,GAAIwvC,GAASpqD,KAAKkqD,gBAAgBtvC,EAElC5a,MAAK4pD,YAAYt0C,EAAKsF,EAAOwvC,EAAOpQ,KAAMoQ,EAAOz+C,SAMnD6iC,EAAQn8B,UAAU8xC,yBAA2B,SAAU7uC,EAAKsF,GAC1D,GAAI0vC,GAAUtqD,KAAKmlD,WACfkF,GAAYzvC,EAAMA,MAAMrY,MAAQvC,KAAK07C,WAAWt5C,KAAOpC,KAAK07C,WAAWJ,QAEvEiP,EAAUD,EAAUtqD,KAAK04C,mBACzB8R,EAAYF,EAAUtqD,KAAK24C,mBAAqB4R,EAChDpa,EAAOoa,EAAUC,EAAYH,EAE7BD,EAASpqD,KAAKmqD,gBAElBnqD,MAAK4pD,YAAYt0C,EAAKsF,EAAOwvC,EAAOpQ,KAAMoQ,EAAOz+C,OAAQwkC,IAM3D3B,EAAQn8B,UAAU+xC,yBAA2B,SAAU9uC,EAAKsF,GAC1D,GAAIxU,GAAQwU,EAAMgnC,WACdt7C,EAAMsU,EAAMinC,SACZ4I,EAAQ7vC,EAAMknC,UAElB,QAAcj+C,KAAV+W,OAAiC/W,KAAVuC,OAA+BvC,KAARyC,OAA+BzC,KAAV4mD,EAAvE,CAIA,GACItE,GACAN,EAFA6E,GAAiB,CAKrB,IAAI1qD,KAAK2qD,gBAAkB3qD,KAAKs4C,WAAY,CAK1C,GAAIsS,GAAQ/b,EAAQxQ,SAASosB,EAAMnM,MAAO1jC,EAAM0jC,OAC5CuM,EAAQhc,EAAQxQ,SAAS/3B,EAAIg4C,MAAOl4C,EAAMk4C,OAC1CwM,EAAejc,EAAQkc,aAAaH,EAAOC,GAC3C9lD,EAAM+lD,EAAalnD,QAGvB8mD,GAAiBI,EAAarP,EAAI,EAGpC,GAAIiP,EAAgB,CAGlB,GAGIr/C,GAHA2/C,GAAQpwC,EAAMA,MAAM6gC,EAAIr1C,EAAMwU,MAAM6gC,EAAIn1C,EAAIsU,MAAM6gC,EAAIgP,EAAM7vC,MAAM6gC,GAAK,EACvEtwC,EAAyE,KAApE,GAAK6/C,EAAOhrD,KAAKw7C,OAAOp5C,KAAOpC,KAAKwC,MAAMi5C,EAAIz7C,KAAKw4C,cAIxDx4C,MAAKs4C,YACPjtC,EAAI5I,KAAKL,IAAI,EAAI0oD,EAAa/1B,EAAIhwB,EAAM,EAAG,GAC3CohD,EAAYnmD,KAAK4lD,SAASz6C,EALpB,EAK0BE,GAChCw6C,EAAcM,IAEd96C,EAAI,EACJ86C,EAAYnmD,KAAK4lD,SAASz6C,EATpB,EAS0BE,GAChCw6C,EAAc7lD,KAAKg5C,eAGrBmN,GAAY,OACZN,EAAc7lD,KAAKg5C,SAGrB1jC,GAAIkwC,UAAYxlD,KAAKipD,gBAAgBruC,EAGrC,IAAIyjC,IAAUzjC,EAAOxU,EAAOqkD,EAAOnkD,EACnCtG,MAAK2pD,SAASr0C,EAAK+oC,EAAQ8H,EAAWN,KAMxCrX,EAAQn8B,UAAU44C,cAAgB,SAAU31C,EAAKmO,EAAMD,GACrD,OAAa3f,KAAT4f,OAA6B5f,KAAP2f,EAA1B,CAKA,GAAIwnC,IAAQvnC,EAAK7I,MAAM6gC,EAAIj4B,EAAG5I,MAAM6gC,GAAK,EACrCtwC,EAAyE,KAApE,GAAK6/C,EAAOhrD,KAAKw7C,OAAOp5C,KAAOpC,KAAKwC,MAAMi5C,EAAIz7C,KAAKw4C,cAE5DljC,GAAIkwC,UAAyC,EAA7BxlD,KAAKipD,gBAAgBxlC,GACrCnO,EAAIuwC,YAAc7lD,KAAK4lD,SAASz6C,EAAG,EAAG,GACtCnL,KAAK0mD,MAAMpxC,EAAKmO,EAAK86B,OAAQ/6B,EAAG+6B,UAMlC/P,EAAQn8B,UAAUgyC,sBAAwB,SAAU/uC,EAAKsF,GACvD5a,KAAKirD,cAAc31C,EAAKsF,EAAOA,EAAMgnC,YACrC5hD,KAAKirD,cAAc31C,EAAKsF,EAAOA,EAAMinC,WAMvCrT,EAAQn8B,UAAUiyC,sBAAwB,SAAUhvC,EAAKsF,OAC/B/W,KAApB+W,EAAMonC,YAIV1sC,EAAIkwC,UAAYxlD,KAAKipD,gBAAgBruC,GACrCtF,EAAIuwC,YAAc7lD,KAAK+5C,UAAUE,OAEjCj6C,KAAK0mD,MAAMpxC,EAAKsF,EAAM2jC,OAAQ3jC,EAAMonC,UAAUzD,UAOhD/P,EAAQn8B,UAAUsyC,iBAAmB,WACnC,GACI5gD,GADAuR,EAAMtV,KAAK8kD,aAGf,UAAwBjhD,KAApB7D,KAAKs2C,YAA4Bt2C,KAAKs2C,WAAW1yC,QAAU,GAI/D,IAFA5D,KAAKo+C,kBAAkBp+C,KAAKs2C,YAEvBvyC,EAAI,EAAGA,EAAI/D,KAAKs2C,WAAW1yC,OAAQG,IAAK,CAC3C,GAAI6W,GAAQ5a,KAAKs2C,WAAWvyC,EAG5B/D,MAAKukD,oBAAoBhkD,KAAKP,KAAMsV,EAAKsF,KAa7C4zB,EAAQn8B,UAAU64C,oBAAsB,SAAU3iD,GAEhDvI,KAAKmrD,YAAcpU,EAAUxuC,GAC7BvI,KAAKorD,YAAclU,EAAU3uC,GAE7BvI,KAAKqrD,mBAAqBrrD,KAAK67C,OAAOyP,aAQxC9c,EAAQn8B,UAAUgwC,aAAe,SAAU95C,GAWzC,GAVAA,EAAQA,GAASC,OAAOD,MAIpBvI,KAAKurD,gBACPvrD,KAAKwrD,WAAWjjD,GAIlBvI,KAAKurD,eAAiBhjD,EAAMkjD,MAAwB,IAAhBljD,EAAMkjD,MAA+B,IAAjBljD,EAAMmjD,OACzD1rD,KAAKurD,gBAAmBvrD,KAAK2rD,UAAlC,CAEA3rD,KAAKkrD,oBAAoB3iD,GAEzBvI,KAAK4rD,WAAa,GAAI/oD,MAAK7C,KAAKumD,OAChCvmD,KAAK6rD,SAAW,GAAIhpD,MAAK7C,KAAKwmD,KAC9BxmD,KAAK8rD,iBAAmB9rD,KAAK67C,OAAO2H,iBAEpCxjD,KAAKi+C,MAAM5xC,MAAM0/C,OAAS,MAK1B,IAAIha,GAAK/xC,IACTA,MAAKgsD,YAAc,SAAUzjD,GAC3BwpC,EAAGka,aAAa1jD,IAElBvI,KAAKksD,UAAY,SAAU3jD,GACzBwpC,EAAGyZ,WAAWjjD,IAEhB5H,EAAKiH,iBAAiBsI,SAAU,YAAa6hC,EAAGia,aAChDrrD,EAAKiH,iBAAiBsI,SAAU,UAAW6hC,EAAGma,WAC9CvrD,EAAK2H,eAAeC,KAQtBimC,EAAQn8B,UAAU45C,aAAe,SAAU1jD,GACzCvI,KAAKmsD,QAAS,EACd5jD,EAAQA,GAASC,OAAOD,KAGxB,IAAI6jD,GAAQ7wB,WAAWwb,EAAUxuC,IAAUvI,KAAKmrD,YAC5CkB,EAAQ9wB,WAAW2b,EAAU3uC,IAAUvI,KAAKorD,WAGhD,IAAI7iD,IAA2B,IAAlBA,EAAM+jD,QAAkB,CAEnC,GAAIC,GAAkC,GAAzBvsD,KAAKi+C,MAAMltC,YACpBy7C,EAAmC,GAA1BxsD,KAAKi+C,MAAM+E,aAEpByJ,GAAWzsD,KAAKqrD,mBAAmBt2B,GAAK,GAAKq3B,EAAQG,EAASvsD,KAAK67C,OAAO6Q,UAAY,GACtFC,GAAW3sD,KAAKqrD,mBAAmB18B,GAAK,GAAK09B,EAAQG,EAASxsD,KAAK67C,OAAO6Q,UAAY,EAE1F1sD,MAAK67C,OAAO+Q,UAAUH,EAASE,GAC/B3sD,KAAKkrD,oBAAoB3iD,OACpB,CACL,GAAIskD,GAAgB7sD,KAAK8rD,iBAAiB1R,WAAagS,EAAQ,IAC3DU,EAAc9sD,KAAK8rD,iBAAiBzR,SAAWgS,EAAQ,IAGvDU,EAAYtqD,KAAKs6C,IADL,EACqB,IAAM,EAAIt6C,KAAKunD,GAIhDvnD,MAAKwiB,IAAIxiB,KAAKs6C,IAAI8P,IAAkBE,IACtCF,EAAgBpqD,KAAKi6B,MAAMmwB,EAAgBpqD,KAAKunD,IAAMvnD,KAAKunD,GAAK,MAE9DvnD,KAAKwiB,IAAIxiB,KAAKw6C,IAAI4P,IAAkBE,IACtCF,GAAiBpqD,KAAKi6B,MAAMmwB,EAAgBpqD,KAAKunD,GAAK,IAAO,IAAOvnD,KAAKunD,GAAK,MAI5EvnD,KAAKwiB,IAAIxiB,KAAKs6C,IAAI+P,IAAgBC,IACpCD,EAAcrqD,KAAKi6B,MAAMowB,EAAcrqD,KAAKunD,IAAMvnD,KAAKunD,IAErDvnD,KAAKwiB,IAAIxiB,KAAKw6C,IAAI6P,IAAgBC,IACpCD,GAAerqD,KAAKi6B,MAAMowB,EAAcrqD,KAAKunD,GAAK,IAAO,IAAOvnD,KAAKunD,IAEvEhqD,KAAK67C,OAAOmR,eAAeH,EAAeC,GAG5C9sD,KAAKkhD,QAGL,IAAI+L,GAAajtD,KAAKujD,mBACtBvjD,MAAKktD,KAAK,uBAAwBD,GAElCtsD,EAAK2H,eAAeC,IAQtBimC,EAAQn8B,UAAUm5C,WAAa,SAAUjjD,GACvCvI,KAAKi+C,MAAM5xC,MAAM0/C,OAAS,OAC1B/rD,KAAKurD,gBAAiB,EAGtB5qD,EAAKyH,oBAAoB8H,SAAU,YAAalQ,KAAKgsD,aACrDrrD,EAAKyH,oBAAoB8H,SAAU,UAAWlQ,KAAKksD,WACnDvrD,EAAK2H,eAAeC,IAMtBimC,EAAQn8B,UAAUwwC,SAAW,SAAUt6C,GACrC,GAAKvI,KAAKmtD,iBAAV,CACA,GAAKntD,KAAKmsD,OAQRnsD,KAAKmsD,QAAS,MARE,CAChB,GAAIiB,GAAeptD,KAAKi+C,MAAMh4C,wBAC1BonD,EAAStW,EAAUxuC,GAAS6kD,EAAalnD,KACzConD,EAASpW,EAAU3uC,GAAS6kD,EAAa9mD,IACzCinD,EAAYvtD,KAAKwtD,iBAAiBH,EAAQC,EAC1CC,IAAWvtD,KAAKmtD,iBAAiBI,EAAU3yC,MAAM4Z,MAKvD7zB,EAAK2H,eAAeC,KAOtBimC,EAAQn8B,UAAUswC,WAAa,SAAUp6C,GACvC,GACI6kD,GAAeptD,KAAKi+C,MAAMh4C,wBAC1BonD,EAAStW,EAAUxuC,GAAS6kD,EAAalnD,KACzConD,EAASpW,EAAU3uC,GAAS6kD,EAAa9mD,GAE7C,IAAKtG,KAAKytD,YAAV,CASA,GALIztD,KAAK0tD,gBACPtY,aAAap1C,KAAK0tD,gBAIhB1tD,KAAKurD,eAEP,WADAvrD,MAAK2tD,cAIP,IAAI3tD,KAAKq5C,SAAWr5C,KAAKq5C,QAAQkU,UAAW,CAE1C,GAAIA,GAAYvtD,KAAKwtD,iBAAiBH,EAAQC,EAC1CC,KAAcvtD,KAAKq5C,QAAQkU,YAEzBA,EACFvtD,KAAK4tD,aAAaL,GAElBvtD,KAAK2tD,oBAGJ,CAEL,GAAI5b,GAAK/xC,IACTA,MAAK0tD,eAAiBrY,WAAW,WAC/BtD,EAAG2b,eAAiB,IAGpB,IAAIH,GAAYxb,EAAGyb,iBAAiBH,EAAQC,EACxCC,IACFxb,EAAG6b,aAAaL,IAvCV,QAgDd/e,EAAQn8B,UAAUkwC,cAAgB,SAAUh6C,GAC1CvI,KAAK2rD,WAAY,CAEjB,IAAI5Z,GAAK/xC,IACTA,MAAK6tD,YAAc,SAAUtlD,GAC3BwpC,EAAG+b,aAAavlD,IAElBvI,KAAK+tD,WAAa,SAAUxlD,GAC1BwpC,EAAGic,YAAYzlD,IAEjB5H,EAAKiH,iBAAiBsI,SAAU,YAAa6hC,EAAG8b,aAChDltD,EAAKiH,iBAAiBsI,SAAU,WAAY6hC,EAAGgc,YAE/C/tD,KAAKqiD,aAAa95C,IAMpBimC,EAAQn8B,UAAUy7C,aAAe,SAAUvlD,GACzCvI,KAAKisD,aAAa1jD,IAMpBimC,EAAQn8B,UAAU27C,YAAc,SAAUzlD,GACxCvI,KAAK2rD,WAAY,EAEjBhrD,EAAKyH,oBAAoB8H,SAAU,YAAalQ,KAAK6tD,aACrDltD,EAAKyH,oBAAoB8H,SAAU,WAAYlQ,KAAK+tD,YAEpD/tD,KAAKwrD,WAAWjjD,IAQlBimC,EAAQn8B,UAAUowC,SAAW,SAAUl6C,GAChCA,IACHA,EAAQC,OAAOD,MAGjB,IAAI44B,GAAQ,CAcZ,IAbI54B,EAAM0lD,WAER9sB,EAAQ54B,EAAM0lD,WAAa,IAClB1lD,EAAM2lD,SAIf/sB,GAAS54B,EAAM2lD,OAAS,GAMtB/sB,EAAO,CACT,GAAIgtB,GAAYnuD,KAAK67C,OAAOkC,eACxBqQ,EAAYD,GAAa,EAAIhtB,EAAQ,GAEzCnhC,MAAK67C,OAAOwS,aAAaD,GACzBpuD,KAAKkhD,SAELlhD,KAAK2tD,eAIP,GAAIV,GAAajtD,KAAKujD,mBACtBvjD,MAAKktD,KAAK,uBAAwBD,GAKlCtsD,EAAK2H,eAAeC,IAYtBimC,EAAQn8B,UAAUi8C,gBAAkB,SAAU1zC,EAAO2zC,GAKnD,QAASzxB,GAAK/H,GACZ,MAAOA,GAAI,EAAI,EAAIA,EAAI,GAAK,EAAI,EALlC,GAAIvxB,GAAI+qD,EAAS,GACb9qD,EAAI8qD,EAAS,GACb9tD,EAAI8tD,EAAS,GAMbnpB,EAAKtI,GAAMr5B,EAAEsxB,EAAIvxB,EAAEuxB,IAAMna,EAAM+T,EAAInrB,EAAEmrB,IAAMlrB,EAAEkrB,EAAInrB,EAAEmrB,IAAM/T,EAAMma,EAAIvxB,EAAEuxB,IACrEy5B,EAAK1xB,GAAMr8B,EAAEs0B,EAAItxB,EAAEsxB,IAAMna,EAAM+T,EAAIlrB,EAAEkrB,IAAMluB,EAAEkuB,EAAIlrB,EAAEkrB,IAAM/T,EAAMma,EAAItxB,EAAEsxB,IACrE05B,EAAK3xB,GAAMt5B,EAAEuxB,EAAIt0B,EAAEs0B,IAAMna,EAAM+T,EAAIluB,EAAEkuB,IAAMnrB,EAAEmrB,EAAIluB,EAAEkuB,IAAM/T,EAAMma,EAAIt0B,EAAEs0B,GAGzE,SAAc,GAANqQ,GAAiB,GAANopB,GAAWppB,GAAMopB,GAAc,GAANA,GAAiB,GAANC,GAAWD,GAAMC,GAAc,GAANrpB,GAAiB,GAANqpB,GAAWrpB,GAAMqpB,IAY9GjgB,EAAQn8B,UAAUm7C,iBAAmB,SAAUz4B,EAAGpG,GAChD,GAAI5qB,GAGJwpD,EAAY,KACRmB,EAAmB,KACnBC,EAAc,KACdhT,EAAS,GAAI/M,GAAQ7Z,EAAGpG,EAE5B,IAAI3uB,KAAKqM,QAAUmiC,EAAQgJ,MAAMyI,KAAOjgD,KAAKqM,QAAUmiC,EAAQgJ,MAAM8H,UAAYt/C,KAAKqM,QAAUmiC,EAAQgJ,MAAM+H,QAE5G,IAAKx7C,EAAI/D,KAAKs2C,WAAW1yC,OAAS,EAAGG,GAAK,EAAGA,IAAK,CAChDwpD,EAAYvtD,KAAKs2C,WAAWvyC,EAC5B,IAAIwlD,GAAWgE,EAAUhE,QACzB,IAAIA,EACF,IAAK,GAAIn+C,GAAIm+C,EAAS3lD,OAAS,EAAGwH,GAAK,EAAGA,IAAK,CAE7C,GAAIk+C,GAAUC,EAASn+C,GACnBo+C,EAAUF,EAAQE,QAClBoF,GAAapF,EAAQ,GAAGjL,OAAQiL,EAAQ,GAAGjL,OAAQiL,EAAQ,GAAGjL,QAC9DsQ,GAAarF,EAAQ,GAAGjL,OAAQiL,EAAQ,GAAGjL,OAAQiL,EAAQ,GAAGjL,OAClE,IAAIv+C,KAAKsuD,gBAAgB3S,EAAQiT,IAAc5uD,KAAKsuD,gBAAgB3S,EAAQkT,GAE1E,MAAOtB,QAOf,KAAKxpD,EAAI,EAAGA,EAAI/D,KAAKs2C,WAAW1yC,OAAQG,IAAK,CAC3CwpD,EAAYvtD,KAAKs2C,WAAWvyC,EAC5B,IAAI6W,GAAQ2yC,EAAUhP,MACtB,IAAI3jC,EAAO,CACT,GAAIk0C,GAAQrsD,KAAKwiB,IAAI8P,EAAIna,EAAMma,GAC3Bg6B,EAAQtsD,KAAKwiB,IAAI0J,EAAI/T,EAAM+T,GAC3B+vB,EAAOj8C,KAAKusD,KAAKF,EAAQA,EAAQC,EAAQA,IAExB,OAAhBJ,GAAwBjQ,EAAOiQ,IAAgBjQ,EApC5C,MAqCNiQ,EAAcjQ,EACdgQ,EAAmBnB,IAM3B,MAAOmB,IAQTlgB,EAAQn8B,UAAUu7C,aAAe,SAAUL,GACzC,GAAIhd,GAASmJ,EAAME,CAEd55C,MAAKq5C,SAsBR9I,EAAUvwC,KAAKq5C,QAAQ4V,IAAI1e,QAC3BmJ,EAAO15C,KAAKq5C,QAAQ4V,IAAIvV,KACxBE,EAAM55C,KAAKq5C,QAAQ4V,IAAIrV,MAvBvBrJ,EAAUrgC,SAASC,cAAc,QACjC,EAAIknC,EAAkB,SAAG9G,EAAQlkC,SAAWrM,KAAKs5C,aAAa/I,SAC9DA,EAAQlkC,MAAMkE,SAAW,WAEzBmpC,EAAOxpC,SAASC,cAAc,QAC9B,EAAIknC,EAAkB,SAAGqC,EAAKrtC,SAAWrM,KAAKs5C,aAAaI,MAC3DA,EAAKrtC,MAAMkE,SAAW,WAEtBqpC,EAAM1pC,SAASC,cAAc,QAC7B,EAAIknC,EAAkB,SAAGuC,EAAIvtC,SAAWrM,KAAKs5C,aAAaM,KAC1DA,EAAIvtC,MAAMkE,SAAW,WAErBvQ,KAAKq5C,SACHkU,UAAW,KACX0B,KACE1e,QAASA,EACTmJ,KAAMA,EACNE,IAAKA,KASX55C,KAAK2tD,eAEL3tD,KAAKq5C,QAAQkU,UAAYA,EACO,kBAArBvtD,MAAKytD,YACdld,EAAQ4R,UAAYniD,KAAKytD,YAAYF,EAAU3yC,OAE/C21B,EAAQ4R,UAAY,kBAAyBniD,KAAK23C,OAAS,aAAe4V,EAAU3yC,MAAMma,EAAI,qBAA4B/0B,KAAK43C,OAAS,aAAe2V,EAAU3yC,MAAM+T,EAAI,qBAA4B3uB,KAAK63C,OAAS,aAAe0V,EAAU3yC,MAAM6gC,EAAI;gRAG1PlL,EAAQlkC,MAAMnG,KAAO,IACrBqqC,EAAQlkC,MAAM/F,IAAM,IACpBtG,KAAKi+C,MAAMvtC,YAAY6/B,GACvBvwC,KAAKi+C,MAAMvtC,YAAYgpC,GACvB15C,KAAKi+C,MAAMvtC,YAAYkpC,EAGvB,IAAIsV,GAAe3e,EAAQ1/B,YACvBs+C,EAAgB5e,EAAQ6e,aACxBC,EAAa3V,EAAK0V,aAClBE,EAAW1V,EAAI/oC,YACf0+C,EAAY3V,EAAIwV,aAEhBlpD,EAAOqnD,EAAUhP,OAAOxpB,EAAIm6B,EAAe,CAC/ChpD,GAAOzD,KAAKL,IAAIK,KAAKJ,IAAI6D,EAAM,IAAKlG,KAAKi+C,MAAMltC,YAAc,GAAKm+C,GAElExV,EAAKrtC,MAAMnG,KAAOqnD,EAAUhP,OAAOxpB,EAAI,KACvC2kB,EAAKrtC,MAAM/F,IAAMinD,EAAUhP,OAAO5vB,EAAI0gC,EAAa,KACnD9e,EAAQlkC,MAAMnG,KAAOA,EAAO,KAC5BqqC,EAAQlkC,MAAM/F,IAAMinD,EAAUhP,OAAO5vB,EAAI0gC,EAAaF,EAAgB,KACtEvV,EAAIvtC,MAAMnG,KAAOqnD,EAAUhP,OAAOxpB,EAAIu6B,EAAW,EAAI,KACrD1V,EAAIvtC,MAAM/F,IAAMinD,EAAUhP,OAAO5vB,EAAI4gC,EAAY,EAAI,MAOvD/gB,EAAQn8B,UAAUs7C,aAAe,WAC/B,GAAI3tD,KAAKq5C,QAAS,CAChBr5C,KAAKq5C,QAAQkU,UAAY,IAEzB,KAAK,GAAIlqD,KAAQrD,MAAKq5C,QAAQ4V,IAC5B,GAAIjvD,KAAKq5C,QAAQ4V,IAAI3rD,eAAeD,GAAO,CACzC,GAAI2C,GAAOhG,KAAKq5C,QAAQ4V,IAAI5rD,EACxB2C,IAAQA,EAAK8C,YACf9C,EAAK8C,WAAW5G,YAAY8D,MAgDtCwoC,EAAQn8B,UAAUm9C,kBAAoB,SAAU10C,GAC9Cy7B,EAASiZ,kBAAkB10C,EAAK9a,MAChCA,KAAKkhD,UAWP1S,EAAQn8B,UAAUo9C,QAAU,SAAUr/C,EAAOC,GAC3CrQ,KAAK8iD,SAAS1yC,EAAOC,GACrBrQ,KAAKkhD,UAQPrhD,EAAOD,QAAU4uC,GAIb,SAAU3uC,EAAQD,EAASM,GAE/BL,EAAOD,SAAYoB,QAAWd,EAAoB,IAAKa,YAAY,IAI/D,SAAUlB,EAAQD,EAASM,GAE/BA,EAAoB,IACpBL,EAAOD,QAAUM,EAAoB,IAAIuE,OAAOirD,QAI5C,SAAU7vD,EAAQD,EAASM,GAG/B,GAAIqT,GAAUrT,EAAoB,GAElCqT,GAAQA,EAAQuC,EAAIvC,EAAQ6B,EAAG,UAAWs6C,OAAQxvD,EAAoB,OAIlE,SAAUL,EAAQD,EAASM,GAI/B,GAAI+Y,GAAW/Y,EAAoB,IAC/BogB,EAAWpgB,EAAoB,IAC/BqgB,EAAWrgB,EAAoB,IAC/Bua,EAAWva,EAAoB,IAC/B+S,EAAW/S,EAAoB,IAC/ByvD,EAAWlrD,OAAOirD,MAGtB7vD,GAAOD,SAAW+vD,GAAWzvD,EAAoB,IAAI,WACnD,GAAI0vD,MACA35C,KACAH,EAAIyE,SACJs1C,EAAI,sBAGR,OAFAD,GAAE95C,GAAK,EACP+5C,EAAElpD,MAAM,IAAIO,QAAQ,SAAS0G,GAAIqI,EAAErI,GAAKA,IACZ,GAArB+hD,KAAYC,GAAG95C,IAAWrR,OAAOsP,KAAK47C,KAAY15C,IAAIlP,KAAK,KAAO8oD,IACtE,SAAgBlnD,EAAQ4M,GAM3B,IALA,GAAIiG,GAAQf,EAAS9R,GACjBmnD,EAAQnsD,UAAUC,OAClBmP,EAAQ,EACRyN,EAAaF,EAAKvT,EAClBwQ,EAAagD,EAAIxT,EACf+iD,EAAO/8C,GAMX,IALA,GAIIxL,GAJAuO,EAAS7C,EAAQtP,UAAUoP,MAC3BgB,EAASyM,EAAavH,EAAQnD,GAAGjP,OAAO2Z,EAAW1K,IAAMmD,EAAQnD,GACjElS,EAASmQ,EAAKnQ,OACdiK,EAAS,EAEPjK,EAASiK,GAAK0P,EAAOhd,KAAKuV,EAAGvO,EAAMwM,EAAKlG,QAAM2N,EAAEjU,GAAOuO,EAAEvO,GAC/D,OAAOiU,IACPm0C,GAIA,SAAU9vD,EAAQD,GAetB,QAAS03C,GAAQx2C,GACf,GAAIA,EAAK,MAAOivD,GAAMjvD,GAWxB,QAASivD,GAAMjvD,GACb,IAAK,GAAIyG,KAAO+vC,GAAQjlC,UACtBvR,EAAIyG,GAAO+vC,EAAQjlC,UAAU9K,EAE/B,OAAOzG,GAxBTjB,EAAOD,QAAU03C,EAoCjBA,EAAQjlC,UAAUg/B,GAClBiG,EAAQjlC,UAAUzK,iBAAmB,SAASW,EAAOd,GAInD,MAHAzH,MAAKgwD,WAAahwD,KAAKgwD,gBACtBhwD,KAAKgwD,WAAWznD,GAASvI,KAAKgwD,WAAWznD,QACvC1D,KAAK4C,GACDzH,MAaTs3C,EAAQjlC,UAAU49C,KAAO,SAAS1nD,EAAOd,GAIvC,QAAS4pC,KACP16B,EAAK66B,IAAIjpC,EAAO8oC,GAChB5pC,EAAG6O,MAAMtW,KAAM2D,WALjB,GAAIgT,GAAO3W,IAUX,OATAA,MAAKgwD,WAAahwD,KAAKgwD,eAOvB3e,EAAG5pC,GAAKA,EACRzH,KAAKqxC,GAAG9oC,EAAO8oC,GACRrxC,MAaTs3C,EAAQjlC,UAAUm/B,IAClB8F,EAAQjlC,UAAU69C,eAClB5Y,EAAQjlC,UAAU89C,mBAClB7Y,EAAQjlC,UAAUjK,oBAAsB,SAASG,EAAOd,GAItD,GAHAzH,KAAKgwD,WAAahwD,KAAKgwD,eAGnB,GAAKrsD,UAAUC,OAEjB,MADA5D,MAAKgwD,cACEhwD,IAIT,IAAIowD,GAAYpwD,KAAKgwD,WAAWznD,EAChC,KAAK6nD,EAAW,MAAOpwD,KAGvB,IAAI,GAAK2D,UAAUC,OAEjB,aADO5D,MAAKgwD,WAAWznD,GAChBvI,IAKT,KAAK,GADDqwD,GACKtsD,EAAI,EAAGA,EAAIqsD,EAAUxsD,OAAQG,IAEpC,IADAssD,EAAKD,EAAUrsD,MACJ0D,GAAM4oD,EAAG5oD,KAAOA,EAAI,CAC7B2oD,EAAUv4B,OAAO9zB,EAAG,EACpB,OAGJ,MAAO/D,OAWTs3C,EAAQjlC,UAAU66C,KAAO,SAAS3kD,GAChCvI,KAAKgwD,WAAahwD,KAAKgwD,cACvB,IAAItwC,MAAU/U,MAAMpK,KAAKoD,UAAW,GAChCysD,EAAYpwD,KAAKgwD,WAAWznD,EAEhC,IAAI6nD,EAAW,CACbA,EAAYA,EAAUzlD,MAAM,EAC5B,KAAK,GAAI5G,GAAI,EAAGgB,EAAMqrD,EAAUxsD,OAAQG,EAAIgB,IAAOhB,EACjDqsD,EAAUrsD,GAAGuS,MAAMtW,KAAM0f,GAI7B,MAAO1f,OAWTs3C,EAAQjlC,UAAUi+C,UAAY,SAAS/nD,GAErC,MADAvI,MAAKgwD,WAAahwD,KAAKgwD,eAChBhwD,KAAKgwD,WAAWznD,QAWzB+uC,EAAQjlC,UAAUk+C,aAAe,SAAShoD,GACxC,QAAUvI,KAAKswD,UAAU/nD,GAAO3E,SAM9B,SAAU/D,EAAQD,GAUtB,QAASivC,GAAQ9Z,EAAGpG,EAAG8sB,GACrBz7C,KAAK+0B,MAAUlxB,KAANkxB,EAAkBA,EAAI,EAC/B/0B,KAAK2uB,MAAU9qB,KAAN8qB,EAAkBA,EAAI,EAC/B3uB,KAAKy7C,MAAU53C,KAAN43C,EAAkBA,EAAI,EASjC5M,EAAQxQ,SAAW,SAAU76B,EAAGC,GAC9B,GAAI+sD,GAAM,GAAI3hB,EAId,OAHA2hB,GAAIz7B,EAAIvxB,EAAEuxB,EAAItxB,EAAEsxB,EAChBy7B,EAAI7hC,EAAInrB,EAAEmrB,EAAIlrB,EAAEkrB,EAChB6hC,EAAI/U,EAAIj4C,EAAEi4C,EAAIh4C,EAAEg4C,EACT+U,GAST3hB,EAAQpe,IAAM,SAAUjtB,EAAGC,GACzB,GAAIgtD,GAAM,GAAI5hB,EAId,OAHA4hB,GAAI17B,EAAIvxB,EAAEuxB,EAAItxB,EAAEsxB,EAChB07B,EAAI9hC,EAAInrB,EAAEmrB,EAAIlrB,EAAEkrB,EAChB8hC,EAAIhV,EAAIj4C,EAAEi4C,EAAIh4C,EAAEg4C,EACTgV,GAST5hB,EAAQ4a,IAAM,SAAUjmD,EAAGC,GACzB,MAAO,IAAIorC,IAASrrC,EAAEuxB,EAAItxB,EAAEsxB,GAAK,GAAIvxB,EAAEmrB,EAAIlrB,EAAEkrB,GAAK,GAAInrB,EAAEi4C,EAAIh4C,EAAEg4C,GAAK,IAUrE5M,EAAQkc,aAAe,SAAUvnD,EAAGC,GAClC,GAAIqnD,GAAe,GAAIjc,EAMvB,OAJAic,GAAa/1B,EAAIvxB,EAAEmrB,EAAIlrB,EAAEg4C,EAAIj4C,EAAEi4C,EAAIh4C,EAAEkrB,EACrCm8B,EAAan8B,EAAInrB,EAAEi4C,EAAIh4C,EAAEsxB,EAAIvxB,EAAEuxB,EAAItxB,EAAEg4C,EACrCqP,EAAarP,EAAIj4C,EAAEuxB,EAAItxB,EAAEkrB,EAAInrB,EAAEmrB,EAAIlrB,EAAEsxB,EAE9B+1B,GAOTjc,EAAQx8B,UAAUzO,OAAS,WACzB,MAAOnB,MAAKusD,KAAKhvD,KAAK+0B,EAAI/0B,KAAK+0B,EAAI/0B,KAAK2uB,EAAI3uB,KAAK2uB,EAAI3uB,KAAKy7C,EAAIz7C,KAAKy7C,IAGrE57C,EAAOD,QAAUivC,GAIb,SAAUhvC,EAAQD,GAStB,QAASgvC,GAAQ7Z,EAAGpG,GAClB3uB,KAAK+0B,MAAUlxB,KAANkxB,EAAkBA,EAAI,EAC/B/0B,KAAK2uB,MAAU9qB,KAAN8qB,EAAkBA,EAAI,EAGjC9uB,EAAOD,QAAUgvC,GAIb,SAAU/uC,EAAQD,EAASM,GAsB/B,QAASwuC,KACP1uC,KAAK0wD,YAAc,GAAI7hB,GACvB7uC,KAAK2wD,eACL3wD,KAAK2wD,YAAYvW,WAAa,EAC9Bp6C,KAAK2wD,YAAYtW,SAAW,EAC5Br6C,KAAK0sD,UAAY,IACjB1sD,KAAK4wD,aAAe,GAAI/hB,GACxB7uC,KAAK6wD,iBAAmB,GAExB7wD,KAAKo8C,eAAiB,GAAIvN,GAC1B7uC,KAAKs8C,eAAiB,GAAIzN,GAAQ,GAAMpsC,KAAKunD,GAAI,EAAG,GAEpDhqD,KAAK8wD,6BA9BP,GAAIC,GAAQ7wD,EAAoB,KAE5B8wD,EAEJ,SAAgClwD,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,IAFrDiwD,GAIhCliB,EAAU3uC,EAAoB,IAgClCwuC,GAAOr8B,UAAUu6C,UAAY,SAAU73B,EAAGpG,GACxC,GAAI1J,GAAMxiB,KAAKwiB,IACX6X,EAAOk0B,EAAgB,QACvBC,EAAMjxD,KAAK6wD,iBACXllD,EAAS3L,KAAK0sD,UAAYuE,CAE1BhsC,GAAI8P,GAAKppB,IACXopB,EAAI+H,EAAK/H,GAAKppB,GAEZsZ,EAAI0J,GAAKhjB,IACXgjB,EAAImO,EAAKnO,GAAKhjB,GAEhB3L,KAAK4wD,aAAa77B,EAAIA,EACtB/0B,KAAK4wD,aAAajiC,EAAIA,EACtB3uB,KAAK8wD,8BAOPpiB,EAAOr8B,UAAUi5C,UAAY,SAAUv2B,EAAGpG,GACxC,MAAO3uB,MAAK4wD,cASdliB,EAAOr8B,UAAUypC,eAAiB,SAAU/mB,EAAGpG,EAAG8sB,GAChDz7C,KAAK0wD,YAAY37B,EAAIA,EACrB/0B,KAAK0wD,YAAY/hC,EAAIA,EACrB3uB,KAAK0wD,YAAYjV,EAAIA,EAErBz7C,KAAK8wD,8BAWPpiB,EAAOr8B,UAAU26C,eAAiB,SAAU5S,EAAYC,OACnCx2C,KAAfu2C,IACFp6C,KAAK2wD,YAAYvW,WAAaA,OAGfv2C,KAAbw2C,IACFr6C,KAAK2wD,YAAYtW,SAAWA,EACxBr6C,KAAK2wD,YAAYtW,SAAW,IAAGr6C,KAAK2wD,YAAYtW,SAAW,GAC3Dr6C,KAAK2wD,YAAYtW,SAAW,GAAM53C,KAAKunD,KAAIhqD,KAAK2wD,YAAYtW,SAAW,GAAM53C,KAAKunD,SAGrEnmD,KAAfu2C,OAAyCv2C,KAAbw2C,GAC9Br6C,KAAK8wD,8BAQTpiB,EAAOr8B,UAAUmxC,eAAiB,WAChC,GAAI0N,KAIJ,OAHAA,GAAI9W,WAAap6C,KAAK2wD,YAAYvW,WAClC8W,EAAI7W,SAAWr6C,KAAK2wD,YAAYtW,SAEzB6W,GAOTxiB,EAAOr8B,UAAUg8C,aAAe,SAAUzqD,OACzBC,KAAXD,IAEJ5D,KAAK0sD,UAAY9oD,EAKb5D,KAAK0sD,UAAY,MAAM1sD,KAAK0sD,UAAY,KACxC1sD,KAAK0sD,UAAY,IAAK1sD,KAAK0sD,UAAY,GAE3C1sD,KAAK4sD,UAAU5sD,KAAK4wD,aAAa77B,EAAG/0B,KAAK4wD,aAAajiC,GACtD3uB,KAAK8wD,+BAOPpiB,EAAOr8B,UAAU0rC,aAAe,WAC9B,MAAO/9C,MAAK0sD,WAOdhe,EAAOr8B,UAAUgqC,kBAAoB,WACnC,MAAOr8C,MAAKo8C,gBAOd1N,EAAOr8B,UAAUkqC,kBAAoB,WACnC,MAAOv8C,MAAKs8C,gBAOd5N,EAAOr8B,UAAUy+C,2BAA6B,WAE5C9wD,KAAKo8C,eAAernB,EAAI/0B,KAAK0wD,YAAY37B,EAAI/0B,KAAK0sD,UAAYjqD,KAAKs6C,IAAI/8C,KAAK2wD,YAAYvW,YAAc33C,KAAKw6C,IAAIj9C,KAAK2wD,YAAYtW,UAChIr6C,KAAKo8C,eAAeztB,EAAI3uB,KAAK0wD,YAAY/hC,EAAI3uB,KAAK0sD,UAAYjqD,KAAKw6C,IAAIj9C,KAAK2wD,YAAYvW,YAAc33C,KAAKw6C,IAAIj9C,KAAK2wD,YAAYtW,UAChIr6C,KAAKo8C,eAAeX,EAAIz7C,KAAK0wD,YAAYjV,EAAIz7C,KAAK0sD,UAAYjqD,KAAKs6C,IAAI/8C,KAAK2wD,YAAYtW,UAGxFr6C,KAAKs8C,eAAevnB,EAAItyB,KAAKunD,GAAK,EAAIhqD,KAAK2wD,YAAYtW,SACvDr6C,KAAKs8C,eAAe3tB,EAAI,EACxB3uB,KAAKs8C,eAAeb,GAAKz7C,KAAK2wD,YAAYvW,UAE1C,IAAI+W,GAAKnxD,KAAKs8C,eAAevnB,EAEzBq8B,GADKpxD,KAAKs8C,eAAe3tB,EACpB3uB,KAAKs8C,eAAeb,GACzBmC,EAAK59C,KAAK4wD,aAAa77B,EACvB8oB,EAAK79C,KAAK4wD,aAAajiC,EACvBouB,EAAMt6C,KAAKs6C,IACXE,EAAMx6C,KAAKw6C,GAEfj9C,MAAKo8C,eAAernB,EAAI/0B,KAAKo8C,eAAernB,EAAI6oB,EAAKX,EAAImU,GAAMvT,GAAMd,EAAIqU,GAAMnU,EAAIkU,GACnFnxD,KAAKo8C,eAAeztB,EAAI3uB,KAAKo8C,eAAeztB,EAAIivB,EAAKb,EAAIqU,GAAMvT,EAAKZ,EAAImU,GAAMnU,EAAIkU,GAClFnxD,KAAKo8C,eAAeX,EAAIz7C,KAAKo8C,eAAeX,EAAIoC,EAAKd,EAAIoU,IAG3DtxD,EAAOD,QAAU8uC,GAIb,SAAU7uC,EAAQD,EAASM,GAE/BL,EAAOD,SAAYoB,QAAWd,EAAoB,KAAMa,YAAY,IAIhE,SAAUlB,EAAQD,EAASM,GAE/BA,EAAoB,KACpBL,EAAOD,QAAUM,EAAoB,IAAIuC,KAAKq6B,MAI1C,SAAUj9B,EAAQD,EAASM,GAG/B,GAAIqT,GAAUrT,EAAoB,GAElCqT,GAAQA,EAAQuC,EAAG,QAASgnB,KAAM58B,EAAoB,QAIlD,SAAUL,EAAQD,GAGtBC,EAAOD,QAAU6C,KAAKq6B,MAAQ,SAAc/H,GAC1C,MAAmB,KAAXA,GAAKA,IAAWA,GAAKA,EAAIA,EAAIA,EAAI,GAAK,EAAI,IAKhD,SAAUl1B,EAAQD,EAASM,GAa/B,QAASyuC,GAAOna,EAAMuqB,EAAQsS,GAC5BrxD,KAAKw0B,KAAOA,EACZx0B,KAAK++C,OAASA,EACd/+C,KAAKqxD,MAAQA,EAEbrxD,KAAK+S,UAAQlP,GACb7D,KAAKuC,UAAQsB,GAGb7D,KAAKkV,OAASm8C,EAAMrS,kBAAkBxqB,EAAK/c,MAAOzX,KAAK++C,QAGvD/+C,KAAKkV,OAAO2T,KAAK,SAAUrlB,EAAGC,GAC5B,MAAOD,GAAIC,EAAI,EAAID,EAAIC,GAAK,EAAI,IAG9BzD,KAAKkV,OAAOtR,OAAS,GACvB5D,KAAKmnD,YAAY,GAInBnnD,KAAKs2C,cAELt2C,KAAKM,QAAS,EACdN,KAAKsxD,mBAAiBztD,GAElBwtD,EAAMvY,kBACR94C,KAAKM,QAAS,EACdN,KAAKuxD,oBAELvxD,KAAKM,QAAS,EAvClB,GAAIguC,GAAWpuC,EAAoB,GA+CnCyuC,GAAOt8B,UAAUm/C,SAAW,WAC1B,MAAOxxD,MAAKM,QAOdquC,EAAOt8B,UAAUo/C,kBAAoB,WAInC,IAHA,GAAI1sD,GAAM/E,KAAKkV,OAAOtR,OAElBG,EAAI,EACD/D,KAAKs2C,WAAWvyC,IACrBA,GAGF,OAAOtB,MAAKi6B,MAAM34B,EAAIgB,EAAM,MAO9B4pC,EAAOt8B,UAAUi1C,SAAW,WAC1B,MAAOtnD,MAAKqxD,MAAM5Z,aAOpB9I,EAAOt8B,UAAUq/C,UAAY,WAC3B,MAAO1xD,MAAK++C,QAOdpQ,EAAOt8B,UAAUk1C,iBAAmB,WAClC,OAAmB1jD,KAAf7D,KAAK+S,MAET,MAAO/S,MAAKkV,OAAOlV,KAAK+S,QAO1B47B,EAAOt8B,UAAUs/C,UAAY,WAC3B,MAAO3xD,MAAKkV,QAQdy5B,EAAOt8B,UAAUu/C,SAAW,SAAU7+C,GACpC,GAAIA,GAAS/S,KAAKkV,OAAOtR,OAAQ,KAAM,IAAIS,OAAM,qBAEjD,OAAOrE,MAAKkV,OAAOnC,IAQrB47B,EAAOt8B,UAAU8uC,eAAiB,SAAUpuC,GAG1C,OAFclP,KAAVkP,IAAqBA,EAAQ/S,KAAK+S,WAExBlP,KAAVkP,EAAqB,QAEzB,IAAIujC,EACJ,IAAIt2C,KAAKs2C,WAAWvjC,GAClBujC,EAAat2C,KAAKs2C,WAAWvjC,OACxB,CACL,GAAIhG,KACJA,GAAEgyC,OAAS/+C,KAAK++C,OAChBhyC,EAAExK,MAAQvC,KAAKkV,OAAOnC,EAEtB,IAAI8+C,GAAW,GAAIvjB,GAAStuC,KAAKw0B,MAAQ1tB,OAAQ,SAAgB8H,GAC7D,MAAOA,GAAK7B,EAAEgyC,SAAWhyC,EAAExK,SACxBkV,KACP6+B,GAAat2C,KAAKqxD,MAAMlQ,eAAe0Q,GAEvC7xD,KAAKs2C,WAAWvjC,GAASujC,EAG3B,MAAOA,IAMT3H,EAAOt8B,UAAU4uC,kBAAoB,SAAU95C,GAC7CnH,KAAKsxD,eAAiBnqD,GAQxBwnC,EAAOt8B,UAAU80C,YAAc,SAAUp0C,GACvC,GAAIA,GAAS/S,KAAKkV,OAAOtR,OAAQ,KAAM,IAAIS,OAAM,qBAEjDrE,MAAK+S,MAAQA,EACb/S,KAAKuC,MAAQvC,KAAKkV,OAAOnC,IAO3B47B,EAAOt8B,UAAUk/C,iBAAmB,SAAUx+C,OAC9BlP,KAAVkP,IAAqBA,EAAQ,EAEjC,IAAIkrC,GAAQj+C,KAAKqxD,MAAMpT,KAEvB,IAAIlrC,EAAQ/S,KAAKkV,OAAOtR,OAAQ,CACT5D,KAAKmhD,eAAepuC,OAIlBlP,KAAnBo6C,EAAM6T,WACR7T,EAAM6T,SAAW5hD,SAASC,cAAc,OACxC8tC,EAAM6T,SAASzlD,MAAMkE,SAAW,WAChC0tC,EAAM6T,SAASzlD,MAAMnC,MAAQ,OAC7B+zC,EAAMvtC,YAAYutC,EAAM6T,UAE1B,IAAIA,GAAW9xD,KAAKyxD,mBACpBxT,GAAM6T,SAAS3P,UAAY,wBAA0B2P,EAAW,IAEhE7T,EAAM6T,SAASzlD,MAAMoyC,OAAS,OAC9BR,EAAM6T,SAASzlD,MAAMnG,KAAO,MAE5B,IAAI6rC,GAAK/xC,IACTq1C,YAAW,WACTtD,EAAGwf,iBAAiBx+C,EAAQ,IAC3B,IACH/S,KAAKM,QAAS,MAEdN,MAAKM,QAAS,MAGSuD,KAAnBo6C,EAAM6T,WACR7T,EAAM/7C,YAAY+7C,EAAM6T,UACxB7T,EAAM6T,aAAWjuD,IAGf7D,KAAKsxD,gBAAgBtxD,KAAKsxD,kBAIlCzxD,EAAOD,QAAU+uC,GAIb,SAAU9uC,EAAQD,EAASM,GAe/B,QAAS4uC,GAAOoH,EAAWloC,GACzB,OAAkBnK,KAAdqyC,EACF,KAAM,IAAI7xC,OAAM,+BAKlB,IAHArE,KAAKk2C,UAAYA,EACjBl2C,KAAK8mD,SAAU94C,OAA8BnK,IAAnBmK,EAAQ84C,SAAuB94C,EAAQ84C,QAE7D9mD,KAAK8mD,QAAS,CAChB9mD,KAAKi+C,MAAQ/tC,SAASC,cAAc,OAEpCnQ,KAAKi+C,MAAM5xC,MAAM+D,MAAQ,OACzBpQ,KAAKi+C,MAAM5xC,MAAMkE,SAAW,WAC5BvQ,KAAKk2C,UAAUxlC,YAAY1Q,KAAKi+C,OAEhCj+C,KAAKi+C,MAAM8T,KAAO7hD,SAASC,cAAc,SACzCnQ,KAAKi+C,MAAM8T,KAAK9sD,KAAO,SACvBjF,KAAKi+C,MAAM8T,KAAKxvD,MAAQ,OACxBvC,KAAKi+C,MAAMvtC,YAAY1Q,KAAKi+C,MAAM8T,MAElC/xD,KAAKi+C,MAAMkF,KAAOjzC,SAASC,cAAc,SACzCnQ,KAAKi+C,MAAMkF,KAAKl+C,KAAO,SACvBjF,KAAKi+C,MAAMkF,KAAK5gD,MAAQ,OACxBvC,KAAKi+C,MAAMvtC,YAAY1Q,KAAKi+C,MAAMkF,MAElCnjD,KAAKi+C,MAAMxsC,KAAOvB,SAASC,cAAc,SACzCnQ,KAAKi+C,MAAMxsC,KAAKxM,KAAO,SACvBjF,KAAKi+C,MAAMxsC,KAAKlP,MAAQ,OACxBvC,KAAKi+C,MAAMvtC,YAAY1Q,KAAKi+C,MAAMxsC,MAElCzR,KAAKi+C,MAAM+T,IAAM9hD,SAASC,cAAc,SACxCnQ,KAAKi+C,MAAM+T,IAAI/sD,KAAO,SACtBjF,KAAKi+C,MAAM+T,IAAI3lD,MAAMkE,SAAW,WAChCvQ,KAAKi+C,MAAM+T,IAAI3lD,MAAMV,OAAS,gBAC9B3L,KAAKi+C,MAAM+T,IAAI3lD,MAAM+D,MAAQ,QAC7BpQ,KAAKi+C,MAAM+T,IAAI3lD,MAAMgE,OAAS,MAC9BrQ,KAAKi+C,MAAM+T,IAAI3lD,MAAMmtC,aAAe,MACpCx5C,KAAKi+C,MAAM+T,IAAI3lD,MAAM4lD,gBAAkB,MACvCjyD,KAAKi+C,MAAM+T,IAAI3lD,MAAMV,OAAS,oBAC9B3L,KAAKi+C,MAAM+T,IAAI3lD,MAAMytC,gBAAkB,UACvC95C,KAAKi+C,MAAMvtC,YAAY1Q,KAAKi+C,MAAM+T,KAElChyD,KAAKi+C,MAAMiU,MAAQhiD,SAASC,cAAc,SAC1CnQ,KAAKi+C,MAAMiU,MAAMjtD,KAAO,SACxBjF,KAAKi+C,MAAMiU,MAAM7lD,MAAMk5C,OAAS,MAChCvlD,KAAKi+C,MAAMiU,MAAM3vD,MAAQ,IACzBvC,KAAKi+C,MAAMiU,MAAM7lD,MAAMkE,SAAW,WAClCvQ,KAAKi+C,MAAMiU,MAAM7lD,MAAMnG,KAAO,SAC9BlG,KAAKi+C,MAAMvtC,YAAY1Q,KAAKi+C,MAAMiU,MAGlC,IAAIngB,GAAK/xC,IACTA,MAAKi+C,MAAMiU,MAAM9P,YAAc,SAAU75C,GACvCwpC,EAAGsQ,aAAa95C,IAElBvI,KAAKi+C,MAAM8T,KAAKnP,QAAU,SAAUr6C,GAClCwpC,EAAGggB,KAAKxpD,IAEVvI,KAAKi+C,MAAMkF,KAAKP,QAAU,SAAUr6C,GAClCwpC,EAAGogB,WAAW5pD,IAEhBvI,KAAKi+C,MAAMxsC,KAAKmxC,QAAU,SAAUr6C,GAClCwpC,EAAGtgC,KAAKlJ,IAIZvI,KAAKoyD,qBAAmBvuD,GAExB7D,KAAKkV,UACLlV,KAAK+S,UAAQlP,GAEb7D,KAAKqyD,gBAAcxuD,GACnB7D,KAAKsyD,aAAe,IACpBtyD,KAAKuyD,UAAW,EAnFlB,GAAI5xD,GAAOT,EAAoB,EAyF/B4uC,GAAOz8B,UAAU0/C,KAAO,WACtB,GAAIh/C,GAAQ/S,KAAKknD,UACbn0C,GAAQ,IACVA,IACA/S,KAAKwyD,SAASz/C,KAOlB+7B,EAAOz8B,UAAUZ,KAAO,WACtB,GAAIsB,GAAQ/S,KAAKknD,UACbn0C,GAAQ/S,KAAKkV,OAAOtR,OAAS,IAC/BmP,IACA/S,KAAKwyD,SAASz/C,KAOlB+7B,EAAOz8B,UAAUogD,SAAW,WAC1B,GAAIlM,GAAQ,GAAI1jD,MAEZkQ,EAAQ/S,KAAKknD,UACbn0C,GAAQ/S,KAAKkV,OAAOtR,OAAS,GAC/BmP,IACA/S,KAAKwyD,SAASz/C,IACL/S,KAAKuyD,WAEdx/C,EAAQ,EACR/S,KAAKwyD,SAASz/C,GAGhB,IAAIyzC,GAAM,GAAI3jD,MACV6kB,EAAO8+B,EAAMD,EAIbmM,EAAWjwD,KAAKJ,IAAIrC,KAAKsyD,aAAe5qC,EAAM,GAG9CqqB,EAAK/xC,IACTA,MAAKqyD,YAAchd,WAAW,WAC5BtD,EAAG0gB,YACFC,IAML5jB,EAAOz8B,UAAU8/C,WAAa,eACHtuD,KAArB7D,KAAKqyD,YACPryD,KAAKmjD,OAELnjD,KAAKqjD,QAOTvU,EAAOz8B,UAAU8wC,KAAO,WAElBnjD,KAAKqyD,cAETryD,KAAKyyD,WAEDzyD,KAAKi+C,QACPj+C,KAAKi+C,MAAMkF,KAAK5gD,MAAQ,UAO5BusC,EAAOz8B,UAAUgxC,KAAO,WACtBsP,cAAc3yD,KAAKqyD,aACnBryD,KAAKqyD,gBAAcxuD,GAEf7D,KAAKi+C,QACPj+C,KAAKi+C,MAAMkF,KAAK5gD,MAAQ,SAQ5BusC,EAAOz8B,UAAU+0C,oBAAsB,SAAUjgD,GAC/CnH,KAAKoyD,iBAAmBjrD,GAO1B2nC,EAAOz8B,UAAU20C,gBAAkB,SAAU0L,GAC3C1yD,KAAKsyD,aAAeI,GAOtB5jB,EAAOz8B,UAAUugD,gBAAkB,SAAUF,GAC3C,MAAO1yD,MAAKsyD,cASdxjB,EAAOz8B,UAAUwgD,YAAc,SAAUC,GACvC9yD,KAAKuyD,SAAWO,GAMlBhkB,EAAOz8B,UAAU0gD,SAAW,eACIlvD,KAA1B7D,KAAKoyD,kBACPpyD,KAAKoyD,oBAOTtjB,EAAOz8B,UAAU6uC,OAAS,WACxB,GAAIlhD,KAAKi+C,MAAO,CAEdj+C,KAAKi+C,MAAM+T,IAAI3lD,MAAM/F,IAAMtG,KAAKi+C,MAAM+E,aAAe,EAAIhjD,KAAKi+C,MAAM+T,IAAI5C,aAAe,EAAI,KAC3FpvD,KAAKi+C,MAAM+T,IAAI3lD,MAAM+D,MAAQpQ,KAAKi+C,MAAMltC,YAAc/Q,KAAKi+C,MAAM8T,KAAKhhD,YAAc/Q,KAAKi+C,MAAMkF,KAAKpyC,YAAc/Q,KAAKi+C,MAAMxsC,KAAKV,YAAc,GAAK,IAGrJ,IAAI7K,GAAOlG,KAAKgzD,YAAYhzD,KAAK+S,MACjC/S,MAAKi+C,MAAMiU,MAAM7lD,MAAMnG,KAAOA,EAAO,OAQzC4oC,EAAOz8B,UAAU00C,UAAY,SAAU7xC,GACrClV,KAAKkV,OAASA,EAEVlV,KAAKkV,OAAOtR,OAAS,EAAG5D,KAAKwyD,SAAS,GAAQxyD,KAAK+S,UAAQlP,IAOjEirC,EAAOz8B,UAAUmgD,SAAW,SAAUz/C,GACpC,KAAIA,EAAQ/S,KAAKkV,OAAOtR,QAMtB,KAAM,IAAIS,OAAM,qBALhBrE,MAAK+S,MAAQA,EAEb/S,KAAKkhD,SACLlhD,KAAK+yD,YAUTjkB,EAAOz8B,UAAU60C,SAAW,WAC1B,MAAOlnD,MAAK+S,OAOd+7B,EAAOz8B,UAAUoF,IAAM,WACrB,MAAOzX,MAAKkV,OAAOlV,KAAK+S,QAG1B+7B,EAAOz8B,UAAUgwC,aAAe,SAAU95C,GAGxC,GADqBA,EAAMkjD,MAAwB,IAAhBljD,EAAMkjD,MAA+B,IAAjBljD,EAAMmjD,OAC7D,CAEA1rD,KAAKizD,aAAe1qD,EAAMyuC,QAC1Bh3C,KAAKkzD,YAAc33B,WAAWv7B,KAAKi+C,MAAMiU,MAAM7lD,MAAMnG,MAErDlG,KAAKi+C,MAAM5xC,MAAM0/C,OAAS,MAK1B,IAAIha,GAAK/xC,IACTA,MAAKgsD,YAAc,SAAUzjD,GAC3BwpC,EAAGka,aAAa1jD,IAElBvI,KAAKksD,UAAY,SAAU3jD,GACzBwpC,EAAGyZ,WAAWjjD,IAEhB5H,EAAKiH,iBAAiBsI,SAAU,YAAalQ,KAAKgsD,aAClDrrD,EAAKiH,iBAAiBsI,SAAU,UAAWlQ,KAAKksD,WAChDvrD,EAAK2H,eAAeC,KAGtBumC,EAAOz8B,UAAU8gD,YAAc,SAAUjtD,GACvC,GAAIkK,GAAQmrB,WAAWv7B,KAAKi+C,MAAM+T,IAAI3lD,MAAM+D,OAASpQ,KAAKi+C,MAAMiU,MAAMnhD,YAAc,GAChFgkB,EAAI7uB,EAAO,EAEX6M,EAAQtQ,KAAKi6B,MAAM3H,EAAI3kB,GAASpQ,KAAKkV,OAAOtR,OAAS,GAIzD,OAHImP,GAAQ,IAAGA,EAAQ,GACnBA,EAAQ/S,KAAKkV,OAAOtR,OAAS,IAAGmP,EAAQ/S,KAAKkV,OAAOtR,OAAS,GAE1DmP,GAGT+7B,EAAOz8B,UAAU2gD,YAAc,SAAUjgD,GACvC,GAAI3C,GAAQmrB,WAAWv7B,KAAKi+C,MAAM+T,IAAI3lD,MAAM+D,OAASpQ,KAAKi+C,MAAMiU,MAAMnhD,YAAc,EAKpF,OAHQgC,IAAS/S,KAAKkV,OAAOtR,OAAS,GAAKwM,EAC5B,GAKjB0+B,EAAOz8B,UAAU45C,aAAe,SAAU1jD,GACxC,GAAImf,GAAOnf,EAAMyuC,QAAUh3C,KAAKizD,aAC5Bl+B,EAAI/0B,KAAKkzD,YAAcxrC,EAEvB3U,EAAQ/S,KAAKmzD,YAAYp+B,EAE7B/0B,MAAKwyD,SAASz/C,GAEdpS,EAAK2H,kBAGPwmC,EAAOz8B,UAAUm5C,WAAa,SAAUjjD,GACtCvI,KAAKi+C,MAAM5xC,MAAM0/C,OAAS,OAG1BprD,EAAKyH,oBAAoB8H,SAAU,YAAalQ,KAAKgsD,aACrDrrD,EAAKyH,oBAAoB8H,SAAU,UAAWlQ,KAAKksD,WAEnDvrD,EAAK2H,kBAGPzI,EAAOD,QAAUkvC,GAIb,SAAUjvC,EAAQD,GA6BtB,QAASmvC,GAAWwX,EAAOC,EAAKj0C,EAAM21C,GAEpCloD,KAAKozD,OAAS,EACdpzD,KAAKqzD,KAAO,EACZrzD,KAAKuR,MAAQ,EACbvR,KAAKkoD,YAAa,EAClBloD,KAAKszD,UAAY,EAEjBtzD,KAAKuzD,SAAW,EAChBvzD,KAAKwzD,SAASjN,EAAOC,EAAKj0C,EAAM21C,GAQlCnZ,EAAW18B,UAAUohD,UAAY,SAAUhmB,GACzC,OAAQzqC,MAAMu4B,WAAWkS,KAAO9oB,SAAS8oB,IAY3CsB,EAAW18B,UAAUmhD,SAAW,SAAUjN,EAAOC,EAAKj0C,EAAM21C,GAC1D,IAAKloD,KAAKyzD,UAAUlN,GAClB,KAAM,IAAIliD,OAAM,4CAAgDkiD,EAElE,KAAKvmD,KAAKyzD,UAAUjN,GAClB,KAAM,IAAIniD,OAAM,0CAA8CkiD,EAEhE,KAAKvmD,KAAKyzD,UAAUlhD,GAClB,KAAM,IAAIlO,OAAM,2CAA+CkiD,EAGjEvmD,MAAKozD,OAAS7M,GAAgB,EAC9BvmD,KAAKqzD,KAAO7M,GAAY,EAExBxmD,KAAK0zD,QAAQnhD,EAAM21C,IASrBnZ,EAAW18B,UAAUqhD,QAAU,SAAUnhD,EAAM21C,OAChCrkD,KAAT0O,GAAsBA,GAAQ,QAEf1O,KAAfqkD,IAA0BloD,KAAKkoD,WAAaA,IAExB,IAApBloD,KAAKkoD,WAAqBloD,KAAKuR,MAAQw9B,EAAW4kB,oBAAoBphD,GAAWvS,KAAKuR,MAAQgB,IAUpGw8B,EAAW4kB,oBAAsB,SAAUphD,GACzC,GAAIqhD,GAAQ,SAAe7+B,GACzB,MAAOtyB,MAAKoxD,IAAI9+B,GAAKtyB,KAAKqxD,MAIxBC,EAAQtxD,KAAKgnB,IAAI,GAAIhnB,KAAKi6B,MAAMk3B,EAAMrhD,KACtCyhD,EAAQ,EAAIvxD,KAAKgnB,IAAI,GAAIhnB,KAAKi6B,MAAMk3B,EAAMrhD,EAAO,KACjD0hD,EAAQ,EAAIxxD,KAAKgnB,IAAI,GAAIhnB,KAAKi6B,MAAMk3B,EAAMrhD,EAAO,KAGjD21C,EAAa6L,CASjB,OARItxD,MAAKwiB,IAAI+uC,EAAQzhD,IAAS9P,KAAKwiB,IAAIijC,EAAa31C,KAAO21C,EAAa8L,GACpEvxD,KAAKwiB,IAAIgvC,EAAQ1hD,IAAS9P,KAAKwiB,IAAIijC,EAAa31C,KAAO21C,EAAa+L,GAGpE/L,GAAc,IAChBA,EAAa,GAGRA,GAOTnZ,EAAW18B,UAAUo0C,WAAa,WAChC,MAAOlrB,YAAWv7B,KAAKuzD,SAASW,YAAYl0D,KAAKszD,aAOnDvkB,EAAW18B,UAAU8hD,QAAU,WAC7B,MAAOn0D,MAAKuR,OAYdw9B,EAAW18B,UAAUk0C,MAAQ,SAAU6N,OAClBvwD,KAAfuwD,IACFA,GAAa,GAGfp0D,KAAKuzD,SAAWvzD,KAAKozD,OAASpzD,KAAKozD,OAASpzD,KAAKuR,MAE7C6iD,GACEp0D,KAAKymD,aAAezmD,KAAKozD,QAC3BpzD,KAAKyR,QAQXs9B,EAAW18B,UAAUZ,KAAO,WAC1BzR,KAAKuzD,UAAYvzD,KAAKuR,OAOxBw9B,EAAW18B,UAAUm0C,IAAM,WACzB,MAAOxmD,MAAKuzD,SAAWvzD,KAAKqzD,MAG9BxzD,EAAOD,QAAUmvC,GAIb,SAAUlvC,EAAQD,GAatB,QAAS23C,KACPv3C,KAAKoC,QAAMyB,GACX7D,KAAKqC,QAAMwB,GAWb0zC,EAAMllC,UAAUivB,OAAS,SAAU/+B,OACnBsB,KAAVtB,SAEasB,KAAb7D,KAAKoC,KAAqBpC,KAAKoC,IAAMG,KACvCvC,KAAKoC,IAAMG,QAGIsB,KAAb7D,KAAKqC,KAAqBrC,KAAKqC,IAAME,KACvCvC,KAAKqC,IAAME,KASfg1C,EAAMllC,UAAUgiD,QAAU,SAAU/Y,GAClCt7C,KAAKywB,IAAI6qB,EAAMl5C,KACfpC,KAAKywB,IAAI6qB,EAAMj5C,MAajBk1C,EAAMllC,UAAU+tC,OAAS,SAAUzoC,GACjC,OAAY9T,KAAR8T,EAAJ,CAIA,GAAI28C,GAASt0D,KAAKoC,IAAMuV,EACpB48C,EAASv0D,KAAKqC,IAAMsV,CAIxB,IAAI28C,EAASC,EACX,KAAM,IAAIlwD,OAAM,6CAGlBrE,MAAKoC,IAAMkyD,EACXt0D,KAAKqC,IAAMkyD,IAQbhd,EAAMllC,UAAUipC,MAAQ,WACtB,MAAOt7C,MAAKqC,IAAMrC,KAAKoC,KAQzBm1C,EAAMllC,UAAUspC,OAAS,WACvB,OAAQ37C,KAAKoC,IAAMpC,KAAKqC,KAAO,GAGjCxC,EAAOD,QAAU23C,GAIb,SAAU13C,EAAQD,EAASM,GAsE/B,QAASs0D,GAAQ1zD,GACf,IAAK,GAAIuC,KAAQvC,GACf,GAAIA,EAAIwC,eAAeD,GAAO,OAAO,CAGvC,QAAO,EAQT,QAASoxD,GAAWC,GAClB,WAAY7wD,KAAR6wD,GAA6B,KAARA,GAA4B,gBAAPA,GACrCA,EAGFA,EAAIz5C,OAAO,GAAG8L,cAAgB2tC,EAAI/pD,MAAM,GAMjD,QAASgqD,GAAgBhzB,EAAQizB,GAC/B,WAAe/wD,KAAX89B,GAAmC,KAAXA,EACnBizB,EAGFjzB,EAAS8yB,EAAWG,GAiB7B,QAASC,GAAUn8C,EAAKo8C,EAAKxnD,EAAQq0B,GACnC,GAAIozB,GACAC,CAEJ,KAAK,GAAIjxD,KAAKuJ,GACZynD,EAASznD,EAAOvJ,GAChBixD,EAASL,EAAgBhzB,EAAQozB,GAEjCD,EAAIE,GAAUt8C,EAAIq8C,GAatB,QAASE,GAASv8C,EAAKo8C,EAAKxnD,EAAQq0B,GAClC,GAAIozB,GACAC,CAEJ,KAAK,GAAIjxD,KAAKuJ,GACZynD,EAASznD,EAAOvJ,OACIF,KAAhB6U,EAAIq8C,KAERC,EAASL,EAAgBhzB,EAAQozB,GAEjCD,EAAIE,GAAUt8C,EAAIq8C,IAatB,QAASve,GAAY99B,EAAKo8C,GACxB,OAAYjxD,KAAR6U,GAAqB87C,EAAQ97C,GAC/B,KAAM,IAAIrU,OAAM,qBAElB,QAAYR,KAARixD,EACF,KAAM,IAAIzwD,OAAM,gBAIlBoyC,GAAW/9B,EAGXm8C,EAAUn8C,EAAKo8C,EAAKI,GACpBL,EAAUn8C,EAAKo8C,EAAKK,EAAoB,WAGxCC,EAAmB18C,EAAKo8C,GAGxBA,EAAIvP,OAAS,GACbuP,EAAInK,gBAAiB,EACrBmK,EAAIrH,aAAc,EAClBqH,EAAI3H,iBAAmB,KACvB2H,EAAIrX,IAAM,GAAI5O,GAAQ,EAAG,GAAI,GAG/B,QAASmC,GAAWhjC,EAAS8mD,GAC3B,OAAgBjxD,KAAZmK,EAAJ,CAGA,OAAYnK,KAARixD,EACF,KAAM,IAAIzwD,OAAM,gBAGlB,QAAiBR,KAAb4yC,GAA0B+d,EAAQ/d,GACpC,KAAM,IAAIpyC,OAAM,uCAIlB4wD,GAASjnD,EAAS8mD,EAAKI,GACvBD,EAASjnD,EAAS8mD,EAAKK,EAAoB,WAG3CC,EAAmBpnD,EAAS8mD,IAQ9B,QAASM,GAAmB18C,EAAKo8C,OACHjxD,KAAxB6U,EAAIohC,iBACNub,EAAmB38C,EAAIohC,gBAAiBgb,GAG1CQ,EAAa58C,EAAIqhC,UAAW+a,GAC5BS,EAAS78C,EAAIrM,MAAOyoD,GACpBU,EAAc98C,EAAImhC,WAAYib,GAC9BtF,EAAkB92C,EAAIyhC,eAAgB2a,OAIlBjxD,KAAhB6U,EAAI2gC,UACNyb,EAAIrH,YAAc/0C,EAAI2gC,aAELx1C,IAAf6U,EAAIkqC,UACNkS,EAAI3H,iBAAmBz0C,EAAIkqC,aAGJ/+C,KAArB6U,EAAI4gC,cACN34C,EAAK2D,qBAAqB,gBAAiBwwD,EAAKp8C,GAUpD,QAAS88C,GAAc3b,EAAYib,GACjC,OAAmBjxD,KAAfg2C,EAA0B,CAI5B,OAF8Ch2C,KAAxB4yC,EAASoD,WAEV,CAEnB,GAAI4b,GAAqBX,EAAIzoD,QAAUmrC,EAAMgI,UAAYsV,EAAIzoD,QAAUmrC,EAAMiI,OAE7EqV,GAAIjb,WAAa4b,OAKnBX,GAAIjb,WAAaA,EAUrB,QAAS6b,GAAqBC,GAC5B,GAAIpxC,GAASqxC,EAAUD,EAEvB,YAAe9xD,KAAX0gB,GACM,EAGHA,EAQT,QAASsxC,GAAiBxpD,GACxB,GAAIypD,IAAQ,CAEZ,KAAK,GAAIroB,KAAK+J,GACZ,GAAIA,EAAM/J,KAAOphC,EAAO,CACtBypD,GAAQ,CACR,OAIJ,MAAOA,GAGT,QAASP,GAASlpD,EAAOyoD,GACvB,OAAcjxD,KAAVwI,EAAJ,CAIA,GAAI0pD,EAEJ,IAAqB,gBAAV1pD,IAGT,IAAqB,KAFrB0pD,EAAcL,EAAqBrpD,IAGjC,KAAM,IAAIhI,OAAM,UAAagI,EAAQ,oBAElC,CAEL,IAAKwpD,EAAiBxpD,GACpB,KAAM,IAAIhI,OAAM,UAAagI,EAAQ,eAGvC0pD,GAAc1pD,EAGhByoD,EAAIzoD,MAAQ0pD,GAOd,QAASV,GAAmBvb,EAAiBgb,GAC3C,GAAI9a,GAAO,QACPC,EAAS,OACTC,EAAc,CAElB,IAA+B,gBAApBJ,GACTE,EAAOF,EACPG,EAAS,OACTC,EAAc,MACT,CAAA,GAA2G,gBAA3E,KAApBJ,EAAkC,aAAc,EAAIt4C,EAAkB,SAAGs4C,IAK1F,KAAM,IAAIz1C,OAAM,2CAJaR,KAAzBi2C,EAAgBE,OAAoBA,EAAOF,EAAgBE,UAChCn2C,KAA3Bi2C,EAAgBG,SAAsBA,EAASH,EAAgBG,YAC/Bp2C,KAAhCi2C,EAAgBI,cAA2BA,EAAcJ,EAAgBI,aAK/E4a,EAAI7W,MAAM5xC,MAAMytC,gBAAkBE,EAClC8a,EAAI7W,MAAM5xC,MAAMg9C,YAAcpP,EAC9B6a,EAAI7W,MAAM5xC,MAAM2pD,YAAc9b,EAAc,KAC5C4a,EAAI7W,MAAM5xC,MAAM4pD,YAAc,QAGhC,QAASX,GAAavb,EAAW+a,OACbjxD,KAAdk2C,QAIkBl2C,KAAlBixD,EAAI/a,YACN+a,EAAI/a,cAGmB,gBAAdA,IACT+a,EAAI/a,UAAUC,KAAOD,EACrB+a,EAAI/a,UAAUE,OAASF,IAEnBA,EAAUC,OACZ8a,EAAI/a,UAAUC,KAAOD,EAAUC,MAE7BD,EAAUE,SACZ6a,EAAI/a,UAAUE,OAASF,EAAUE,YAELp2C,KAA1Bk2C,EAAUG,cACZ4a,EAAI/a,UAAUG,YAAcH,EAAUG,eAK5C,QAASsV,GAAkBrV,EAAgB2a,GACzC,GAAIoB,GAAS/b,MACEt2C,KAAXqyD,QAIeryD,KAAfixD,EAAIjZ,SACNiZ,EAAIjZ,OAAS,GAAInN,IAGnBomB,EAAIjZ,OAAOmR,eAAekJ,EAAO9b,WAAY8b,EAAO7b,UACpDya,EAAIjZ,OAAOwS,aAAa6H,EAAO5b,WAzXjC,GAAI/4C,GAAWrB,EAAoB,IAE/BsB,EAEJ,SAAgCV,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,IAFnDS,GAQlCZ,EAAOT,EAAoB,GAC3BwuC,EAASxuC,EAAoB,KAC7B2uC,EAAU3uC,EAAoB,KAG9Bs3C,GACFyI,IAAK,EACLX,SAAU,EACVC,QAAS,EACTnG,IAAK,EACL4K,QAAS,EACTxE,SAAU,EACVC,QAAS,EACT2B,KAAM,EACNW,KAAM,EACNV,QAAS,GAIPuU,GACFhc,IAAOpC,EAAM4B,IACb+c,WAAY3e,EAAMwM,QAClBoS,YAAa5e,EAAMgI,SACnB6W,WAAY7e,EAAMiI,QAClB/F,KAAQlC,EAAMuK,KACduU,KAAQ9e,EAAM4J,KACdkI,QAAW9R,EAAM6J,QACjB2Q,IAAOxa,EAAMyI,IACbsW,YAAa/e,EAAM8H,SACnBkX,WAAYhf,EAAM+H,SAShB2V,GAAc,QAAS,SAAU,cAAe,cAAe,SAAU,SAAU,SAAU,cAAe,cAAe,cAAe,YAAa,YAAa,YAAa,WAAY,kBAAmB,aAAc,kBAAmB,gBAAiB,eAAgB,qBAAsB,qBAAsB,wBAAyB,oBAAqB,mBAAoB,qBAAsB,YAAa,YAAa,UAAW,WAQ3bC,GAAsB,YAAa,YAAa,WAAY,WAAY,OAAQ,OAAQ,QAAS,OAAQ,OAAQ,QAAS,OAAQ,OAAQ,SAG1I1e,MAAW5yC,EAiUfhE,GAAOD,QAAQ43C,MAAQA,EACvB33C,EAAOD,QAAQ42C,YAAcA,EAC7B32C,EAAOD,QAAQoxC,WAAaA,EAC5BnxC,EAAOD,QAAQ4vD,kBAAoBA,GAI/B,SAAU3vD,EAAQD,EAASM,GAM/B,GAAsB,mBAAXsI,QAAwB,CACjC,GAAIiuD,GAAcv2D,EAAoB,KAClC8uC,EAASxmC,OAAe,QAAKtI,EAAoB,IACrDL,GAAOD,QAAU62D,EAAYznB,GAC3B1mC,eAAgB,cAGlBzI,GAAOD,QAAU,WACf,KAAMyE,OAAM,+DAMZ,SAAUxE,EAAQD,EAASM,GAE/B,GAAIw2D,GAAgCC,EAA8BC,GAEjE,SAAUj3D,GAGLg3D,KAAmCD,EAAiC,MAAsP7yD,MAA3O+yD,EAA2E,kBAAnCF,GAAiDA,EAA+BpgD,MAAM1W,EAAS+2D,GAAiCD,KAAiF72D,EAAOD,QAAUg3D,IAU7V,WACA,GAAIC,GAAe,IAwBnB,OAAO,SAASJ,GAAYK,EAAQ9oD,GAgIlC,QAASrH,GAAMowD,GACb,MAAOA,GAAO7xD,MAAM,UAOtB,QAAS8xD,GAAkBzuD,GAEzB,GAAmB,iBAAfA,EAAMtD,KAAyB,CAOjC,GAJKsD,EAAM0uD,SAASC,WAClB3uD,EAAM0uD,SAASC,aAGb3uD,EAAM0uD,SAASC,SAAS3uD,EAAMtD,MAChC,MAGAsD,GAAM0uD,SAASC,SAAS3uD,EAAMtD,OAAQ,EAK1C,GAAIkyD,IAAU,CACd5uD,GAAM6uD,gBAAkB,WACtBD,GAAU,EAIZ,IAAIE,GAAU9uD,EAAM0uD,SAASG,gBAAgBE,KAAK/uD,EAAM0uD,SACnC,mBAAXI,KACR9uD,EAAM0uD,SAASG,gBAAkB,WAC/BC,IACA9uD,EAAM6uD,oBAKV7uD,EAAMgvD,YAAcV,CAIpB,KADA,GAAI7wD,GAAO6wD,EACJ7wD,IAASmxD,GAAS,CACvB,GAAIK,GAAaxxD,EAAK8wD,MACtB,IAAGU,EAED,IAAI,GADAC,GACI7pD,EAAI,EAAGA,EAAI4pD,EAAW5zD,OAAQgK,IAEpC,GADA6pD,EAAYD,EAAW5pD,GAAG6pD,UAAUlvD,EAAMtD,MAC5B,IAAK,GAAIlB,GAAI,EAAGA,EAAI0zD,EAAU7zD,SAAWuzD,EAASpzD,IAC9D0zD,EAAU1zD,GAAGwE,EAInBvC,GAAOA,EAAK8C,YAvLhB,GAAI6nC,GAAW3iC,IACb1F,gBAAgB,EAGlB,IAAIwuD,EAAOY,QAAS,CAGlB,GAAI1oB,GAAS8nB,EAETa,EAAoB,SAAS9vD,EAASmG,GACxC,GAAIi7B,GAAIxkC,OAAOuT,OAAO24B,EAEtB,OADI3iC,IAASghC,EAAO0gB,OAAOzmB,EAAGj7B,GACvByoD,EAAY,GAAIznB,GAAOnnC,EAASohC,GAAIA,GAU7C,OARA+F,GAAO0gB,OAAOiI,EAAmB3oB,GAEjC2oB,EAAkBD,QAAU,SAAU7vD,EAASmG,GAC7C,GAAIi7B,GAAIxkC,OAAOuT,OAAO24B,EAEtB,OADI3iC,IAASghC,EAAO0gB,OAAOzmB,EAAGj7B,GACvByoD,EAAY,GAAIznB,GAAO0oB,QAAQ7vD,EAASohC,GAAIA,IAG9C0uB,EAKT,GAAIC,GAAUnzD,OAAOuT,OAAO8+C,GAGxBjvD,EAAUivD,EAAOjvD,OA6JrB,OA3JIA,GAAQivD,SAAQjvD,EAAQivD,WAC5BjvD,EAAQivD,OAAOjyD,KAAK+yD,GAIpBd,EAAOzlB,GAAG,eAAgB,SAAU9oC,IACF,IAA5BooC,EAASroC,gBAA4BqoC,EAASroC,iBAAmBC,EAAMsvD,aACzEtvD,EAAMD,iBAEJC,EAAMuvD,UACRjB,EAAetuD,EAAMI,UAKzBivD,EAAQH,aAQRG,EAAQvmB,GAAK,SAAU0lB,EAAQgB,GAa7B,MAXApxD,GAAMowD,GAAQ7vD,QAAQ,SAAUqB,GAC9B,GAAIkvD,GAAYG,EAAQH,UAAUlvD,EAC7BkvD,KACHG,EAAQH,UAAUlvD,GAASkvD,KAG3BX,EAAOzlB,GAAG9oC,EAAOyuD,IAEnBS,EAAU5yD,KAAKkzD,KAGVH,GAWTA,EAAQpmB,IAAM,SAAUulB,EAAQgB,GAoB9B,MAlBApxD,GAAMowD,GAAQ7vD,QAAQ,SAAUqB,GAC9B,GAAIkvD,GAAYG,EAAQH,UAAUlvD,EAC9BkvD,KACFA,EAAYM,EAAUN,EAAU3wD,OAAO,SAAUqE,GAC/C,MAAOA,KAAM4sD,OAGXN,EAAU7zD,OAAS,EACrBg0D,EAAQH,UAAUlvD,GAASkvD,GAI3BX,EAAOtlB,IAAIjpC,EAAOyuD,SACXY,GAAQH,UAAUlvD,OAKxBqvD,GAQTA,EAAQ1K,KAAO,SAAS8K,EAAWzvD,GACjCsuD,EAAetuD,EAAMI,OACrBmuD,EAAO5J,KAAK8K,EAAWzvD,IAGzBqvD,EAAQxmB,QAAU,WAEhB,GAAI6mB,GAAUnB,EAAOjvD,QAAQivD,OACzBoB,EAAMD,EAAQrzD,QAAQgzD,IACd,IAATM,GAAYD,EAAQpgC,OAAOqgC,EAAI,GAC9BD,EAAQr0D,cAAekzD,GAAOjvD,QAAQivD,OAG1Cc,EAAQH,aAGRX,EAAO1lB,WAgEFwmB,MAOP,SAAU/3D,EAAQD,EAASM,GAE/B,GAAI02D,IAKJ,SAAUpuD,EAAQ0H,EAAUioD,EAAYt0D,GAmBxC,QAASu0D,GAAkB3wD,EAAI4wD,EAASnjB,GACpC,MAAOG,YAAWijB,EAAO7wD,EAAIytC,GAAUmjB,GAY3C,QAASE,GAAe93C,EAAKhZ,EAAIytC,GAC7B,QAAI/wC,MAAMC,QAAQqc,KACd+3C,EAAK/3C,EAAKy0B,EAAQztC,GAAKytC,IAChB,GAWf,QAASsjB,GAAK13D,EAAKsd,EAAU82B,GACzB,GAAInxC,EAEJ,IAAKjD,EAIL,GAAIA,EAAIoG,QACJpG,EAAIoG,QAAQkX,EAAU82B,OACnB,IAAIp0C,EAAI8C,SAAWC,EAEtB,IADAE,EAAI,EACGA,EAAIjD,EAAI8C,QACXwa,EAAS7d,KAAK20C,EAASp0C,EAAIiD,GAAIA,EAAGjD,GAClCiD,QAGJ,KAAKA,IAAKjD,GACNA,EAAIwC,eAAeS,IAAMqa,EAAS7d,KAAK20C,EAASp0C,EAAIiD,GAAIA,EAAGjD,GAYvE,QAASykB,GAAU0vB,EAAQhgC,EAAMwjD,GAC7B,GAAIC,GAAqB,sBAAwBzjD,EAAO,KAAOwjD,EAAU,QACzE,OAAO,YACH,GAAIxvD,GAAI,GAAI5E,OAAM,mBACdqhB,EAAQzc,GAAKA,EAAEyc,MAAQzc,EAAEyc,MAAM9b,QAAQ,kBAAmB,IACzDA,QAAQ,cAAe,IACvBA,QAAQ,6BAA8B,kBAAoB,sBAE3DiqD,EAAMrrD,EAAO8c,UAAY9c,EAAO8c,QAAQH,MAAQ3c,EAAO8c,QAAQuuC,IAInE,OAHIA,IACAA,EAAItzD,KAAKiI,EAAO8c,QAASozC,EAAoBhzC,GAE1CuvB,EAAO3+B,MAAMtW,KAAM2D,YAwElC,QAASg1D,GAAQC,EAAOp5B,EAAMq5B,GAC1B,GACIC,GADAC,EAAQv5B,EAAKntB,SAGjBymD,GAASF,EAAMvmD,UAAY5N,OAAOuT,OAAO+gD,GACzCD,EAAOt0D,YAAco0D,EACrBE,EAAOE,OAASD,EAEZF,GACAnJ,GAAOoJ,EAAQD,GAUvB,QAASP,GAAO7wD,EAAIytC,GAChB,MAAO,YACH,MAAOztC,GAAG6O,MAAM4+B,EAASvxC,YAWjC,QAASs1D,GAASthD,EAAK+H,GACnB,aAAW/H,IAAOuhD,GACPvhD,EAAIrB,MAAMoJ,EAAOA,EAAK,IAAM7b,EAAYA,EAAW6b,GAEvD/H,EASX,QAASwhD,GAAYC,EAAMC,GACvB,MAAQD,KAASv1D,EAAaw1D,EAAOD,EASzC,QAASE,GAAkB3wD,EAAQ4rC,EAAOwjB,GACtCS,EAAKe,EAAShlB,GAAQ,SAAStvC,GAC3B0D,EAAOf,iBAAiB3C,EAAM8yD,GAAS,KAU/C,QAASyB,GAAqB7wD,EAAQ4rC,EAAOwjB,GACzCS,EAAKe,EAAShlB,GAAQ,SAAStvC,GAC3B0D,EAAOP,oBAAoBnD,EAAM8yD,GAAS,KAWlD,QAAShvD,GAAUwkC,EAAMvkC,GACrB,KAAOukC,GAAM,CACT,GAAIA,GAAQvkC,EACR,OAAO,CAEXukC,GAAOA,EAAKzkC,WAEhB,OAAO,EASX,QAAS2wD,GAAM/E,EAAKgF,GAChB,MAAOhF,GAAI9vD,QAAQ80D,IAAS,EAQhC,QAASH,GAAS7E,GACd,MAAOA,GAAIpoD,OAAO3F,MAAM,QAU5B,QAASgzD,GAAQjhD,EAAKghD,EAAME,GACxB,GAAIlhD,EAAI9T,UAAYg1D,EAChB,MAAOlhD,GAAI9T,QAAQ80D,EAGnB,KADA,GAAI31D,GAAI,EACDA,EAAI2U,EAAI9U,QAAQ,CACnB,GAAKg2D,GAAalhD,EAAI3U,GAAG61D,IAAcF,IAAWE,GAAalhD,EAAI3U,KAAO21D,EACtE,MAAO31D,EAEXA,KAEJ,OAAQ,EAShB,QAASqD,GAAQtG,GACb,MAAOqD,OAAMkO,UAAU1H,MAAMpK,KAAKO,EAAK,GAU3C,QAAS+4D,GAAYnhD,EAAKnR,EAAKshB,GAK3B,IAJA,GAAIixC,MACA5kD,KACAnR,EAAI,EAEDA,EAAI2U,EAAI9U,QAAQ,CACnB,GAAI+T,GAAMpQ,EAAMmR,EAAI3U,GAAGwD,GAAOmR,EAAI3U,EAC9B41D,GAAQzkD,EAAQyC,GAAO,GACvBmiD,EAAQj1D,KAAK6T,EAAI3U,IAErBmR,EAAOnR,GAAK4T,EACZ5T,IAaJ,MAVI8kB,KAIIixC,EAHCvyD,EAGSuyD,EAAQjxC,KAAK,SAAyBrlB,EAAGC,GAC/C,MAAOD,GAAE+D,GAAO9D,EAAE8D,KAHZuyD,EAAQjxC,QAQnBixC,EASX,QAASC,GAASj5D,EAAKk5D,GAKnB,IAJA,GAAIr4B,GAAQt+B,EACR42D,EAAYD,EAAS,GAAGjzC,cAAgBizC,EAASrvD,MAAM,GAEvD5G,EAAI,EACDA,EAAIm2D,GAAgBt2D,QAAQ,CAI/B,GAHA+9B,EAASu4B,GAAgBn2D,IACzBV,EAAO,EAAWs+B,EAASs4B,EAAYD,IAE3Bl5D,GACR,MAAOuC,EAEXU,KAEJ,MAAOF,GAQX,QAASs2D,KACL,MAAOC,MAQX,QAASC,GAAoBxyD,GACzB,GAAIyyD,GAAMzyD,EAAQ0yD,eAAiB1yD,CACnC,OAAQyyD,GAAIE,aAAeF,EAAIG,cAAgBjyD,EAyCnD,QAASkyD,GAAMC,EAASxzD,GACpB,GAAIwP,GAAO3W,IACXA,MAAK26D,QAAUA,EACf36D,KAAKmH,SAAWA,EAChBnH,KAAK6H,QAAU8yD,EAAQ9yD,QACvB7H,KAAK2I,OAASgyD,EAAQ3sD,QAAQ4sD,YAI9B56D,KAAK66D,WAAa,SAASC,GACnB7B,EAAS0B,EAAQ3sD,QAAQ+sD,QAASJ,KAClChkD,EAAKohD,QAAQ+C,IAIrB96D,KAAKg7D,OAoCT,QAASC,GAAoBN,GACzB,GACIO,GAAaP,EAAQ3sD,QAAQktD,UAajC,OAAO,KAXHA,IAEOC,GACAC,EACAC,GACAC,EACCC,GAGDC,EAFAC,IAIOd,EAASe,GAS/B,QAASA,GAAaf,EAAS3C,EAAWj3C,GACtC,GAAI46C,GAAc56C,EAAM66C,SAASh4D,OAC7Bi4D,EAAqB96C,EAAM+6C,gBAAgBl4D,OAC3Ck0D,EAAWE,EAAY+D,IAAgBJ,EAAcE,GAAuB,EAC5EG,EAAWhE,GAAaiE,GAAYC,KAAkBP,EAAcE,GAAuB,CAE/F96C,GAAM+2C,UAAYA,EAClB/2C,EAAMi7C,UAAYA,EAEdlE,IACA6C,EAAQwB,YAKZp7C,EAAMi3C,UAAYA,EAGlBoE,EAAiBzB,EAAS55C,GAG1B45C,EAAQzN,KAAK,eAAgBnsC,GAE7B45C,EAAQ0B,UAAUt7C,GAClB45C,EAAQwB,QAAQG,UAAYv7C,EAQhC,QAASq7C,GAAiBzB,EAAS55C,GAC/B,GAAIo7C,GAAUxB,EAAQwB,QAClBP,EAAW76C,EAAM66C,SACjBW,EAAiBX,EAASh4D,MAGzBu4D,GAAQK,aACTL,EAAQK,WAAaC,EAAqB17C,IAI1Cw7C,EAAiB,IAAMJ,EAAQO,cAC/BP,EAAQO,cAAgBD,EAAqB17C,GACnB,IAAnBw7C,IACPJ,EAAQO,eAAgB,EAG5B,IAAIF,GAAaL,EAAQK,WACrBE,EAAgBP,EAAQO,cACxBC,EAAeD,EAAgBA,EAAc/gB,OAAS6gB,EAAW7gB,OAEjEA,EAAS56B,EAAM46B,OAASihB,EAAUhB,EACtC76C,GAAM87C,UAAYp2C,KAClB1F,EAAM+7C,UAAY/7C,EAAM87C,UAAYL,EAAWK,UAE/C97C,EAAMg8C,MAAQC,EAASL,EAAchhB,GACrC56B,EAAMu5B,SAAW2iB,EAAYN,EAAchhB,GAE3CuhB,EAAef,EAASp7C,GACxBA,EAAMo8C,gBAAkBC,EAAar8C,EAAMs8C,OAAQt8C,EAAMu8C,OAEzD,IAAIC,GAAkBC,EAAYz8C,EAAM+7C,UAAW/7C,EAAMs8C,OAAQt8C,EAAMu8C,OACvEv8C,GAAM08C,iBAAmBF,EAAgBxoC,EACzChU,EAAM28C,iBAAmBH,EAAgB5uC,EACzC5N,EAAMw8C,gBAAmBt4C,GAAIs4C,EAAgBxoC,GAAK9P,GAAIs4C,EAAgB5uC,GAAM4uC,EAAgBxoC,EAAIwoC,EAAgB5uC,EAEhH5N,EAAMve,MAAQk6D,EAAgBiB,EAASjB,EAAcd,SAAUA,GAAY,EAC3E76C,EAAM68C,SAAWlB,EAAgBmB,EAAYnB,EAAcd,SAAUA,GAAY,EAEjF76C,EAAM+8C,YAAe3B,EAAQG,UAAsCv7C,EAAM66C,SAASh4D,OAC9Eu4D,EAAQG,UAAUwB,YAAe/8C,EAAM66C,SAASh4D,OAASu4D,EAAQG,UAAUwB,YADtC/8C,EAAM66C,SAASh4D,OAGxDm6D,EAAyB5B,EAASp7C,EAGlC,IAAIpY,GAASgyD,EAAQ9yD,OACjBkB,GAAUgY,EAAMk2C,SAAStuD,OAAQA,KACjCA,EAASoY,EAAMk2C,SAAStuD,QAE5BoY,EAAMpY,OAASA,EAGnB,QAASu0D,GAAef,EAASp7C,GAC7B,GAAI46B,GAAS56B,EAAM46B,OACfhf,EAASw/B,EAAQ6B,gBACjBC,EAAY9B,EAAQ8B,cACpB3B,EAAYH,EAAQG,aAEpBv7C,GAAMi3C,YAAc+D,IAAeO,EAAUtE,YAAciE,KAC3DgC,EAAY9B,EAAQ8B,WAChBlpC,EAAGunC,EAAUe,QAAU,EACvB1uC,EAAG2tC,EAAUgB,QAAU,GAG3B3gC,EAASw/B,EAAQ6B,aACbjpC,EAAG4mB,EAAO5mB,EACVpG,EAAGgtB,EAAOhtB,IAIlB5N,EAAMs8C,OAASY,EAAUlpC,GAAK4mB,EAAO5mB,EAAI4H,EAAO5H,GAChDhU,EAAMu8C,OAASW,EAAUtvC,GAAKgtB,EAAOhtB,EAAIgO,EAAOhO,GAQpD,QAASovC,GAAyB5B,EAASp7C,GACvC,GAEIm9C,GAAUC,EAAWC,EAAWx+B,EAFhCy+B,EAAOlC,EAAQmC,cAAgBv9C,EAC/B+7C,EAAY/7C,EAAM87C,UAAYwB,EAAKxB,SAGvC,IAAI97C,EAAMi3C,WAAakE,KAAiBY,EAAYyB,IAAoBF,EAAKH,WAAar6D,GAAY,CAClG,GAAIw5D,GAASt8C,EAAMs8C,OAASgB,EAAKhB,OAC7BC,EAASv8C,EAAMu8C,OAASe,EAAKf,OAE7BjyD,EAAImyD,EAAYV,EAAWO,EAAQC,EACvCa,GAAY9yD,EAAE0pB,EACdqpC,EAAY/yD,EAAEsjB,EACduvC,EAAYj5C,GAAI5Z,EAAE0pB,GAAK9P,GAAI5Z,EAAEsjB,GAAMtjB,EAAE0pB,EAAI1pB,EAAEsjB,EAC3CiR,EAAYw9B,EAAaC,EAAQC,GAEjCnB,EAAQmC,aAAev9C,MAGvBm9C,GAAWG,EAAKH,SAChBC,EAAYE,EAAKF,UACjBC,EAAYC,EAAKD,UACjBx+B,EAAYy+B,EAAKz+B,SAGrB7e,GAAMm9C,SAAWA,EACjBn9C,EAAMo9C,UAAYA,EAClBp9C,EAAMq9C,UAAYA,EAClBr9C,EAAM6e,UAAYA,EAQtB,QAAS68B,GAAqB17C,GAK1B,IAFA,GAAI66C,MACA73D,EAAI,EACDA,EAAIgd,EAAM66C,SAASh4D,QACtBg4D,EAAS73D,IACLizC,QAASta,GAAM3b,EAAM66C,SAAS73D,GAAGizC,SACjCG,QAASza,GAAM3b,EAAM66C,SAAS73D,GAAGozC,UAErCpzC,GAGJ,QACI84D,UAAWp2C,KACXm1C,SAAUA,EACVjgB,OAAQihB,EAAUhB,GAClByB,OAAQt8C,EAAMs8C,OACdC,OAAQv8C,EAAMu8C,QAStB,QAASV,GAAUhB,GACf,GAAIW,GAAiBX,EAASh4D,MAG9B,IAAuB,IAAnB24D,EACA,OACIxnC,EAAG2H,GAAMk/B,EAAS,GAAG5kB,SACrBroB,EAAG+N,GAAMk/B,EAAS,GAAGzkB,SAK7B,KADA,GAAIpiB,GAAI,EAAGpG,EAAI,EAAG5qB,EAAI,EACfA,EAAIw4D,GACPxnC,GAAK6mC,EAAS73D,GAAGizC,QACjBroB,GAAKitC,EAAS73D,GAAGozC,QACjBpzC,GAGJ,QACIgxB,EAAG2H,GAAM3H,EAAIwnC,GACb5tC,EAAG+N,GAAM/N,EAAI4tC,IAWrB,QAASiB,GAAYV,EAAW/nC,EAAGpG,GAC/B,OACIoG,EAAGA,EAAI+nC,GAAa,EACpBnuC,EAAGA,EAAImuC,GAAa,GAU5B,QAASM,GAAaroC,EAAGpG,GACrB,MAAIoG,KAAMpG,EACC6vC,GAGPv5C,GAAI8P,IAAM9P,GAAI0J,GACPoG,EAAI,EAAI0pC,GAAiBC,GAE7B/vC,EAAI,EAAIgwC,GAAeC,GAUlC,QAAS3B,GAAY/xC,EAAIC,EAAIjnB,GACpBA,IACDA,EAAQ26D,GAEZ,IAAI9pC,GAAI5J,EAAGjnB,EAAM,IAAMgnB,EAAGhnB,EAAM,IAC5ByqB,EAAIxD,EAAGjnB,EAAM,IAAMgnB,EAAGhnB,EAAM,GAEhC,OAAOzB,MAAKusD,KAAMj6B,EAAIA,EAAMpG,EAAIA,GAUpC,QAASquC,GAAS9xC,EAAIC,EAAIjnB,GACjBA,IACDA,EAAQ26D,GAEZ,IAAI9pC,GAAI5J,EAAGjnB,EAAM,IAAMgnB,EAAGhnB,EAAM,IAC5ByqB,EAAIxD,EAAGjnB,EAAM,IAAMgnB,EAAGhnB,EAAM,GAChC,OAA0B,KAAnBzB,KAAKq8D,MAAMnwC,EAAGoG,GAAWtyB,KAAKunD,GASzC,QAAS6T,GAAYtX,EAAOC,GACxB,MAAOwW,GAASxW,EAAI,GAAIA,EAAI,GAAIuY,IAAmB/B,EAASzW,EAAM,GAAIA,EAAM,GAAIwY,IAUpF,QAASpB,GAASpX,EAAOC,GACrB,MAAOyW,GAAYzW,EAAI,GAAIA,EAAI,GAAIuY,IAAmB9B,EAAY1W,EAAM,GAAIA,EAAM,GAAIwY,IAiB1F,QAAStD,KACLz7D,KAAKg/D,KAAOC,GACZj/D,KAAKk/D,MAAQC,GAEbn/D,KAAKo/D,SAAU,EAEf1E,EAAMpkD,MAAMtW,KAAM2D,WAoEtB,QAASy3D,KACLp7D,KAAKg/D,KAAOK,GACZr/D,KAAKk/D,MAAQI,GAEb5E,EAAMpkD,MAAMtW,KAAM2D,WAElB3D,KAAKga,MAASha,KAAK26D,QAAQwB,QAAQoD,iBAoEvC,QAASC,KACLx/D,KAAKy/D,SAAWC,GAChB1/D,KAAKk/D,MAAQS,GACb3/D,KAAK4/D,SAAU,EAEflF,EAAMpkD,MAAMtW,KAAM2D,WAsCtB,QAASk8D,GAAuB/E,EAAI71D,GAChC,GAAI66D,GAAM14D,EAAQ0zD,EAAGiF,SACjBC,EAAU54D,EAAQ0zD,EAAGmF,eAMzB,OAJIh7D,IAAQg3D,GAAYC,MACpB4D,EAAMjG,EAAYiG,EAAIj5D,OAAOm5D,GAAU,cAAc,KAGjDF,EAAKE,GAiBjB,QAAS1E,KACLt7D,KAAKy/D,SAAWS,GAChBlgE,KAAKmgE,aAELzF,EAAMpkD,MAAMtW,KAAM2D,WA0BtB,QAASy8D,GAAWtF,EAAI71D,GACpB,GAAIo7D,GAAaj5D,EAAQ0zD,EAAGiF,SACxBI,EAAYngE,KAAKmgE,SAGrB,IAAIl7D,GAAQ82D,GAAcuE,KAAqC,IAAtBD,EAAWz8D,OAEhD,MADAu8D,GAAUE,EAAW,GAAGE,aAAc,GAC9BF,EAAYA,EAGxB,IAAIt8D,GACAkzC,EACAgpB,EAAiB74D,EAAQ0zD,EAAGmF,gBAC5BO,KACA73D,EAAS3I,KAAK2I,MAQlB,IALAsuC,EAAgBopB,EAAWv5D,OAAO,SAAS25D,GACvC,MAAO13D,GAAU03D,EAAM93D,OAAQA,KAI/B1D,IAAS82D,GAET,IADAh4D,EAAI,EACGA,EAAIkzC,EAAcrzC,QACrBu8D,EAAUlpB,EAAclzC,GAAGw8D,aAAc,EACzCx8D,GAMR,KADAA,EAAI,EACGA,EAAIk8D,EAAer8D,QAClBu8D,EAAUF,EAAel8D,GAAGw8D,aAC5BC,EAAqB37D,KAAKo7D,EAAel8D,IAIzCkB,GAAQg3D,GAAYC,WACbiE,GAAUF,EAAel8D,GAAGw8D,YAEvCx8D,GAGJ,OAAKy8D,GAAqB58D,QAMtBi2D,EAAY5iB,EAAcpwC,OAAO25D,GAAuB,cAAc,GACtEA,OAPJ,GAwBJ,QAAShF,KACLd,EAAMpkD,MAAMtW,KAAM2D,UAElB,IAAIo0D,GAAUO,EAAOt4D,KAAK+3D,QAAS/3D,KACnCA,MAAKygE,MAAQ,GAAInF,GAAWt7D,KAAK26D,QAAS5C,GAC1C/3D,KAAK0gE,MAAQ,GAAIjF,GAAWz7D,KAAK26D,QAAS5C,GAE1C/3D,KAAK2gE,aAAe,KACpB3gE,KAAK4gE,eAqCT,QAASC,GAAc7I,EAAW8I,GAC1B9I,EAAY+D,IACZ/7D,KAAK2gE,aAAeG,EAAUhF,gBAAgB,GAAGyE,WACjDQ,EAAaxgE,KAAKP,KAAM8gE,IACjB9I,GAAaiE,GAAYC,KAChC6E,EAAaxgE,KAAKP,KAAM8gE,GAIhC,QAASC,GAAaD,GAClB,GAAIL,GAAQK,EAAUhF,gBAAgB,EAEtC,IAAI2E,EAAMF,aAAevgE,KAAK2gE,aAAc,CACxC,GAAIK,IAAajsC,EAAG0rC,EAAMzpB,QAASroB,EAAG8xC,EAAMtpB,QAC5Cn3C,MAAK4gE,YAAY/7D,KAAKm8D,EACtB,IAAIC,GAAMjhE,KAAK4gE,YACXM,EAAkB,WAClB,GAAIn9D,GAAIk9D,EAAIr8D,QAAQo8D,EAChBj9D,IAAK,GACLk9D,EAAIppC,OAAO9zB,EAAG,GAGtBsxC,YAAW6rB,EAAiBC,KAIpC,QAASC,GAAiBN,GAEtB,IAAK,GADD/rC,GAAI+rC,EAAU7J,SAASjgB,QAASroB,EAAImyC,EAAU7J,SAAS9f,QAClDpzC,EAAI,EAAGA,EAAI/D,KAAK4gE,YAAYh9D,OAAQG,IAAK,CAC9C,GAAIkJ,GAAIjN,KAAK4gE,YAAY78D,GACrB65C,EAAKn7C,KAAKwiB,IAAI8P,EAAI9nB,EAAE8nB,GAAI8oB,EAAKp7C,KAAKwiB,IAAI0J,EAAI1hB,EAAE0hB,EAChD,IAAIivB,GAAMyjB,IAAkBxjB,GAAMwjB,GAC9B,OAAO,EAGf,OAAO,EAsBX,QAASC,GAAY3G,EAASp4D,GAC1BvC,KAAK26D,QAAUA,EACf36D,KAAK+e,IAAIxc,GAmGb,QAASg/D,GAAkBC,GAEvB,GAAI/H,EAAM+H,EAASC,IACf,MAAOA,GAGX,IAAIC,GAAUjI,EAAM+H,EAASG,IACzBC,EAAUnI,EAAM+H,EAASK,GAM7B,OAAIH,IAAWE,EACJH,GAIPC,GAAWE,EACJF,EAAUC,GAAqBE,GAItCpI,EAAM+H,EAASM,IACRA,GAGJC,GA2DX,QAASC,GAAWh0D,GAChBhO,KAAKgO,QAAU0hD,MAAW1vD,KAAKi4B,SAAUjqB,OAEzChO,KAAKK,GAAK85D,IAEVn6D,KAAK26D,QAAU,KAGf36D,KAAKgO,QAAQ+sD,OAAS5B,EAAYn5D,KAAKgO,QAAQ+sD,QAAQ,GAEvD/6D,KAAKiiE,MAAQC,GAEbliE,KAAKmiE,gBACLniE,KAAKoiE,eAqOT,QAASC,IAASJ,GACd,MAAIA,GAAQK,GACD,SACAL,EAAQM,GACR,MACAN,EAAQO,GACR,OACAP,EAAQQ,GACR,QAEJ,GAQX,QAASC,IAAa9iC,GAClB,MAAIA,IAAag/B,GACN,OACAh/B,GAAa++B,GACb,KACA/+B,GAAa6+B,GACb,OACA7+B,GAAa8+B,GACb,QAEJ,GASX,QAASiE,IAA6BC,EAAiBC,GACnD,GAAIlI,GAAUkI,EAAWlI,OACzB,OAAIA,GACOA,EAAQljD,IAAImrD,GAEhBA,EAQX,QAASE,MACLd,EAAW1rD,MAAMtW,KAAM2D,WA6D3B,QAASo/D,MACLD,GAAexsD,MAAMtW,KAAM2D,WAE3B3D,KAAKgjE,GAAK,KACVhjE,KAAKijE,GAAK,KA4Ed,QAASC,MACLJ,GAAexsD,MAAMtW,KAAM2D,WAsC/B,QAASw/D,MACLnB,EAAW1rD,MAAMtW,KAAM2D,WAEvB3D,KAAKojE,OAAS,KACdpjE,KAAKqjE,OAAS,KAmElB,QAASC,MACLR,GAAexsD,MAAMtW,KAAM2D,WA8B/B,QAAS4/D,MACLT,GAAexsD,MAAMtW,KAAM2D,WA2D/B,QAAS6/D,MACLxB,EAAW1rD,MAAMtW,KAAM2D,WAIvB3D,KAAKyjE,OAAQ,EACbzjE,KAAK0jE,SAAU,EAEf1jE,KAAKojE,OAAS,KACdpjE,KAAKqjE,OAAS,KACdrjE,KAAKq0C,MAAQ,EAqGjB,QAASrF,IAAOnnC,EAASmG,GAGrB,MAFAA,GAAUA,MACVA,EAAQ21D,YAAcxK,EAAYnrD,EAAQ21D,YAAa30B,GAAO/W,SAAS2rC,QAChE,GAAIlM,IAAQ7vD,EAASmG,GAiIhC,QAAS0pD,IAAQ7vD,EAASmG,GACtBhO,KAAKgO,QAAU0hD,MAAW1gB,GAAO/W,SAAUjqB,OAE3ChO,KAAKgO,QAAQ4sD,YAAc56D,KAAKgO,QAAQ4sD,aAAe/yD,EAEvD7H,KAAK6jE,YACL7jE,KAAKm8D,WACLn8D,KAAK2jE,eACL3jE,KAAK8jE,eAEL9jE,KAAK6H,QAAUA,EACf7H,KAAK+gB,MAAQk6C,EAAoBj7D,MACjCA,KAAK+jE,YAAc,GAAIzC,GAAYthE,KAAMA,KAAKgO,QAAQ+1D,aAEtDC,GAAehkE,MAAM,GAErBw4D,EAAKx4D,KAAKgO,QAAQ21D,YAAa,SAAS/0D,GACpC,GAAIi0D,GAAa7iE,KAAKywB,IAAI,GAAK7hB,GAAK,GAAIA,EAAK,IAC7CA,GAAK,IAAMi0D,EAAWoB,cAAcr1D,EAAK,IACzCA,EAAK,IAAMi0D,EAAWqB,eAAet1D,EAAK,KAC3C5O,MA4PP,QAASgkE,IAAerJ,EAASlqC,GAC7B,GAAI5oB,GAAU8yD,EAAQ9yD,OACtB,IAAKA,EAAQwE,MAAb,CAGA,GAAIhJ,EACJm1D,GAAKmC,EAAQ3sD,QAAQm2D,SAAU,SAAS5hE,EAAO0S,GAC3C5R,EAAO02D,EAASlyD,EAAQwE,MAAO4I,GAC3Bwb,GACAkqC,EAAQmJ,YAAYzgE,GAAQwE,EAAQwE,MAAMhJ,GAC1CwE,EAAQwE,MAAMhJ,GAAQd,GAEtBsF,EAAQwE,MAAMhJ,GAAQs3D,EAAQmJ,YAAYzgE,IAAS,KAGtDotB,IACDkqC,EAAQmJ,iBAShB,QAASM,IAAgB77D,EAAOisB,GAC5B,GAAI6vC,GAAen0D,EAASo0D,YAAY,QACxCD,GAAaE,UAAUh8D,GAAO,GAAM,GACpC87D,EAAaG,QAAUhwC,EACvBA,EAAK7rB,OAAO87D,cAAcJ,GAngF9B,GA+FI3U,IA/FAwK,IAAmB,GAAI,SAAU,MAAO,KAAM,KAAM,KACpDwK,GAAex0D,EAASC,cAAc,OAEtC+oD,GAAgB,WAEhBx8B,GAAQj6B,KAAKi6B,MACbzX,GAAMxiB,KAAKwiB,IACXwB,GAAM5jB,KAAK4jB,GA0FXipC,IADyB,kBAAlBjrD,QAAOirD,OACL,SAAgB/mD,GACrB,GAAIA,IAAW9E,GAAwB,OAAX8E,EACxB,KAAM,IAAIpE,WAAU,6CAIxB,KAAK,GADDmiB,GAASjiB,OAAOkE,GACXoK,EAAQ,EAAGA,EAAQpP,UAAUC,OAAQmP,IAAS,CACnD,GAAIwC,GAAS5R,UAAUoP,EACvB,IAAIwC,IAAW1R,GAAwB,OAAX0R,EACxB,IAAK,GAAIovD,KAAWpvD,GACZA,EAAOjS,eAAeqhE,KACtBj+C,EAAOi+C,GAAWpvD,EAAOovD,IAKzC,MAAOj+C,IAGFjiB,OAAOirD,MAWpB,IAAI9uD,IAAS2kB,EAAU,SAAgBq/C,EAAMlsD,EAAKmsD,GAG9C,IAFA,GAAI9wD,GAAOtP,OAAOsP,KAAK2E,GACnB3U,EAAI,EACDA,EAAIgQ,EAAKnQ,UACPihE,GAAUA,GAASD,EAAK7wD,EAAKhQ,MAAQF,KACtC+gE,EAAK7wD,EAAKhQ,IAAM2U,EAAI3E,EAAKhQ,KAE7BA,GAEJ,OAAO6gE,IACR,SAAU,iBASTC,GAAQt/C,EAAU,SAAeq/C,EAAMlsD,GACvC,MAAO9X,IAAOgkE,EAAMlsD,GAAK,IAC1B,QAAS,iBAiNR0hD,GAAY,EAeZ0K,GAAe,wCAEfvJ,GAAiB,gBAAkB/yD,GACnC2yD,GAAyBpB,EAASvxD,EAAQ,kBAAoB3E,EAC9Dw3D,GAAqBE,IAAiBuJ,GAAa53D,KAAKjF,UAAUC,WAOlEq2D,GAAmB,GAEnBxC,GAAc,EACduE,GAAa,EACbrE,GAAY,EACZC,GAAe,EAEfsC,GAAiB,EACjBC,GAAiB,EACjBC,GAAkB,EAClBC,GAAe,EACfC,GAAiB,GAEjBmG,GAAuBtG,GAAiBC,GACxCsG,GAAqBrG,GAAeC,GACpCqG,GAAgBF,GAAuBC,GAEvCnG,IAAY,IAAK,KACjBE,IAAmB,UAAW,UA4BlCrE,GAAMroD,WAKF0lD,QAAS,aAKTiD,KAAM,WACFh7D,KAAKg/D,MAAQ1F,EAAkBt5D,KAAK6H,QAAS7H,KAAKg/D,KAAMh/D,KAAK66D,YAC7D76D,KAAKy/D,UAAYnG,EAAkBt5D,KAAK2I,OAAQ3I,KAAKy/D,SAAUz/D,KAAK66D,YACpE76D,KAAKk/D,OAAS5F,EAAkBe,EAAoBr6D,KAAK6H,SAAU7H,KAAKk/D,MAAOl/D,KAAK66D,aAMxFzpB,QAAS,WACLpxC,KAAKg/D,MAAQxF,EAAqBx5D,KAAK6H,QAAS7H,KAAKg/D,KAAMh/D,KAAK66D,YAChE76D,KAAKy/D,UAAYjG,EAAqBx5D,KAAK2I,OAAQ3I,KAAKy/D,SAAUz/D,KAAK66D,YACvE76D,KAAKk/D,OAAS1F,EAAqBa,EAAoBr6D,KAAK6H,SAAU7H,KAAKk/D,MAAOl/D,KAAK66D,aA4T/F,IAAIqK,KACAC,UAAWpJ,GACXqJ,UAAW9E,GACX+E,QAASpJ,IAGTgD,GAAuB,YACvBE,GAAsB,mBAgB1BxG,GAAQ8C,EAAYf,GAKhB3C,QAAS,SAAmB+C,GACxB,GAAI9C,GAAYkN,GAAgBpK,EAAG71D,KAG/B+yD,GAAY+D,IAA6B,IAAdjB,EAAGpP,SAC9B1rD,KAAKo/D,SAAU,GAGfpH,EAAYsI,IAA2B,IAAbxF,EAAGrP,QAC7BuM,EAAYiE,IAIXj8D,KAAKo/D,UAINpH,EAAYiE,KACZj8D,KAAKo/D,SAAU,GAGnBp/D,KAAKmH,SAASnH,KAAK26D,QAAS3C,GACxB4D,UAAWd,GACXgB,iBAAkBhB,GAClBjD,YAvbW,QAwbXZ,SAAU6D,OAKtB,IAAIwK,KACAC,YAAaxJ,GACbyJ,YAAalF,GACbmF,UAAWxJ,GACXyJ,cAAexJ,GACfyJ,WAAYzJ,IAIZ0J,IACAC,EAzcmB,QA0cnBC,EAzciB,MA0cjBC,EAzcmB,QA0cnBC,EAzcoB,UA4cpB3G,GAAyB,cACzBC,GAAwB,qCAGxB92D,GAAOy9D,iBAAmBz9D,EAAO09D,eACjC7G,GAAyB,gBACzBC,GAAwB,6CAiB5B3G,EAAQyC,EAAmBV,GAKvB3C,QAAS,SAAmB+C,GACxB,GAAI9gD,GAAQha,KAAKga,MACbmsD,GAAgB,EAEhBC,EAAsBtL,EAAG71D,KAAK8iB,cAAcne,QAAQ,KAAM,IAC1DouD,EAAYsN,GAAkBc,GAC9BvO,EAAc+N,GAAuB9K,EAAGjD,cAAgBiD,EAAGjD,YAE3DwO,EAnfW,SAmfAxO,EAGXyO,EAAa3M,EAAQ3/C,EAAO8gD,EAAGyL,UAAW,YAG1CvO,GAAY+D,KAA8B,IAAdjB,EAAGpP,QAAgB2a,GAC3CC,EAAa,IACbtsD,EAAMnV,KAAKi2D,GACXwL,EAAatsD,EAAMpW,OAAS,GAEzBo0D,GAAaiE,GAAYC,MAChCiK,GAAgB,GAIhBG,EAAa,IAKjBtsD,EAAMssD,GAAcxL,EAEpB96D,KAAKmH,SAASnH,KAAK26D,QAAS3C,GACxB4D,SAAU5hD,EACV8hD,iBAAkBhB,GAClBjD,YAAaA,EACbZ,SAAU6D,IAGVqL,GAEAnsD,EAAM6d,OAAOyuC,EAAY,MAKrC,IAAIE,KACAC,WAAY1K,GACZ2K,UAAWpG,GACXqG,SAAU1K,GACV2K,YAAa1K,IAGbwD,GAA6B,aAC7BC,GAA6B,2CAejChH,GAAQ6G,EAAkB9E,GACtB3C,QAAS,SAAmB+C,GACxB,GAAI71D,GAAOuhE,GAAuB1L,EAAG71D,KAOrC,IAJIA,IAAS82D,KACT/7D,KAAK4/D,SAAU,GAGd5/D,KAAK4/D,QAAV,CAIA,GAAIG,GAAUF,EAAuBt/D,KAAKP,KAAM86D,EAAI71D,EAGhDA,IAAQg3D,GAAYC,KAAiB6D,EAAQ,GAAGn8D,OAASm8D,EAAQ,GAAGn8D,QAAW,IAC/E5D,KAAK4/D,SAAU,GAGnB5/D,KAAKmH,SAASnH,KAAK26D,QAAS11D,GACxB22D,SAAUmE,EAAQ,GAClBjE,gBAAiBiE,EAAQ,GACzBlI,YAtkBW,QAukBXZ,SAAU6D,OAsBtB,IAAI+L,KACAJ,WAAY1K,GACZ2K,UAAWpG,GACXqG,SAAU1K,GACV2K,YAAa1K,IAGbgE,GAAsB,2CAc1BvH,GAAQ2C,EAAYZ,GAChB3C,QAAS,SAAoB+C,GACzB,GAAI71D,GAAO4hE,GAAgB/L,EAAG71D,MAC1B86D,EAAUK,EAAW7/D,KAAKP,KAAM86D,EAAI71D,EACnC86D,IAIL//D,KAAKmH,SAASnH,KAAK26D,QAAS11D,GACxB22D,SAAUmE,EAAQ,GAClBjE,gBAAiBiE,EAAQ,GACzBlI,YA7nBW,QA8nBXZ,SAAU6D,MA4EtB,IAAIqG,IAAgB,KAChBE,GAAiB,EAarB1I,GAAQ6C,EAAiBd,GAOrB3C,QAAS,SAAoB4C,EAASmM,EAAYC,GAC9C,GAAIV,GAhuBW,SAguBAU,EAAUlP,YACrBmP,EA/tBW,SA+tBAD,EAAUlP,WAEzB,MAAImP,GAAWD,EAAUE,oBAAsBF,EAAUE,mBAAmBC,kBAA5E,CAKA,GAAIb,EACAxF,EAActgE,KAAKP,KAAM8mE,EAAYC,OAClC,IAAIC,GAAW5F,EAAiB7gE,KAAKP,KAAM+mE,GAC9C,MAGJ/mE,MAAKmH,SAASwzD,EAASmM,EAAYC,KAMvC31B,QAAS,WACLpxC,KAAKygE,MAAMrvB,UACXpxC,KAAK0gE,MAAMtvB,YA0CnB,IAAI+1B,IAAwBpN,EAAS2K,GAAar4D,MAAO,eACrD+6D,GAAsBD,KAA0BtjE,EAIhDk+D,GAAoB,OACpBD,GAA4B,eAC5BL,GAAoB,OACpBE,GAAqB,QACrBE,GAAqB,QACrBwF,GA4IJ,WACI,IAAKD,GACD,OAAO,CAEX,IAAIE,MACAC,EAAc/+D,EAAOg/D,KAAOh/D,EAAOg/D,IAAIC,QAO3C,QANC,OAAQ,eAAgB,QAAS,QAAS,cAAe,QAAQvgE,QAAQ,SAASyQ;wFAI/E2vD,EAAS3vD,IAAO4vD,GAAc/+D,EAAOg/D,IAAIC,SAAS,eAAgB9vD,KAE/D2vD,IA1IXhG,GAAYjvD,WAKR0M,IAAK,SAASxc,GAzBS,WA2BfA,IACAA,EAAQvC,KAAK0nE,WAGbN,IAAuBpnE,KAAK26D,QAAQ9yD,QAAQwE,OAASg7D,GAAiB9kE,KACtEvC,KAAK26D,QAAQ9yD,QAAQwE,MAAM86D,IAAyB5kE,GAExDvC,KAAKwhE,QAAUj/D,EAAMwlB,cAAczb,QAMvC4lC,OAAQ,WACJlyC,KAAK+e,IAAI/e,KAAK26D,QAAQ3sD,QAAQ+1D,cAOlC2D,QAAS,WACL,GAAIlG,KAMJ,OALAhJ,GAAKx4D,KAAK26D,QAAQgJ,YAAa,SAASd,GAChC5J,EAAS4J,EAAW70D,QAAQ+sD,QAAS8H,MACrCrB,EAAUA,EAAQ36D,OAAOg8D,EAAW8E,qBAGrCpG,EAAkBC,EAAQz6D,KAAK,OAO1C6gE,gBAAiB,SAAS7mD,GACtB,GAAIk2C,GAAWl2C,EAAMk2C,SACjBr3B,EAAY7e,EAAMo8C,eAGtB,IAAIn9D,KAAK26D,QAAQwB,QAAQ0L,UAErB,WADA5Q,GAAS3uD,gBAIb,IAAIk5D,GAAUxhE,KAAKwhE,QACfsG,EAAUrO,EAAM+H,EAASC,MAAuB4F,GAAiB5F,IACjEG,EAAUnI,EAAM+H,EAASK,MAAwBwF,GAAiBxF,IAClEH,EAAUjI,EAAM+H,EAASG,MAAwB0F,GAAiB1F,GAEtE,IAAImG,EAAS,CAGT,GAAIC,GAAyC,IAA1BhnD,EAAM66C,SAASh4D,OAC9BokE,EAAgBjnD,EAAMu5B,SAAW,EACjC2tB,EAAiBlnD,EAAM+7C,UAAY,GAEvC,IAAIiL,GAAgBC,GAAiBC,EACjC,OAIR,MAAIvG,IAAWE,MAAf,GAKIkG,GACClG,GAAWhiC,EAAYmlC,IACvBrD,GAAW9hC,EAAYolC,GACjBhlE,KAAKkoE,WAAWjR,OAH3B,IAWJiR,WAAY,SAASjR,GACjBj3D,KAAK26D,QAAQwB,QAAQ0L,WAAY,EACjC5Q,EAAS3uD,kBAiFjB,IAAI45D,IAAiB,EACjBO,GAAc,EACdD,GAAgB,EAChBD,GAAc,EACd4F,GAAmB5F,GACnBD,GAAkB,EAyBtBN,GAAW3vD,WAKP4lB,YAOAlZ,IAAK,SAAS/Q,GAKV,MAJA0hD,IAAO1vD,KAAKgO,QAASA,GAGrBhO,KAAK26D,SAAW36D,KAAK26D,QAAQoJ,YAAY7xB,SAClClyC,MAQXikE,cAAe,SAASrB,GACpB,GAAIrK,EAAeqK,EAAiB,gBAAiB5iE,MACjD,MAAOA,KAGX,IAAImiE,GAAeniE,KAAKmiE,YAMxB,OALAS,GAAkBD,GAA6BC,EAAiB5iE,MAC3DmiE,EAAaS,EAAgBviE,MAC9B8hE,EAAaS,EAAgBviE,IAAMuiE,EACnCA,EAAgBqB,cAAcjkE,OAE3BA,MAQXooE,kBAAmB,SAASxF,GACxB,MAAIrK,GAAeqK,EAAiB,oBAAqB5iE,MAC9CA,MAGX4iE,EAAkBD,GAA6BC,EAAiB5iE,YACzDA,MAAKmiE,aAAaS,EAAgBviE,IAClCL,OAQXkkE,eAAgB,SAAStB,GACrB,GAAIrK,EAAeqK,EAAiB,iBAAkB5iE,MAClD,MAAOA,KAGX,IAAIoiE,GAAcpiE,KAAKoiE,WAMvB,OALAQ,GAAkBD,GAA6BC,EAAiB5iE,OACjB,IAA3C25D,EAAQyI,EAAaQ,KACrBR,EAAYv9D,KAAK+9D,GACjBA,EAAgBsB,eAAelkE,OAE5BA,MAQXqoE,mBAAoB,SAASzF,GACzB,GAAIrK,EAAeqK,EAAiB,qBAAsB5iE,MACtD,MAAOA,KAGX4iE,GAAkBD,GAA6BC,EAAiB5iE,KAChE,IAAI+S,GAAQ4mD,EAAQ35D,KAAKoiE,YAAaQ,EAItC,OAHI7vD,IAAS,GACT/S,KAAKoiE,YAAYvqC,OAAO9kB,EAAO,GAE5B/S,MAOXsoE,mBAAoB,WAChB,MAAOtoE,MAAKoiE,YAAYx+D,OAAS,GAQrC2kE,iBAAkB,SAAS3F,GACvB,QAAS5iE,KAAKmiE,aAAaS,EAAgBviE,KAQ/C6sD,KAAM,SAASnsC,GAIX,QAASmsC,GAAK3kD,GACVoO,EAAKgkD,QAAQzN,KAAK3kD,EAAOwY,GAJ7B,GAAIpK,GAAO3W,KACPiiE,EAAQjiE,KAAKiiE,KAObA,GAAQM,IACRrV,EAAKv2C,EAAK3I,QAAQzF,MAAQ85D,GAASJ,IAGvC/U,EAAKv2C,EAAK3I,QAAQzF,OAEdwY,EAAMynD,iBACNtb,EAAKnsC,EAAMynD,iBAIXvG,GAASM,IACTrV,EAAKv2C,EAAK3I,QAAQzF,MAAQ85D,GAASJ,KAU3CwG,QAAS,SAAS1nD,GACd,GAAI/gB,KAAK0oE,UACL,MAAO1oE,MAAKktD,KAAKnsC,EAGrB/gB,MAAKiiE,MA7KM,IAoLfyG,QAAS,WAEL,IADA,GAAI3kE,GAAI,EACDA,EAAI/D,KAAKoiE,YAAYx+D,QAAQ,CAChC,KAAM5D,KAAKoiE,YAAYr+D,GAAGk+D,OAvLnB,GAuL2CC,KAC9C,OAAO,CAEXn+D,KAEJ,OAAO,GAOXs4D,UAAW,SAAS0K,GAGhB,GAAI4B,GAAiBjZ,MAAWqX,EAGhC,KAAK9N,EAASj5D,KAAKgO,QAAQ+sD,QAAS/6D,KAAM2oE,IAGtC,MAFA3oE,MAAK4oE,aACL5oE,KAAKiiE,MA3ME,GAgNPjiE,MAAKiiE,OAASkG,GAAmB7F,GAhN1B,MAiNPtiE,KAAKiiE,MAAQC,IAGjBliE,KAAKiiE,MAAQjiE,KAAK6oE,QAAQF,GAItB3oE,KAAKiiE,OAASQ,GAAcD,GAAgBD,GAAcD,KAC1DtiE,KAAKyoE,QAAQE,IAWrBE,QAAS,SAAS9B,KAOlBY,eAAgB,aAOhBiB,MAAO,cA8DXjQ,EAAQmK,GAAgBd,GAKpB/pC,UAKI2jC,SAAU,GASdkN,SAAU,SAAS/nD,GACf,GAAIgoD,GAAiB/oE,KAAKgO,QAAQ4tD,QAClC,OAA0B,KAAnBmN,GAAwBhoD,EAAM66C,SAASh4D,SAAWmlE,GAS7DF,QAAS,SAAS9nD,GACd,GAAIkhD,GAAQjiE,KAAKiiE,MACbjK,EAAYj3C,EAAMi3C,UAElBgR,EAAe/G,GAASQ,GAAcD,IACtC//C,EAAUziB,KAAK8oE,SAAS/nD,EAG5B,OAAIioD,KAAiBhR,EAAYkE,KAAiBz5C,GACvCw/C,EAAQK,GACR0G,GAAgBvmD,EACnBu1C,EAAYiE,GACLgG,EAAQM,GACNN,EAAQQ,GAGdR,EAAQO,GAFJC,GA5VJ,MAiXnB9J,EAAQoK,GAAeD,IAKnB7qC,UACI1vB,MAAO,MACP29B,UAAW,GACX01B,SAAU,EACVh8B,UAAWqlC,IAGf0C,eAAgB,WACZ,GAAI/nC,GAAY5/B,KAAKgO,QAAQ4xB,UACzB4hC,IAOJ,OANI5hC,GAAYmlC,IACZvD,EAAQ38D,KAAKg9D,IAEbjiC,EAAYolC,IACZxD,EAAQ38D,KAAK88D,IAEVH,GAGXyH,cAAe,SAASloD,GACpB,GAAI/S,GAAUhO,KAAKgO,QACfk7D,GAAW,EACX5uB,EAAWv5B,EAAMu5B,SACjB1a,EAAY7e,EAAM6e,UAClB7K,EAAIhU,EAAMs8C,OACV1uC,EAAI5N,EAAMu8C,MAed,OAZM19B,GAAY5xB,EAAQ4xB,YAClB5xB,EAAQ4xB,UAAYmlC,IACpBnlC,EAAmB,IAAN7K,EAAWypC,GAAkBzpC,EAAI,EAAK0pC,GAAiBC,GACpEwK,EAAWn0C,GAAK/0B,KAAKgjE,GACrB1oB,EAAW73C,KAAKwiB,IAAIlE,EAAMs8C,UAE1Bz9B,EAAmB,IAANjR,EAAW6vC,GAAkB7vC,EAAI,EAAKgwC,GAAeC,GAClEsK,EAAWv6C,GAAK3uB,KAAKijE,GACrB3oB,EAAW73C,KAAKwiB,IAAIlE,EAAMu8C,UAGlCv8C,EAAM6e,UAAYA,EACXspC,GAAY5uB,EAAWtsC,EAAQk4B,WAAatG,EAAY5xB,EAAQ4xB,WAG3EkpC,SAAU,SAAS/nD,GACf,MAAO+hD,IAAezwD,UAAUy2D,SAASvoE,KAAKP,KAAM+gB,KAC/C/gB,KAAKiiE,MAAQQ,MAAkBziE,KAAKiiE,MAAQQ,KAAgBziE,KAAKipE,cAAcloD,KAGxFmsC,KAAM,SAASnsC,GAEX/gB,KAAKgjE,GAAKjiD,EAAMs8C,OAChBr9D,KAAKijE,GAAKliD,EAAMu8C,MAEhB,IAAI19B,GAAY8iC,GAAa3hD,EAAM6e,UAE/BA,KACA7e,EAAMynD,gBAAkBxoE,KAAKgO,QAAQzF,MAAQq3B,GAEjD5/B,KAAKg5D,OAAO9L,KAAK3sD,KAAKP,KAAM+gB,MAcpC43C,EAAQuK,GAAiBJ,IAKrB7qC,UACI1vB,MAAO,QACP29B,UAAW,EACX01B,SAAU,GAGd+L,eAAgB,WACZ,OAAQlG,KAGZqH,SAAU,SAAS/nD,GACf,MAAO/gB,MAAKg5D,OAAO8P,SAASvoE,KAAKP,KAAM+gB,KAClCte,KAAKwiB,IAAIlE,EAAMve,MAAQ,GAAKxC,KAAKgO,QAAQk4B,WAAalmC,KAAKiiE,MAAQQ,KAG5EvV,KAAM,SAASnsC,GACX,GAAoB,IAAhBA,EAAMve,MAAa,CACnB,GAAI2mE,GAAQpoD,EAAMve,MAAQ,EAAI,KAAO,KACrCue,GAAMynD,gBAAkBxoE,KAAKgO,QAAQzF,MAAQ4gE,EAEjDnpE,KAAKg5D,OAAO9L,KAAK3sD,KAAKP,KAAM+gB,MAiBpC43C,EAAQwK,GAAiBnB,GAKrB/pC,UACI1vB,MAAO,QACPqzD,SAAU,EACVx7B,KAAM,IACN8F,UAAW,GAGfyhC,eAAgB,WACZ,OAAQ5F,KAGZ8G,QAAS,SAAS9nD,GACd,GAAI/S,GAAUhO,KAAKgO,QACfo7D,EAAgBroD,EAAM66C,SAASh4D,SAAWoK,EAAQ4tD,SAClDyN,EAAgBtoD,EAAMu5B,SAAWtsC,EAAQk4B,UACzCojC,EAAYvoD,EAAM+7C,UAAY9uD,EAAQoyB,IAM1C,IAJApgC,KAAKqjE,OAAStiD,GAITsoD,IAAkBD,GAAkBroD,EAAMi3C,WAAaiE,GAAYC,MAAkBoN,EACtFtpE,KAAK4oE,YACF,IAAI7nD,EAAMi3C,UAAY+D,GACzB/7D,KAAK4oE,QACL5oE,KAAKojE,OAAShL,EAAkB,WAC5Bp4D,KAAKiiE,MAAQkG,GACbnoE,KAAKyoE,WACNz6D,EAAQoyB,KAAMpgC,UACd,IAAI+gB,EAAMi3C,UAAYiE,GACzB,MAAOkM,GAEX,OA7gBW,KAghBfS,MAAO,WACHxzB,aAAap1C,KAAKojE,SAGtBlW,KAAM,SAASnsC,GACP/gB,KAAKiiE,QAAUkG,KAIfpnD,GAAUA,EAAMi3C,UAAYiE,GAC5Bj8D,KAAK26D,QAAQzN,KAAKltD,KAAKgO,QAAQzF,MAAQ,KAAMwY,IAE7C/gB,KAAKqjE,OAAOxG,UAAYp2C,KACxBzmB,KAAK26D,QAAQzN,KAAKltD,KAAKgO,QAAQzF,MAAOvI,KAAKqjE,aAevD1K,EAAQ2K,GAAkBR,IAKtB7qC,UACI1vB,MAAO,SACP29B,UAAW,EACX01B,SAAU,GAGd+L,eAAgB,WACZ,OAAQlG,KAGZqH,SAAU,SAAS/nD,GACf,MAAO/gB,MAAKg5D,OAAO8P,SAASvoE,KAAKP,KAAM+gB,KAClCte,KAAKwiB,IAAIlE,EAAM68C,UAAY59D,KAAKgO,QAAQk4B,WAAalmC,KAAKiiE,MAAQQ,OAc/E9J,EAAQ4K,GAAiBT,IAKrB7qC,UACI1vB,MAAO,QACP29B,UAAW,GACXg4B,SAAU,GACVt+B,UAAWmlC,GAAuBC,GAClCpJ,SAAU,GAGd+L,eAAgB,WACZ,MAAO5E,IAAc1wD,UAAUs1D,eAAepnE,KAAKP,OAGvD8oE,SAAU,SAAS/nD,GACf,GACIm9C,GADAt+B,EAAY5/B,KAAKgO,QAAQ4xB,SAW7B,OARIA,IAAamlC,GAAuBC,IACpC9G,EAAWn9C,EAAMw8C,gBACV39B,EAAYmlC,GACnB7G,EAAWn9C,EAAM08C,iBACV79B,EAAYolC,KACnB9G,EAAWn9C,EAAM28C,kBAGd19D,KAAKg5D,OAAO8P,SAASvoE,KAAKP,KAAM+gB,IACnC6e,EAAY7e,EAAMo8C,iBAClBp8C,EAAMu5B,SAAWt6C,KAAKgO,QAAQk4B,WAC9BnlB,EAAM+8C,aAAe99D,KAAKgO,QAAQ4tD,UAClC32C,GAAIi5C,GAAYl+D,KAAKgO,QAAQkwD,UAAYn9C,EAAMi3C,UAAYiE,IAGnE/O,KAAM,SAASnsC,GACX,GAAI6e,GAAY8iC,GAAa3hD,EAAMo8C,gBAC/Bv9B,IACA5/B,KAAK26D,QAAQzN,KAAKltD,KAAKgO,QAAQzF,MAAQq3B,EAAW7e,GAGtD/gB,KAAK26D,QAAQzN,KAAKltD,KAAKgO,QAAQzF,MAAOwY,MA2B9C43C,EAAQ6K,GAAexB,GAKnB/pC,UACI1vB,MAAO,MACPqzD,SAAU,EACV2N,KAAM,EACN7W,SAAU,IACVtyB,KAAM,IACN8F,UAAW,EACXsjC,aAAc,IAGlB7B,eAAgB,WACZ,OAAQ7F,KAGZ+G,QAAS,SAAS9nD,GACd,GAAI/S,GAAUhO,KAAKgO,QAEfo7D,EAAgBroD,EAAM66C,SAASh4D,SAAWoK,EAAQ4tD,SAClDyN,EAAgBtoD,EAAMu5B,SAAWtsC,EAAQk4B,UACzCujC,EAAiB1oD,EAAM+7C,UAAY9uD,EAAQoyB,IAI/C,IAFApgC,KAAK4oE,QAEA7nD,EAAMi3C,UAAY+D,IAAgC,IAAf/7D,KAAKq0C,MACzC,MAAOr0C,MAAK0pE,aAKhB,IAAIL,GAAiBI,GAAkBL,EAAe,CAClD,GAAIroD,EAAMi3C,WAAaiE,GACnB,MAAOj8D,MAAK0pE,aAGhB,IAAIC,IAAgB3pE,KAAKyjE,OAAS1iD,EAAM87C,UAAY78D,KAAKyjE,MAAQz1D,EAAQ0kD,SACrEkX,GAAiB5pE,KAAK0jE,SAAWzG,EAAYj9D,KAAK0jE,QAAS3iD,EAAM46B,QAAU3tC,EAAQw7D,YAEvFxpE,MAAKyjE,MAAQ1iD,EAAM87C,UACnB78D,KAAK0jE,QAAU3iD,EAAM46B,OAEhBiuB,GAAkBD,EAGnB3pE,KAAKq0C,OAAS,EAFdr0C,KAAKq0C,MAAQ,EAKjBr0C,KAAKqjE,OAAStiD,CAKd,IAAiB,IADF/gB,KAAKq0C,MAAQrmC,EAAQu7D,KAIhC,MAAKvpE,MAAKsoE,sBAGNtoE,KAAKojE,OAAShL,EAAkB,WAC5Bp4D,KAAKiiE,MAAQkG,GACbnoE,KAAKyoE,WACNz6D,EAAQ0kD,SAAU1yD,MACdyiE,IANA0F,GAUnB,MAttBW,KAytBfuB,YAAa,WAIT,MAHA1pE,MAAKojE,OAAShL,EAAkB,WAC5Bp4D,KAAKiiE,MA3tBE,IA4tBRjiE,KAAKgO,QAAQ0kD,SAAU1yD,MA5tBf,IAguBf4oE,MAAO,WACHxzB,aAAap1C,KAAKojE,SAGtBlW,KAAM,WACEltD,KAAKiiE,OAASkG,KACdnoE,KAAKqjE,OAAOwG,SAAW7pE,KAAKq0C,MAC5Br0C,KAAK26D,QAAQzN,KAAKltD,KAAKgO,QAAQzF,MAAOvI,KAAKqjE,YAoBvDr0B,GAAO86B,QAAU,QAMjB96B,GAAO/W,UAOH8xC,WAAW,EAQXhG,YAl9BuB,UAw9BvBhJ,QAAQ,EASRH,YAAa,KAObM,WAAY,KAOZ0I,SAEKN,IAAmBvI,QAAQ,KAC3BmI,IAAkBnI,QAAQ,IAAS,YACnCwI,IAAkB3jC,UAAWmlC,MAC7BhC,IAAgBnjC,UAAWmlC,KAAwB,WACnDvB,KACAA,IAAgBj7D,MAAO,YAAaghE,KAAM,IAAK,SAC/CpG,KAQLgB,UAMI6F,WAAY,OAOZC,YAAa,OASbC,aAAc,OAOdC,eAAgB,OAOhBC,SAAU,OAQVC,kBAAmB,iBAoC3B3S,IAAQrlD,WAMJ0M,IAAK,SAAS/Q,GAaV,MAZA0hD,IAAO1vD,KAAKgO,QAASA,GAGjBA,EAAQ+1D,aACR/jE,KAAK+jE,YAAY7xB,SAEjBlkC,EAAQ4sD,cAER56D,KAAK+gB,MAAMqwB,UACXpxC,KAAK+gB,MAAMpY,OAASqF,EAAQ4sD,YAC5B56D,KAAK+gB,MAAMi6C,QAERh7D,MASXqjD,KAAM,SAASinB,GACXtqE,KAAKm8D,QAAQhF,QAAUmT,EA5Db,EADP,GAsEPjO,UAAW,SAAS0K,GAChB,GAAI5K,GAAUn8D,KAAKm8D,OACnB,KAAIA,EAAQhF,QAAZ,CAKAn3D,KAAK+jE,YAAY6D,gBAAgBb,EAEjC,IAAIlE,GACAc,EAAc3jE,KAAK2jE,YAKnB4G,EAAgBpO,EAAQoO,gBAIvBA,GAAkBA,GAAiBA,EAActI,MAAQkG,MAC1DoC,EAAgBpO,EAAQoO,cAAgB,KAI5C,KADA,GAAIxmE,GAAI,EACDA,EAAI4/D,EAAY//D,QACnBi/D,EAAac,EAAY5/D,GA9FnB,IAsGFo4D,EAAQhF,SACHoT,GAAiB1H,GAAc0H,IAChC1H,EAAW0F,iBAAiBgC,GAGhC1H,EAAW+F,QAFX/F,EAAWxG,UAAU0K,IAOpBwD,GAAiB1H,EAAWZ,OAASQ,GAAcD,GAAgBD,MACpEgI,EAAgBpO,EAAQoO,cAAgB1H,GAE5C9+D,MASR0T,IAAK,SAASorD,GACV,GAAIA,YAAsBb,GACtB,MAAOa,EAIX,KAAK,GADDc,GAAc3jE,KAAK2jE,YACd5/D,EAAI,EAAGA,EAAI4/D,EAAY//D,OAAQG,IACpC,GAAI4/D,EAAY5/D,GAAGiK,QAAQzF,OAASs6D,EAChC,MAAOc,GAAY5/D,EAG3B,OAAO,OASX0sB,IAAK,SAASoyC,GACV,GAAItK,EAAesK,EAAY,MAAO7iE,MAClC,MAAOA,KAIX,IAAIwqE,GAAWxqE,KAAKyX,IAAIorD,EAAW70D,QAAQzF,MAS3C,OARIiiE,IACAxqE,KAAK0zC,OAAO82B,GAGhBxqE,KAAK2jE,YAAY9+D,KAAKg+D,GACtBA,EAAWlI,QAAU36D,KAErBA,KAAK+jE,YAAY7xB,SACV2wB,GAQXnvB,OAAQ,SAASmvB,GACb,GAAItK,EAAesK,EAAY,SAAU7iE,MACrC,MAAOA,KAMX,IAHA6iE,EAAa7iE,KAAKyX,IAAIorD,GAGN,CACZ,GAAIc,GAAc3jE,KAAK2jE,YACnB5wD,EAAQ4mD,EAAQgK,EAAad,IAElB,IAAX9vD,IACA4wD,EAAY9rC,OAAO9kB,EAAO,GAC1B/S,KAAK+jE,YAAY7xB,UAIzB,MAAOlyC,OASXqxC,GAAI,SAAS0lB,EAAQgB,GACjB,GAAIhB,IAAWlzD,GAGXk0D,IAAYl0D,EAAhB,CAIA,GAAIggE,GAAW7jE,KAAK6jE,QAKpB,OAJArL,GAAKe,EAASxC,GAAS,SAASxuD,GAC5Bs7D,EAASt7D,GAASs7D,EAASt7D,OAC3Bs7D,EAASt7D,GAAO1D,KAAKkzD,KAElB/3D,OASXwxC,IAAK,SAASulB,EAAQgB,GAClB,GAAIhB,IAAWlzD,EAAf,CAIA,GAAIggE,GAAW7jE,KAAK6jE,QAQpB,OAPArL,GAAKe,EAASxC,GAAS,SAASxuD,GACvBwvD,EAGD8L,EAASt7D,IAAUs7D,EAASt7D,GAAOsvB,OAAO8hC,EAAQkK,EAASt7D,GAAQwvD,GAAU,SAFtE8L,GAASt7D,KAKjBvI,OAQXktD,KAAM,SAAS3kD,EAAOisB,GAEdx0B,KAAKgO,QAAQ+7D,WACb3F,GAAgB77D,EAAOisB,EAI3B,IAAIqvC,GAAW7jE,KAAK6jE,SAASt7D,IAAUvI,KAAK6jE,SAASt7D,GAAOoC,OAC5D,IAAKk5D,GAAaA,EAASjgE,OAA3B,CAIA4wB,EAAKvvB,KAAOsD,EACZisB,EAAKlsB,eAAiB,WAClBksB,EAAKyiC,SAAS3uD,iBAIlB,KADA,GAAIvE,GAAI,EACDA,EAAI8/D,EAASjgE,QAChBigE,EAAS9/D,GAAGywB,GACZzwB,MAQRqtC,QAAS,WACLpxC,KAAK6H,SAAWm8D,GAAehkE,MAAM,GAErCA,KAAK6jE,YACL7jE,KAAKm8D,WACLn8D,KAAK+gB,MAAMqwB,UACXpxC,KAAK6H,QAAU,OAyCvB6nD,GAAO1gB,IACH+sB,YAAaA,GACbuE,WAAYA,GACZrE,UAAWA,GACXC,aAAcA,GAEdgG,eAAgBA,GAChBO,YAAaA,GACbD,cAAeA,GACfD,YAAaA,GACb4F,iBAAkBA,GAClB7F,gBAAiBA,GACjBmI,aAlrCe,GAorCfjM,eAAgBA,GAChBC,eAAgBA,GAChBC,gBAAiBA,GACjBC,aAAcA,GACdC,eAAgBA,GAChBmG,qBAAsBA,GACtBC,mBAAoBA,GACpBC,cAAeA,GAEfvN,QAASA,GACTgD,MAAOA,EACP4G,YAAaA,EAEbhG,WAAYA,EACZG,WAAYA,EACZL,kBAAmBA,EACnBI,gBAAiBA,EACjBgE,iBAAkBA,EAElBwC,WAAYA,EACZc,eAAgBA,GAChB4H,IAAKlH,GACLmH,IAAK5H,GACL6H,MAAOrH,GACPsH,MAAO3H,GACP4H,OAAQxH,GACRyH,MAAO5H,GAEP9xB,GAAIioB,EACJ9nB,IAAKgoB,EACLhB,KAAMA,EACNqM,MAAOA,GACPjkE,OAAQA,GACR8uD,OAAQA,GACRiJ,QAASA,EACTL,OAAQA,EACRyB,SAAUA,SAKsB,KAAXvxD,EAAyBA,EAA0B,mBAATmO,MAAuBA,SAC/Eq4B,OAASA,IAGd4nB,EAAgC,WAC9B,MAAO5nB,KACTzuC,KAAKX,EAASM,EAAqBN,EAASC,MAA2CgE,IAAchE,EAAOD,QAAUg3D,IAOzHpuD,OAAQ0H,WAKP,SAAUrQ,EAAQD,EAASM,GAE/B,GAAIw2D,GAAgCC,EAA8BC,GAOjE,SAAUl3D,EAAMC,GAGXg3D,KAAmCD,EAAiC,MAAsP7yD,MAA3O+yD,EAA2E,kBAAnCF,GAAiDA,EAA+BpgD,MAAM1W,EAAS+2D,GAAiCD,KAAiF72D,EAAOD,QAAUg3D,IAU7V52D,EAAM,WAEN,QAASivC,GAASjhC,GAChB,GAOIjK,GAPAuE,EAAiB0F,GAAWA,EAAQ1F,iBAAkB,EAEtD4tC,EAAYloC,GAAWA,EAAQkoC,WAAa1tC,OAE5CwiE,KACAC,GAAUC,WAAYC,UACtB9pE,IAIJ,KAAK0C,EAAI,GAAIA,GAAK,IAAKA,IAAM1C,EAAMsB,OAAOyoE,aAAarnE,KAAOuwB,KAAWvwB,EAAI,GAAV,GAAesgC,OAAO,EAEzF,KAAKtgC,EAAI,GAAIA,GAAK,GAAIA,IAAM1C,EAAMsB,OAAOyoE,aAAarnE,KAAOuwB,KAAKvwB,EAAGsgC,OAAO,EAE5E,KAAKtgC,EAAI,EAAIA,GAAK,EAAKA,IAAM1C,EAAM,GAAK0C,IAAMuwB,KAAK,GAAKvwB,EAAGsgC,OAAO,EAElE,KAAKtgC,EAAI,EAAIA,GAAK,GAAMA,IAAM1C,EAAM,IAAM0C,IAAMuwB,KAAK,IAAMvwB,EAAGsgC,OAAO,EAErE,KAAKtgC,EAAI,EAAIA,GAAK,EAAKA,IAAM1C,EAAM,MAAQ0C,IAAMuwB,KAAK,GAAKvwB,EAAGsgC,OAAO,EAGrEhjC,GAAM,SAAWizB,KAAK,IAAK+P,OAAO,GAClChjC,EAAM,SAAWizB,KAAK,IAAK+P,OAAO,GAClChjC,EAAM,SAAWizB,KAAK,IAAK+P,OAAO,GAClChjC,EAAM,SAAWizB,KAAK,IAAK+P,OAAO,GAClChjC,EAAM,SAAWizB,KAAK,IAAK+P,OAAO,GAElChjC,EAAY,MAAMizB,KAAK,GAAI+P,OAAO,GAClChjC,EAAU,IAAQizB,KAAK,GAAI+P,OAAO,GAClChjC,EAAa,OAAKizB,KAAK,GAAI+P,OAAO,GAClChjC,EAAY,MAAMizB,KAAK,GAAI+P,OAAO,GAElChjC,EAAa,OAAKizB,KAAK,GAAI+P,OAAO,GAClChjC,EAAa,OAAKizB,KAAK,GAAI+P,OAAO,GAClChjC,EAAa,OAAKizB,KAAK,GAAI+P,UAAOxgC,IAClCxC,EAAW,KAAOizB,KAAK,GAAI+P,OAAO,GAClChjC,EAAiB,WAAKizB,KAAK,EAAG+P,OAAO,GACrChjC,EAAW,KAAWizB,KAAK,EAAG+P,OAAO,GACrChjC,EAAY,MAAUizB,KAAK,GAAI+P,OAAO,GACtChjC,EAAW,KAAWizB,KAAK,GAAI+P,OAAO,GACtChjC,EAAc,QAAQizB,KAAK,GAAI+P,OAAO,GACtChjC,EAAc,QAAQizB,KAAK,GAAI+P,OAAO,GACtChjC,EAAgB,UAAMizB,KAAK,GAAI+P,OAAO,GAEtChjC,EAAM,MAAYizB,KAAK,IAAK+P,OAAO,GACnChjC,EAAM,MAAYizB,KAAK,IAAK+P,OAAO,GACnChjC,EAAM,MAAYizB,KAAK,IAAK+P,OAAO,GACnChjC,EAAM,MAAYizB,KAAK,IAAK+P,OAAO,EAInC,IAAIgnC,GAAO,SAAS9iE,GAAQ+iE,EAAY/iE,EAAM,YAC1CgjE,EAAK,SAAShjE,GAAQ+iE,EAAY/iE,EAAM,UAGxC+iE,EAAc,SAAS/iE,EAAMtD,GAC/B,OAAoCpB,KAAhConE,EAAOhmE,GAAMsD,EAAMijE,SAAwB,CAE7C,IAAK,GADDC,GAAQR,EAAOhmE,GAAMsD,EAAMijE,SACtBznE,EAAI,EAAGA,EAAI0nE,EAAM7nE,OAAQG,QACTF,KAAnB4nE,EAAM1nE,GAAGsgC,MACXonC,EAAM1nE,GAAG0D,GAAGc,GAEa,GAAlBkjE,EAAM1nE,GAAGsgC,OAAmC,GAAlB97B,EAAMmjE,SACvCD,EAAM1nE,GAAG0D,GAAGc,GAEa,GAAlBkjE,EAAM1nE,GAAGsgC,OAAoC,GAAlB97B,EAAMmjE,UACxCD,EAAM1nE,GAAG0D,GAAGc,EAIM,IAAlBD,GACFC,EAAMD,kBA4FZ,OAtFA0iE,GAAiB1T,KAAO,SAAS/vD,EAAKJ,EAAUlC,GAI9C,OAHapB,KAAToB,IACFA,EAAO,eAEUpB,KAAfxC,EAAMkG,GACR,KAAM,IAAIlD,OAAM,oBAAsBkD,OAEF1D,KAAlConE,EAAOhmE,GAAM5D,EAAMkG,GAAK+sB,QAC1B22C,EAAOhmE,GAAM5D,EAAMkG,GAAK+sB,UAE1B22C,EAAOhmE,GAAM5D,EAAMkG,GAAK+sB,MAAMzvB,MAAM4C,GAAGN,EAAUk9B,MAAMhjC,EAAMkG,GAAK88B,SAKpE2mC,EAAiBW,QAAU,SAASxkE,EAAUlC,OAC/BpB,KAAToB,IACFA,EAAO,UAET,KAAK,GAAIsC,KAAOlG,GACVA,EAAMiC,eAAeiE,IACvByjE,EAAiB1T,KAAK/vD,EAAIJ,EAASlC,IAMzC+lE,EAAiBY,OAAS,SAASrjE,GACjC,IAAK,GAAIhB,KAAOlG,GACd,GAAIA,EAAMiC,eAAeiE,GAAM,CAC7B,GAAsB,GAAlBgB,EAAMmjE,UAAwC,GAApBrqE,EAAMkG,GAAK88B,OAAiB97B,EAAMijE,SAAWnqE,EAAMkG,GAAK+sB,KACpF,MAAO/sB,EAEJ,IAAsB,GAAlBgB,EAAMmjE,UAAyC,GAApBrqE,EAAMkG,GAAK88B,OAAkB97B,EAAMijE,SAAWnqE,EAAMkG,GAAK+sB,KAC3F,MAAO/sB,EAEJ,IAAIgB,EAAMijE,SAAWnqE,EAAMkG,GAAK+sB,MAAe,SAAP/sB,EAC3C,MAAOA,GAIb,MAAO,wCAITyjE,EAAiBa,OAAS,SAAStkE,EAAKJ,EAAUlC,GAIhD,OAHapB,KAAToB,IACFA,EAAO,eAEUpB,KAAfxC,EAAMkG,GACR,KAAM,IAAIlD,OAAM,oBAAsBkD,EAExC,QAAiB1D,KAAbsD,EAAwB,CAC1B,GAAI2kE,MACAL,EAAQR,EAAOhmE,GAAM5D,EAAMkG,GAAK+sB,KACpC,QAAczwB,KAAV4nE,EACF,IAAK,GAAI1nE,GAAI,EAAGA,EAAI0nE,EAAM7nE,OAAQG,IAC1B0nE,EAAM1nE,GAAG0D,IAAMN,GAAYskE,EAAM1nE,GAAGsgC,OAAShjC,EAAMkG,GAAK88B,OAC5DynC,EAAYjnE,KAAKomE,EAAOhmE,GAAM5D,EAAMkG,GAAK+sB,MAAMvwB,GAIrDknE,GAAOhmE,GAAM5D,EAAMkG,GAAK+sB,MAAQw3C,MAGhCb,GAAOhmE,GAAM5D,EAAMkG,GAAK+sB,UAK5B02C,EAAiBpC,MAAQ,WACvBqC,GAAUC,WAAYC,WAIxBH,EAAiB55B,QAAU,WACzB65B,GAAUC,WAAYC,UACtBj1B,EAAU9tC,oBAAoB,UAAWijE,GAAM,GAC/Cn1B,EAAU9tC,oBAAoB,QAASmjE,GAAI,IAI7Cr1B,EAAUtuC,iBAAiB,UAAUyjE,GAAK,GAC1Cn1B,EAAUtuC,iBAAiB,QAAQ2jE,GAAG,GAG/BP,EAGT,MAAO/7B,MAQL,SAAUpvC,EAAQD,EAASM,GAK/BN,EAAQe,KAAOT,EAAoB,GACnCN,EAAQwuC,QAAUluC,EAAoB,IAGtCN,EAAQyuC,QAAUnuC,EAAoB,IACtCN,EAAQ0uC,SAAWpuC,EAAoB,IACvCN,EAAQ2uC,MAAQruC,EAAoB,IAGpCN,EAAQmsE,SAAW7rE,EAAoB,KACvCN,EAAQosE,QAAU9rE,EAAoB,KACtCN,EAAQqsE,UACNC,KAAMhsE,EAAoB,KAC1BisE,SAAUjsE,EAAoB,KAC9Bq3C,MAAOr3C,EAAoB,KAC3BwlB,MAAOxlB,EAAoB,KAC3BksE,SAAUlsE,EAAoB,KAE9BmsE,YACEp6B,OACEq6B,KAAMpsE,EAAoB,KAC1BqsE,eAAgBrsE,EAAoB,KACpCssE,QAAStsE,EAAoB,KAC7BusE,UAAWvsE,EAAoB,KAC/BwsE,UAAWxsE,EAAoB,MAGjCysE,gBAAiBzsE,EAAoB,KACrC0sE,UAAW1sE,EAAoB,KAC/B2sE,YAAa3sE,EAAoB,KACjC4sE,WAAY5sE,EAAoB,KAChC6sE,SAAU7sE,EAAoB,KAC9B8sE,UAAW9sE,EAAoB,KAC/B+sE,WAAY/sE,EAAoB,KAChCgtE,MAAOhtE,EAAoB,KAC3BitE,QAASjtE,EAAoB,KAC7BktE,OAAQltE,EAAoB,KAC5BmtE,UAAWntE,EAAoB,KAC/BotE,SAAUptE,EAAoB,OAKlCN,EAAQ6B,OAASvB,EAAoB,IACrCN,EAAQovC,OAAS9uC,EAAoB,KACrCN,EAAQqvC,SAAW/uC,EAAoB,MAInC,SAAUL,EAAQD,EAASM,GAiC/B,QAAS6rE,GAAS71B,EAAWjE,EAAOs7B,EAAQv/D,GAE1C,KAAMhO,eAAgB+rE,IACpB,KAAM,IAAI51B,aAAY,mDAIxB,MAAMhyC,MAAMC,QAAQmpE,IAAWA,YAAkBl/B,IAAWk/B,YAAkBj/B,KAAai/B,YAAkB9oE,QAAQ,CACnH,GAAI+oE,GAAgBx/D,CACpBA,GAAUu/D,EACVA,EAASC,EAKPx/D,GAAWA,EAAQy/D,gBACrBnoD,QAAQH,KAAK,wHAGf,IAAI4sB,GAAK/xC,IAmBT,IAlBAA,KAAK0tE,gBACHnnB,MAAO,KACPC,IAAK,KACLmnB,YAAY,EACZC,aACEC,KAAM,SACNj/D,KAAM,UAERnN,OAAQA,EACR2O,MAAO,KACPC,OAAQ,KACRy9D,UAAW,KACXC,UAAW,MAEb/tE,KAAKgO,QAAUrN,EAAK+D,cAAe1E,KAAK0tE,gBAGxC1tE,KAAKmB,QAAQ+0C,IACRloC,GAAWA,OAAiC,KAAfA,EAAQggE,IAAoB,CAG5D,IAFA,GAAIC,GACAC,EAAUluE,KAAKivD,IAAIvvD,MACfuuE,GAAoBC,GAC1BD,EAAmBzlE,OAAO2lE,iBAAiBD,EAAS,MAAMtuC,UAC1DsuC,EAAUA,EAAQE,aAEpBpuE,MAAKgO,QAAQggE,IAAMC,GAAsD,OAAlCA,EAAiBlmD,kBAExD/nB,MAAKgO,QAAQggE,IAAMhgE,EAAQggE,GAG7BhuE,MAAKgO,QAAQqgE,YAAcrgE,GAAWA,EAAQqgE,YAG9CruE,KAAKqsE,cAELrsE,KAAK2Q,MACHs+C,IAAKjvD,KAAKivD,IACVqf,SAAUtuE,KAAKkE,MACfqqE,SACEl9B,GAAIrxC,KAAKqxC,GAAGimB,KAAKt3D,MACjBwxC,IAAKxxC,KAAKwxC,IAAI8lB,KAAKt3D,MACnBktD,KAAMltD,KAAKktD,KAAKoK,KAAKt3D,OAEvBwuE,eACA7tE,MACEg9D,SAAU,WACR,MAAO5rB,GAAG08B,SAASl8D,KAAK/P,OAE1B2xD,QAAS,WACP,MAAOpiB,GAAG08B,SAASl8D,KAAKA,MAG1Bm8D,SAAU38B,EAAG48B,UAAUrX,KAAKvlB,GAC5B68B,eAAgB78B,EAAG88B,gBAAgBvX,KAAKvlB,GACxC+8B,OAAQ/8B,EAAGg9B,QAAQzX,KAAKvlB,GACxBi9B,aAAcj9B,EAAGk9B,cAAc3X,KAAKvlB,KAKxC/xC,KAAKs7C,MAAQ,GAAI/D,GAAMv3C,KAAK2Q,KAAM3Q,KAAKgO,SACvChO,KAAKqsE,WAAWxnE,KAAK7E,KAAKs7C,OAC1Bt7C,KAAK2Q,KAAK2qC,MAAQt7C,KAAKs7C,MAGvBt7C,KAAKyuE,SAAW,GAAInB,GAASttE,KAAK2Q,KAAM3Q,KAAKgO,SAC7ChO,KAAKkvE,UAAY,KACjBlvE,KAAKqsE,WAAWxnE,KAAK7E,KAAKyuE,UAG1BzuE,KAAKmvE,YAAc,GAAItC,GAAY7sE,KAAK2Q,KAAM3Q,KAAKgO,SACnDhO,KAAKqsE,WAAWxnE,KAAK7E,KAAKmvE,aAG1BnvE,KAAKovE,QAAU,GAAIjC,GAAQntE,KAAK2Q,KAAM3Q,KAAKgO,SAC3ChO,KAAKqsE,WAAWxnE,KAAK7E,KAAKovE,SAE1BpvE,KAAKqvE,UAAY,KACjBrvE,KAAKsvE,WAAa,KAElBtvE,KAAKivD,IAAIvvD,KAAKkjD,QAAU,SAAUr6C,GAChCwpC,EAAGmb,KAAK,QAASnb,EAAGw9B,mBAAmBhnE,KAEzCvI,KAAKivD,IAAIvvD,KAAK8vE,WAAa,SAAUjnE,GACnCwpC,EAAGmb,KAAK,cAAenb,EAAGw9B,mBAAmBhnE,KAE/CvI,KAAKivD,IAAIvvD,KAAK+vE,cAAgB,SAAUlnE,GACtCwpC,EAAGmb,KAAK,cAAenb,EAAGw9B,mBAAmBhnE,KAE/CvI,KAAKivD,IAAIvvD,KAAKgwE,YAAc,SAAUnnE,GACpCwpC,EAAGmb,KAAK,YAAanb,EAAGw9B,mBAAmBhnE,KAEzCC,OAAO09D,cACTlmE,KAAKivD,IAAIvvD,KAAKiwE,cAAgB,SAAUpnE,GACtCwpC,EAAGmb,KAAK,YAAanb,EAAGw9B,mBAAmBhnE,KAE7CvI,KAAKivD,IAAIvvD,KAAKkwE,cAAgB,SAAUrnE,GACtCwpC,EAAGmb,KAAK,YAAanb,EAAGw9B,mBAAmBhnE,KAE7CvI,KAAKivD,IAAIvvD,KAAKmwE,YAAc,SAAUtnE,GACpCwpC,EAAGmb,KAAK,UAAWnb,EAAGw9B,mBAAmBhnE,OAG3CvI,KAAKivD,IAAIvvD,KAAKssD,YAAc,SAAUzjD,GACpCwpC,EAAGmb,KAAK,YAAanb,EAAGw9B,mBAAmBhnE,KAE7CvI,KAAKivD,IAAIvvD,KAAK0iD,YAAc,SAAU75C,GACpCwpC,EAAGmb,KAAK,YAAanb,EAAGw9B,mBAAmBhnE,KAE7CvI,KAAKivD,IAAIvvD,KAAKwsD,UAAY,SAAU3jD,GAClCwpC,EAAGmb,KAAK,UAAWnb,EAAGw9B,mBAAmBhnE,MAK7CvI,KAAK8vE,SAAU,EACf9vE,KAAKqxC,GAAG,UAAW,WACjB,GAAsB,MAAlBrxC,KAAKqvE,YAAqBrvE,KAAKgO,QAAQqgE,cACtCt8B,EAAG+9B,QAEN,GADA/9B,EAAG+9B,SAAU,MACWjsE,IAApBkuC,EAAG/jC,QAAQu4C,WAAwC1iD,IAAlBkuC,EAAG/jC,QAAQw4C,IAAkB,CAChE,OAAwB3iD,IAApBkuC,EAAG/jC,QAAQu4C,WAAwC1iD,IAAlBkuC,EAAG/jC,QAAQw4C,IAC9C,GAAIlL,GAAQvJ,EAAGg+B,cAGjB,IAAIxpB,OAA4B1iD,IAApBkuC,EAAG/jC,QAAQu4C,MAAqBxU,EAAG/jC,QAAQu4C,MAAQjL,EAAMl5C,IACjEokD,MAAwB3iD,IAAlBkuC,EAAG/jC,QAAQw4C,IAAmBzU,EAAG/jC,QAAQw4C,IAAMlL,EAAMj5C,GAC/D0vC,GAAGi+B,UAAUzpB,EAAOC,GAAOypB,WAAW,QAEtCl+B,GAAGm+B,KAAMD,WAAW,MAMtBjiE,GACFhO,KAAKgxC,WAAWhjC,GAIdu/D,GACFvtE,KAAKmwE,UAAU5C,GAIbt7B,GACFjyC,KAAKowE,SAASn+B,GAIhBjyC,KAAKqwE,UAvMP,GAEI5uE,IAFUvB,EAAoB,IACrBA,EAAoB,KACpBA,EAAoB,KAC7BS,EAAOT,EAAoB,GAC3BmuC,EAAUnuC,EAAoB,IAC9BouC,EAAWpuC,EAAoB,IAC/Bq3C,EAAQr3C,EAAoB,KAC5BgsE,EAAOhsE,EAAoB,KAC3BotE,EAAWptE,EAAoB,KAC/B2sE,EAAc3sE,EAAoB,KAClC4sE,EAAa5sE,EAAoB,KACjCitE,EAAUjtE,EAAoB,KAE9BowE,EAAapwE,EAAoB,KAAKowE,WACtCC,EAAarwE,EAAoB,KAAKqwE,WACtCC,EAAmBtwE,EAAoB,KAAKswE,iBAE5CC,EAAevwE,EAAoB,KAAc,QACjDwwE,EAAYxwE,EAAoB,KAAc,OAyLlD6rE,GAAS15D,UAAY,GAAI65D,GAOzBH,EAAS15D,UAAUs+D,oBAAsB,WACvC,MAAO,IAAIF,GAAazwE,KAAMA,KAAKivD,IAAI/Y,UAAWs6B,IAUpDzE,EAAS15D,UAAU6uC,OAAS,WAC1BlhD,KAAKovE,SAAWpvE,KAAKovE,QAAQwB,WAAYC,cAAc,IACvD7wE,KAAKqwE,WAGPtE,EAAS15D,UAAU2+B,WAAa,SAAUhjC,GASxC,IALmB,IAFF0iE,EAAUI,SAAS9iE,EAASuiE,IAG3CjrD,QAAQuuC,IAAI,2DAA4Dyc,GAE1EpE,EAAK75D,UAAU2+B,WAAWzwC,KAAKP,KAAMgO,GAEjC,QAAUA,IACRA,EAAQ/I,OAASjF,KAAKgO,QAAQ/I,KAAM,CACtCjF,KAAKgO,QAAQ/I,KAAO+I,EAAQ/I,IAG5B,IAAIoqE,GAAYrvE,KAAKqvE,SACrB,IAAIA,EAAW,CACb,GAAI0B,GAAY/wE,KAAKgxE,cACrBhxE,MAAKowE,SAAS,MACdpwE,KAAKowE,SAASf,GACdrvE,KAAKixE,aAAaF,MAU1BhF,EAAS15D,UAAU+9D,SAAW,SAAUn+B,GAEtC,GAAIi/B,EAIFA,GAHGj/B,EAEMA,YAAiB5D,IAAW4D,YAAiB3D,GACzC2D,EAGA,GAAI5D,GAAQ4D,GACvBhtC,MACEshD,MAAO,OACPC,IAAK,UARI,KAcfxmD,KAAKqvE,UAAY6B,EACjBlxE,KAAKovE,SAAWpvE,KAAKovE,QAAQgB,SAASc,IAOxCnF,EAAS15D,UAAU89D,UAAY,SAAU5C,GAEvC,GAAI2D,EACJ,IAAK3D,EAEE,CACL,GAAIzmE,GAAS,SAAgBqqE,GAC3B,OAAyB,IAAlBA,EAAMrqB,QAGboqB,GADE3D,YAAkBl/B,IAAWk/B,YAAkBj/B,GACpC,GAAIA,GAASi/B,GAAUzmE,OAAQA,IAG/B,GAAIunC,GAAQk/B,EAAOzmE,OAAOA,QATzCoqE,GAAa,IAaflxE,MAAKsvE,WAAa4B,EAClBlxE,KAAKovE,QAAQe,UAAUe,IAOzBnF,EAAS15D,UAAUmjC,QAAU,SAAUhhB,GACjCA,GAAQA,EAAK+4C,QACfvtE,KAAKmwE,UAAU37C,EAAK+4C,QAGlB/4C,GAAQA,EAAKyd,OACfjyC,KAAKowE,SAAS57C,EAAKyd,QAqBvB85B,EAAS15D,UAAU4+D,aAAe,SAAUx+B,EAAKzkC,GAC/ChO,KAAKovE,SAAWpvE,KAAKovE,QAAQ6B,aAAax+B,GAEtCzkC,GAAWA,EAAQojE,OACrBpxE,KAAKoxE,MAAM3+B,EAAKzkC,IAQpB+9D,EAAS15D,UAAU2+D,aAAe,WAChC,MAAOhxE,MAAKovE,SAAWpvE,KAAKovE,QAAQ4B,oBAetCjF,EAAS15D,UAAU++D,MAAQ,SAAU/wE,EAAI2N,GACvC,GAAKhO,KAAKqvE,eAAmBxrE,IAANxD,EAAvB,CAEA,GAAIoyC,GAAMtuC,MAAMC,QAAQ/D,GAAMA,GAAMA,GAGhCgvE,EAAYrvE,KAAKqvE,UAAUj8B,aAAa37B,IAAIg7B,GAC9CxtC,MACEshD,MAAO,OACPC,IAAK,UAKLD,EAAQ,KACRC,EAAM,IAcV,IAbA6oB,EAAUnoE,QAAQ,SAAUmqE,GAC1B,GAAIjmE,GAAIimE,EAAS9qB,MAAMnhD,UACnB6D,EAAI,OAASooE,GAAWA,EAAS7qB,IAAIphD,UAAYisE,EAAS9qB,MAAMnhD,WAEtD,OAAVmhD,GAAkBn7C,EAAIm7C,KACxBA,EAAQn7C,IAGE,OAARo7C,GAAgBv9C,EAAIu9C,KACtBA,EAAMv9C,KAII,OAAVs9C,GAA0B,OAARC,EAAc,CAElC,GAAI73C,IAAU43C,EAAQC,GAAO,EACzBkM,EAAWjwD,KAAKJ,IAAIrC,KAAKs7C,MAAMkL,IAAMxmD,KAAKs7C,MAAMiL,MAAuB,KAAfC,EAAMD,IAE9D0pB,GAAYjiE,OAAiCnK,KAAtBmK,EAAQiiE,WAA0BjiE,EAAQiiE,SACrEjwE,MAAKs7C,MAAMkY,SAAS7kD,EAAS+jD,EAAW,EAAG/jD,EAAS+jD,EAAW,GAAKud,UAAWA,OAcnFlE,EAAS15D,UAAU69D,IAAM,SAAUliE,GACjC,GACIstC,GADA20B,GAAYjiE,OAAiCnK,KAAtBmK,EAAQiiE,WAA0BjiE,EAAQiiE,UAGjEqB,EAAUtxE,KAAKqvE,WAAarvE,KAAKqvE,UAAUj8B,YACxB,KAAnBk+B,EAAQ1tE,YAAyCC,KAAzBytE,EAAQ75D,MAAM,GAAG+uC,KAE3ClL,EAAQt7C,KAAKuxE,eACbvxE,KAAK+lD,OAAOzK,EAAMl5C,IAAIgD,WAAa6qE,UAAWA,MAG9C30B,EAAQt7C,KAAK+vE,eACb/vE,KAAKs7C,MAAMkY,SAASlY,EAAMl5C,IAAKk5C,EAAMj5C,KAAO4tE,UAAWA,MAS3DlE,EAAS15D,UAAU09D,aAAe,WAEhC,GAAIz0B,GAAQt7C,KAAKuxE,eACbnvE,EAAoB,OAAdk5C,EAAMl5C,IAAek5C,EAAMl5C,IAAIgD,UAAY,KACjD/C,EAAoB,OAAdi5C,EAAMj5C,IAAei5C,EAAMj5C,IAAI+C,UAAY,KACjDosE,EAAU,KACVC,EAAU,IAEd,IAAW,MAAPrvE,GAAsB,MAAPC,EAAa,CAC9B,GAAIqvE,GAAW,SAAkB9iE,GAC/B,MAAOjO,GAAKqE,QAAQ4J,EAAK4lB,KAAK+xB,MAAO,QAAQnhD,WAG3CusE,EAAS,SAAgB/iE,GAC3B,GAAI43C,OAAuB3iD,IAAjB+K,EAAK4lB,KAAKgyB,IAAmB53C,EAAK4lB,KAAKgyB,IAAM53C,EAAK4lB,KAAK+xB,KACjE,OAAO5lD,GAAKqE,QAAQwhD,EAAK,QAAQphD,WAM/BstD,EAAWrwD,EAAMD,CACjBswD,IAAY,IACdA,EAAW,GAEb,IAAIkf,GAASlf,EAAW1yD,KAAKkE,MAAMy3C,OAAOvrC,KA6B1C,IA3BAzP,EAAKuG,QAAQlH,KAAKovE,QAAQn9B,MAAO,SAAUrjC,GACrCA,EAAKijE,eACPjjE,EAAKkjE,OACLljE,EAAKmjE,cAGP,IAAIxrB,GAAQmrB,EAAS9iE,GACjB43C,EAAMmrB,EAAO/iE,EAEjB,IAAI5O,KAAKgO,QAAQggE,IACf,GAAIgE,GAAYzrB,GAAS33C,EAAKqjE,gBAAkB,IAAML,EAClDM,EAAU1rB,GAAO53C,EAAKujE,eAAiB,IAAMP,MAEjD,IAAII,GAAYzrB,GAAS33C,EAAKujE,eAAiB,IAAMP,EACjDM,EAAU1rB,GAAO53C,EAAKqjE,gBAAkB,IAAML,CAGhDI,GAAY5vE,IACdA,EAAM4vE,EACNR,EAAU5iE,GAERsjE,EAAU7vE,IACZA,EAAM6vE,EACNT,EAAU7iE,IAEZ0oD,KAAKt3D,OAEHwxE,GAAWC,EAAS,CACtB,GAAIW,GAAMZ,EAAQW,eAAiB,GAC/BE,EAAMZ,EAAQQ,gBAAkB,GAChC9wC,EAAQnhC,KAAKkE,MAAMy3C,OAAOvrC,MAAQgiE,EAAMC,CAExClxC,GAAQ,IACNnhC,KAAKgO,QAAQggE,KACf5rE,EAAMsvE,EAASF,GAAWa,EAAM3f,EAAWvxB,EAC3C9+B,EAAMsvE,EAAOF,GAAWW,EAAM1f,EAAWvxB,IAEzC/+B,EAAMsvE,EAASF,GAAWY,EAAM1f,EAAWvxB,EAC3C9+B,EAAMsvE,EAAOF,GAAWY,EAAM3f,EAAWvxB,KAMjD,OACE/+B,IAAY,MAAPA,EAAc,GAAIS,MAAKT,GAAO,KACnCC,IAAY,MAAPA,EAAc,GAAIQ,MAAKR,GAAO,OAQvC0pE,EAAS15D,UAAUk/D,aAAe,WAChC,GAAInvE,GAAM,KACNC,EAAM,KAENivE,EAAUtxE,KAAKqvE,WAAarvE,KAAKqvE,UAAUj8B,YAc/C,OAbIk+B,IACFA,EAAQpqE,QAAQ,SAAU0H,GACxB,GAAI23C,GAAQ5lD,EAAKqE,QAAQ4J,EAAK23C,MAAO,QAAQnhD,UACzCohD,EAAM7lD,EAAKqE,YAAoBnB,IAAZ+K,EAAK43C,IAAmB53C,EAAK43C,IAAM53C,EAAK23C,MAAO,QAAQnhD,WAClE,OAARhD,GAAgBmkD,EAAQnkD,KAC1BA,EAAMmkD,IAEI,OAARlkD,GAAgBmkD,EAAMnkD,KACxBA,EAAMmkD,MAMVpkD,IAAY,MAAPA,EAAc,GAAIS,MAAKT,GAAO,KACnCC,IAAY,MAAPA,EAAc,GAAIQ,MAAKR,GAAO,OAUvC0pE,EAAS15D,UAAUk9D,mBAAqB,SAAUhnE,GAChD,GAAIyuC,GAAUzuC,EAAMozC,OAASpzC,EAAMozC,OAAO5mB,EAAIxsB,EAAMyuC,QAChDG,EAAU5uC,EAAMozC,OAASpzC,EAAMozC,OAAOhtB,EAAIpmB,EAAM4uC,OACpD,IAAIn3C,KAAKgO,QAAQggE,IACf,GAAIj5C,GAAIp0B,EAAKwF,iBAAiBnG,KAAKivD,IAAIqjB,iBAAmBt7B,MAE1D,IAAIjiB,GAAIiiB,EAAUr2C,EAAKoF,gBAAgB/F,KAAKivD,IAAIqjB,gBAElD,IAAI3jD,GAAIwoB,EAAUx2C,EAAK0F,eAAerG,KAAKivD,IAAIqjB,iBAE3C1jE,EAAO5O,KAAKovE,QAAQmD,eAAehqE,GACnC4oE,EAAQnxE,KAAKovE,QAAQoD,gBAAgBjqE,GACrCkqE,EAAa3F,EAAW4F,qBAAqBnqE,GAE7CoqE,EAAO3yE,KAAKovE,QAAQphE,QAAQ2kE,MAAQ,KACpCnwE,EAAQxC,KAAK2Q,KAAKhQ,KAAKg9D,WACvBprD,EAAOvS,KAAK2Q,KAAKhQ,KAAKwzD,UACtB/zB,EAAOpgC,KAAK+uE,QAAQh6C,GACpB69C,EAAcD,EAAOA,EAAKvyC,EAAM59B,EAAO+P,GAAQ6tB,EAE/Cv4B,EAAUlH,EAAK+H,UAAUH,GACzBsqE,EAAO,IAiBX,OAhBY,OAARjkE,EACFikE,EAAO,OACgB,MAAdJ,EACTI,EAAO,cACElyE,EAAKoI,UAAUlB,EAAS7H,KAAKyuE,SAASxf,IAAI6jB,YACnDD,EAAO,OACE7yE,KAAKkvE,WAAavuE,EAAKoI,UAAUlB,EAAS7H,KAAKkvE,UAAUjgB,IAAI6jB,YACtED,EAAO,OACElyE,EAAKoI,UAAUlB,EAAS7H,KAAKovE,QAAQngB,IAAI8jB,UAClDF,EAAO,cACElyE,EAAKoI,UAAUlB,EAAS7H,KAAKmvE,YAAYnd,KAClD6gB,EAAO,eACElyE,EAAKoI,UAAUlB,EAAS7H,KAAKivD,IAAItT,UAC1Ck3B,EAAO,eAIPtqE,MAAOA,EACPqG,KAAMA,EAAOA,EAAKvO,GAAK,KACvB8wE,MAAOA,EAAQA,EAAM6B,QAAU,KAC/BH,KAAMA,EACNI,MAAO1qE,EAAM0uD,SAAW1uD,EAAM0uD,SAASgc,MAAQ1qE,EAAM0qE,MACrDC,MAAO3qE,EAAM0uD,SAAW1uD,EAAM0uD,SAASic,MAAQ3qE,EAAM2qE,MACrDn+C,EAAGA,EACHpG,EAAGA,EACHyR,KAAMA,EACNwyC,YAAaA,IAQjB7G,EAAS15D,UAAU8gE,kBAAoB,WACjCnzE,KAAKs7C,MAAM83B,QACbpzE,KAAKs7C,MAAM+3B,mBAEqBxvE,IAA5B7D,KAAKgO,QAAQqgE,aACfruE,KAAKgxC,WAAWhxC,KAAKgO,SAEvBhO,KAAKs7C,MAAMg4B,iBAIfzzE,EAAOD,QAAUmsE,GAIb,SAAUlsE,EAAQD,EAASM,GAgB/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAgBzF,QAASy2C,GAAM5mC,EAAM3C,GACnB,GAAIyY,GAAMhlB,IAAS6xB,MAAM,GAAGG,QAAQ,GAAGyI,QAAQ,GAAGC,aAAa,GAC3DoqB,EAAQ9/B,EAAI6W,QAAQ7M,KAAK,EAAG,QAAQrrB,UACpCohD,EAAM//B,EAAI6W,QAAQ7M,IAAI,EAAG,QAAQrrB,cAErBvB,KAAZmK,GACFhO,KAAKumD,MAAQA,EACbvmD,KAAKwmD,IAAMA,IAEXxmD,KAAKumD,MAAQv4C,EAAQu4C,OAASA,EAC9BvmD,KAAKwmD,IAAMx4C,EAAQw4C,KAAOA,GAG5BxmD,KAAKozE,SAAU,EAEfpzE,KAAK2Q,KAAOA,EACZ3Q,KAAKuzE,gBAAkB,EACvBvzE,KAAKwzE,YAAc,EACnBxzE,KAAKyzE,cAAe,EACpBzzE,KAAK0zE,YAAa,EAGlB1zE,KAAK0tE,gBACHM,KAAK,EACLznB,MAAO,KACPC,IAAK,KACL/kD,OAAQA,EACRm+B,UAAW,aACX+zC,UAAU,EACVC,UAAU,EACVxxE,IAAK,KACLC,IAAK,KACLwxE,QAAS,GACTC,QAAS,SACTzF,aACE0F,QAAQ,EACRp3C,OAAQ,KAGZ38B,KAAKgO,QAAUrN,EAAKC,UAAWZ,KAAK0tE,gBACpC1tE,KAAKkE,OACHu8D,UAEFzgE,KAAKg0E,eAAiB,KAGtBh0E,KAAK2Q,KAAK49D,QAAQl9B,GAAG,WAAYrxC,KAAKi0E,aAAa3c,KAAKt3D,OACxDA,KAAK2Q,KAAK49D,QAAQl9B,GAAG,UAAWrxC,KAAKk0E,QAAQ5c,KAAKt3D,OAClDA,KAAK2Q,KAAK49D,QAAQl9B,GAAG,SAAUrxC,KAAKm0E,WAAW7c,KAAKt3D,OAGpDA,KAAK2Q,KAAK49D,QAAQl9B,GAAG,aAAcrxC,KAAKo0E,cAAc9c,KAAKt3D,OAG3DA,KAAK2Q,KAAK49D,QAAQl9B,GAAG,QAASrxC,KAAKq0E,SAAS/c,KAAKt3D,OACjDA,KAAK2Q,KAAK49D,QAAQl9B,GAAG,QAASrxC,KAAKs0E,SAAShd,KAAKt3D,OAGjDA,KAAK2Q,KAAKs+C,IAAIslB,eAAe3sE,iBAAiB,QAAS5H,KAAKszE,aAAahc,KAAKt3D,OAE9EA,KAAKgxC,WAAWhjC,GAyClB,QAASwmE,GAAkB50C,GACzB,GAAiB,cAAbA,GAA0C,YAAbA,EAC/B,KAAM,IAAIr7B,WAAU,sBAAwBq7B,EAAY,yCAnI5D,GAAIv+B,GAAQnB,EAAoB,IAE5BoB,EAAST,EAAuBQ,GAEhC8b,EAAajd,EAAoB,IAEjC+wC,EAAcpwC,EAAuBsc,GAErC5b,EAAWrB,EAAoB,IAE/BsB,EAAWX,EAAuBU,GAIlCZ,EAAOT,EAAoB,GAE3BuB,GADavB,EAAoB,KACxBA,EAAoB,KAC7B0sE,EAAY1sE,EAAoB,KAChCisE,EAAWjsE,EAAoB,IAyEnCq3C,GAAMllC,UAAY,GAAIu6D,GAkBtBr1B,EAAMllC,UAAU2+B,WAAa,SAAUhjC,GACrC,GAAIA,EAAS,CAEX,GAAIV,IAAU,YAAa,YAAa,MAAO,MAAO,UAAW,UAAW,WAAY,WAAY,SAAU,WAAY,cAAe,UAAW,MAAO,kBAAmB,cAAe,mBAC7L3M,GAAKsD,gBAAgBqJ,EAAQtN,KAAKgO,QAASA,GAEvCA,EAAQqgE,aAAergE,EAAQqgE,YAAY0F,QAC7C/zE,KAAKszE,gBAEH,SAAWtlE,IAAW,OAASA,KAEjChO,KAAKwzD,SAASxlD,EAAQu4C,MAAOv4C,EAAQw4C,OAkB3CjP,EAAMllC,UAAUihE,aAAe,WAG7B,QAASphC,KACPH,EAAGshC,cACHthC,EAAGqhC,SAAU,CAEb,IAAI1gB,GAAW3gB,EAAGyU,IAAMzU,EAAGwU,MACvBt5C,EAAItM,EAAKqE,QAAQ,GAAInC,MAAQ,QAAQuC,UAErCmhD,EAAQt5C,EAAIylD,EAAW3gB,EAAG/jC,QAAQqgE,YAAY1xC,OAC9C6pB,EAAMv5C,EAAIylD,GAAY,EAAI3gB,EAAG/jC,QAAQqgE,YAAY1xC,QAGjD3uB,IAFY+jC,EAAG/jC,aAAoCnK,KAAzBkuC,EAAG/jC,QAAQiiE,WAA0Bl+B,EAAG/jC,QAAQiiE,WAG5EA,WAAW,GAEbl+B,GAAGyhB,SAASjN,EAAOC,EAAKx4C,EAGxB,IAAIxL,GAAQuvC,EAAG0iC,WAAW1iC,EAAGphC,KAAK29D,SAAS3yB,OAAOvrC,OAAO5N,MACrDkwD,EAAW,EAAIlwD,EAAQ,EACvBkwD,GAAW,KAAIA,EAAW,IAC1BA,EAAW,MAAMA,EAAW,KAEhC3gB,EAAGphC,KAAKs+C,IAAIslB,eAAeloE,MAAMmE,WAAa,SAE9CuhC,EAAG2iC,iBAAmBr/B,WAAWnD,EAAQwgB,GA1B3C,GAAI3gB,GAAK/xC,IA6BTkyC,MAMFqF,EAAMllC,UAAUghE,YAAc,eACExvE,KAA1B7D,KAAK00E,mBACPt/B,aAAap1C,KAAK00E,kBAClB10E,KAAKozE,SAAU,EACfpzE,KAAK2Q,KAAKs+C,IAAIslB,eAAeloE,MAAMmE,WAAa,YAqBpD+mC,EAAMllC,UAAUmhD,SAAW,SAAUjN,EAAOC,EAAKx4C,EAAS7G,GACnD6G,IACHA,OAEqB,IAAnBA,EAAQ2mE,SACV3mE,EAAQ2mE,QAAS,EAEnB,IAAI5iC,GAAK/xC,KACL40E,MAAsB/wE,IAAT0iD,EAAqB5lD,EAAKqE,QAAQuhD,EAAO,QAAQnhD,UAAY,KAC1EyvE,MAAkBhxE,IAAP2iD,EAAmB7lD,EAAKqE,QAAQwhD,EAAK,QAAQphD,UAAY,IAGxE,IAFApF,KAAK80E,mBAED9mE,EAAQiiE,UAAW,CAErB,GAAI8E,GAAY/0E,KAAKumD,MACjByuB,EAAUh1E,KAAKwmD,IACf5qB,EAA2D,YAAhD,EAAIp6B,EAAkB,SAAGwM,EAAQiiE,YAA2B,YAAcjiE,GAAQiiE,UAAYjiE,EAAQiiE,UAAUr0C,SAAW,IACtIq5C,EAA6D,YAAhD,EAAIzzE,EAAkB,SAAGwM,EAAQiiE,YAA2B,kBAAoBjiE,GAAQiiE,UAAYjiE,EAAQiiE,UAAUiF,eAAiB,gBACpJA,EAAiBv0E,EAAKuO,gBAAgB+lE,EAC1C,KAAKC,EACH,KAAM,IAAI7wE,OAAM,4BAA6B,EAAI4sC,EAAqB,SAAGgkC,GAAc,mBAAyB,EAAI3zE,EAAgB,SAAGX,EAAKuO,iBAAiBnI,KAAK,MAGpK,IAAIouE,IAAW,GAAItyE,OAAOuC,UACtBgwE,GAAa,CAyCjB,OAvCW,SAAS3jE,KAClB,IAAKsgC,EAAG7tC,MAAMu8D,MAAM4U,SAAU,CAC5B,GAAI5uD,IAAM,GAAI5jB,OAAOuC,UACjBg7B,EAAO3Z,EAAM0uD,EACbG,EAAOJ,EAAe90C,EAAOxE,GAC7BlqB,EAAO0uB,EAAOxE,EACdxwB,EAAIsG,GAAuB,OAAfkjE,EAAsBA,EAAaG,GAAaH,EAAaG,GAAaO,EACtFrsE,EAAIyI,GAAqB,OAAbmjE,EAAoBA,EAAWG,GAAWH,EAAWG,GAAWM,CAEhFtV,GAAUjuB,EAAGwjC,YAAYnqE,EAAGnC,GAC5BkjE,EAASqJ,kBAAkBzjC,EAAG/jC,QAAQvM,OAAQswC,EAAGphC,KAAMohC,EAAG/jC,QAAQwgE,aAClE4G,EAAaA,GAAcpV,CAE3B,IAAIruB,IACF4U,MAAO,GAAI1jD,MAAKkvC,EAAGwU,OACnBC,IAAK,GAAI3jD,MAAKkvC,EAAGyU,KACjBmuB,OAAQ3mE,EAAQ2mE,OAChBpsE,MAAOyF,EAAQzF,MAOjB,IAJIy3D,GACFjuB,EAAGphC,KAAK49D,QAAQrhB,KAAK,cAAevb,GAGlCjgC,GACF,GAAI0jE,IACFrjC,EAAGphC,KAAK49D,QAAQrhB,KAAK,eAAgBvb,GACjCxqC,GACF,MAAOA,SAMX4qC,GAAGiiC,eAAiB3+B,WAAW5jC,EAAM,QAO3C,GAAIuuD,GAAUhgE,KAAKu1E,YAAYX,EAAYC,EAE3C,IADA1I,EAASqJ,kBAAkBx1E,KAAKgO,QAAQvM,OAAQzB,KAAK2Q,KAAM3Q,KAAKgO,QAAQwgE,aACpExO,EAAS,CACX,GAAIruB,IACF4U,MAAO,GAAI1jD,MAAK7C,KAAKumD,OACrBC,IAAK,GAAI3jD,MAAK7C,KAAKwmD,KACnBmuB,OAAQ3mE,EAAQ2mE,OAChBpsE,MAAOyF,EAAQzF,MAQjB,IALAvI,KAAK2Q,KAAK49D,QAAQrhB,KAAK,cAAevb,GACtCyD,aAAarD,EAAG0jC,WAChB1jC,EAAG0jC,UAAYpgC,WAAW,WACxBtD,EAAGphC,KAAK49D,QAAQrhB,KAAK,eAAgBvb,IACpC,KACCxqC,EACF,MAAOA,OASfowC,EAAMllC,UAAUqjE,wBAA0B,WACxC,OAAQ11E,KAAKwmD,IAAMxmD,KAAKumD,OAASvmD,KAAK2Q,KAAKs+C,IAAItT,OAAO5qC,aAOxDwmC,EAAMllC,UAAUyiE,iBAAmB,WAC7B90E,KAAKg0E,iBACP5+B,aAAap1C,KAAKg0E,gBAClBh0E,KAAKg0E,eAAiB,OAa1Bz8B,EAAMllC,UAAUkjE,YAAc,SAAUhvB,EAAOC,GAC7C,GAII9+B,GAJAiuD,EAAoB,MAATpvB,EAAgB5lD,EAAKqE,QAAQuhD,EAAO,QAAQnhD,UAAYpF,KAAKumD,MACxEqvB,EAAgB,MAAPpvB,EAAc7lD,EAAKqE,QAAQwhD,EAAK,QAAQphD,UAAYpF,KAAKwmD,IAClEnkD,EAA0B,MAApBrC,KAAKgO,QAAQ3L,IAAc1B,EAAKqE,QAAQhF,KAAKgO,QAAQ3L,IAAK,QAAQ+C,UAAY,KACpFhD,EAA0B,MAApBpC,KAAKgO,QAAQ5L,IAAczB,EAAKqE,QAAQhF,KAAKgO,QAAQ5L,IAAK,QAAQgD,UAAY,IAIxF,IAAIpC,MAAM2yE,IAA0B,OAAbA,EACrB,KAAM,IAAItxE,OAAM,kBAAoBkiD,EAAQ,IAE9C,IAAIvjD,MAAM4yE,IAAsB,OAAXA,EACnB,KAAM,IAAIvxE,OAAM,gBAAkBmiD,EAAM,IAyC1C,IArCIovB,EAASD,IACXC,EAASD,GAIC,OAARvzE,GACEuzE,EAAWvzE,IACbslB,EAAOtlB,EAAMuzE,EACbA,GAAYjuD,EACZkuD,GAAUluD,EAGC,MAAPrlB,GACEuzE,EAASvzE,IACXuzE,EAASvzE,IAOL,OAARA,GACEuzE,EAASvzE,IACXqlB,EAAOkuD,EAASvzE,EAChBszE,GAAYjuD,EACZkuD,GAAUluD,EAGC,MAAPtlB,GACEuzE,EAAWvzE,IACbuzE,EAAWvzE,IAOU,OAAzBpC,KAAKgO,QAAQ6lE,QAAkB,CACjC,GAAIA,GAAUt4C,WAAWv7B,KAAKgO,QAAQ6lE,QAItC,IAHIA,EAAU,IACZA,EAAU,GAER+B,EAASD,EAAW9B,EAAS,CAG3B7zE,KAAKwmD,IAAMxmD,KAAKumD,QAAUstB,GAAW8B,GAAY31E,KAAKumD,MADvC,IAC+DqvB,GAAU51E,KAAKwmD,KAE/FmvB,EAAW31E,KAAKumD,MAChBqvB,EAAS51E,KAAKwmD,MAGd9+B,EAAOmsD,GAAW+B,EAASD,GAC3BA,GAAYjuD,EAAO,EACnBkuD,GAAUluD,EAAO,IAMvB,GAA6B,OAAzB1nB,KAAKgO,QAAQ8lE,QAAkB,CACjC,GAAIA,GAAUv4C,WAAWv7B,KAAKgO,QAAQ8lE,QAClCA,GAAU,IACZA,EAAU,GAGR8B,EAASD,EAAW7B,IAClB9zE,KAAKwmD,IAAMxmD,KAAKumD,QAAUutB,GAAW6B,EAAW31E,KAAKumD,OAASqvB,EAAS51E,KAAKwmD,KAE9EmvB,EAAW31E,KAAKumD,MAChBqvB,EAAS51E,KAAKwmD,MAGd9+B,EAAOkuD,EAASD,EAAW7B,EAC3B6B,GAAYjuD,EAAO,EACnBkuD,GAAUluD,EAAO,IAKvB,GAAIs4C,GAAUhgE,KAAKumD,OAASovB,GAAY31E,KAAKwmD,KAAOovB,CASpD,OANMD,IAAY31E,KAAKumD,OAASovB,GAAY31E,KAAKwmD,KAAOovB,GAAU51E,KAAKumD,OAASqvB,GAAU51E,KAAKwmD,KAAUxmD,KAAKumD,OAASovB,GAAY31E,KAAKumD,OAASqvB,GAAU51E,KAAKwmD,KAAOmvB,GAAY31E,KAAKwmD,KAAOovB,GAC7L51E,KAAK2Q,KAAK49D,QAAQrhB,KAAK,oBAGzBltD,KAAKumD,MAAQovB,EACb31E,KAAKwmD,IAAMovB,EACJ5V,GAOTzoB,EAAMllC,UAAUwjE,SAAW,WACzB,OACEtvB,MAAOvmD,KAAKumD,MACZC,IAAKxmD,KAAKwmD,MAUdjP,EAAMllC,UAAUoiE,WAAa,SAAUrkE,EAAO0lE,GAC5C,MAAOv+B,GAAMk9B,WAAWz0E,KAAKumD,MAAOvmD,KAAKwmD,IAAKp2C,EAAO0lE,IAWvDv+B,EAAMk9B,WAAa,SAAUluB,EAAOC,EAAKp2C,EAAO0lE,GAI9C,WAHoBjyE,KAAhBiyE,IACFA,EAAc,GAEH,GAAT1lE,GAAco2C,EAAMD,GAAS,GAE7B5pB,OAAQ4pB,EACR/jD,MAAO4N,GAASo2C,EAAMD,EAAQuvB,KAI9Bn5C,OAAQ,EACRn6B,MAAO,IAUb+0C,EAAMllC,UAAU4hE,aAAe,SAAU1rE,GACvCvI,KAAKuzE,gBAAkB,EACvBvzE,KAAK+1E,cAAgB,EAGhB/1E,KAAKgO,QAAQ2lE,UAGb3zE,KAAKg2E,eAAeztE,IAIpBvI,KAAKkE,MAAMu8D,MAAMwV,gBAEtBj2E,KAAKqzE,cAELrzE,KAAKkE,MAAMu8D,MAAMla,MAAQvmD,KAAKumD,MAC9BvmD,KAAKkE,MAAMu8D,MAAMja,IAAMxmD,KAAKwmD,IAC5BxmD,KAAKkE,MAAMu8D,MAAM4U,UAAW,EAExBr1E,KAAK2Q,KAAKs+C,IAAIvvD,OAChBM,KAAK2Q,KAAKs+C,IAAIvvD,KAAK2M,MAAM0/C,OAAS,UAStCxU,EAAMllC,UAAU6hE,QAAU,SAAU3rE,GAClC,GAAKA,GAEAvI,KAAKkE,MAAMu8D,MAAM4U,UAGjBr1E,KAAKgO,QAAQ2lE,UAKb3zE,KAAKkE,MAAMu8D,MAAMwV,cAAtB,CAEA,GAAIr2C,GAAY5/B,KAAKgO,QAAQ4xB,SAC7B40C,GAAkB50C,EAClB,IAAIuB,GAAqB,cAAbvB,EAA4Br3B,EAAM80D,OAAS90D,EAAM+0D,MAC7Dn8B,IAASnhC,KAAKuzE,eACd,IAAI7gB,GAAW1yD,KAAKkE,MAAMu8D,MAAMja,IAAMxmD,KAAKkE,MAAMu8D,MAAMla,KAIvDmM,IADeyZ,EAAS+J,yBAAyBl2E,KAAK2Q,KAAK69D,YAAaxuE,KAAKumD,MAAOvmD,KAAKwmD,IAGzF,IAAIp2C,GAAqB,cAAbwvB,EAA4B5/B,KAAK2Q,KAAK29D,SAAS3yB,OAAOvrC,MAAQpQ,KAAK2Q,KAAK29D,SAAS3yB,OAAOtrC,MAEpG,IAAIrQ,KAAKgO,QAAQggE,IACf,GAAImI,GAAYh1C,EAAQ/wB,EAAQsiD,MAEhC,IAAIyjB,IAAah1C,EAAQ/wB,EAAQsiD,CAGnC,IAAIijB,GAAW31E,KAAKkE,MAAMu8D,MAAMla,MAAQ4vB,EACpCP,EAAS51E,KAAKkE,MAAMu8D,MAAMja,IAAM2vB,EAGhCC,EAAYjK,EAASkK,mBAAmBr2E,KAAK2Q,KAAK69D,YAAamH,EAAU31E,KAAK+1E,cAAgB50C,GAAO,GACrGm1C,EAAUnK,EAASkK,mBAAmBr2E,KAAK2Q,KAAK69D,YAAaoH,EAAQ51E,KAAK+1E,cAAgB50C,GAAO,EACrG,IAAIi1C,GAAaT,GAAYW,GAAWV,EAKtC,MAJA51E,MAAKuzE,iBAAmBpyC,EACxBnhC,KAAKkE,MAAMu8D,MAAMla,MAAQ6vB,EACzBp2E,KAAKkE,MAAMu8D,MAAMja,IAAM8vB,MACvBt2E,MAAKk0E,QAAQ3rE,EAIfvI,MAAK+1E,cAAgB50C,EACrBnhC,KAAKu1E,YAAYI,EAAUC,EAE3B,IAAIW,GAAY,GAAI1zE,MAAK7C,KAAKumD,OAC1BiwB,EAAU,GAAI3zE,MAAK7C,KAAKwmD,IAG5BxmD,MAAK2Q,KAAK49D,QAAQrhB,KAAK,eACrB3G,MAAOgwB,EACP/vB,IAAKgwB,EACL7B,QAAQ,EACRpsE,MAAOA,IAITvI,KAAK2Q,KAAK49D,QAAQrhB,KAAK,aAQzB3V,EAAMllC,UAAU8hE,WAAa,SAAU5rE,GAChCvI,KAAKkE,MAAMu8D,MAAM4U,UAGjBr1E,KAAKgO,QAAQ2lE,UAKb3zE,KAAKkE,MAAMu8D,MAAMwV,gBAEtBj2E,KAAKkE,MAAMu8D,MAAM4U,UAAW,EACxBr1E,KAAK2Q,KAAKs+C,IAAIvvD,OAChBM,KAAK2Q,KAAKs+C,IAAIvvD,KAAK2M,MAAM0/C,OAAS,QAIpC/rD,KAAK2Q,KAAK49D,QAAQrhB,KAAK,gBACrB3G,MAAO,GAAI1jD,MAAK7C,KAAKumD,OACrBC,IAAK,GAAI3jD,MAAK7C,KAAKwmD,KACnBmuB,QAAQ,EACRpsE,MAAOA,MAUXgvC,EAAMllC,UAAU+hE,cAAgB,SAAU7rE,GAExC,GAAI44B,GAAQ,CAYZ,IAXI54B,EAAM0lD,WAER9sB,EAAQ54B,EAAM0lD,WAAa,IAClB1lD,EAAM2lD,SAIf/sB,GAAS54B,EAAM2lD,OAAS,GAItBluD,KAAKgO,QAAQyoE,UAAYluE,EAAMvI,KAAKgO,QAAQyoE,UAAYz2E,KAAKgO,QAAQ4lE,WAAa5zE,KAAKgO,QAAQ4lE,UAAY5zE,KAAKgO,QAAQ2lE,UAC1H,GAAI3zE,KAAKgO,QAAQ0oE,iBAAkB,CAGjCnuE,EAAMD,gBAGN,IAAIof,GAAOyZ,GAASnhC,KAAKwmD,IAAMxmD,KAAKumD,OAAS,GAEzCovB,EAAW31E,KAAKumD,MAAQ7+B,EACxBkuD,EAAS51E,KAAKwmD,IAAM9+B,EAEpB1Z,GACFiiE,WAAW,EACX0E,QAAQ,EACRpsE,MAAOA,EAETvI,MAAKwzD,SAASmiB,EAAUC,EAAQ5nE,QAMpC,IAAMhO,KAAKgO,QAAQ4lE,UAAY5zE,KAAKgO,QAAQ2lE,UAGvC3zE,KAAKg2E,eAAeztE,IAKrB44B,EAAO,CAKT,GAAI3+B,EAEFA,GADE2+B,EAAQ,EACF,EAAIA,EAAQ,EAEZ,GAAK,EAAIA,EAAQ,EAI3B,IAAIw1C,EACJ,IAAI32E,KAAKozE,QACPuD,EAAc32E,KAAKumD,OAASvmD,KAAKwmD,IAAMxmD,KAAKumD,OAASvmD,KAAKgO,QAAQqgE,YAAY1xC,WACzE,CACL,GAAIi6C,GAAU52E,KAAK62E,YAAa9hD,EAAGxsB,EAAMyuC,QAASroB,EAAGpmB,EAAM4uC,SAAWn3C,KAAK2Q,KAAKs+C,IAAItT,OACpFg7B,GAAc32E,KAAK82E,eAAeF,GAEpC52E,KAAK+2E,KAAKv0E,EAAOm0E,EAAax1C,EAAO54B,GAIrCA,EAAMD,mBAQVivC,EAAMllC,UAAUgiE,SAAW,SAAU9rE,GACnCvI,KAAKkE,MAAMu8D,MAAMla,MAAQvmD,KAAKumD,MAC9BvmD,KAAKkE,MAAMu8D,MAAMja,IAAMxmD,KAAKwmD,IAC5BxmD,KAAKkE,MAAMu8D,MAAMwV,eAAgB,EACjCj2E,KAAKkE,MAAMu8D,MAAM9kB,OAAS,KAC1B37C,KAAKwzE,YAAc,EACnBxzE,KAAKuzE,gBAAkB,GAQzBh8B,EAAMllC,UAAUiiE,SAAW,SAAU/rE,GAEnC,GAAMvI,KAAKgO,QAAQ4lE,UAAY5zE,KAAKgO,QAAQ2lE,SAA5C,CAEA3zE,KAAKkE,MAAMu8D,MAAMwV,eAAgB,EAE5Bj2E,KAAKkE,MAAMu8D,MAAM9kB,SACpB37C,KAAKkE,MAAMu8D,MAAM9kB,OAAS37C,KAAK62E,WAAWtuE,EAAMozC,OAAQ37C,KAAK2Q,KAAKs+C,IAAItT,SAGxE37C,KAAKqzE,aAEL,IAAI7wE,GAAQ,GAAK+F,EAAM/F,MAAQxC,KAAKwzE,aAChCwD,EAAah3E,KAAK82E,eAAe92E,KAAKkE,MAAMu8D,MAAM9kB,QAElDs7B,EAAiB9K,EAAS+J,yBAAyBl2E,KAAK2Q,KAAK69D,YAAaxuE,KAAKumD,MAAOvmD,KAAKwmD,KAC3F0wB,EAAuB/K,EAASgL,wBAAwBn3E,KAAKgO,QAAQvM,OAAQzB,KAAK2Q,KAAK69D,YAAaxuE,KAAMg3E,GAC1GI,EAAsBH,EAAiBC,EAGvCvB,EAAWqB,EAAaE,GAAwBl3E,KAAKkE,MAAMu8D,MAAMla,OAASywB,EAAaE,IAAyB10E,EAChHozE,EAASoB,EAAaI,GAAuBp3E,KAAKkE,MAAMu8D,MAAMja,KAAOwwB,EAAaI,IAAwB50E,CAG9GxC,MAAKyzE,aAAe,EAAIjxE,GAAS,EACjCxC,KAAK0zE,WAAalxE,EAAQ,GAAK,CAE/B,IAAI4zE,GAAYjK,EAASkK,mBAAmBr2E,KAAK2Q,KAAK69D,YAAamH,EAAU,EAAInzE,GAAO,GACpF8zE,EAAUnK,EAASkK,mBAAmBr2E,KAAK2Q,KAAK69D,YAAaoH,EAAQpzE,EAAQ,GAAG,EAChF4zE,IAAaT,GAAYW,GAAWV,IACtC51E,KAAKkE,MAAMu8D,MAAMla,MAAQ6vB,EACzBp2E,KAAKkE,MAAMu8D,MAAMja,IAAM8vB,EACvBt2E,KAAKwzE,YAAc,EAAIjrE,EAAM/F,MAC7BmzE,EAAWS,EACXR,EAASU,EAGX,IAAItoE,IACFiiE,WAAW,EACX0E,QAAQ,EACRpsE,MAAOA,EAETvI,MAAKwzD,SAASmiB,EAAUC,EAAQ5nE,GAEhChO,KAAKyzE,cAAe,EACpBzzE,KAAK0zE,YAAa,IAUpBn8B,EAAMllC,UAAU2jE,eAAiB,SAAUztE,GAGzC,GAAIyuC,GAAUzuC,EAAMozC,OAASpzC,EAAMozC,OAAO5mB,EAAIxsB,EAAMyuC,OACpD,IAAIh3C,KAAKgO,QAAQggE,IACf,GAAIj5C,GAAIiiB,EAAUr2C,EAAKoF,gBAAgB/F,KAAK2Q,KAAKs+C,IAAIqjB,qBAErD,IAAIv9C,GAAIp0B,EAAKwF,iBAAiBnG,KAAK2Q,KAAKs+C,IAAIqjB,iBAAmBt7B,CAEjE,IAAI5W,GAAOpgC,KAAK2Q,KAAKhQ,KAAKmuE,OAAO/5C,EAEjC,OAAOqL,IAAQpgC,KAAKumD,OAASnmB,GAAQpgC,KAAKwmD,KAS5CjP,EAAMllC,UAAUykE,eAAiB,SAAUF,GACzC,GAAInC,GACA70C,EAAY5/B,KAAKgO,QAAQ4xB,SAI7B,IAFA40C,EAAkB50C,GAED,cAAbA,EACF,MAAO5/B,MAAK2Q,KAAKhQ,KAAKmuE,OAAO8H,EAAQ7hD,GAAG3vB,SAExC,IAAIiL,GAASrQ,KAAK2Q,KAAK29D,SAAS3yB,OAAOtrC,MAEvC,OADAokE,GAAaz0E,KAAKy0E,WAAWpkE,GACtBumE,EAAQjoD,EAAI8lD,EAAWjyE,MAAQiyE,EAAW93C,QAWrD4a,EAAMllC,UAAUwkE,WAAa,SAAUpW,EAAO54D,GAC5C,MAAI7H,MAAKgO,QAAQggE,KAEbj5C,EAAGp0B,EAAKwF,iBAAiB0B,GAAW44D,EAAM1rC,EAC1CpG,EAAG8xC,EAAM9xC,EAAIhuB,EAAK0F,eAAewB,KAIjCktB,EAAG0rC,EAAM1rC,EAAIp0B,EAAKoF,gBAAgB8B,GAClC8mB,EAAG8xC,EAAM9xC,EAAIhuB,EAAK0F,eAAewB,KAevC0vC,EAAMllC,UAAU0kE,KAAO,SAAUv0E,EAAOm5C,EAAQxa,EAAO54B,GAEvC,MAAVozC,IACFA,GAAU37C,KAAKumD,MAAQvmD,KAAKwmD,KAAO,EAGrC,IAAIywB,GAAiB9K,EAAS+J,yBAAyBl2E,KAAK2Q,KAAK69D,YAAaxuE,KAAKumD,MAAOvmD,KAAKwmD,KAC3F0wB,EAAuB/K,EAASgL,wBAAwBn3E,KAAKgO,QAAQvM,OAAQzB,KAAK2Q,KAAK69D,YAAaxuE,KAAM27C,GAC1Gy7B,EAAsBH,EAAiBC,EAGvCvB,EAAWh6B,EAASu7B,GAAwBl3E,KAAKumD,OAAS5K,EAASu7B,IAAyB10E,EAC5FozE,EAASj6B,EAASy7B,GAAuBp3E,KAAKwmD,KAAO7K,EAASy7B,IAAwB50E,CAG1FxC,MAAKyzE,eAAetyC,EAAQ,GAC5BnhC,KAAK0zE,cAAcvyC,EAAQ,EAC3B,IAAIi1C,GAAYjK,EAASkK,mBAAmBr2E,KAAK2Q,KAAK69D,YAAamH,EAAUx0C,GAAO,GAChFm1C,EAAUnK,EAASkK,mBAAmBr2E,KAAK2Q,KAAK69D,YAAaoH,GAASz0C,GAAO,EAC7Ei1C,IAAaT,GAAYW,GAAWV,IACtCD,EAAWS,EACXR,EAASU,EAGX,IAAItoE,IACFiiE,WAAW,EACX0E,QAAQ,EACRpsE,MAAOA,EAETvI,MAAKwzD,SAASmiB,EAAUC,EAAQ5nE,GAEhChO,KAAKyzE,cAAe,EACpBzzE,KAAK0zE,YAAa,GASpBn8B,EAAMllC,UAAUglE,KAAO,SAAUl2C,GAE/B,GAAIzZ,GAAO1nB,KAAKwmD,IAAMxmD,KAAKumD,MAGvBovB,EAAW31E,KAAKumD,MAAQ7+B,EAAOyZ,EAC/By0C,EAAS51E,KAAKwmD,IAAM9+B,EAAOyZ,CAI/BnhC,MAAKumD,MAAQovB,EACb31E,KAAKwmD,IAAMovB,GAObr+B,EAAMllC,UAAU0zC,OAAS,SAAUA,GACjC,GAAIpK,IAAU37C,KAAKumD,MAAQvmD,KAAKwmD,KAAO,EAEnC9+B,EAAOi0B,EAASoK,EAGhB4vB,EAAW31E,KAAKumD,MAAQ7+B,EACxBkuD,EAAS51E,KAAKwmD,IAAM9+B,EAEpB1Z,GACFiiE,WAAW,EACX0E,QAAQ,EACRpsE,MAAO,KAETvI,MAAKwzD,SAASmiB,EAAUC,EAAQ5nE,IAGlCnO,EAAOD,QAAU23C,GAIb,SAAU13C,EAAQD,EAASM,GAIlBA,EAAoB,IAOjCN,GAAQ03E,QAAU,SAAUxgB,EAAQ3vD,GAClCA,EAASu0D,aAAe,SAAUnzD,GAC5BA,EAAMuvD,SACR3wD,EAASoB,IAIbuuD,EAAOzlB,GAAG,eAAgBlqC,EAASu0D,eAQrC97D,EAAQ23E,UAAY,SAAUzgB,EAAQ3vD,GAOpC,MANAA,GAASu0D,aAAe,SAAUnzD,GAC5BA,EAAMyzD,SACR70D,EAASoB,IAINuuD,EAAOzlB,GAAG,eAAgBlqC,EAASu0D,eAQ5C97D,EAAQ43E,SAAW,SAAU1gB,EAAQ3vD,GACnC2vD,EAAOtlB,IAAI,eAAgBrqC,EAASu0D,eAQtC97D,EAAQ63E,WAAa73E,EAAQ43E,SAW7B53E,EAAQ83E,gCAAkC,SAAUC,GAQlD,MALAA,GAAgBhQ,eAAiB,WAE/B,OAJuB,UAOlBgQ,IAKL,SAAU93E,EAAQD,EAASM,GAW/B,QAAS0sE,GAAUj8D,EAAM3C,GACvBhO,KAAKgO,QAAU,KACfhO,KAAKkE,MAAQ,KATf,GAAIvD,GAAOT,EAAoB,EAiB/B0sE,GAAUv6D,UAAU2+B,WAAa,SAAUhjC,GACrCA,GACFrN,EAAKC,OAAOZ,KAAKgO,QAASA,IAQ9B4+D,EAAUv6D,UAAU6uC,OAAS,WAE3B,OAAO,GAMT0rB,EAAUv6D,UAAU++B,QAAU,aAU9Bw7B,EAAUv6D,UAAUulE,WAAa,WAC/B,GAAIC,GAAU73E,KAAKkE,MAAM4zE,iBAAmB93E,KAAKkE,MAAMkM,OAASpQ,KAAKkE,MAAM6zE,kBAAoB/3E,KAAKkE,MAAMmM,MAK1G,OAHArQ,MAAKkE,MAAM4zE,eAAiB93E,KAAKkE,MAAMkM,MACvCpQ,KAAKkE,MAAM6zE,gBAAkB/3E,KAAKkE,MAAMmM,OAEjCwnE,GAGTh4E,EAAOD,QAAUgtE,GAIb,SAAU/sE,EAAQD,GAWtBA,EAAQo4E,qBAAuB,SAAUv2E,EAAQkP,EAAM69D,GACrD,GAAIA,IAAgBrqE,MAAMC,QAAQoqE,GAChC,MAAO5uE,GAAQo4E,qBAAqBv2E,EAAQkP,GAAO69D,GAIrD,IADA79D,EAAK69D,eACDA,GACgC,GAA9BrqE,MAAMC,QAAQoqE,GAAsB,CACtC,IAAK,GAAIzqE,GAAI,EAAGA,EAAIyqE,EAAY5qE,OAAQG,IACtC,OAA8BF,KAA1B2qE,EAAYzqE,GAAGk0E,OAAsB,CACvC,GAAIC,KACJA,GAAS3xB,MAAQ9kD,EAAO+sE,EAAYzqE,GAAGwiD,OAAOjhD,SAASF,UACvD8yE,EAAS1xB,IAAM/kD,EAAO+sE,EAAYzqE,GAAGyiD,KAAKlhD,SAASF,UACnDuL,EAAK69D,YAAY3pE,KAAKqzE,GAG1BvnE,EAAK69D,YAAY3lD,KAAK,SAAUrlB,EAAGC,GACjC,MAAOD,GAAE+iD,MAAQ9iD,EAAE8iD,UAY3B3mD,EAAQ41E,kBAAoB,SAAU/zE,EAAQkP,EAAM69D,GAClD,GAAIA,IAAgBrqE,MAAMC,QAAQoqE,GAChC,MAAO5uE,GAAQ41E,kBAAkB/zE,EAAQkP,GAAO69D,GAGlD,IAAIA,OAAuD3qE,KAAxC8M,EAAK29D,SAASgE,gBAAgBliE,MAAqB;kDACpExQ,EAAQo4E,qBAAqBv2E,EAAQkP,EAAM69D,EAQ3C,KAAK,GANDjoB,GAAQ9kD,EAAOkP,EAAK2qC,MAAMiL,OAC1BC,EAAM/kD,EAAOkP,EAAK2qC,MAAMkL,KAExB2xB,EAAaxnE,EAAK2qC,MAAMkL,IAAM71C,EAAK2qC,MAAMiL,MACzC6xB,EAAYD,EAAaxnE,EAAK29D,SAASgE,gBAAgBliE,MAElDrM,EAAI,EAAGA,EAAIyqE,EAAY5qE,OAAQG,IACtC,OAA8BF,KAA1B2qE,EAAYzqE,GAAGk0E,OAAsB,CACvC,GAAI1B,GAAY90E,EAAO+sE,EAAYzqE,GAAGwiD,OAClCiwB,EAAU/0E,EAAO+sE,EAAYzqE,GAAGyiD,IAEpC,IAAoB,gBAAhB+vB,EAAUxzD,GACZ,KAAM,IAAI1e,OAAM,qCAAuCmqE,EAAYzqE,GAAGwiD,MAExE,IAAkB,gBAAdiwB,EAAQzzD,GACV,KAAM,IAAI1e,OAAM,mCAAqCmqE,EAAYzqE,GAAGyiD,IAGtE,IAAI5qB,GAAW46C,EAAUD,CACzB,IAAI36C,GAAY,EAAIw8C,EAAW,CAE7B,GAAIz7C,GAAS,EACT07C,EAAW7xB,EAAIlpB,OACnB,QAAQkxC,EAAYzqE,GAAGk0E,QACrB,IAAK,QAEC1B,EAAUvlD,OAASwlD,EAAQxlD,QAC7B2L,EAAS,GAEX45C,EAAUxmD,UAAUw2B,EAAMx2B,aAC1BwmD,EAAU1qD,KAAK06B,EAAM16B,QACrB0qD,EAAUl4C,SAAS,EAAG,QAEtBm4C,EAAQzmD,UAAUw2B,EAAMx2B,aACxBymD,EAAQ3qD,KAAK06B,EAAM16B,QACnB2qD,EAAQn4C,SAAS,EAAI1B,EAAQ,QAE7B07C,EAAS5nD,IAAI,EAAG,QAChB,MACF,KAAK,SACH,GAAI6nD,GAAY9B,EAAQ9uD,KAAK6uD,EAAW,QACpCvlD,EAAMulD,EAAUvlD,KAGpBulD,GAAUhpD,KAAKg5B,EAAMh5B,QACrBgpD,EAAUzqD,MAAMy6B,EAAMz6B,SACtByqD,EAAU1qD,KAAK06B,EAAM16B,QACrB2qD,EAAUD,EAAUj5C,QAGpBi5C,EAAUvlD,IAAIA,GACdwlD,EAAQxlD,IAAIA,GACZwlD,EAAQ/lD,IAAI6nD,EAAW,QAEvB/B,EAAUl4C,SAAS,EAAG,SACtBm4C,EAAQn4C,SAAS,EAAG,SAEpBg6C,EAAS5nD,IAAI,EAAG,QAChB,MACF,KAAK,UACC8lD,EAAUzqD,SAAW0qD,EAAQ1qD,UAC/B6Q,EAAS,GAEX45C,EAAUzqD,MAAMy6B,EAAMz6B,SACtByqD,EAAU1qD,KAAK06B,EAAM16B,QACrB0qD,EAAUl4C,SAAS,EAAG,UAEtBm4C,EAAQ1qD,MAAMy6B,EAAMz6B,SACpB0qD,EAAQ3qD,KAAK06B,EAAM16B,QACnB2qD,EAAQn4C,SAAS,EAAG,UACpBm4C,EAAQ/lD,IAAIkM,EAAQ,UAEpB07C,EAAS5nD,IAAI,EAAG,SAChB,MACF,KAAK,SACC8lD,EAAU1qD,QAAU2qD,EAAQ3qD,SAC9B8Q,EAAS,GAEX45C,EAAU1qD,KAAK06B,EAAM16B,QACrB0qD,EAAUl4C,SAAS,EAAG,SACtBm4C,EAAQ3qD,KAAK06B,EAAM16B,QACnB2qD,EAAQn4C,SAAS,EAAG,SACpBm4C,EAAQ/lD,IAAIkM,EAAQ,SAEpB07C,EAAS5nD,IAAI,EAAG,QAChB,MACF,SAEE,WADAnL,SAAQuuC,IAAI,2EAA4E2a,EAAYzqE,GAAGk0E,QAG3G,KAAO1B,EAAY8B,GAEjB,OADA1nE,EAAK69D,YAAY3pE,MAAO0hD,MAAOgwB,EAAUnxE,UAAWohD,IAAKgwB,EAAQpxE,YACzDopE,EAAYzqE,GAAGk0E,QACrB,IAAK,QACH1B,EAAU9lD,IAAI,EAAG,QACjB+lD,EAAQ/lD,IAAI,EAAG,OACf,MACF,KAAK,SACH8lD,EAAU9lD,IAAI,EAAG,SACjB+lD,EAAQ/lD,IAAI,EAAG,QACf,MACF,KAAK,UACH8lD,EAAU9lD,IAAI,EAAG,UACjB+lD,EAAQ/lD,IAAI,EAAG,SACf,MACF,KAAK,SACH8lD,EAAU9lD,IAAI,EAAG,KACjB+lD,EAAQ/lD,IAAI,EAAG,IACf,MACF,SAEE,WADAnL,SAAQuuC,IAAI,2EAA4E2a,EAAYzqE,GAAGk0E,QAI7GtnE,EAAK69D,YAAY3pE,MAAO0hD,MAAOgwB,EAAUnxE,UAAWohD,IAAKgwB,EAAQpxE,aAKvExF,EAAQ24E,iBAAiB5nE,EAEzB,IAAI6nE,GAAc54E,EAAQ64E,SAAS9nE,EAAK2qC,MAAMiL,MAAO51C,EAAK69D,aACtDkK,EAAY94E,EAAQ64E,SAAS9nE,EAAK2qC,MAAMkL,IAAK71C,EAAK69D,aAClDmK,EAAahoE,EAAK2qC,MAAMiL,MACxBqyB,EAAWjoE,EAAK2qC,MAAMkL,GACA,IAAtBgyB,EAAYK,SACdF,EAAwC,GAA3BhoE,EAAK2qC,MAAMm4B,aAAuB+E,EAAYjC,UAAY,EAAIiC,EAAYhC,QAAU,GAE3E,GAApBkC,EAAUG,SACZD,EAAoC,GAAzBjoE,EAAK2qC,MAAMo4B,WAAqBgF,EAAUnC,UAAY,EAAImC,EAAUlC,QAAU,GAEjE,GAAtBgC,EAAYK,QAAsC,GAApBH,EAAUG,QAC1CloE,EAAK2qC,MAAMi6B,YAAYoD,EAAYC,KAUzCh5E,EAAQ24E,iBAAmB,SAAU5nE,GAGnC,IAAK,GAFD69D,GAAc79D,EAAK69D,YACnBsK,KACK/0E,EAAI,EAAGA,EAAIyqE,EAAY5qE,OAAQG,IACtC,IAAK,GAAI8J,GAAI,EAAGA,EAAI2gE,EAAY5qE,OAAQiK,IAClC9J,GAAK8J,GAA8B,GAAzB2gE,EAAY3gE,GAAG6lC,QAA2C,GAAzB86B,EAAYzqE,GAAG2vC,SAExD86B,EAAY3gE,GAAG04C,OAASioB,EAAYzqE,GAAGwiD,OAASioB,EAAY3gE,GAAG24C,KAAOgoB,EAAYzqE,GAAGyiD,IACvFgoB,EAAY3gE,GAAG6lC,QAAS,EAGjB86B,EAAY3gE,GAAG04C,OAASioB,EAAYzqE,GAAGwiD,OAASioB,EAAY3gE,GAAG04C,OAASioB,EAAYzqE,GAAGyiD,KAC5FgoB,EAAYzqE,GAAGyiD,IAAMgoB,EAAY3gE,GAAG24C,IACpCgoB,EAAY3gE,GAAG6lC,QAAS,GAGjB86B,EAAY3gE,GAAG24C,KAAOgoB,EAAYzqE,GAAGwiD,OAASioB,EAAY3gE,GAAG24C,KAAOgoB,EAAYzqE,GAAGyiD,MACxFgoB,EAAYzqE,GAAGwiD,MAAQioB,EAAY3gE,GAAG04C,MACtCioB,EAAY3gE,GAAG6lC,QAAS,GAMpC,KAAK,GAAI3vC,GAAI,EAAGA,EAAIyqE,EAAY5qE,OAAQG,KACR,IAA1ByqE,EAAYzqE,GAAG2vC,QACjBolC,EAAUj0E,KAAK2pE,EAAYzqE,GAI/B4M,GAAK69D,YAAcsK,EACnBnoE,EAAK69D,YAAY3lD,KAAK,SAAUrlB,EAAGC,GACjC,MAAOD,GAAE+iD,MAAQ9iD,EAAE8iD,SAIvB3mD,EAAQm5E,WAAa,SAAU/tC,GAC7B,IAAK,GAAIjnC,GAAI,EAAGA,EAAIinC,EAAMpnC,OAAQG,IAChCuhB,QAAQuuC,IAAI9vD,EAAG,GAAIlB,MAAKmoC,EAAMjnC,GAAGwiD,OAAQ,GAAI1jD,MAAKmoC,EAAMjnC,GAAGyiD,KAAMxb,EAAMjnC,GAAGwiD,MAAOvb,EAAMjnC,GAAGyiD,IAAKxb,EAAMjnC,GAAG2vC,SAU5G9zC,EAAQo5E,oBAAsB,SAAUv3E,EAAQw3E,EAAUC,GAGxD,IAAK,GAFDC,IAAe,EACfC,EAAeH,EAASI,QAAQj0E,UAC3BrB,EAAI,EAAGA,EAAIk1E,EAASzK,YAAY5qE,OAAQG,IAAK,CACpD,GAAIwyE,GAAY0C,EAASzK,YAAYzqE,GAAGwiD,MACpCiwB,EAAUyC,EAASzK,YAAYzqE,GAAGyiD,GACtC,IAAI4yB,GAAgB7C,GAAa6C,EAAe5C,EAAS,CACvD2C,GAAe,CACf,QAIJ,GAAoB,GAAhBA,GAAwBC,EAAeH,EAAS5lB,KAAKjuD,WAAag0E,GAAgBF,EAAc,CAClG,GAAIlqE,GAAYvN,EAAOy3E,GACnBtzE,EAAWnE,EAAO+0E,EAElBxnE,GAAU6c,QAAUjmB,EAASimB,OAC/BotD,EAASK,cAAe,EACftqE,EAAU8c,SAAWlmB,EAASkmB,QACvCmtD,EAASM,eAAgB,EAChBvqE,EAAU+gB,aAAenqB,EAASmqB,cAC3CkpD,EAASO,aAAc,GAGzBP,EAASI,QAAUzzE,IAkCvBhG,EAAQ8uE,SAAW,SAAUxC,EAAM9rC,EAAMhwB,GACvC,GAAoC,GAAhC87D,EAAKv7D,KAAK69D,YAAY5qE,OAAa,CACrC,GAAI6wE,GAAavI,EAAK5wB,MAAMm5B,WAAWrkE,EACvC,QAAQgwB,EAAKh7B,UAAYqvE,EAAW93C,QAAU83C,EAAWjyE,MAEzD,GAAIq2E,GAASj5E,EAAQ64E,SAASr4C,EAAM8rC,EAAKv7D,KAAK69D,YACzB,IAAjBqK,EAAOA,SACTz4C,EAAOy4C,EAAOtC,UAGhB,IAAI36C,GAAWh8B,EAAQs2E,yBAAyBhK,EAAKv7D,KAAK69D,YAAatC,EAAK5wB,MAAMiL,MAAO2lB,EAAK5wB,MAAMkL,IACpG,IAAIpmB,EAAO8rC,EAAK5wB,MAAMiL,MAAO,CAC3B,GAAIkuB,GAAavI,EAAK5wB,MAAMm5B,WAAWrkE,EAAOwrB,GAC1C69C,EAAoB75E,EAAQ85E,6BAA6BxN,EAAKv7D,KAAK69D,YAAapuC,EAAMq0C,EAAW93C,OAGrG,OAFAyD,GAAO8rC,EAAKl+D,QAAQvM,OAAO2+B,GAAM96B,SAASF,UAC1Cg7B,GAAcq5C,IACLhF,EAAW93C,OAASyD,EAAKh7B,WAAaqvE,EAAWjyE,MACrD,GAAI49B,EAAO8rC,EAAK5wB,MAAMkL,IAAK,CAChC,GAAImzB,IAAkBpzB,MAAO2lB,EAAK5wB,MAAMiL,MAAOC,IAAKpmB,EACpDA,GAAOxgC,EAAQg6E,qBAAqB1N,EAAKl+D,QAAQvM,OAAQyqE,EAAKv7D,KAAK69D,YAAamL,EAAev5C,EAC/F,IAAIq0C,GAAavI,EAAK5wB,MAAMm5B,WAAWrkE,EAAOwrB,EAC9C,QAAQwE,EAAKh7B,UAAYqvE,EAAW93C,QAAU83C,EAAWjyE,MAEzD49B,EAAOxgC,EAAQg6E,qBAAqB1N,EAAKl+D,QAAQvM,OAAQyqE,EAAKv7D,KAAK69D,YAAatC,EAAK5wB,MAAOlb,EAC5F,IAAIq0C,GAAavI,EAAK5wB,MAAMm5B,WAAWrkE,EAAOwrB,EAC9C,QAAQwE,EAAKh7B,UAAYqvE,EAAW93C,QAAU83C,EAAWjyE,OAa/D5C,EAAQkvE,OAAS,SAAU5C,EAAMn3C,EAAG3kB,GAClC,GAAoC,GAAhC87D,EAAKv7D,KAAK69D,YAAY5qE,OAAa,CACrC,GAAI6wE,GAAavI,EAAK5wB,MAAMm5B,WAAWrkE,EACvC,OAAO,IAAIvN,MAAKkyB,EAAI0/C,EAAWjyE,MAAQiyE,EAAW93C,QAElD,GAAIs6C,GAAiBr3E,EAAQs2E,yBAAyBhK,EAAKv7D,KAAK69D,YAAatC,EAAK5wB,MAAMiL,MAAO2lB,EAAK5wB,MAAMkL,KACtGqzB,EAAgB3N,EAAK5wB,MAAMkL,IAAM0lB,EAAK5wB,MAAMiL,MAAQ0wB,EACpD6C,EAAkBD,EAAgB9kD,EAAI3kB,EACtC2pE,EAA4Bn6E,EAAQo6E,6BAA6B9N,EAAKv7D,KAAK69D,YAAatC,EAAK5wB,MAAOw+B,EAGxG,OADc,IAAIj3E,MAAKk3E,EAA4BD,EAAkB5N,EAAK5wB,MAAMiL,QAYpF3mD,EAAQs2E,yBAA2B,SAAU1H,EAAajoB,EAAOC,GAE/D,IAAK,GADD5qB,GAAW,EACN73B,EAAI,EAAGA,EAAIyqE,EAAY5qE,OAAQG,IAAK,CAC3C,GAAIwyE,GAAY/H,EAAYzqE,GAAGwiD,MAC3BiwB,EAAUhI,EAAYzqE,GAAGyiD,GAEzB+vB,IAAahwB,GAASiwB,EAAUhwB,IAClC5qB,GAAY46C,EAAUD,GAG1B,MAAO36C,IAWTh8B,EAAQ85E,6BAA+B,SAAUlL,EAAajoB,EAAOC,GAEnE,IAAK,GADD5qB,GAAW,EACN73B,EAAI,EAAGA,EAAIyqE,EAAY5qE,OAAQG,IAAK,CAC3C,GAAIwyE,GAAY/H,EAAYzqE,GAAGwiD,MAC3BiwB,EAAUhI,EAAYzqE,GAAGyiD,GAEzB+vB,IAAahwB,GAASiwB,GAAWhwB,IACnC5qB,GAAY46C,EAAUD,GAG1B,MAAO36C,IAWTh8B,EAAQg6E,qBAAuB,SAAUn4E,EAAQ+sE,EAAalzB,EAAOlb,GAGnE,MAFAA,GAAO3+B,EAAO2+B,GAAM96B,SAASF,UAC7Bg7B,GAAQxgC,EAAQu3E,wBAAwB11E,EAAQ+sE,EAAalzB,EAAOlb,IAItExgC,EAAQu3E,wBAA0B,SAAU11E,EAAQ+sE,EAAalzB,EAAOlb,GACtE,GAAI65C,GAAa,CACjB75C,GAAO3+B,EAAO2+B,GAAM96B,SAASF,SAE7B,KAAK,GAAIrB,GAAI,EAAGA,EAAIyqE,EAAY5qE,OAAQG,IAAK,CAC3C,GAAIwyE,GAAY/H,EAAYzqE,GAAGwiD,MAC3BiwB,EAAUhI,EAAYzqE,GAAGyiD,GAEzB+vB,IAAaj7B,EAAMiL,OAASiwB,EAAUl7B,EAAMkL,KAC1CpmB,GAAQo2C,IACVyD,GAAczD,EAAUD,GAI9B,MAAO0D,IAWTr6E,EAAQo6E,6BAA+B,SAAUxL,EAAalzB,EAAO4+B,GAKnE,IAAK,GAJDjD,GAAiB,EACjBr7C,EAAW,EACXu+C,EAAgB7+B,EAAMiL,MAEjBxiD,EAAI,EAAGA,EAAIyqE,EAAY5qE,OAAQG,IAAK,CAC3C,GAAIwyE,GAAY/H,EAAYzqE,GAAGwiD,MAC3BiwB,EAAUhI,EAAYzqE,GAAGyiD,GAE7B,IAAI+vB,GAAaj7B,EAAMiL,OAASiwB,EAAUl7B,EAAMkL,IAAK,CAGnD,GAFA5qB,GAAY26C,EAAY4D,EACxBA,EAAgB3D,EACZ56C,GAAYs+C,EACd,KAEAjD,IAAkBT,EAAUD,GAKlC,MAAOU,IAWTr3E,EAAQy2E,mBAAqB,SAAU7H,EAAapuC,EAAMR,EAAWw6C,GACnE,GAAI3B,GAAW74E,EAAQ64E,SAASr4C,EAAMouC,EACtC,OAAuB,IAAnBiK,EAASI,OACPj5C,EAAY,EACW,GAArBw6C,EACK3B,EAASlC,WAAakC,EAASjC,QAAUp2C,GAAQ,EAEjDq4C,EAASlC,UAAY,EAGL,GAArB6D,EACK3B,EAASjC,SAAWp2C,EAAOq4C,EAASlC,WAAa,EAEjDkC,EAASjC,QAAU,EAIvBp2C,GAWXxgC,EAAQ64E,SAAW,SAAUr4C,EAAMouC,GACjC,IAAK,GAAIzqE,GAAI,EAAGA,EAAIyqE,EAAY5qE,OAAQG,IAAK,CAC3C,GAAIwyE,GAAY/H,EAAYzqE,GAAGwiD,MAC3BiwB,EAAUhI,EAAYzqE,GAAGyiD,GAE7B,IAAIpmB,GAAQm2C,GAAan2C,EAAOo2C,EAE9B,OAASqC,QAAQ,EAAMtC,UAAWA,EAAWC,QAASA,GAG1D,OAASqC,QAAQ,EAAOtC,UAAWA,EAAWC,QAASA,KAKrD,SAAU32E,EAAQD,EAASM,GAY/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAmBzF,QAASorE,MA3BT,GAAI/uD,GAAajd,EAAoB,IAEjC+wC,EAAcpwC,EAAuBsc,GAErC5b,EAAWrB,EAAoB,IAE/BsB,EAAWX,EAAuBU,GAIlC+1C,EAAUp3C,EAAoB,IAC9B8uC,EAAS9uC,EAAoB,KAC7Bm6E,EAAan6E,EAAoB,KACjCS,EAAOT,EAAoB,GAK3BotE,GAJUptE,EAAoB,IACnBA,EAAoB,IACvBA,EAAoB,KAClBA,EAAoB,KACnBA,EAAoB,MAC/Bo6E,EAAYp6E,EAAoB,KAChCisE,EAAWjsE,EAAoB,KAC/B4sE,EAAa5sE,EAAoB,IASrCo3C,GAAQ40B,EAAK75D,WASb65D,EAAK75D,UAAUlR,QAAU,SAAU+0C,GA0IjC,QAASqkC,GAAahyE,GAMpB,GALIvI,KAAKw6E,YACPx6E,KAAKktD,KAAK,aAAc3kD,GAIrBvI,KAAKgO,QAAQysE,iBAAkBz6E,KAAKgO,QAAQ0oE,kBAG5C12E,KAAKgO,QAAQyoE,UAAWluE,EAAMvI,KAAKgO,QAAQyoE,SAAhD,CAIAluE,EAAMD,gBAEN,IAAI64B,GAAQ,CACR54B,GAAM0lD,WAER9sB,EAAQ54B,EAAM0lD,WAAa,IAClB1lD,EAAM2lD,SAIf/sB,GAAS54B,EAAM2lD,OAAS,EAG1B,IAAImrB,GAAUr5E,KAAKkE,MAAMw2E,UACrBC,EAAWtB,EAAkB,IAARl4C,CAErBnhC,MAAKw6E,aACPx6E,KAAK46E,cAAcD,GACnB36E,KAAKqwE,UACLrwE,KAAKktD,KAAK,SAAU3kD,KAcxB,QAASsyE,GAAkBtyE,GACzB,GAAKwpC,EAAG/jC,QAAQysE,iBAChBlyE,EAAMD,iBACFypC,EAAGyoC,YAAY,CACjB,GAAIG,IAAYpyE,EAAMI,OAAO+xE,SAC7B3oC,GAAG6oC,cAAcD,GACjB5oC,EAAGs+B,UACHt+B,EAAGmb,KAAK,aAAc3kD,IAS1B,QAASuyE,GAAevyE,GAMtB,GALIA,EAAMD,gBACRC,EAAMD,oBAIHC,EAAMI,OAAOjC,UAAU9B,QAAQ,QAAU,GAG1Cm2E,GAIJ,MAFAxyE,GAAMyyE,aAAaC,WAAa,OAChCF,GAAsB,GACf,EAGT,QAASG,GAAW3yE,GAEdA,EAAMD,gBACRC,EAAMD,iBAEJC,EAAM6uD,iBACR7uD,EAAM6uD,iBAGR,KAEE,IADel6C,KAAKja,MAAMsF,EAAMyyE,aAAaG,QAAQ,SACvC5qC,QAAS,OACvB,MAAO3+B,GACP,OAAO,EAUT,MAPAmpE,IAAsB,EACtBxyE,EAAMozC,QACJ5mB,EAAGxsB,EAAMyuC,QACTroB,EAAGpmB,EAAM4uC,SAEXpF,EAAGq9B,QAAQgM,WAAW7yE,GACtBwpC,EAAGmb,KAAK,OAAQnb,EAAGw9B,mBAAmBhnE,KAC/B,EA9OTvI,KAAKivD,OAELjvD,KAAKivD,IAAI/Y,UAAYA,EAErBl2C,KAAKivD,IAAIvvD,KAAOwQ,SAASC,cAAc,OACvCnQ,KAAKivD,IAAIvjD,WAAawE,SAASC,cAAc,OAC7CnQ,KAAKivD,IAAIosB,mBAAqBnrE,SAASC,cAAc,OACrDnQ,KAAKivD,IAAIqsB,qBAAuBprE,SAASC,cAAc,OACvDnQ,KAAKivD,IAAIqjB,gBAAkBpiE,SAASC,cAAc,OAClDnQ,KAAKivD,IAAIssB,cAAgBrrE,SAASC,cAAc,OAChDnQ,KAAKivD,IAAIusB,eAAiBtrE,SAASC,cAAc,OACjDnQ,KAAKivD,IAAItT,OAASzrC,SAASC,cAAc,OACzCnQ,KAAKivD,IAAI/oD,KAAOgK,SAASC,cAAc,OACvCnQ,KAAKivD,IAAI7oD,MAAQ8J,SAASC,cAAc,OACxCnQ,KAAKivD,IAAI3oD,IAAM4J,SAASC,cAAc,OACtCnQ,KAAKivD,IAAIxQ,OAASvuC,SAASC,cAAc,OACzCnQ,KAAKivD,IAAIwsB,UAAYvrE,SAASC,cAAc,OAC5CnQ,KAAKivD,IAAIysB,aAAexrE,SAASC,cAAc,OAC/CnQ,KAAKivD,IAAI0sB,cAAgBzrE,SAASC,cAAc,OAChDnQ,KAAKivD,IAAI2sB,iBAAmB1rE,SAASC,cAAc,OACnDnQ,KAAKivD,IAAI4sB,eAAiB3rE,SAASC,cAAc,OACjDnQ,KAAKivD,IAAI6sB,kBAAoB5rE,SAASC,cAAc,OACpDnQ,KAAKivD,IAAIslB,eAAiBrkE,SAASC,cAAc,OAEjDnQ,KAAKivD,IAAIvvD,KAAKgH,UAAY,eAC1B1G,KAAKivD,IAAIvjD,WAAWhF,UAAY,2BAChC1G,KAAKivD,IAAIosB,mBAAmB30E,UAAY,wCACxC1G,KAAKivD,IAAIqsB,qBAAqB50E,UAAY,0CAC1C1G,KAAKivD,IAAIqjB,gBAAgB5rE,UAAY,uBACrC1G,KAAKivD,IAAIssB,cAAc70E,UAAY,qBACnC1G,KAAKivD,IAAIusB,eAAe90E,UAAY,sBACpC1G,KAAKivD,IAAI3oD,IAAII,UAAY,oBACzB1G,KAAKivD,IAAIxQ,OAAO/3C,UAAY,uBAC5B1G,KAAKivD,IAAI/oD,KAAKQ,UAAY,cAC1B1G,KAAKivD,IAAItT,OAAOj1C,UAAY,cAC5B1G,KAAKivD,IAAI7oD,MAAMM,UAAY,cAC3B1G,KAAKivD,IAAIwsB,UAAU/0E,UAAY,qBAC/B1G,KAAKivD,IAAIysB,aAAah1E,UAAY,wBAClC1G,KAAKivD,IAAI0sB,cAAcj1E,UAAY,qBACnC1G,KAAKivD,IAAI2sB,iBAAiBl1E,UAAY,wBACtC1G,KAAKivD,IAAI4sB,eAAen1E,UAAY,qBACpC1G,KAAKivD,IAAI6sB,kBAAkBp1E,UAAY,wBACvC1G,KAAKivD,IAAIslB,eAAe7tE,UAAY,uBAEpC1G,KAAKivD,IAAIvvD,KAAKgR,YAAY1Q,KAAKivD,IAAIvjD,YACnC1L,KAAKivD,IAAIvvD,KAAKgR,YAAY1Q,KAAKivD,IAAIosB,oBACnCr7E,KAAKivD,IAAIvvD,KAAKgR,YAAY1Q,KAAKivD,IAAIqsB,sBACnCt7E,KAAKivD,IAAIvvD,KAAKgR,YAAY1Q,KAAKivD,IAAIqjB,iBACnCtyE,KAAKivD,IAAIvvD,KAAKgR,YAAY1Q,KAAKivD,IAAIssB,eACnCv7E,KAAKivD,IAAIvvD,KAAKgR,YAAY1Q,KAAKivD,IAAIusB,gBACnCx7E,KAAKivD,IAAIvvD,KAAKgR,YAAY1Q,KAAKivD,IAAI3oD,KACnCtG,KAAKivD,IAAIvvD,KAAKgR,YAAY1Q,KAAKivD,IAAIxQ,QACnCz+C,KAAKivD,IAAIvvD,KAAKgR,YAAY1Q,KAAKivD,IAAIxQ,QACnCz+C,KAAKivD,IAAIvvD,KAAKgR,YAAY1Q,KAAKivD,IAAIslB,gBAEnCv0E,KAAKivD,IAAIqjB,gBAAgB5hE,YAAY1Q,KAAKivD,IAAItT,QAC9C37C,KAAKivD,IAAIssB,cAAc7qE,YAAY1Q,KAAKivD,IAAI/oD,MAC5ClG,KAAKivD,IAAIusB,eAAe9qE,YAAY1Q,KAAKivD,IAAI7oD,OAC7CpG,KAAKivD,IAAIqjB,gBAAgB5hE,YAAY1Q,KAAKivD,IAAIwsB,WAC9Cz7E,KAAKivD,IAAIqjB,gBAAgB5hE,YAAY1Q,KAAKivD,IAAIysB,cAC9C17E,KAAKivD,IAAIssB,cAAc7qE,YAAY1Q,KAAKivD,IAAI0sB,eAC5C37E,KAAKivD,IAAIssB,cAAc7qE,YAAY1Q,KAAKivD,IAAI2sB,kBAC5C57E,KAAKivD,IAAIusB,eAAe9qE,YAAY1Q,KAAKivD,IAAI4sB,gBAC7C77E,KAAKivD,IAAIusB,eAAe9qE,YAAY1Q,KAAKivD,IAAI6sB,mBAG7C97E,KAAKkE,OACHxE,QACAgM,cACA4mE,mBACAiJ,iBACAC,kBACA7/B,UACAz1C,QACAE,SACAE,OACAm4C,UACA9yC,UACA+uE,UAAW,EACXqB,aAAc,GAGhB/7E,KAAKqxC,GAAG,cAAe,YACQ,IAAzBrxC,KAAKg8E,iBACPh8E,KAAKqwE,WAEP/Y,KAAKt3D,OACPA,KAAKqxC,GAAG,QAASrxC,KAAKq0E,SAAS/c,KAAKt3D,OACpCA,KAAKqxC,GAAG,UAAWrxC,KAAKk0E,QAAQ5c,KAAKt3D,MAErC,IAAI+xC,GAAK/xC,IACTA,MAAKi8E,YAAcj8E,KAAKqwE,QAAQ/Y,KAAKt3D,MACrCA,KAAKqwE,QAAU1vE,EAAK6G,SAASxH,KAAKi8E,aAElCj8E,KAAKqxC,GAAG,UAAW,SAAUwnB,GACvB9mB,EAAGq9B,SAAWr9B,EAAGq9B,QAAQ8M,qBAAuBrjB,GAAkC,GAApBA,EAAW3nB,MAC3Ea,EAAGs+B,UAEHt+B,EAAGkqC,gBAMPj8E,KAAK82D,OAAS,GAAI9nB,GAAOhvC,KAAKivD,IAAIvvD,KAClC,IAAIi4E,GAAkB33E,KAAK82D,OAAOr/C,IAAI,SAASsH,KAAMg8C,QAAQ,GAC7Dsf,GAAW3C,gCAAgCC,GAC3C33E,KAAK82D,OAAOr/C,IAAI,OAAOsH,KAAMmnB,UAAW,EAAGtG,UAAWoP,EAAO+1B,uBAC7D/kE,KAAKswD,cAES,MAAO,YAAa,QAAS,QAAS,MAAO,WAAY,UAAW,UAO3EppD,QAAQ,SAAUjC,GACvB,GAAI8C,GAAW,SAAkBQ,GAC3BwpC,EAAGyoC,YACLzoC,EAAGmb,KAAKjoD,EAAMsD,GAGlBwpC,GAAG+kB,OAAOzlB,GAAGpsC,EAAM8C,GACnBgqC,EAAGue,UAAUrrD,GAAQ8C,IAIvBsyE,EAAW/C,QAAQt3E,KAAK82D,OAAQ,SAAUvuD,GACxCwpC,EAAGmb,KAAK,QAAS3kD,IACjB+uD,KAAKt3D,OAGPq6E,EAAW9C,UAAUv3E,KAAK82D,OAAQ,SAAUvuD,GAC1CwpC,EAAGmb,KAAK,UAAW3kD,IACnB+uD,KAAKt3D,OAsCHA,KAAKivD,IAAIqjB,gBAAgB1qE,kBAE3B5H,KAAKivD,IAAIqjB,gBAAgB1qE,iBAAiB,aAAc2yE,EAAajjB,KAAKt3D,OAAO,GAEjFA,KAAKivD,IAAIqjB,gBAAgB1qE,iBAAiB,iBAAkB2yE,EAAajjB,KAAKt3D,OAAO,IAGrFA,KAAKivD,IAAIqjB,gBAAgBnqE,YAAY,eAAgBoyE,EAAajjB,KAAKt3D,OAczEA,KAAKivD,IAAI/oD,KAAK4C,WAAWlB,iBAAiB,SAAUizE,EAAkBvjB,KAAKt3D,OAC3EA,KAAKivD,IAAI7oD,MAAM0C,WAAWlB,iBAAiB,SAAUizE,EAAkBvjB,KAAKt3D,MAE5E,IAAI+6E,IAAsB,CAwD1B,IAZA/6E,KAAKivD,IAAItT,OAAO/zC,iBAAiB,WAAYkzE,EAAexjB,KAAKt3D,OAAO,GACxEA,KAAKivD,IAAItT,OAAO/zC,iBAAiB,OAAQszE,EAAW5jB,KAAKt3D,OAAO,GAEhEA,KAAKm8E,eAGLn8E,KAAKygE,SAELzgE,KAAKo8E,YAAc,EACnBp8E,KAAKg8E,iBAAkB,GAGlB9lC,EAAW,KAAM,IAAI7xC,OAAM,wBAChC6xC,GAAUxlC,YAAY1Q,KAAKivD,IAAIvvD,OA4BjCwsE,EAAK75D,UAAU2+B,WAAa,SAAUhjC,GACpC,GAAIA,EAAS,CAEX,GAAIV,IAAU,QAAS,SAAU,YAAa,YAAa,aAAc,QAAS,MAAO,aAAc,iBAAkB,cAAe,SAAU,UAAW,SAAU,MAAO,UAAW,mBAAoB,iBAmC7M,IAlCA3M,EAAKsD,gBAAgBqJ,EAAQtN,KAAKgO,QAASA,GAE3ChO,KAAKivD,IAAIslB,eAAeloE,MAAMmE,WAAa,SAEvCxQ,KAAKgO,QAAQggE,MACfhuE,KAAKivD,IAAI/Y,UAAU7pC,MAAMuzB,UAAY,MACrC5/B,KAAKivD,IAAIosB,mBAAmB30E,UAAY,6CAGtC1G,KAAKgO,QAAQysE,iBACXz6E,KAAKgO,QAAQggE,IACfhuE,KAAKivD,IAAIusB,eAAe90E,UAAY,0CAEpC1G,KAAKivD,IAAIssB,cAAc70E,UAAY,0CAIvC1G,KAAKgO,QAAQ4/D,aAAgBh/D,SAAM/K,GAAWgqE,SAAMhqE,IAChD,eAAiBmK,KACgB,gBAAxBA,GAAQ4/D,YACjB5tE,KAAKgO,QAAQ4/D,aACXh/D,KAAMZ,EAAQ4/D,YACdC,KAAM7/D,EAAQ4/D,aAE2C,YAAlD,EAAIpsE,EAAkB,SAAGwM,EAAQ4/D,eACtC,QAAU5/D,GAAQ4/D,cACpB5tE,KAAKgO,QAAQ4/D,YAAYh/D,KAAOZ,EAAQ4/D,YAAYh/D,MAElD,QAAUZ,GAAQ4/D,cACpB5tE,KAAKgO,QAAQ4/D,YAAYC,KAAO7/D,EAAQ4/D,YAAYC,QAKpB,SAAlC7tE,KAAKgO,QAAQ4/D,YAAYC,MAC3B,IAAK7tE,KAAKkvE,UAAW,CACnB,GAAIA,GAAYlvE,KAAKkvE,UAAY,GAAI5B,GAASttE,KAAK2Q,KACnDu+D,GAAUl+B,WAAa,SAAUhjC,GAC/B,GAAI2iC,GAAW3iC,EAAUrN,EAAKC,UAAWoN,KACzC2iC,GAASi9B,YAAc,MACvBN,EAASj7D,UAAU2+B,WAAWzwC,KAAK2uE,EAAWv+B,IAEhD3wC,KAAKqsE,WAAWxnE,KAAKqqE,QAGvB,IAAIlvE,KAAKkvE,UAAW,CAClB,GAAIn8D,GAAQ/S,KAAKqsE,WAAWznE,QAAQ5E,KAAKkvE,YAC1B,IAAXn8D,GACF/S,KAAKqsE,WAAWx0C,OAAO9kB,EAAO,GAEhC/S,KAAKkvE,UAAU99B,UACfpxC,KAAKkvE,UAAY,KA4BrB,GAvBiC,kBAAtBlhE,GAAQquE,aACjBruE,EAAQquE,YACNC,SAAUtuE,EAAQquE,aAIlB,eAAiBr8E,MAAKgO,SACxBm+D,EAAS6L,qBAAqBh4E,KAAKgO,QAAQvM,OAAQzB,KAAK2Q,KAAM3Q,KAAKgO,QAAQwgE,aAGzE,cAAgBxgE,KACdA,EAAQuuE,WACLv8E,KAAKw8E,YACRx8E,KAAKw8E,UAAY,GAAIlC,GAAUt6E,KAAKivD,IAAIvvD,OAGtCM,KAAKw8E,YACPx8E,KAAKw8E,UAAUprC,gBACRpxC,MAAKw8E,YAKd,kBAAoBxuE,GACtB,KAAM,IAAI3J,OAAM,0GAIlBrE,MAAKy8E,kBASP,GALAz8E,KAAKqsE,WAAWnlE,QAAQ,SAAUw1E,GAChC,MAAOA,GAAU1rC,WAAWhjC,KAI1B,aAAeA,GAAS,CACrBhO,KAAK28E,eACR38E,KAAK28E,aAAe38E,KAAK2wE,uBAG3B3wE,KAAK28E,aAAa3rC,WAAWhjC,EAAQ4uE,UAGrC,IAAIC,GAAiBl8E,EAAK+D,cAAe1E,KAAKgO,QAC9ChO,MAAKqsE,WAAWnlE,QAAQ,SAAUw1E,GAChC/7E,EAAK+D,WAAWm4E,EAAgBH,EAAU1uE,WAE5ChO,KAAK28E,aAAaG,kBAAmBjrE,OAAQgrE,IAG/C78E,KAAKqwE,WAOPnE,EAAK75D,UAAUmoE,SAAW,WACxB,OAAQx6E,KAAKw8E,WAAax8E,KAAKw8E,UAAUO,QAM3C7Q,EAAK75D,UAAU++B,QAAU,WAEvBpxC,KAAKowE,SAAS,MACdpwE,KAAKmwE,UAAU,MAGfnwE,KAAKwxC,MAGLxxC,KAAKg9E,kBAGDh9E,KAAKivD,IAAIvvD,KAAKoJ,YAChB9I,KAAKivD,IAAIvvD,KAAKoJ,WAAW5G,YAAYlC,KAAKivD,IAAIvvD,MAEhDM,KAAKivD,IAAM,KAGPjvD,KAAKw8E,YACPx8E,KAAKw8E,UAAUprC,gBACRpxC,MAAKw8E,UAId,KAAK,GAAIj0E,KAASvI,MAAKswD,UACjBtwD,KAAKswD,UAAUhtD,eAAeiF,UACzBvI,MAAKswD,UAAU/nD,EAG1BvI,MAAKswD,UAAY,KACjBtwD,KAAK82D,OAAS,KAGd92D,KAAKqsE,WAAWnlE,QAAQ,SAAUw1E,GAChC,MAAOA,GAAUtrC,YAGnBpxC,KAAK2Q,KAAO,MAQdu7D,EAAK75D,UAAU4qE,cAAgB,SAAU78C,EAAM//B,GAC7C,GAAI87E,GAAcn8E,KAAKm8E,YAAYr1E,OAAO,SAAU41E,GAClD,MAAOr8E,KAAOq8E,EAAU1uE,QAAQ3N,IAGlC,IAA2B,IAAvB87E,EAAYv4E,OACd,KAAM,IAAIS,OAAM,qCAAsC,EAAI4sC,EAAqB,SAAG5wC,GAGhF87E,GAAYv4E,OAAS,GACvBu4E,EAAY,GAAGc,cAAc78C,IASjC8rC,EAAK75D,UAAU6qE,cAAgB,SAAU78E,GACvC,GAAI87E,GAAcn8E,KAAKm8E,YAAYr1E,OAAO,SAAU41E,GAClD,MAAOA,GAAU1uE,QAAQ3N,KAAOA,GAGlC,IAA2B,IAAvB87E,EAAYv4E,OACd,KAAM,IAAIS,OAAM,qCAAsC,EAAI4sC,EAAqB,SAAG5wC,GAEpF,OAAO87E,GAAY,GAAGe,iBAQxBhR,EAAK75D,UAAU8qE,mBAAqB,SAAUC,EAAO/8E,GACnD,GAAI87E,GAAcn8E,KAAKm8E,YAAYr1E,OAAO,SAAU41E,GAClD,MAAOA,GAAU1uE,QAAQ3N,KAAOA,GAGlC,IAA2B,IAAvB87E,EAAYv4E,OACd,KAAM,IAAIS,OAAM,qCAAsC,EAAI4sC,EAAqB,SAAG5wC,GAEpF,IAAI87E,EAAYv4E,OAAS,EACvB,MAAOu4E,GAAY,GAAGkB,eAAeD,IAUzClR,EAAK75D,UAAUk9D,mBAAqB,SAAUhnE,GAC5C,OAASA,MAAOA,IAalB2jE,EAAK75D,UAAUirE,cAAgB,SAAUl9C,EAAM//B,GAC7C,GAAIk9E,OAAqB15E,KAATu8B,EAAqBz/B,EAAKqE,QAAQo7B,EAAM,QAAQh7B,UAAY,GAAIvC,KAKhF,IAHa7C,KAAKm8E,YAAY11C,KAAK,SAAUgsC,GAC3C,MAAOA,GAAWzkE,QAAQ3N,KAAOA,IAGjC,KAAM,IAAIgE,OAAM,0BAA2B,EAAI4sC,EAAqB,SAAG5wC,GAAM,kBAG/E,IAAIoyE,GAAa,GAAI3F,GAAW9sE,KAAK2Q,KAAMhQ,EAAKC,UAAWZ,KAAKgO,SAC9DoyB,KAAMm9C,EACNl9E,GAAIA,IAON,OAJAL,MAAKm8E,YAAYt3E,KAAK4tE,GACtBzyE,KAAKqsE,WAAWxnE,KAAK4tE,GACrBzyE,KAAKqwE,UAEEhwE,GAQT6rE,EAAK75D,UAAUmrE,iBAAmB,SAAUn9E,GAC1C,GAAI87E,GAAcn8E,KAAKm8E,YAAYr1E,OAAO,SAAUkrD,GAClD,MAAOA,GAAIhkD,QAAQ3N,KAAOA,GAG5B,IAA2B,IAAvB87E,EAAYv4E,OACd,KAAM,IAAIS,OAAM,qCAAsC,EAAI4sC,EAAqB,SAAG5wC,GAGpF87E,GAAYj1E,QAAQ,SAAUurE,GAC5BzyE,KAAKm8E,YAAYtkD,OAAO73B,KAAKm8E,YAAYv3E,QAAQ6tE,GAAa,GAC9DzyE,KAAKqsE,WAAWx0C,OAAO73B,KAAKqsE,WAAWznE,QAAQ6tE,GAAa,GAC5DA,EAAWrhC,WACXkmB,KAAKt3D,QAOTksE,EAAK75D,UAAUorE,gBAAkB,WAC/B,MAAOz9E,MAAKovE,SAAWpvE,KAAKovE,QAAQqO,uBActCvR,EAAK75D,UAAU69D,IAAM,SAAUliE,EAAS7G,GACtC,GAAIm0C,GAAQt7C,KAAKuxE,cAGjB,IAAkB,OAAdj2B,EAAMl5C,KAA8B,OAAdk5C,EAAMj5C,IAAhC,CAKA,GAAIqwD,GAAWpX,EAAMj5C,IAAMi5C,EAAMl5C,IAC7BA,EAAM,GAAIS,MAAKy4C,EAAMl5C,IAAIgD,UAAuB,IAAXstD,GACrCrwD,EAAM,GAAIQ,MAAKy4C,EAAMj5C,IAAI+C,UAAuB,IAAXstD,GACrCud,GAAYjiE,OAAiCnK,KAAtBmK,EAAQiiE,WAA0BjiE,EAAQiiE,SACrEjwE,MAAKs7C,MAAMkY,SAASpxD,EAAKC,GAAO4tE,UAAWA,GAAa9oE,KAQ1D+kE,EAAK75D,UAAUk/D,aAAe,WAE5B,KAAM,IAAIltE,OAAM,+CAyBlB6nE,EAAK75D,UAAU29D,UAAY,SAAUzpB,EAAOC,EAAKx4C,EAAS7G,GAC7B,kBAAhBxD,WAAU,KACnBwD,EAAWxD,UAAU,GACrBqK,KAEF,IAAIiiE,EACJ,IAAwB,GAApBtsE,UAAUC,OAAa,CACzB,GAAI03C,GAAQ33C,UAAU,EACtBssE,OAAgCpsE,KAApBy3C,EAAM20B,WAA0B30B,EAAM20B,UAClDjwE,KAAKs7C,MAAMkY,SAASlY,EAAMiL,MAAOjL,EAAMkL,KAAOypB,UAAWA,QACpD,IAAwB,GAApBtsE,UAAUC,QAAsC,kBAAhBD,WAAU,GAAkB,CACrE,GAAI23C,GAAQ33C,UAAU,EACtBwD,GAAWxD,UAAU,GACrBssE,MAAgCpsE,KAApBy3C,EAAM20B,WAA0B30B,EAAM20B,UAClDjwE,KAAKs7C,MAAMkY,SAASlY,EAAMiL,MAAOjL,EAAMkL,KAAOypB,UAAWA,GAAa9oE,OAEtE8oE,IAAYjiE,OAAiCnK,KAAtBmK,EAAQiiE,WAA0BjiE,EAAQiiE,UACjEjwE,KAAKs7C,MAAMkY,SAASjN,EAAOC,GAAOypB,UAAWA,GAAa9oE,IAgB9D+kE,EAAK75D,UAAU0zC,OAAS,SAAU3lB,EAAMpyB,EAAS7G,GACpB,kBAAhBxD,WAAU,KACnBwD,EAAWxD,UAAU,GACrBqK,KAEF,IAAI0kD,GAAW1yD,KAAKs7C,MAAMkL,IAAMxmD,KAAKs7C,MAAMiL,MACvCt5C,EAAItM,EAAKqE,QAAQo7B,EAAM,QAAQh7B,UAE/BmhD,EAAQt5C,EAAIylD,EAAW,EACvBlM,EAAMv5C,EAAIylD,EAAW,EACrBud,GAAYjiE,OAAiCnK,KAAtBmK,EAAQiiE,WAA0BjiE,EAAQiiE,SAErEjwE,MAAKs7C,MAAMkY,SAASjN,EAAOC,GAAOypB,UAAWA,GAAa9oE,IAO5D+kE,EAAK75D,UAAUqrE,UAAY,WACzB,GAAIpiC,GAAQt7C,KAAKs7C,MAAMu6B,UACvB,QACEtvB,MAAO,GAAI1jD,MAAKy4C,EAAMiL,OACtBC,IAAK,GAAI3jD,MAAKy4C,EAAMkL,OAgBxB0lB,EAAK75D,UAAUsrE,OAAS,SAAUC,EAAY5vE,EAAS7G,GACrD,MAAKy2E,GAAcA,EAAa,GAAKA,EAAa,GAAlD,CAC2B,kBAAhBj6E,WAAU,KACnBwD,EAAWxD,UAAU,GACrBqK,KAEF,IAAIstC,GAAQt7C,KAAK09E,YACbn3B,EAAQjL,EAAMiL,MAAMnhD,UACpBohD,EAAMlL,EAAMkL,IAAIphD,UAChBstD,EAAWlM,EAAMD,EACjBs3B,EAAcnrB,GAAY,EAAIkrB,GAC9BtjC,GAAYoY,EAAWmrB,GAAe,EACtClI,EAAWpvB,EAAQjM,EACnBs7B,EAASpvB,EAAMlM,CAEnBt6C,MAAKgwE,UAAU2F,EAAUC,EAAQ5nE,EAAS7G,KAe5C+kE,EAAK75D,UAAUyrE,QAAU,SAAUF,EAAY5vE,EAAS7G,GACtD,MAAKy2E,GAAcA,EAAa,GAAKA,EAAa,GAAlD,CAC2B,kBAAhBj6E,WAAU,KACnBwD,EAAWxD,UAAU,GACrBqK,KAEF,IAAIstC,GAAQt7C,KAAK09E,YACbn3B,EAAQjL,EAAMiL,MAAMnhD,UACpBohD,EAAMlL,EAAMkL,IAAIphD,UAChBstD,EAAWlM,EAAMD,EACjBovB,EAAWpvB,EAAQmM,EAAWkrB,EAAa,EAC3ChI,EAASpvB,EAAMkM,EAAWkrB,EAAa,CAE3C59E,MAAKgwE,UAAU2F,EAAUC,EAAQ5nE,EAAS7G,KAQ5C+kE,EAAK75D,UAAU6uC,OAAS,WACtBlhD,KAAKqwE,WAQPnE,EAAK75D,UAAUg+D,QAAU,WACvBrwE,KAAKo8E,aACL,IAAIvE,IAAU,EACV7pE,EAAUhO,KAAKgO,QACf9J,EAAQlE,KAAKkE,MACb+qD,EAAMjvD,KAAKivD,GAEf,IAAKA,GAAQA,EAAI/Y,WAAqC,GAAxB+Y,EAAIvvD,KAAKmR,YAAvC,CAEAs7D,EAASqJ,kBAAkBx1E,KAAKgO,QAAQvM,OAAQzB,KAAK2Q,KAAM3Q,KAAKgO,QAAQwgE,aAG7C,OAAvBxgE,EAAQ4/D,aACVjtE,EAAK4F,aAAa0oD,EAAIvvD,KAAM,WAC5BiB,EAAKqG,gBAAgBioD,EAAIvvD,KAAM,gBAE/BiB,EAAKqG,gBAAgBioD,EAAIvvD,KAAM,WAC/BiB,EAAK4F,aAAa0oD,EAAIvvD,KAAM,eAI9BuvD,EAAIvvD,KAAK2M,MAAMyhE,UAAYntE,EAAKuI,OAAOK,OAAOyE,EAAQ8/D,UAAW,IACjE7e,EAAIvvD,KAAK2M,MAAM0hE,UAAYptE,EAAKuI,OAAOK,OAAOyE,EAAQ+/D,UAAW,IACjE9e,EAAIvvD,KAAK2M,MAAM+D,MAAQzP,EAAKuI,OAAOK,OAAOyE,EAAQoC,MAAO,IAGzDlM,EAAMyH,OAAOzF,MAAQ+oD,EAAIqjB,gBAAgBzhE,YAAco+C,EAAIqjB,gBAAgBvhE,aAAe,EAC1F7M,EAAMyH,OAAOvF,MAAQlC,EAAMyH,OAAOzF,KAClChC,EAAMyH,OAAOrF,KAAO2oD,EAAIqjB,gBAAgBljB,aAAeH,EAAIqjB,gBAAgBtvB,cAAgB,EAC3F9+C,EAAMyH,OAAO8yC,OAASv6C,EAAMyH,OAAOrF,IACnCpC,EAAM65E,iBAAmB9uB,EAAIvvD,KAAK0vD,aAAeH,EAAIvvD,KAAKsjD,aAC1D9+C,EAAM85E,gBAAkB/uB,EAAIvvD,KAAKmR,YAAco+C,EAAIvvD,KAAKqR,YAIf,IAArCk+C,EAAIqjB,gBAAgBtvB,eACtB9+C,EAAMyH,OAAOzF,KAAOhC,EAAMyH,OAAOrF,IACjCpC,EAAMyH,OAAOvF,MAAQlC,EAAMyH,OAAOzF,MAEN,IAA1B+oD,EAAIvvD,KAAKsjD,eACX9+C,EAAM85E,gBAAkB95E,EAAM65E,kBAKhC75E,EAAMy3C,OAAOtrC,OAAS4+C,EAAItT,OAAOyT,aACjClrD,EAAMgC,KAAKmK,OAAS4+C,EAAI/oD,KAAKkpD,aAC7BlrD,EAAMkC,MAAMiK,OAAS4+C,EAAI7oD,MAAMgpD,aAC/BlrD,EAAMoC,IAAI+J,OAAS4+C,EAAI3oD,IAAI08C,eAAiB9+C,EAAMyH,OAAOrF,IACzDpC,EAAMu6C,OAAOpuC,OAAS4+C,EAAIxQ,OAAOuE,eAAiB9+C,EAAMyH,OAAO8yC,MAM/D,IAAI0Q,GAAgB1sD,KAAKJ,IAAI6B,EAAMgC,KAAKmK,OAAQnM,EAAMy3C,OAAOtrC,OAAQnM,EAAMkC,MAAMiK,QAC7E4tE,EAAa/5E,EAAMoC,IAAI+J,OAAS8+C,EAAgBjrD,EAAMu6C,OAAOpuC,OAASnM,EAAM65E,iBAAmB75E,EAAMyH,OAAOrF,IAAMpC,EAAMyH,OAAO8yC,MACnIwQ,GAAIvvD,KAAK2M,MAAMgE,OAAS1P,EAAKuI,OAAOK,OAAOyE,EAAQqC,OAAQ4tE,EAAa,MAGxE/5E,EAAMxE,KAAK2Q,OAAS4+C,EAAIvvD,KAAK0vD,aAC7BlrD,EAAMwH,WAAW2E,OAASnM,EAAMxE,KAAK2Q,OAASnM,EAAM65E,gBACpD,IAAIG,GAAkBh6E,EAAMxE,KAAK2Q,OAASnM,EAAMoC,IAAI+J,OAASnM,EAAMu6C,OAAOpuC,OAASnM,EAAM65E,gBACzF75E,GAAMouE,gBAAgBjiE,OAAS6tE,EAC/Bh6E,EAAMq3E,cAAclrE,OAAS6tE,EAC7Bh6E,EAAMs3E,eAAenrE,OAASnM,EAAMq3E,cAAclrE,OAGlDnM,EAAMxE,KAAK0Q,MAAQ6+C,EAAIvvD,KAAKmR,YAC5B3M,EAAMwH,WAAW0E,MAAQlM,EAAMxE,KAAK0Q,MAAQlM,EAAM85E,gBAE7Ch+E,KAAKg8E,kBACR93E,EAAMi6E,eAAiBx9E,EAAKqP,qBAG1BhC,EAAQysE,eACNzsE,EAAQggE,KACV9pE,EAAMgC,KAAKkK,MAAQ6+C,EAAIssB,cAAcxqE,cAAgB7M,EAAMyH,OAAOzF,KAClEhC,EAAMkC,MAAMgK,MAAQ6+C,EAAIusB,eAAezqE,YAAc7M,EAAMi6E,iBAAmBj6E,EAAMyH,OAAOvF,QAE3FlC,EAAMgC,KAAKkK,MAAQ6+C,EAAIssB,cAAcxqE,YAAc7M,EAAMi6E,iBAAmBj6E,EAAMyH,OAAOzF,KACzFhC,EAAMkC,MAAMgK,MAAQ6+C,EAAIusB,eAAezqE,cAAgB7M,EAAMyH,OAAOvF,QAGtElC,EAAMgC,KAAKkK,MAAQ6+C,EAAIssB,cAAcxqE,cAAgB7M,EAAMyH,OAAOzF,KAClEhC,EAAMkC,MAAMgK,MAAQ6+C,EAAIusB,eAAezqE,cAAgB7M,EAAMyH,OAAOvF,OAGtEpG,KAAKo+E,SAIL,IAAIzhD,GAAS38B,KAAKq+E,kBAGc,QAA5BrwE,EAAQ4/D,YAAYh/D,OACtB+tB,GAAUl6B,KAAKJ,IAAI6B,EAAMouE,gBAAgBjiE,OAASnM,EAAMy3C,OAAOtrC,OAASnM,EAAMyH,OAAOrF,IAAMpC,EAAMyH,OAAO8yC,OAAQ,IAElHwQ,EAAItT,OAAOtvC,MAAM/F,IAAMq2B,EAAS,IAGhC,IAAI2hD,GAAmC,GAAnBp6E,EAAMw2E,UAAiB,SAAW,GAClD6D,EAAmBr6E,EAAMw2E,WAAax2E,EAAM63E,aAAe,SAAW,EAC1E9sB,GAAIwsB,UAAUpvE,MAAMmE,WAAa8tE,EACjCrvB,EAAIysB,aAAarvE,MAAMmE,WAAa+tE,EACpCtvB,EAAI0sB,cAActvE,MAAMmE,WAAa8tE,EACrCrvB,EAAI2sB,iBAAiBvvE,MAAMmE,WAAa+tE,EACxCtvB,EAAI4sB,eAAexvE,MAAMmE,WAAa8tE,EACtCrvB,EAAI6sB,kBAAkBzvE,MAAMmE,WAAa+tE,EAErCvwE,EAAQysE,iBACVxrB,EAAIusB,eAAe90E,UAAY,0CAC/BuoD,EAAIssB,cAAc70E,UAAY,yCAE9BuoD,EAAI4sB,eAAexvE,MAAMmE,WAAa,SACtCy+C,EAAI6sB,kBAAkBzvE,MAAMmE,WAAa,SACzCy+C,EAAI0sB,cAActvE,MAAMmE,WAAa,SACrCy+C,EAAI2sB,iBAAiBvvE,MAAMmE,WAAa,SAExCy+C,EAAI/oD,KAAKmG,MAAM/F,IAAM,MACrB2oD,EAAI7oD,MAAMiG,MAAM/F,IAAM,SAGnB0H,EAAQysE,gBAAkBv2E,EAAMy3C,OAAOtrC,OAASnM,EAAMouE,gBAAgBjiE,UACzE4+C,EAAI/oD,KAAKmG,MAAM/F,IAAMq2B,EAAS,KAC9BsyB,EAAI7oD,MAAMiG,MAAM/F,IAAMq2B,EAAS,KAC/BsyB,EAAIusB,eAAe90E,UAAYuoD,EAAIusB,eAAe90E,UAAUkD,QAAQ,GAAIoc,QAAO,yCAAoD,KACnIipC,EAAIssB,cAAc70E,UAAYuoD,EAAIssB,cAAc70E,UAAUkD,QAAQ,GAAIoc,QAAO,yCAAoD,KACjI9hB,EAAMgC,KAAKkK,MAAQ6+C,EAAIssB,cAAcxqE,cAAgB7M,EAAMyH,OAAOzF,KAClEhC,EAAMkC,MAAMgK,MAAQ6+C,EAAIusB,eAAezqE,cAAgB7M,EAAMyH,OAAOvF,MACpEpG,KAAKo+E,UAIP,IAAII,GAAmBt6E,EAAMy3C,OAAOtrC,OAASnM,EAAMouE,gBAAgBjiE,MACnErQ,MAAK82D,OAAOr/C,IAAI,OAAOsH,KACrB6gB,UAAW4+C,EAAmBxvC,EAAOi2B,cAAgBj2B,EAAO+1B,uBAI9D/kE,KAAKqsE,WAAWnlE,QAAQ,SAAUw1E,GAChC7E,EAAU6E,EAAUx7B,UAAY22B,GAGlC,IAAIA,EAAS,CACX,GAAI73E,KAAKo8E,YAFM,EAIb,WADAp8E,MAAK2Q,KAAK49D,QAAQrhB,KAAK,UAGvB5nC,SAAQuuC,IAAI,yCAGd7zD,MAAKo8E,YAAc,CAErBp8E,MAAKg8E,iBAAkB,EAGvBh8E,KAAK2Q,KAAK49D,QAAQrhB,KAAK,aAGzBgf,EAAK75D,UAAU+rE,QAAU,WACvB,GAAIl6E,GAAQlE,KAAKkE,MACb+qD,EAAMjvD,KAAKivD,GAEf/qD,GAAMq3E,cAAcnrE,MAAQlM,EAAMgC,KAAKkK,MACvClM,EAAMs3E,eAAeprE,MAAQlM,EAAMkC,MAAMgK,KACzC,IAAIquE,GAAcv6E,EAAMxE,KAAK0Q,MAAQlM,EAAMgC,KAAKkK,MAAQlM,EAAMkC,MAAMgK,MAAQlM,EAAM85E,eAClF95E,GAAMy3C,OAAOvrC,MAAQquE,EACrBv6E,EAAMouE,gBAAgBliE,MAAQquE,EAC9Bv6E,EAAMoC,IAAI8J,MAAQquE,EAClBv6E,EAAMu6C,OAAOruC,MAAQquE,EAGrBxvB,EAAIvjD,WAAWW,MAAMgE,OAASnM,EAAMwH,WAAW2E,OAAS,KACxD4+C,EAAIosB,mBAAmBhvE,MAAMgE,OAASnM,EAAMwH,WAAW2E,OAAS,KAChE4+C,EAAIqsB,qBAAqBjvE,MAAMgE,OAASnM,EAAMouE,gBAAgBjiE,OAAS,KACvE4+C,EAAIqjB,gBAAgBjmE,MAAMgE,OAASnM,EAAMouE,gBAAgBjiE,OAAS,KAClE4+C,EAAIssB,cAAclvE,MAAMgE,OAASnM,EAAMq3E,cAAclrE,OAAS,KAC9D4+C,EAAIusB,eAAenvE,MAAMgE,OAASnM,EAAMs3E,eAAenrE,OAAS,KAEhE4+C,EAAIvjD,WAAWW,MAAM+D,MAAQlM,EAAMwH,WAAW0E,MAAQ,KACtD6+C,EAAIosB,mBAAmBhvE,MAAM+D,MAAQlM,EAAMouE,gBAAgBliE,MAAQ,KACnE6+C,EAAIqsB,qBAAqBjvE,MAAM+D,MAAQlM,EAAMwH,WAAW0E,MAAQ,KAChE6+C,EAAIqjB,gBAAgBjmE,MAAM+D,MAAQlM,EAAMy3C,OAAOvrC,MAAQ,KACvD6+C,EAAI3oD,IAAI+F,MAAM+D,MAAQlM,EAAMoC,IAAI8J,MAAQ,KACxC6+C,EAAIxQ,OAAOpyC,MAAM+D,MAAQlM,EAAMu6C,OAAOruC,MAAQ,KAG9C6+C,EAAIvjD,WAAWW,MAAMnG,KAAO,IAC5B+oD,EAAIvjD,WAAWW,MAAM/F,IAAM,IAC3B2oD,EAAIosB,mBAAmBhvE,MAAMnG,KAAOhC,EAAMgC,KAAKkK,MAAQlM,EAAMyH,OAAOzF,KAAO,KAC3E+oD,EAAIosB,mBAAmBhvE,MAAM/F,IAAM,IACnC2oD,EAAIqsB,qBAAqBjvE,MAAMnG,KAAO,IACtC+oD,EAAIqsB,qBAAqBjvE,MAAM/F,IAAMpC,EAAMoC,IAAI+J,OAAS,KACxD4+C,EAAIqjB,gBAAgBjmE,MAAMnG,KAAOhC,EAAMgC,KAAKkK,MAAQ,KACpD6+C,EAAIqjB,gBAAgBjmE,MAAM/F,IAAMpC,EAAMoC,IAAI+J,OAAS,KACnD4+C,EAAIssB,cAAclvE,MAAMnG,KAAO,IAC/B+oD,EAAIssB,cAAclvE,MAAM/F,IAAMpC,EAAMoC,IAAI+J,OAAS,KACjD4+C,EAAIusB,eAAenvE,MAAMnG,KAAOhC,EAAMgC,KAAKkK,MAAQlM,EAAMy3C,OAAOvrC,MAAQ,KACxE6+C,EAAIusB,eAAenvE,MAAM/F,IAAMpC,EAAMoC,IAAI+J,OAAS,KAClD4+C,EAAI3oD,IAAI+F,MAAMnG,KAAOhC,EAAMgC,KAAKkK,MAAQ,KACxC6+C,EAAI3oD,IAAI+F,MAAM/F,IAAM,IACpB2oD,EAAIxQ,OAAOpyC,MAAMnG,KAAOhC,EAAMgC,KAAKkK,MAAQ,KAC3C6+C,EAAIxQ,OAAOpyC,MAAM/F,IAAMpC,EAAMoC,IAAI+J,OAASnM,EAAMouE,gBAAgBjiE,OAAS,KACzE4+C,EAAItT,OAAOtvC,MAAMnG,KAAO,IACxB+oD,EAAI/oD,KAAKmG,MAAMnG,KAAO,IACtB+oD,EAAI7oD,MAAMiG,MAAMnG,KAAO,KAIzBgmE,EAAK75D,UAAUqsE,QAAU,WACvB,KAAM,IAAIr6E,OAAM,wDAUlB6nE,EAAK75D,UAAUssE,eAAiB,SAAUv+C,GACxC,IAAKpgC,KAAKmvE,YACR,KAAM,IAAI9qE,OAAM,sCAGlBrE,MAAKmvE,YAAYwP,eAAev+C,IAQlC8rC,EAAK75D,UAAUusE,eAAiB,WAC9B,IAAK5+E,KAAKmvE,YACR,KAAM,IAAI9qE,OAAM,sCAGlB,OAAOrE,MAAKmvE,YAAYyP,kBAU1B1S,EAAK75D,UAAU08D,QAAU,SAAUh6C,GACjC,MAAOo3C,GAAS2C,OAAO9uE,KAAM+0B,EAAG/0B,KAAKkE,MAAMy3C,OAAOvrC,QAUpD87D,EAAK75D,UAAU48D,cAAgB,SAAUl6C,GACvC,MAAOo3C,GAAS2C,OAAO9uE,KAAM+0B,EAAG/0B,KAAKkE,MAAMxE,KAAK0Q,QAalD87D,EAAK75D,UAAUs8D,UAAY,SAAUvuC,GACnC,MAAO+rC,GAASuC,SAAS1uE,KAAMogC,EAAMpgC,KAAKkE,MAAMy3C,OAAOvrC,QAYzD87D,EAAK75D,UAAUw8D,gBAAkB,SAAUzuC,GACzC,MAAO+rC,GAASuC,SAAS1uE,KAAMogC,EAAMpgC,KAAKkE,MAAMxE,KAAK0Q,QASvD87D,EAAK75D,UAAUoqE,gBAAkB,WACA,GAA3Bz8E,KAAKgO,QAAQ2/D,WACf3tE,KAAK6+E,mBAEL7+E,KAAKg9E,mBAST9Q,EAAK75D,UAAUwsE,iBAAmB,WAChC,GAAI9sC,GAAK/xC,IAETA,MAAKg9E,kBAELh9E,KAAK8+E,UAAY,WACf,GAA6B,GAAzB/sC,EAAG/jC,QAAQ2/D,WAGb,WADA57B,GAAGirC,iBAIDjrC,GAAGkd,IAAIvvD,OAKLqyC,EAAGkd,IAAIvvD,KAAKmR,aAAekhC,EAAG7tC,MAAM66E,WAAahtC,EAAGkd,IAAIvvD,KAAK0vD,cAAgBrd,EAAG7tC,MAAM86E,aACxFjtC,EAAG7tC,MAAM66E,UAAYhtC,EAAGkd,IAAIvvD,KAAKmR,YACjCkhC,EAAG7tC,MAAM86E,WAAajtC,EAAGkd,IAAIvvD,KAAK0vD,aAClCrd,EAAG7tC,MAAMi6E,eAAiBx9E,EAAKqP,oBAE/B+hC,EAAGphC,KAAK49D,QAAQrhB,KAAK,cAM3BvsD,EAAKiH,iBAAiBY,OAAQ,SAAUxI,KAAK8+E,WAGzC/sC,EAAGkd,IAAIvvD,OACTqyC,EAAG7tC,MAAM66E,UAAYhtC,EAAGkd,IAAIvvD,KAAKmR,YACjCkhC,EAAG7tC,MAAM86E,WAAajtC,EAAGkd,IAAIvvD,KAAK0vD,cAGpCpvD,KAAKi/E,WAAaC,YAAYl/E,KAAK8+E,UAAW,MAOhD5S,EAAK75D,UAAU2qE,gBAAkB,WAC3Bh9E,KAAKi/E,aACPtsB,cAAc3yD,KAAKi/E,YACnBj/E,KAAKi/E,eAAap7E,IAIhB7D,KAAK8+E,YACPn+E,EAAKyH,oBAAoBI,OAAQ,SAAUxI,KAAK8+E,WAChD9+E,KAAK8+E,UAAY,OASrB5S,EAAK75D,UAAUgiE,SAAW,SAAU9rE,GAClCvI,KAAKygE,MAAMwV,eAAgB,EAC3Bj2E,KAAKygE,MAAM0e,iBAAmBn/E,KAAKkE,MAAMw2E,WAQ3CxO,EAAK75D,UAAUiiE,SAAW,SAAU/rE,GAClCvI,KAAKygE,MAAMwV,eAAgB,GAQ7B/J,EAAK75D,UAAU6hE,QAAU,SAAU3rE,GACjC,GAAKA,GAGAvI,KAAKygE,MAAMwV,cAAhB,CAEA,GAAI90C,GAAQ54B,EAAM+0D,OAEd8hB,EAAep/E,KAAKq/E,gBACpBC,EAAet/E,KAAK46E,cAAc56E,KAAKygE,MAAM0e,iBAAmBh+C,EAEhEnhC,MAAKgO,QAAQysE,iBACfz6E,KAAKivD,IAAI/oD,KAAK4C,WAAW4xE,WAAa16E,KAAKkE,MAAMw2E,UACjD16E,KAAKivD,IAAI7oD,MAAM0C,WAAW4xE,WAAa16E,KAAKkE,MAAMw2E,WAGhD4E,GAAgBF,GAClBp/E,KAAKktD,KAAK,kBAUdgf,EAAK75D,UAAUuoE,cAAgB,SAAUF,GAGvC,MAFA16E,MAAKkE,MAAMw2E,UAAYA,EACvB16E,KAAKq+E,mBACEr+E,KAAKkE,MAAMw2E,WAQpBxO,EAAK75D,UAAUgsE,iBAAmB,WAEhC,GAAItC,GAAet5E,KAAKL,IAAIpC,KAAKkE,MAAMouE,gBAAgBjiE,OAASrQ,KAAKkE,MAAMy3C,OAAOtrC,OAAQ,EAmB1F,OAlBI0rE,IAAgB/7E,KAAKkE,MAAM63E,eAGQ,OAAjC/7E,KAAKgO,QAAQ4/D,YAAYh/D,OAC3B5O,KAAKkE,MAAMw2E,WAAaqB,EAAe/7E,KAAKkE,MAAM63E,cAEpD/7E,KAAKkE,MAAM63E,aAAeA,GAIxB/7E,KAAKkE,MAAMw2E,UAAY,IAAG16E,KAAKkE,MAAMw2E,UAAY,GACjD16E,KAAKkE,MAAMw2E,UAAYqB,IAAc/7E,KAAKkE,MAAMw2E,UAAYqB,GAE5D/7E,KAAKgO,QAAQysE,iBACfz6E,KAAKivD,IAAI/oD,KAAK4C,WAAW4xE,WAAa16E,KAAKkE,MAAMw2E,UACjD16E,KAAKivD,IAAI7oD,MAAM0C,WAAW4xE,WAAa16E,KAAKkE,MAAMw2E,WAG7C16E,KAAKkE,MAAMw2E,WAQpBxO,EAAK75D,UAAUgtE,cAAgB,WAC7B,MAAOr/E,MAAKkE,MAAMw2E,WAQpBxO,EAAK75D,UAAUs+D,oBAAsB,WACnC,KAAM,IAAItsE,OAAM,sDAGlBxE,EAAOD,QAAUssE,GAIb,SAAUrsE,EAAQD,EAASM,GAY/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GA4BzF,QAASqsE,GAAQx8D,EAAM3C,GACrBhO,KAAK2Q,KAAOA,EACZ3Q,KAAK0tE,gBACHzoE,KAAM,KACN2oE,aACEh/D,KAAM,UAER2wE,MAAO,OACP75D,OAAO,EACP85D,gBAAgB,EAChBC,eAAgB,SAAwBC,EAAWC,EAASpS,GAC1D,GAAIqS,GAAcD,EAAQ5sC,KAC1B4sC,GAAQ5sC,MAAQ2sC,EAAU3sC,MAC1B2sC,EAAU3sC,MAAQ6sC,GAEpBC,WAAY,QAEZC,YAAY,EACZC,aAAa,EACbC,sBAAsB,EAEtBC,UACEC,YAAY,EACZC,aAAa,EACb1vD,KAAK,EACLijB,QAAQ,EACR0sC,eAAe,GAGjBC,eACEttC,OAAO,EACPtiB,KAAK,EACLijB,QAAQ,GAGVi/B,KAAMvG,EAASuG,KAEf2N,MAAO,SAAe1xE,EAAMzH,GAC1BA,EAASyH,IAEX2xE,SAAU,SAAkB3xE,EAAMzH,GAChCA,EAASyH,IAEX4xE,OAAQ,SAAgB5xE,EAAMzH,GAC5BA,EAASyH,IAEX6xE,SAAU,SAAkB7xE,EAAMzH,GAChCA,EAASyH,IAEX8xE,SAAU,SAAkB9xE,EAAMzH,GAChCA,EAASyH,IAEX+xE,WAAY,SAAoB/xE,EAAMzH,GACpCA,EAASyH,IAEXgyE,YAAa,SAAqBhyE,EAAMzH,GACtCA,EAASyH,IAEXiyE,cAAe,SAAuBjyE,EAAMzH,GAC1CA,EAASyH,IAGX22C,QACE32C,MACEwrC,WAAY,GACZC,SAAU,IAEZwzB,KAAM,IAGRiT,cAAc,EAEdznC,SACE0nC,aAAa,EACbC,eAAgB,QAGlBC,yBAAyB,GAI3BjhF,KAAKgO,QAAUrN,EAAKC,UAAWZ,KAAK0tE,gBACpC1tE,KAAKgO,QAAQggE,IAAMhgE,EAAQggE,IAG3BhuE,KAAKkhF,aACHj8E,MAAQshD,MAAO,OAAQC,IAAK,SAG9BxmD,KAAKy0E,YACH/F,SAAU/9D,EAAKhQ,KAAK+tE,SACpBI,OAAQn+D,EAAKhQ,KAAKmuE,QAEpB9uE,KAAKivD,OACLjvD,KAAKkE,SACLlE,KAAK82D,OAAS,IAEd,IAAI/kB,GAAK/xC,IACTA,MAAKqvE,UAAY,KACjBrvE,KAAKsvE,WAAa,KAGlBtvE,KAAKmhF,eACH1wD,IAAO,SAAaloB,EAAOopC,EAAQC,GACjCG,EAAGqvC,OAAOzvC,EAAOM,QAEnBC,OAAU,SAAgB3pC,EAAOopC,EAAQC,GACvCG,EAAGsvC,UAAU1vC,EAAOM,QAEtByB,OAAU,SAAgBnrC,EAAOopC,EAAQC,GACvCG,EAAGuvC,UAAU3vC,EAAOM,SAKxBjyC,KAAKuhF,gBACH9wD,IAAO,SAAaloB,EAAOopC,EAAQC,GACjCG,EAAGyvC,aAAa7vC,EAAOM,QAEzBC,OAAU,SAAgB3pC,EAAOopC,EAAQC,GACvCG,EAAG0vC,gBAAgB9vC,EAAOM,QAE5ByB,OAAU,SAAgBnrC,EAAOopC,EAAQC,GACvCG,EAAG2vC,gBAAgB/vC,EAAOM,SAI9BjyC,KAAKiyC,SACLjyC,KAAKutE,UACLvtE,KAAK2hF,YAEL3hF,KAAK+wE,aAEL/wE,KAAK4hF,MAAQ,KAEb5hF,KAAK6hF,eACL7hF,KAAK8hF,oBAGL9hF,KAAKmB,UAELnB,KAAKgxC,WAAWhjC,GAjLlB,GAAI7M,GAAUjB,EAAoB,IAE9BkB,EAAWP,EAAuBM,GAElCI,EAAWrB,EAAoB,IAE/BsB,EAAWX,EAAuBU,GAIlCytC,EAAS9uC,EAAoB,KAC7BS,EAAOT,EAAoB,GAC3BmuC,EAAUnuC,EAAoB,IAC9BouC,EAAWpuC,EAAoB,IAC/BksE,EAAWlsE,EAAoB,KAC/B0sE,EAAY1sE,EAAoB,KAChCgtE,EAAQhtE,EAAoB,KAC5BysE,EAAkBzsE,EAAoB,KACtCssE,EAAUtsE,EAAoB,KAC9BusE,EAAYvsE,EAAoB,KAChCwsE,EAAYxsE,EAAoB,KAChCqsE,EAAiBrsE,EAAoB,KACrC6hF,EAAQ7hF,EAAoB,KAAc,QAE1C8hF,EAAY,gBACZC,EAAa,gBA2JjB9U,GAAQ96D,UAAY,GAAIu6D,GAGxBO,EAAQ54B,OACN7oC,WAAY6gE,EACZ2V,IAAK1V,EACLlxB,MAAOoxB,EACP9xD,MAAO6xD,GAMTU,EAAQ96D,UAAUlR,QAAU,WAC1B,GAAI88C,GAAQ/tC,SAASC,cAAc,MACnC8tC,GAAMv3C,UAAY,cAClBu3C,EAAM,oBAAsBj+C,KAC5BA,KAAKivD,IAAIhR,MAAQA,CAGjB,IAAIvyC,GAAawE,SAASC,cAAc,MACxCzE,GAAWhF,UAAY,iBACvBu3C,EAAMvtC,YAAYhF,GAClB1L,KAAKivD,IAAIvjD,WAAaA,CAGtB,IAAIonE,GAAa5iE,SAASC,cAAc,MACxC2iE,GAAWpsE,UAAY,iBACvBu3C,EAAMvtC,YAAYoiE,GAClB9yE,KAAKivD,IAAI6jB,WAAaA,CAGtB,IAAIjF,GAAO39D,SAASC,cAAc,MAClC09D,GAAKnnE,UAAY,WACjB1G,KAAKivD,IAAI4e,KAAOA,CAGhB,IAAIkF,GAAW7iE,SAASC,cAAc,MACtC4iE,GAASrsE,UAAY,eACrB1G,KAAKivD,IAAI8jB,SAAWA,EAGpB/yE,KAAKmiF,kBAGL,IAAIC,GAAkB,GAAIzV,GAAgBsV,EAAY,KAAMjiF,KAC5DoiF,GAAgBtQ,OAChB9xE,KAAKutE,OAAO0U,GAAcG,EAM1BpiF,KAAK82D,OAAS,GAAI9nB,GAAOhvC,KAAK2Q,KAAKs+C,IAAIqjB,iBAGvCtyE,KAAK82D,OAAOzlB,GAAG,eAAgB,SAAU9oC,GACnCA,EAAMuvD,SACR93D,KAAKq0E,SAAS9rE,IAEhB+uD,KAAKt3D,OACPA,KAAK82D,OAAOzlB,GAAG,WAAYrxC,KAAKi0E,aAAa3c,KAAKt3D,OAClDA,KAAK82D,OAAOzlB,GAAG,UAAWrxC,KAAKk0E,QAAQ5c,KAAKt3D,OAC5CA,KAAK82D,OAAOzlB,GAAG,SAAUrxC,KAAKm0E,WAAW7c,KAAKt3D,OAC9CA,KAAK82D,OAAOr/C,IAAI,OAAOsH,KAAMmnB,UAAW,EAAGtG,UAAWoP,EAAO+1B,uBAG7D/kE,KAAK82D,OAAOzlB,GAAG,MAAOrxC,KAAKqiF,cAAc/qB,KAAKt3D,OAG9CA,KAAK82D,OAAOzlB,GAAG,QAASrxC,KAAKsiF,mBAAmBhrB,KAAKt3D,OAGrDA,KAAK82D,OAAOzlB,GAAG,YAAarxC,KAAKo7E,WAAW9jB,KAAKt3D,OAE7CA,KAAKgO,QAAQggE,IACfhuE,KAAKuiF,YAAc,GAAIvzC,GAAOhvC,KAAK2Q,KAAKs+C,IAAIusB,gBAE5Cx7E,KAAKuiF,YAAc,GAAIvzC,GAAOhvC,KAAK2Q,KAAKs+C,IAAIssB,eAG9Cv7E,KAAKuiF,YAAYlxC,GAAG,MAAOrxC,KAAKwiF,cAAclrB,KAAKt3D,OACnDA,KAAKuiF,YAAYlxC,GAAG,WAAYrxC,KAAKyiF,kBAAkBnrB,KAAKt3D,OAC5DA,KAAKuiF,YAAYlxC,GAAG,UAAWrxC,KAAK0iF,aAAaprB,KAAKt3D,OACtDA,KAAKuiF,YAAYlxC,GAAG,SAAUrxC,KAAK2iF,gBAAgBrrB,KAAKt3D,OACxDA,KAAKuiF,YAAY9qE,IAAI,OAAOsH,KAAMmnB,UAAW,EAAGtG,UAAWoP,EAAOg2B,qBAElEhlE,KAAK2Q,KAAKs+C,IAAIqjB,gBAAgB1qE,iBAAiB,YAAa5H,KAAK4iF,aAAatrB,KAAKt3D,OACnFA,KAAK2Q,KAAKs+C,IAAIqjB,gBAAgB1qE,iBAAiB,WAAY5H,KAAK6iF,YAAYvrB,KAAKt3D,OACjFA,KAAK2Q,KAAKs+C,IAAIqjB,gBAAgB1qE,iBAAiB,YAAa5H,KAAKisD,aAAaqL,KAAKt3D,OAEnFA,KAAK2Q,KAAKs+C,IAAIqjB,gBAAgB1qE,iBAAiB,cAAe5H,KAAKm0E,WAAW7c,KAAKt3D,OAEnFA,KAAK2Q,KAAKs+C,IAAIqjB,gBAAgB1qE,iBAAiB,aAAc5H,KAAKo0E,cAAc9c,KAAKt3D,OAGrFA,KAAK8xE,QAmEP3E,EAAQ96D,UAAU2+B,WAAa,SAAUhjC,GACvC,GAAIA,EAAS,CAEX,GAAIV,IAAU,OAAQ,MAAO,QAAS,QAAS,QAAS,iBAAkB,aAAc,cAAe,uBAAwB,sBAAuB,aAAc,iBAAkB,WAAY,gBAAiB,uBAAwB,OAAQ,OAAQ,iBAAkB,eAAgB,UAAW,0BACxS3M,GAAKsD,gBAAgBqJ,EAAQtN,KAAKgO,QAASA,GAEvC,eAAiBA,KACgB,gBAAxBA,GAAQ4/D,YACjB5tE,KAAKgO,QAAQ4/D,YAAYh/D,KAA+B,QAAxBZ,EAAQ4/D,YAAwB,MAAQ,SACb,YAAlD,EAAIpsE,EAAkB,SAAGwM,EAAQ4/D,cAA6B,QAAU5/D,GAAQ4/D,cACzF5tE,KAAKgO,QAAQ4/D,YAAYh/D,KAAOZ,EAAQ4/D,YAAYh/D,OAIpD,UAAYZ,KACgB,gBAAnBA,GAAQu3C,QACjBvlD,KAAKgO,QAAQu3C,OAAOsoB,KAAO7/D,EAAQu3C,OACnCvlD,KAAKgO,QAAQu3C,OAAO32C,KAAKwrC,WAAapsC,EAAQu3C,OAC9CvlD,KAAKgO,QAAQu3C,OAAO32C,KAAKyrC,SAAWrsC,EAAQu3C,QACU,YAA7C,EAAI/jD,EAAkB,SAAGwM,EAAQu3C,UAC1C5kD,EAAKsD,iBAAiB,QAASjE,KAAKgO,QAAQu3C,OAAQv3C,EAAQu3C,QACxD,QAAUv3C,GAAQu3C,SACe,gBAAxBv3C,GAAQu3C,OAAO32C,MACxB5O,KAAKgO,QAAQu3C,OAAO32C,KAAKwrC,WAAapsC,EAAQu3C,OAAO32C,KACrD5O,KAAKgO,QAAQu3C,OAAO32C,KAAKyrC,SAAWrsC,EAAQu3C,OAAO32C,MACQ,YAAlD,EAAIpN,EAAkB,SAAGwM,EAAQu3C,OAAO32C,OACjDjO,EAAKsD,iBAAiB,aAAc,YAAajE,KAAKgO,QAAQu3C,OAAO32C,KAAMZ,EAAQu3C,OAAO32C,SAM9F,YAAcZ,KACgB,iBAArBA,GAAQiyE,UACjBjgF,KAAKgO,QAAQiyE,SAASC,WAAalyE,EAAQiyE,SAC3CjgF,KAAKgO,QAAQiyE,SAASE,YAAcnyE,EAAQiyE,SAC5CjgF,KAAKgO,QAAQiyE,SAASxvD,IAAMziB,EAAQiyE,SACpCjgF,KAAKgO,QAAQiyE,SAASvsC,OAAS1lC,EAAQiyE,SACvCjgF,KAAKgO,QAAQiyE,SAASG,eAAgB,GACkB,YAA/C,EAAI5+E,EAAkB,SAAGwM,EAAQiyE,WAC1Ct/E,EAAKsD,iBAAiB,aAAc,cAAe,MAAO,SAAU,iBAAkBjE,KAAKgO,QAAQiyE,SAAUjyE,EAAQiyE,WAIrH,iBAAmBjyE,KACgB,iBAA1BA,GAAQqyE,eACjBrgF,KAAKgO,QAAQqyE,cAActtC,MAAQ/kC,EAAQqyE,cAC3CrgF,KAAKgO,QAAQqyE,cAAc5vD,IAAMziB,EAAQqyE,cACzCrgF,KAAKgO,QAAQqyE,cAAc3sC,OAAS1lC,EAAQqyE,eACiB,YAApD,EAAI7+E,EAAkB,SAAGwM,EAAQqyE,gBAC1C1/E,EAAKsD,iBAAiB,QAAS,MAAO,UAAWjE,KAAKgO,QAAQqyE,cAAeryE,EAAQqyE,iBAcxF,QAAS,WAAY,WAAY,SAAU,WAAY,aAAc,cAAe,iBAAiBn5E,QATpF,SAAU+N;oHAC1B,GAAIxN,GAAKuG,EAAQiH,EACjB,IAAIxN,EAAI,CACN,KAAMA,YAAc8O,WAClB,KAAM,IAAIlS,OAAM,UAAY4Q,EAAO,uBAAyBA,EAAO,mBAErEjV,MAAKgO,QAAQiH,GAAQxN,IAEvB6vD,KAAKt3D,OAIPA,KAAK4wE,cASTzD,EAAQ96D,UAAUu+D,UAAY,SAAU5iE,GACtChO,KAAK2hF,YAED3zE,GAAWA,EAAQ6iE,cACrBlwE,EAAKuG,QAAQlH,KAAKiyC,MAAO,SAAUrjC,GACjCA,EAAKk0E,OAAQ,EACTl0E,EAAKm0E,WAAWn0E,EAAKsyC,YAQ/BisB,EAAQ96D,UAAU++B,QAAU,WAC1BpxC,KAAK8R,OACL9R,KAAKowE,SAAS,MACdpwE,KAAKmwE,UAAU,MAEfnwE,KAAK82D,OAAS,KAEd92D,KAAK2Q,KAAO,KACZ3Q,KAAKy0E,WAAa,MAMpBtH,EAAQ96D,UAAUP,KAAO,WAEnB9R,KAAKivD,IAAIhR,MAAMn1C,YACjB9I,KAAKivD,IAAIhR,MAAMn1C,WAAW5G,YAAYlC,KAAKivD,IAAIhR,OAI7Cj+C,KAAKivD,IAAI4e,KAAK/kE,YAChB9I,KAAKivD,IAAI4e,KAAK/kE,WAAW5G,YAAYlC,KAAKivD,IAAI4e,MAI5C7tE,KAAKivD,IAAI8jB,SAASjqE,YACpB9I,KAAKivD,IAAI8jB,SAASjqE,WAAW5G,YAAYlC,KAAKivD,IAAI8jB,WAQtD5F,EAAQ96D,UAAUy/D,KAAO,WAElB9xE,KAAKivD,IAAIhR,MAAMn1C,YAClB9I,KAAK2Q,KAAKs+C,IAAItT,OAAOjrC,YAAY1Q,KAAKivD,IAAIhR,OAIvCj+C,KAAKivD,IAAI4e,KAAK/kE,YACjB9I,KAAK2Q,KAAKs+C,IAAIosB,mBAAmB3qE,YAAY1Q,KAAKivD,IAAI4e,MAInD7tE,KAAKivD,IAAI8jB,SAASjqE,aACjB9I,KAAKgO,QAAQggE,IACfhuE,KAAK2Q,KAAKs+C,IAAI7oD,MAAMsK,YAAY1Q,KAAKivD,IAAI8jB,UAEzC/yE,KAAK2Q,KAAKs+C,IAAI/oD,KAAKwK,YAAY1Q,KAAKivD,IAAI8jB,YAY9C5F,EAAQ96D,UAAU4+D,aAAe,SAAUx+B,GACzC,GAAI1uC,GAAG0oB,EAAIpsB,EAAIuO,CAMf,SAJW/K,IAAP4uC,IAAkBA,MACjBtuC,MAAMC,QAAQquC,KAAMA,GAAOA,IAG3B1uC,EAAI,EAAG0oB,EAAKzsB,KAAK+wE,UAAUntE,OAAQG,EAAI0oB,EAAI1oB,IAC9C1D,EAAKL,KAAK+wE,UAAUhtE,IACpB6K,EAAO5O,KAAKiyC,MAAM5xC,KACRuO,EAAKo0E,UAKjB,KADAhjF,KAAK+wE,aACAhtE,EAAI,EAAG0oB,EAAKgmB,EAAI7uC,OAAQG,EAAI0oB,EAAI1oB,IACnC1D,EAAKoyC,EAAI1uC,IACT6K,EAAO5O,KAAKiyC,MAAM5xC,MAEhBL,KAAK+wE,UAAUlsE,KAAKxE,GACpBuO,EAAKq0E,WASX9V,EAAQ96D,UAAU2+D,aAAe,WAC/B,MAAOhxE,MAAK+wE,UAAUlqE,YAOxBsmE,EAAQ96D,UAAUorE,gBAAkB,WAClC,GAAIniC,GAAQt7C,KAAK2Q,KAAK2qC,MAAMu6B,UAE5B,IAAI71E,KAAKgO,QAAQggE,IACf,GAAI5nE,GAAQpG,KAAK2Q,KAAKhQ,KAAK+tE,SAASpzB,EAAMiL,OACtCrgD,EAAOlG,KAAK2Q,KAAKhQ,KAAK+tE,SAASpzB,EAAMkL,SAEzC,IAAItgD,GAAOlG,KAAK2Q,KAAKhQ,KAAK+tE,SAASpzB,EAAMiL,OACrCngD,EAAQpG,KAAK2Q,KAAKhQ,KAAK+tE,SAASpzB,EAAMkL,IAG5C,IAAI/T,KACJ,KAAK,GAAIugC,KAAWhzE,MAAKutE,OACvB,GAAIvtE,KAAKutE,OAAOjqE,eAAe0vE,GAM7B,IAAK,GALD7B,GAAQnxE,KAAKutE,OAAOyF,GACpBkQ,EAAkB/R,EAAMgS,UAAYhS,EAAMiS,gBAIrCr/E,EAAI,EAAGA,EAAIm/E,EAAgBt/E,OAAQG,IAAK,CAC/C,GAAI6K,GAAOs0E,EAAgBn/E,EAEvB/D,MAAKgO,QAAQggE,IACXp/D,EAAKxI,MAAQF,GAAQ0I,EAAKxI,MAAQwI,EAAKwB,MAAQhK,GACjDqsC,EAAI5tC,KAAK+J,EAAKvO,IAGZuO,EAAK1I,KAAOE,GAASwI,EAAK1I,KAAO0I,EAAKwB,MAAQlK,GAChDusC,EAAI5tC,KAAK+J,EAAKvO,IAOxB,MAAOoyC,IAQT06B,EAAQ96D,UAAUgxE,UAAY,SAAUhjF,GAEtC,IAAK,GADD0wE,GAAY/wE,KAAK+wE,UACZhtE,EAAI,EAAG0oB,EAAKskD,EAAUntE,OAAQG,EAAI0oB,EAAI1oB,IAC7C,GAAIgtE,EAAUhtE,IAAM1D,EAAI,CAEtB0wE,EAAUl5C,OAAO9zB,EAAG,EACpB,SASNopE,EAAQ96D,UAAU6uC,OAAS,WACzB,GAAIqE,GAASvlD,KAAKgO,QAAQu3C,OACtBjK,EAAQt7C,KAAK2Q,KAAK2qC,MAClB/xC,EAAS5I,EAAKuI,OAAOK,OACrByE,EAAUhO,KAAKgO,QACf4/D,EAAc5/D,EAAQ4/D,YAAYh/D,KAClCipE,GAAU,EACV55B,EAAQj+C,KAAKivD,IAAIhR,KAGrBj+C,MAAKkE,MAAMoC,IAAMtG,KAAK2Q,KAAK29D,SAAShoE,IAAI+J,OAASrQ,KAAK2Q,KAAK29D,SAAS3iE,OAAOrF,IAEvEtG,KAAKgO,QAAQggE,IACfhuE,KAAKkE,MAAMkC,MAAQpG,KAAK2Q,KAAK29D,SAASloE,MAAMgK,MAAQpQ,KAAK2Q,KAAK29D,SAAS3iE,OAAOvF,MAE9EpG,KAAKkE,MAAMgC,KAAOlG,KAAK2Q,KAAK29D,SAASpoE,KAAKkK,MAAQpQ,KAAK2Q,KAAK29D,SAAS3iE,OAAOzF,KAI9E+3C,EAAMv3C,UAAY,cAGlBmxE,EAAU73E,KAAKsjF,gBAAkBzL,CAIjC,IAAI0L,GAAkBjoC,EAAMkL,IAAMlL,EAAMiL,MACpCi9B,EAASD,GAAmBvjF,KAAKyjF,qBAAuBzjF,KAAKkE,MAAMkM,OAASpQ,KAAKkE,MAAM66E,UACvF2E,EAAWpoC,EAAMiL,OAASvmD,KAAK2jF,eAC/BC,EAAeJ,GAAUE,CAC7B1jF,MAAKyjF,oBAAsBF,EAC3BvjF,KAAK2jF,eAAiBroC,EAAMiL,MAC5BvmD,KAAKkE,MAAM66E,UAAY/+E,KAAKkE,MAAMkM,KAElC,IAAIyzE,GAAa7jF,KAAK8jF,cAClBC,GACFn1E,KAAM22C,EAAO32C,KACbi/D,KAAMtoB,EAAOsoB,MAEXmW,GACFp1E,KAAM22C,EAAO32C,KACbi/D,KAAMtoB,EAAO32C,KAAKyrC,SAAW,GAE3BhqC,EAAS,EACT09D,EAAYxoB,EAAOsoB,KAAOtoB,EAAO32C,KAAKyrC,QAiC1C,OA9BAr6C,MAAKutE,OAAO0U,GAAY/gC,OAAO5F,EAAO0oC,EAAgBJ,GAGtDjjF,EAAKuG,QAAQlH,KAAKutE,OAAQ,SAAU4D,GAClC,GAAI8S,GAAc9S,GAAS0S,EAAaE,EAAcC,EAClDE,EAAe/S,EAAMjwB,OAAO5F,EAAO2oC,EAAaL,EACpD/L,GAAUqM,GAAgBrM,EAC1BxnE,GAAU8gE,EAAM9gE,SAElBA,EAAS5N,KAAKJ,IAAIgO,EAAQ09D,GAG1B9vB,EAAM5xC,MAAMgE,OAAS9G,EAAO8G,GAG5BrQ,KAAKkE,MAAMkM,MAAQ6tC,EAAMptC,YACzB7Q,KAAKkE,MAAMmM,OAASA,EAGpBrQ,KAAKivD,IAAI4e,KAAKxhE,MAAM/F,IAAMiD,EAAsB,OAAfqkE,EAAuB5tE,KAAK2Q,KAAK29D,SAAShoE,IAAI+J,OAASrQ,KAAK2Q,KAAK29D,SAAS3iE,OAAOrF,IAAMtG,KAAK2Q,KAAK29D,SAAShoE,IAAI+J,OAASrQ,KAAK2Q,KAAK29D,SAASgE,gBAAgBjiE,QACvLrQ,KAAKgO,QAAQggE,IACfhuE,KAAKivD,IAAI4e,KAAKxhE,MAAMjG,MAAQ,IAE5BpG,KAAKivD,IAAI4e,KAAKxhE,MAAMnG,KAAO,IAG7BlG,KAAKk8E,qBAAsB,EAE3BrE,EAAU73E,KAAK43E,cAAgBC,GAUjC1K,EAAQ96D,UAAUyxE,YAAc,WAC9B,GAAIK,GAAmD,OAAjCnkF,KAAKgO,QAAQ4/D,YAAYh/D,KAAgB,EAAI5O,KAAK2hF,SAAS/9E,OAAS,EACtFwgF,EAAepkF,KAAK2hF,SAASwC,EAGjC,OAFiBnkF,MAAKutE,OAAO6W,IAAiBpkF,KAAKutE,OAAOyU,IAErC,MAQvB7U,EAAQ96D,UAAU8vE,iBAAmB,WACnC,GAEIvzE,GAAMikC,EAFNwxC,EAAYrkF,KAAKutE,OAAOyU,EACXhiF,MAAKutE,OAAO0U,EAG7B,IAAIjiF,KAAKsvE,YAEP,GAAI+U,EAAW,CACbA,EAAUvyE,aACH9R,MAAKutE,OAAOyU,EAEnB,KAAKnvC,IAAU7yC,MAAKiyC,MAClB,GAAIjyC,KAAKiyC,MAAM3uC,eAAeuvC,GAAS,CACrCjkC,EAAO5O,KAAKiyC,MAAMY,GAClBjkC,EAAK5F,QAAU4F,EAAK5F,OAAO0qC,OAAO9kC,EAClC,IAAIokE,GAAUhzE,KAAKskF,YAAY11E,EAAK4lB,MAChC28C,EAAQnxE,KAAKutE,OAAOyF,EACxB7B,IAASA,EAAM1gD,IAAI7hB,IAASA,EAAKkD,aAMvC,KAAKuyE,EAAW,CAGdA,EAAY,GAAInX,GAFP,KACE,KACqBltE,MAChCA,KAAKutE,OAAOyU,GAAaqC,CAEzB,KAAKxxC,IAAU7yC,MAAKiyC,MACdjyC,KAAKiyC,MAAM3uC,eAAeuvC,KAC5BjkC,EAAO5O,KAAKiyC,MAAMY,GAClBwxC,EAAU5zD,IAAI7hB,GAIlBy1E,GAAUvS,SAShB3E,EAAQ96D,UAAUkyE,YAAc,WAC9B,MAAOvkF,MAAKivD,IAAI8jB,UAOlB5F,EAAQ96D,UAAU+9D,SAAW,SAAUn+B,GACrC,GACIQ,GADAV,EAAK/xC,KAELwkF,EAAexkF,KAAKqvE,SAGxB,IAAKp9B,EAEE,CAAA,KAAIA,YAAiB5D,IAAW4D,YAAiB3D,IAGtD,KAAM,IAAI/pC,WAAU,kDAFpBvE,MAAKqvE,UAAYp9B,MAFjBjyC,MAAKqvE,UAAY,IAkBnB,IAXImV,IAEF7jF,EAAKuG,QAAQlH,KAAKmhF,cAAe,SAAUh6E,EAAUoB,GACnDi8E,EAAahzC,IAAIjpC,EAAOpB,KAI1BsrC,EAAM+xC,EAAarxC,SACnBnzC,KAAKshF,UAAU7uC,IAGbzyC,KAAKqvE,UAAW,CAElB,GAAIhvE,GAAKL,KAAKK,EACdM,GAAKuG,QAAQlH,KAAKmhF,cAAe,SAAUh6E,EAAUoB,GACnDwpC,EAAGs9B,UAAUh+B,GAAG9oC,EAAOpB,EAAU9G,KAInCoyC,EAAMzyC,KAAKqvE,UAAUl8B,SACrBnzC,KAAKohF,OAAO3uC,GAGZzyC,KAAKmiF,mBAGPniF,KAAK2Q,KAAK49D,QAAQrhB,KAAK,WAAahc,OAAO,KAO7Ci8B,EAAQ96D,UAAUoyE,SAAW,WAC3B,MAAOzkF,MAAKqvE,WAOdlC,EAAQ96D,UAAU89D,UAAY,SAAU5C,GACtC,GACI96B,GADAV,EAAK/xC,IAgBT,IAZIA,KAAKsvE,aACP3uE,EAAKuG,QAAQlH,KAAKuhF,eAAgB,SAAUp6E,EAAUoB,GACpDwpC,EAAGu9B,WAAW99B,IAAIjpC,EAAOpB,KAI3BsrC,EAAMzyC,KAAKsvE,WAAWn8B,SACtBnzC,KAAKsvE,WAAa,KAClBtvE,KAAK0hF,gBAAgBjvC,IAIlB86B,EAEE,CAAA,KAAIA,YAAkBl/B,IAAWk/B,YAAkBj/B,IAGxD,KAAM,IAAI/pC,WAAU,kDAFpBvE,MAAKsvE,WAAa/B,MAFlBvtE,MAAKsvE,WAAa,IAOpB,IAAItvE,KAAKsvE,WAAY,CAEnB,GAAIA,GAAatvE,KAAKsvE,UAClBtvE,MAAKsvE,qBAAsBhhC,KAC7BghC,EAAatvE,KAAKsvE,WAAWl8B,cAG/Bk8B,EAAW73D,MAAMvQ,QAAQ,SAAUiqE,GAC7BA,EAAMuT,cACRvT,EAAMuT,aAAax9E,QAAQ,SAAUy9E,GACnC,GAAIC,GAAqBtV,EAAW73D,IAAIktE,EACxCC,GAAmBC,cAAgB1T,EAAM9wE,GACjB,GAApB8wE,EAAM2T,aACRF,EAAmB99B,SAAU,GAE/BwoB,EAAWp9B,OAAO0yC,MAMxB,IAAIvkF,GAAKL,KAAKK,EACdM,GAAKuG,QAAQlH,KAAKuhF,eAAgB,SAAUp6E,EAAUoB,GACpDwpC,EAAGu9B,WAAWj+B,GAAG9oC,EAAOpB,EAAU9G,KAIpCoyC,EAAMzyC,KAAKsvE,WAAWn8B,SACtBnzC,KAAKwhF,aAAa/uC,GAIpBzyC,KAAKmiF,mBAGLniF,KAAK+kF,SAEL/kF,KAAK2Q,KAAK49D,QAAQrhB,KAAK,WAAahc,OAAO,KAO7Ci8B,EAAQ96D,UAAU2yE,UAAY,WAC5B,MAAOhlF,MAAKsvE,YAOdnC,EAAQ96D,UAAU4yE,WAAa,SAAU5kF,GACvC,GAAIuO,GAAO5O,KAAKqvE,UAAU53D,IAAIpX,GAC1BixE,EAAUtxE,KAAKqvE,UAAUj8B,YACfpzC,MAAKiyC,MAAM5xC,EAErBuO,IAEF5O,KAAKgO,QAAQyyE,SAAS7xE,EAAM,SAAUA,GAChCA,GAGF0iE,EAAQ59B,OAAOrzC,MAYvB8sE,EAAQ96D,UAAU6yE,SAAW,SAAU7T,GACrC,MAAOA,GAASpsE,MAAQjF,KAAKgO,QAAQ/I,OAASosE,EAAS7qB,IAAM,QAAU,QASzE2mB,EAAQ96D,UAAUiyE,YAAc,SAAUjT,GAExC,MAAY,cADDrxE,KAAKklF,SAAS7T,QACqBxtE,IAAlBwtE,EAASF,MAC5B8Q,EAEAjiF,KAAKsvE,WAAa+B,EAASF,MAAQ6Q,GAS9C7U,EAAQ96D,UAAUgvE,UAAY,SAAU5uC,GACtC,GAAIV,GAAK/xC,IAETyyC,GAAIvrC,QAAQ,SAAU7G,GACpB,GAKI8kF,GALA9T,EAAWt/B,EAAGs9B,UAAU53D,IAAIpX,EAAI0xC,EAAGmvC,aACnCtyE,EAAOmjC,EAAGE,MAAM5xC,GAChB4E,EAAOosE,EAAWt/B,EAAGmzC,SAAS7T,GAAY,KAE1C7sE,EAAc2oE,EAAQ54B,MAAMtvC,EAehC,IAZI2J,IAEGpK,GAAiBoK,YAAgBpK,GAMpCutC,EAAGS,YAAY5jC,EAAMyiE,IAJrB8T,EAAWv2E,EAAKu2E,SAChBpzC,EAAGqzC,YAAYx2E,GACfA,EAAO,QAMNA,GAAQyiE,EAAU,CAErB,IAAI7sE,EASG,KAAY,iBAARS,EAEH,GAAIV,WAAU,gIAEd,GAAIA,WAAU,sBAAwBU,EAAO,IAZnD2J,GAAO,GAAIpK,GAAY6sE,EAAUt/B,EAAG0iC,WAAY1iC,EAAG/jC,SACnDY,EAAKvO,GAAKA,EAEV0xC,EAAGC,SAASpjC,GACRu2E,IACFnlF,KAAK+wE,UAAUlsE,KAAKxE,GACpBuO,EAAKq0E,YASX3rB,KAAKt3D,OAEPA,KAAK+kF,SACL/kF,KAAK2Q,KAAK49D,QAAQrhB,KAAK,WAAahc,OAAO,KAQ7Ci8B,EAAQ96D,UAAU+uE,OAASjU,EAAQ96D,UAAUgvE,UAO7ClU,EAAQ96D,UAAUivE,UAAY,SAAU7uC,GACtC,GAAI4B,GAAQ,EACRtC,EAAK/xC,IACTyyC,GAAIvrC,QAAQ,SAAU7G,GACpB,GAAIuO,GAAOmjC,EAAGE,MAAM5xC,EAChBuO,KACFylC,IACAtC,EAAGqzC,YAAYx2E,MAIfylC,IAEFr0C,KAAK+kF,SACL/kF,KAAK2Q,KAAK49D,QAAQrhB,KAAK,WAAahc,OAAO,MAQ/Ci8B,EAAQ96D,UAAU0yE,OAAS,WAGzBpkF,EAAKuG,QAAQlH,KAAKutE,OAAQ,SAAU4D,GAClCA,EAAMp+B,WASVo6B,EAAQ96D,UAAUovE,gBAAkB,SAAUhvC,GAC5CzyC,KAAKwhF,aAAa/uC,IAQpB06B,EAAQ96D,UAAUmvE,aAAe,SAAU/uC,GACzC,GAAIV,GAAK/xC,IAETyyC,GAAIvrC,QAAQ,SAAU7G,GACpB,GAAIglF,GAAYtzC,EAAGu9B,WAAW73D,IAAIpX,GAC9B8wE,EAAQp/B,EAAGw7B,OAAOltE,EAEtB,IAAK8wE,EA4BHA,EAAM37B,QAAQ6vC,OA5BJ,CAEV,GAAIhlF,GAAM2hF,GAAa3hF,GAAM4hF,EAC3B,KAAM,IAAI59E,OAAM,qBAAuBhE,EAAK,qBAG9C,IAAIilF,IAAe,EAAIlkF,EAAkB,SAAG2wC,EAAG/jC,QAC/CrN,GAAKC,OAAO0kF,GACVj1E,OAAQ,OAGV8gE,EAAQ,GAAIjE,GAAM7sE,EAAIglF,EAAWtzC,GACjCA,EAAGw7B,OAAOltE,GAAM8wE,CAGhB,KAAK,GAAIt+B,KAAUd,GAAGE,MACpB,GAAIF,EAAGE,MAAM3uC,eAAeuvC,GAAS,CACnC,GAAIjkC,GAAOmjC,EAAGE,MAAMY,EAChBjkC,GAAK4lB,KAAK28C,OAAS9wE,GACrB8wE,EAAM1gD,IAAI7hB,GAKhBuiE,EAAMp+B,QACNo+B,EAAMW,UAOV9xE,KAAK2Q,KAAK49D,QAAQrhB,KAAK,WAAahc,OAAO,KAQ7Ci8B,EAAQ96D,UAAUqvE,gBAAkB,SAAUjvC,GAC5C,GAAI86B,GAASvtE,KAAKutE,MAClB96B,GAAIvrC,QAAQ,SAAU7G,GACpB,GAAI8wE,GAAQ5D,EAAOltE,EAEf8wE,KACFA,EAAMr/D,aACCy7D,GAAOltE,MAIlBL,KAAK4wE,YAEL5wE,KAAK2Q,KAAK49D,QAAQrhB,KAAK,WAAahc,OAAO,KAQ7Ci8B,EAAQ96D,UAAUixE,aAAe,WAC/B,GAAItjF,KAAKsvE,WAAY,CAEnB,GAAIqS,GAAW3hF,KAAKsvE,WAAWn8B,QAC7BJ,MAAO/yC,KAAKgO,QAAQ6xE,YAGtB8B,GAAW3hF,KAAKulF,mBAAmB5D,EAEnC,IAAI3hB,IAAWr/D,EAAKmE,WAAW68E,EAAU3hF,KAAK2hF,SAC9C,IAAI3hB,EAAS,CAEX,GAAIuN,GAASvtE,KAAKutE,MAClBoU,GAASz6E,QAAQ,SAAU8rE,GACzBzF,EAAOyF,GAASlhE,SAIlB6vE,EAASz6E,QAAQ,SAAU8rE,GACzBzF,EAAOyF,GAASlB,SAGlB9xE,KAAK2hF,SAAWA,EAGlB,MAAO3hB,GAEP,OAAO,GASXmN,EAAQ96D,UAAUkzE,mBAAqB,SAAU5D,GAC/C,GAAI6D,KAoBJ,OAlBA7D,GAASz6E,QAAQ,SAAU8rE,GACzB,GAAIqS,GAAYrlF,KAAKsvE,WAAW73D,IAAIu7D,EAIpC,IAHKqS,EAAUR,eACbW,EAAiB3gF,KAAKmuE,GAEpBqS,EAAUX,aAAc,CAC1B,GAAIA,GAAe1kF,KAAKsvE,WAAW73D,KACjC3Q,OAAQ,SAAgB2+E,GACtB,MAAOA,GAAYZ,eAAiB7R,GAEtCjgC,MAAO/yC,KAAKgO,QAAQ6xE,aAElB6F,EAAiBhB,EAAa55E,IAAI,SAAU26E,GAC9C,MAAOA,GAAYplF,IAErBmlF,GAAmBA,EAAiB3+E,OAAO6+E,KAE5C1lF,MACIwlF,GAQTrY,EAAQ96D,UAAU2/B,SAAW,SAAUpjC,GACrC5O,KAAKiyC,MAAMrjC,EAAKvO,IAAMuO,CAGtB,IAAIokE,GAAUhzE,KAAKskF,YAAY11E,EAAK4lB,MAChC28C,EAAQnxE,KAAKutE,OAAOyF,EAEnB7B,GAEMA,GAASA,EAAM38C,MAAQ28C,EAAM38C,KAAKswD,aAC3Cl2E,EAAKijE,cAAe,GAFpBjjE,EAAKijE,cAAe,EAKlBV,GAAOA,EAAM1gD,IAAI7hB,IASvBu+D,EAAQ96D,UAAUmgC,YAAc,SAAU5jC,EAAMyiE,GAE9CziE,EAAK4mC,QAAQ67B,EAEb,IAAI2B,GAAUhzE,KAAKskF,YAAY11E,EAAK4lB,MAChC28C,EAAQnxE,KAAKutE,OAAOyF,EACnB7B,GAEMA,GAASA,EAAM38C,MAAQ28C,EAAM38C,KAAKswD,aAC3Cl2E,EAAKijE,cAAe,GAFpBjjE,EAAKijE,cAAe,GAYxB1E,EAAQ96D,UAAU+yE,YAAc,SAAUx2E,GAExCA,EAAKkD,aAGE9R,MAAKiyC,MAAMrjC,EAAKvO,GAGvB,IAAI0S,GAAQ/S,KAAK+wE,UAAUnsE,QAAQgK,EAAKvO,KAC1B,GAAV0S,GAAa/S,KAAK+wE,UAAUl5C,OAAO9kB,EAAO,GAG9CnE,EAAK5F,QAAU4F,EAAK5F,OAAO0qC,OAAO9kC,IASpCu+D,EAAQ96D,UAAUszE,qBAAuB,SAAUt+E,GAGjD,IAAK,GAFDu+E,MAEK7hF,EAAI,EAAGA,EAAIsD,EAAMzD,OAAQG,IAC5BsD,EAAMtD,YAAc2oE,IACtBkZ,EAAS/gF,KAAKwC,EAAMtD,GAGxB,OAAO6hF,IAaTzY,EAAQ96D,UAAUgiE,SAAW,SAAU9rE,GAErCvI,KAAK6hF,YAAYjzE,KAAO5O,KAAKuyE,eAAehqE,GAC5CvI,KAAK6hF,YAAYgE,aAAet9E,EAAMI,OAAOk9E,eAAgB,EAC7D7lF,KAAK6hF,YAAYiE,cAAgBv9E,EAAMI,OAAOm9E,gBAAiB,EAC/D9lF,KAAK6hF,YAAYkE,UAAY,MAS/B5Y,EAAQ96D,UAAU2zE,eAAiB,SAAUhT,GAC3C,IAAK,GAAIjvE,GAAI,EAAGA,EAAI/D,KAAK2hF,SAAS/9E,OAAQG,IACxC,GAAIivE,GAAWhzE,KAAK2hF,SAAS59E,GAAI,MAAOA,IAS5CopE,EAAQ96D,UAAU4hE,aAAe,SAAU1rE,GACzC,IAAIvI,KAAK6hF,YAAYoE,eAArB,CAGA,GAEI/hF,GAFA0K,EAAO5O,KAAK6hF,YAAYjzE,MAAQ,KAChCmjC,EAAK/xC,IAGT,IAAI4O,IAASA,EAAKu2E,UAAYnlF,KAAKgO,QAAQgyE,sBAAuB,CAEhE,GAAIhgF,KAAKgO,QAAQiyE,SAASG,gBAAkBpgF,KAAKgO,QAAQiyE,SAASC,aAAelgF,KAAKgO,QAAQiyE,SAASE,YACrG,MAIF,IAAqB,MAAjBvxE,EAAKqxE,WAAqBrxE,EAAKqxE,SAASC,aAAetxE,EAAKqxE,SAASE,cAAgBngF,KAAKgO,QAAQiyE,SAASG,cAC7G,MAGF,IAAIyF,GAAe7lF,KAAK6hF,YAAYgE,aAChCC,EAAgB9lF,KAAK6hF,YAAYiE,aAIrC,IAHA9lF,KAAK6hF,YAAYoE,gBAAiB,EAClCjmF,KAAK6hF,YAAYqE,aAAet3E,EAE5Bi3E,EACF3hF,GACE0K,KAAMi3E,EACNM,SAAU59E,EAAMozC,OAAO5mB,EACvBqxD,UAAU,EACV5xD,KAAMx0B,KAAKqmF,eAAez3E,EAAK4lB,OAGjCx0B,KAAK6hF,YAAYkE,WAAa7hF,OACzB,IAAI4hF,EACT5hF,GACE0K,KAAMk3E,EACNK,SAAU59E,EAAMozC,OAAO5mB,EACvBuxD,WAAW,EACX9xD,KAAMx0B,KAAKqmF,eAAez3E,EAAK4lB,OAGjCx0B,KAAK6hF,YAAYkE,WAAa7hF,OACzB,CACL,GAAIqiF,GAAiBvmF,KAAKgmF,eAAep3E,EAAK4lB,KAAK28C,OAE/CqV,EAAcxmF,KAAKgO,QAAQgyE,uBAAyBpxE,EAAKu2E,UAAYv2E,EAAKvO,IAAML,KAAKgxE,cAEzFhxE,MAAK6hF,YAAYkE,UAAYS,EAAY17E,IAAI,SAAUzK,GACrD,GAAIuO,GAAOmjC,EAAGE,MAAM5xC,GAChBomF,EAAa10C,EAAGi0C,eAAep3E,EAAK4lB,KAAK28C,MAC7C,QACEviE,KAAMA,EACNu3E,SAAU59E,EAAMozC,OAAO5mB,EACvB2xD,YAAaH,EAAiBE,EAC9BjyD,KAAMx0B,KAAKqmF,eAAez3E,EAAK4lB,QAEjC8iC,KAAKt3D,OAGTuI,EAAM6uD,sBACGp3D,MAAKgO,QAAQiyE,SAASxvD,MAAQloB,EAAM0uD,SAAS3K,SAAW/jD,EAAM0uD,SAAS0vB,UAEhF3mF,KAAK4mF,oBAAoBr+E,KAS7B4kE,EAAQ96D,UAAUu0E,oBAAsB,SAAUr+E,GAChD,GAAIoqE,GAAO3yE,KAAKgO,QAAQ2kE,MAAQ,IAEhC,IAAI3yE,KAAKgO,QAAQggE,IACf,GAAI6Y,GAAOlmF,EAAKwF,iBAAiBnG,KAAKivD,IAAIhR,OACtClpB,EAAI8xD,EAAOt+E,EAAMozC,OAAO5mB,EAAI,OAEhC,IAAI8xD,GAAOlmF,EAAKoF,gBAAgB/F,KAAKivD,IAAIhR,OACrClpB,EAAIxsB,EAAMozC,OAAO5mB,EAAI8xD,EAAO,EAGlC,IAAIzmD,GAAOpgC,KAAK2Q,KAAKhQ,KAAKmuE,OAAO/5C,GAC7BvyB,EAAQxC,KAAK2Q,KAAKhQ,KAAKg9D,WACvBprD,EAAOvS,KAAK2Q,KAAKhQ,KAAKwzD,UACtB5N,EAAQosB,EAAOA,EAAKvyC,EAAM59B,EAAO+P,GAAQ6tB,EACzComB,EAAMD,EAEN8qB,GACFpsE,KAAM,QACNshD,MAAOA,EACPC,IAAKA,EACLjW,QAAS,YAGPlwC,EAAKM,EAAKuC,YACdmuE,GAASrxE,KAAKqvE,UAAUz+B,UAAYvwC,CAEpC,IAAI8wE,GAAQnxE,KAAKwyE,gBAAgBjqE,EAC7B4oE,KACFE,EAASF,MAAQA,EAAM6B,QAEzB,IAAI8T,GAAU,GAAIpa,GAAU2E,EAAUrxE,KAAKy0E,WAAYz0E,KAAKgO,QAC5D84E,GAAQzmF,GAAKA,EACbymF,EAAQtyD,KAAOx0B,KAAKqmF,eAAehV,GACnCrxE,KAAKgyC,SAAS80C,GACd9mF,KAAK6hF,YAAYqE,aAAeY,CAEhC,IAAI5iF,IACF0K,KAAMk4E,EACNX,SAAU59E,EAAMozC,OAAO5mB,EACvBP,KAAMsyD,EAAQtyD,KAGZx0B,MAAKgO,QAAQggE,IACf9pE,EAAMkiF,UAAW,EAEjBliF,EAAMoiF,WAAY,EAEpBtmF,KAAK6hF,YAAYkE,WAAa7hF,GAE9BqE,EAAM6uD,mBAQR+V,EAAQ96D,UAAU6hE,QAAU,SAAU3rE,GACpC,GAAIvI,KAAK6hF,YAAYkE,UAAW,CAC9Bx9E,EAAM6uD,iBAEN,IAAIrlB,GAAK/xC,KACL2yE,EAAO3yE,KAAKgO,QAAQ2kE,MAAQ,IAEhC,IAAI3yE,KAAKgO,QAAQggE,IACf,GAAI39B,GAAUrwC,KAAK2Q,KAAKs+C,IAAIvvD,KAAKqnF,WAAa/mF,KAAK2Q,KAAK29D,SAASloE,MAAMgK,UAEvE,IAAIigC,GAAUrwC,KAAK2Q,KAAKs+C,IAAIvvD,KAAKqnF,WAAa/mF,KAAK2Q,KAAK29D,SAASpoE,KAAKkK,KAGxE,IAAI5N,GAAQxC,KAAK2Q,KAAKhQ,KAAKg9D,WACvBprD,EAAOvS,KAAK2Q,KAAKhQ,KAAKwzD,UAGtB+xB,EAAelmF,KAAK6hF,YAAYqE,aAChCc,GAAsBhnF,KAAKgO,QAAQiyE,SAASG,eAA0C,MAAzB8F,EAAajG,WAAqBjgF,KAAKgO,QAAQiyE,SAASE,cAAgBngF,KAAKgO,QAAQiyE,SAASG,eAA0C,MAAzB8F,EAAajG,UAAoBiG,EAAajG,SAASE,YACnO8G,EAAe,IACnB,IAAID,GAAsBd,OACOriF,IAA3BqiF,EAAa1xD,KAAK28C,MAAoB,CAExC,GAAIA,GAAQp/B,EAAGygC,gBAAgBjqE,EAC3B4oE,KAGF8V,EAAejnF,KAAKgmF,eAAe7U,EAAM6B,UAM/ChzE,KAAK6hF,YAAYkE,UAAU7+E,QAAQ,SAAUhD,GAC3C,GAAIm1E,GAAUtnC,EAAGphC,KAAKhQ,KAAKmuE,OAAOvmE,EAAMozC,OAAO5mB,EAAIsb,GAC/C62C,EAAUn1C,EAAGphC,KAAKhQ,KAAKmuE,OAAO5qE,EAAMiiF,SAAW91C,EAEnD,IAAIrwC,KAAKgO,QAAQggE,IACf,GAAIrxC,KAAW08C,EAAU6N,OAEzB,IAAIvqD,GAAS08C,EAAU6N,CAGzB,IAAI7V,GAAWrxE,KAAKqmF,eAAeniF,EAAM0K,KAAK4lB,KAC9C,IAA2B,MAAvBtwB,EAAM0K,KAAKqxE,UAAqB/7E,EAAM0K,KAAKqxE,SAASC,YAAeh8E,EAAM0K,KAAKqxE,SAASE,aAAgBpuC,EAAG/jC,QAAQiyE,SAASG,cAA/H,CAKA,IADyBpgF,KAAKgO,QAAQiyE,SAASG,eAA0C,MAAzB8F,EAAajG,WAAqBjgF,KAAKgO,QAAQiyE,SAASC,aAAelgF,KAAKgO,QAAQiyE,SAASG,eAA0C,MAAzB8F,EAAajG,UAAoBiG,EAAajG,SAASC,WAEnO,GAAIh8E,EAAMkiF,UAER,GAAIpmF,KAAKgO,QAAQggE,KACf,OAAoBnqE,IAAhBwtE,EAAS7qB,IAAkB,CAC7B,GAAI2gC,GAAaxmF,EAAKqE,QAAQd,EAAMswB,KAAKgyB,IAAK,QAC1CA,EAAM,GAAI3jD,MAAKskF,EAAW/hF,UAAYu3B,EAE1C00C,GAAS7qB,IAAMmsB,EAAOA,EAAKnsB,EAAKhkD,EAAO+P,GAAQi0C,OAGjD,QAAsB3iD,IAAlBwtE,EAAS9qB,MAAoB,CAC/B,GAAI6gC,GAAezmF,EAAKqE,QAAQd,EAAMswB,KAAK+xB,MAAO,QAC9CA,EAAQ,GAAI1jD,MAAKukF,EAAahiF,UAAYu3B,EAE9C00C,GAAS9qB,MAAQosB,EAAOA,EAAKpsB,EAAO/jD,EAAO+P,GAAQg0C,OAGlD,IAAIriD,EAAMoiF,WAEf,GAAItmF,KAAKgO,QAAQggE,KACf,OAAsBnqE,IAAlBwtE,EAAS9qB,MAAoB,CAC/B,GAAI6gC,GAAezmF,EAAKqE,QAAQd,EAAMswB,KAAK+xB,MAAO,QAC9CA,EAAQ,GAAI1jD,MAAKukF,EAAahiF,UAAYu3B,EAE9C00C,GAAS9qB,MAAQosB,EAAOA,EAAKpsB,EAAO/jD,EAAO+P,GAAQg0C,OAGrD,QAAoB1iD,IAAhBwtE,EAAS7qB,IAAkB,CAC7B,GAAI2gC,GAAaxmF,EAAKqE,QAAQd,EAAMswB,KAAKgyB,IAAK,QAC1CA,EAAM,GAAI3jD,MAAKskF,EAAW/hF,UAAYu3B,EAE1C00C,GAAS7qB,IAAMmsB,EAAOA,EAAKnsB,EAAKhkD,EAAO+P,GAAQi0C,OAKnD,QAAsB3iD,IAAlBwtE,EAAS9qB,MAAoB,CAE/B,GAAI6gC,GAAezmF,EAAKqE,QAAQd,EAAMswB,KAAK+xB,MAAO,QAAQnhD,UACtDmhD,EAAQ,GAAI1jD,MAAKukF,EAAezqD,EAEpC,QAAoB94B,IAAhBwtE,EAAS7qB,IAAkB,CAC7B,GAAI2gC,GAAaxmF,EAAKqE,QAAQd,EAAMswB,KAAKgyB,IAAK,QAC1C5qB,EAAWurD,EAAW/hF,UAAYgiF,EAAahiF,SAGnDisE,GAAS9qB,MAAQosB,EAAOA,EAAKpsB,EAAO/jD,EAAO+P,GAAQg0C,EACnD8qB,EAAS7qB,IAAM,GAAI3jD,MAAKwuE,EAAS9qB,MAAMnhD,UAAYw2B,OAGnDy1C,GAAS9qB,MAAQosB,EAAOA,EAAKpsB,EAAO/jD,EAAO+P,GAAQg0C,EAM3D,GAAIygC,IAAuB9iF,EAAMkiF,WAAaliF,EAAMoiF,WAA6B,MAAhBW,OACzCpjF,IAAlBwtE,EAASF,MAAoB,CAC/B,GAAIkW,GAAYJ,EAAe/iF,EAAMwiF,WAGrCW,GAAY5kF,KAAKJ,IAAI,EAAGglF,GACxBA,EAAY5kF,KAAKL,IAAI2vC,EAAG4vC,SAAS/9E,OAAS,EAAGyjF,GAC7ChW,EAASF,MAAQp/B,EAAG4vC,SAAS0F,GAKjChW,EAAWrxE,KAAKqmF,eAAehV,GAC/Bt/B,EAAG/jC,QAAQ0yE,SAASrP,EAAU,SAAUA,GAClCA,GACFntE,EAAM0K,KAAK4mC,QAAQx1C,KAAKqmF,eAAehV,EAAU,UAEnD/Z,KAAKt3D,SACPs3D,KAAKt3D,OAEPA,KAAK2Q,KAAK49D,QAAQrhB,KAAK,aAU3BigB,EAAQ96D,UAAUi1E,aAAe,SAAU14E,EAAMokE,GAC/C,GAAI7B,GAAQnxE,KAAKutE,OAAOyF,EACxB,IAAI7B,GAASA,EAAM6B,SAAWpkE,EAAK4lB,KAAK28C,MAAO,CAC7C,GAAIoW,GAAW34E,EAAK5F,MACpBu+E,GAAS7zC,OAAO9kC,GAChB24E,EAASx0C,QAETnkC,EAAK4lB,KAAK28C,MAAQA,EAAM6B,QAExB7B,EAAM1gD,IAAI7hB,GACVuiE,EAAMp+B,UASVo6B,EAAQ96D,UAAU8hE,WAAa,SAAU5rE,GAEvC,GADAvI,KAAK6hF,YAAYoE,gBAAiB,EAC9BjmF,KAAK6hF,YAAYkE,UAAW,CAC9Bx9E,EAAM6uD,iBAEN,IAAIrlB,GAAK/xC,KACLsxE,EAAUtxE,KAAKqvE,UAAUj8B,aACzB2yC,EAAY/lF,KAAK6hF,YAAYkE,SACjC/lF,MAAK6hF,YAAYkE,UAAY,KAE7BA,EAAU7+E,QAAQ,SAAUhD,GAC1B,GAAI7D,GAAK6D,EAAM0K,KAAKvO,EAGpB,IAFqD,MAAxC0xC,EAAGs9B,UAAU53D,IAAIpX,EAAI0xC,EAAGmvC,aAa9B,CAEL,GAAI7P,GAAWrxE,KAAKqmF,eAAeniF,EAAM0K,KAAK4lB,KAC9Cud,GAAG/jC,QAAQwyE,OAAOnP,EAAU,SAAUA,GAChCA,GAEFA,EAASC,EAAQ1gC,UAAYvwC,EAC7BixE,EAAQp/B,OAAOm/B,KAGfntE,EAAM0K,KAAK4mC,QAAQtxC,EAAMswB,MAEzBud,EAAGphC,KAAK49D,QAAQrhB,KAAK,kBArBzBnb,GAAG/jC,QAAQsyE,MAAMp8E,EAAM0K,KAAK4lB,KAAM,SAAU68C,GAC1Ct/B,EAAGqzC,YAAYlhF,EAAM0K,MACjByiE,GACFt/B,EAAGs9B,UAAUj8B,aAAa3iB,IAAI4gD,GAIhCt/B,EAAGphC,KAAK49D,QAAQrhB,KAAK,cAkBzBoK,KAAKt3D,SAIXmtE,EAAQ96D,UAAUmwE,cAAgB,SAAUj6E,GAC1C,GAAI4oE,GAAQnxE,KAAKwyE,gBAAgBjqE,EAEjC,IAAK4oE,GAAUA,EAAMuT,aAArB,CAEA,GAAIpV,GAAatvE,KAAKsvE,UAClBtvE,MAAKsvE,qBAAsBhhC,KAC7BghC,EAAatvE,KAAKsvE,WAAWl8B,cAG/B+9B,EAAM2T,YAAc3T,EAAM2T,UAE1B,IAAIJ,GAAepV,EAAW73D,IAAI05D,EAAMuT,cAAc55E,IAAI,SAAU26E,GAKlE,WAJ2B5hF,IAAvB4hF,EAAY3+B,UACd2+B,EAAY3+B,SAAU,GAExB2+B,EAAY3+B,UAAYqqB,EAAM2T,WACvBW,GAIT,IAFAnW,EAAWp9B,OAAOwyC,GAEdvT,EAAM2T,WACRnkF,EAAKqG,gBAAgBmqE,EAAMliB,IAAI7e,MAAO,aACtCzvC,EAAK4F,aAAa4qE,EAAMliB,IAAI7e,MAAO,gBAC9B,CACLzvC,EAAKqG,gBAAgBmqE,EAAMliB,IAAI7e,MAAO,WACtC,IAAIo3C,GAAwBxnF,KAAKgO,QAAQggE,IAAM,gBAAkB,WACjErtE,GAAK4F,aAAa4qE,EAAMliB,IAAI7e,MAAOo3C,MAIvCra,EAAQ96D,UAAUowE,kBAAoB,SAAUl6E,GAC1CvI,KAAKgO,QAAQqyE,cAActtC,QAC7B/yC,KAAK8hF,iBAAiB3Q,MAAQnxE,KAAKwyE,gBAAgBjqE,GAE/CvI,KAAK8hF,iBAAiB3Q,QACxB5oE,EAAM6uD,kBAENp3D,KAAK8hF,iBAAiB2F,cAAgBznF,KAAKsvE,WAAWn8B,QACpDJ,MAAO/yC,KAAKgO,QAAQ6xE,gBAM5B1S,EAAQ96D,UAAUqwE,aAAe,SAAUn6E,GACzC,GAAIvI,KAAKgO,QAAQqyE,cAActtC,OAAS/yC,KAAK8hF,iBAAiB3Q,MAAO,CACnE5oE,EAAM6uD,iBAEN,IAAIkY,GAAatvE,KAAKsvE,UAClBtvE,MAAKsvE,qBAAsBhhC,KAC7BghC,EAAatvE,KAAKsvE,WAAWl8B,aAG/B,IAAI+9B,GAAQnxE,KAAKwyE,gBAAgBjqE,EAGjC,IAAI4oE,GAASA,EAAM9gE,QAAUrQ,KAAK8hF,iBAAiB3Q,MAAM9gE,OAAQ,CAC/D,GAAIq3E,GAAWvW,EAAM7qE,IAAMtG,KAAK8hF,iBAAiB3Q,MAAM7qE,IACnD6wC,EAAU5uC,EAAMozC,OAASpzC,EAAMozC,OAAOhtB,EAAIpmB,EAAM4uC,QAChDwwC,EAAiBhnF,EAAK0F,eAAe8qE,EAAMliB,IAAI6jB,YAC/C8U,EAAqB5nF,KAAK8hF,iBAAiB3Q,MAAM9gE,MACrD,IAAIq3E,GAEF,GAAIC,EAAiBC,EAAqBzwC,EACxC,WAEG,CAGL,GAAIwwC,EAFoBxW,EAAM9gE,OAEWu3E,EAAqBzwC,EAC5D,QAKN,GAAIg6B,GAASA,GAASnxE,KAAK8hF,iBAAiB3Q,MAAO,CACjD,GAAI0W,GAAcvY,EAAW73D,IAAI05D,EAAM6B,SACnC8U,EAAexY,EAAW73D,IAAIzX,KAAK8hF,iBAAiB3Q,MAAM6B,QAG1D8U,IAAgBD,IAClB7nF,KAAKgO,QAAQyxE,eAAeqI,EAAcD,EAAavY,GACvDA,EAAWp9B,OAAO41C,GAClBxY,EAAWp9B,OAAO21C,GAIpB,IAAIE,GAAWzY,EAAWn8B,QACxBJ,MAAO/yC,KAAKgO,QAAQ6xE,YAItB,KAAKl/E,EAAKmE,WAAWijF,EAAU/nF,KAAK8hF,iBAAiB2F,eAOnD,IANA,GAAIO,GAAYhoF,KAAK8hF,iBAAiB2F,cAClCQ,EAAYjoF,KAAK8hF,iBAAiB3Q,MAAM6B,QACxCkV,EAAYzlF,KAAKL,IAAI4lF,EAAUpkF,OAAQmkF,EAASnkF,QAChDukF,EAAS,EACTd,EAAY,EACZe,EAAY,EACTD,EAASD,GAAW,CAEzB,KAAOC,EAASd,EAAYa,GAAaC,EAASC,EAAYF,GAAaH,EAASI,EAASd,IAAcW,EAAUG,EAASC,IAC5HD,GAIF,IAAIA,EAASd,GAAaa,EACxB,KAKF,IAAIH,EAASI,EAASd,IAAcY,EAK/B,GAAID,EAAUG,EAASC,IAAcH,EAArC,CAOC,GAAII,GAAkBN,EAASnjF,QAAQojF,EAAUG,EAASC,IACtDE,EAAchZ,EAAW73D,IAAIswE,EAASI,EAASd,IAC/CkB,EAAgBjZ,EAAW73D,IAAIuwE,EAAUG,EAASC,GACtDpoF,MAAKgO,QAAQyxE,eAAe6I,EAAaC,EAAejZ,GACxDA,EAAWp9B,OAAOo2C,GAClBhZ,EAAWp9B,OAAOq2C,EAElB,IAAIC,GAAgBT,EAASI,EAASd,EACtCU,GAASI,EAASd,GAAaW,EAAUG,EAASC,GAClDL,EAASM,GAAmBG,EAE5BL,QAjBFC,GAAY,MALdf,GAAY,MA8BxBla,EAAQ96D,UAAUswE,gBAAkB,SAAUp6E,GAC5C,GAAIvI,KAAKgO,QAAQqyE,cAActtC,OAAS/yC,KAAK8hF,iBAAiB3Q,MAAO,CACnE5oE,EAAM6uD,iBAGN,IAAIrlB,GAAK/xC,KACLK,EAAK0xC,EAAG+vC,iBAAiB3Q,MAAM6B,QAC/B1B,EAAUv/B,EAAGu9B,WAAWl8B,aACxBiyC,EAAY1kF,EAAKC,UAAW0wE,EAAQ75D,IAAIpX,GAC5C0xC,GAAG/jC,QAAQ4yE,YAAYyE,EAAW,SAAUA,GAC1C,GAAIA,EAEFA,EAAU/T,EAAQ1gC,UAAYvwC,EAC9BixE,EAAQp/B,OAAOmzC,OACV,CAGL,GAAI0C,GAAWzW,EAAQn+B,QACrBJ,MAAOhB,EAAG/jC,QAAQ6xE,YAIpB,KAAKl/E,EAAKmE,WAAWijF,EAAUh2C,EAAG+vC,iBAAiB2F,eAIjD,IAHA,GAAIO,GAAYj2C,EAAG+vC,iBAAiB2F,cAChCS,EAAYzlF,KAAKL,IAAI4lF,EAAUpkF,OAAQmkF,EAASnkF,QAChDukF,EAAS,EACNA,EAASD,GAAW,CAEzB,KAAOC,EAASD,GAAaH,EAASI,IAAWH,EAAUG,IACzDA,GAIF,IAAIA,GAAUD,EACZ,KAKF,IAAIG,GAAkBN,EAASnjF,QAAQojF,EAAUG,IAC7CG,EAAchX,EAAQ75D,IAAIswE,EAASI,IACnCI,EAAgBjX,EAAQ75D,IAAIuwE,EAAUG,GAC1Cp2C,GAAG/jC,QAAQyxE,eAAe6I,EAAaC,EAAejX,GACtDA,EAAQp/B,OAAOo2C,GACfhX,EAAQp/B,OAAOq2C,EAEf,IAAIC,GAAgBT,EAASI,EAC7BJ,GAASI,GAAUH,EAAUG,GAC7BJ,EAASM,GAAmBG,EAE5BL,QAMRp2C,EAAGphC,KAAK49D,QAAQrhB,KAAK,gBAAkB8lB,QAAS3yE,MASpD8sE,EAAQ96D,UAAUgwE,cAAgB,SAAU95E,GAC1C,GAAKvI,KAAKgO,QAAQ8xE,WAAlB,CAEA,GAAIxzB,GAAU/jD,EAAM0uD,WAAa1uD,EAAM0uD,SAAS3K,SAAW/jD,EAAM0uD,SAAS0vB,SACtEjb,EAAWnjE,EAAM0uD,UAAY1uD,EAAM0uD,SAASyU,QAChD,IAAIpf,GAAWof,EAEb,WADA1rE,MAAKsiF,mBAAmB/5E,EAI1B,IAAIkgF,GAAezoF,KAAKgxE,eAEpBpiE,EAAO5O,KAAKuyE,eAAehqE,GAC3BwoE,EAAYniE,GAAQA,EAAKvO,MAC7BL,MAAKixE,aAAaF,EAElB,IAAI2X,GAAe1oF,KAAKgxE,gBAIpB0X,EAAa9kF,OAAS,GAAK6kF,EAAa7kF,OAAS,IACnD5D,KAAK2Q,KAAK49D,QAAQrhB,KAAK,UACrBjb,MAAOy2C,EACPngF,MAAOA,MAUb4kE,EAAQ96D,UAAUuwE,aAAe,SAAUr6E,GACzC,GAAIqG,GAAO5O,KAAKuyE,eAAehqE,EAC/B,IAAKqG,EAAL,CAIA,GAAIA,IADU5O,KAAK2oF,sBAAsBpgF,GACzC,CAKA,GAAI60E,GAAQxuE,EAAKg6E,UACjB,IAAI5oF,KAAKgO,QAAQ8yE,cAAgB1D,EAAO,CACpB,MAAdp9E,KAAK4hF,QACP5hF,KAAK4hF,MAAQ,GAAIG,GAAM/hF,KAAK2Q,KAAKs+C,IAAIvvD,KAAMM,KAAKgO,QAAQqrC,QAAQ2nC,gBAAkB,SAGpFhhF,KAAK4hF,MAAMiH,QAAQzL,EACnB,IAAIlnC,GAAYl2C,KAAK2Q,KAAKs+C,IAAIqjB,eAC9BtyE,MAAK4hF,MAAMkH,YAAYvgF,EAAMyuC,QAAUr2C,EAAKoF,gBAAgBmwC,GAAaA,EAAU6wC,WAAYx+E,EAAM4uC,QAAUx2C,EAAK0F,eAAe6vC,GAAaA,EAAU6yC,WAC1J/oF,KAAK4hF,MAAM9P,WAIO,OAAd9xE,KAAK4hF,OACP5hF,KAAK4hF,MAAM9vE,MAIf9R,MAAK2Q,KAAK49D,QAAQrhB,KAAK,YACrBt+C,KAAMA,EAAKvO,GACXkI,MAAOA,OAGX4kE,EAAQ96D,UAAUwwE,YAAc,SAAUt6E,GACxC,GAAIqG,GAAO5O,KAAKuyE,eAAehqE,EAC/B,IAAKqG,EAAL,CAIIA,IADU5O,KAAK2oF,sBAAsBpgF,KAMvB,MAAdvI,KAAK4hF,OACP5hF,KAAK4hF,MAAM9vE,OAGb9R,KAAK2Q,KAAK49D,QAAQrhB,KAAK,WACrBt+C,KAAMA,EAAKvO,GACXkI,MAAOA,OAGX4kE,EAAQ96D,UAAU45C,aAAe,SAAU1jD,GAEzC,GADWvI,KAAKuyE,eAAehqE,IAG3BvI,KAAKgO,QAAQ8yE,cAAgB9gF,KAAKgO,QAAQqrC,QAAQ0nC,aAChD/gF,KAAK4hF,QACF5hF,KAAK4hF,MAAM/I,OAAQ,CACtB,GAAI3iC,GAAYl2C,KAAK2Q,KAAKs+C,IAAIqjB,eAC9BtyE,MAAK4hF,MAAMkH,YAAYvgF,EAAMyuC,QAAUr2C,EAAKoF,gBAAgBmwC,GAAaA,EAAU6wC,WAAYx+E,EAAM4uC,QAAUx2C,EAAK0F,eAAe6vC,GAAaA,EAAU6yC,WAC1J/oF,KAAK4hF,MAAM9P,SAWnB3E,EAAQ96D,UAAU+hE,cAAgB,SAAU7rE,GACtCvI,KAAK6hF,YAAYoE,gBACnBjmF,KAAKm0E,WAAW5rE,IASpB4kE,EAAQ96D,UAAU22E,cAAgB,SAAUp6E,GAC1C,GAAK5O,KAAKgO,QAAQ8xE,YACb9/E,KAAKgO,QAAQiyE,SAASxvD,IAA3B,CAEA,GAAIshB,GAAK/xC,IAET,IAAI4O,EAAM,CAER,GAAIyiE,GAAWt/B,EAAGs9B,UAAU53D,IAAI7I,EAAKvO,GACrCL,MAAKgO,QAAQuyE,SAASlP,EAAU,SAAUA,GACpCA,GACFt/B,EAAGs9B,UAAUj8B,aAAalB,OAAOm/B,QAWzClE,EAAQ96D,UAAU+oE,WAAa,SAAU7yE,GACvC,GAAKvI,KAAKgO,QAAQ8xE,YACb9/E,KAAKgO,QAAQiyE,SAASxvD,IAA3B,CAEA,GAAIshB,GAAK/xC,KACL2yE,EAAO3yE,KAAKgO,QAAQ2kE,MAAQ,IAGhC,KAFW3yE,KAAKuyE,eAAehqE,GAEpB,CAET,GAAIvI,KAAKgO,QAAQggE,IACf,GAAI6Y,GAAOlmF,EAAKwF,iBAAiBnG,KAAKivD,IAAIhR,OACtClpB,EAAI8xD,EAAOt+E,EAAMozC,OAAO5mB,MAE5B,IAAI8xD,GAAOlmF,EAAKoF,gBAAgB/F,KAAKivD,IAAIhR,OACrClpB,EAAIxsB,EAAMozC,OAAO5mB,EAAI8xD,CAI3B,IAIIoC,GAJA1iC,EAAQvmD,KAAK2Q,KAAKhQ,KAAKmuE,OAAO/5C,GAC9BvyB,EAAQxC,KAAK2Q,KAAKhQ,KAAKg9D,WACvBprD,EAAOvS,KAAK2Q,KAAKhQ,KAAKwzD,SAG1B,IAAkB,QAAd5rD,EAAMtD,MAOR,GANAgkF,EAAc/rE,KAAKja,MAAMsF,EAAMyyE,aAAaG,QAAQ,SACpD8N,EAAY14C,QAAU04C,EAAY14C,QAAU04C,EAAY14C,QAAU,WAClE04C,EAAY1iC,MAAQ0iC,EAAY1iC,MAAQ0iC,EAAY1iC,MAAQosB,EAAOA,EAAKpsB,EAAO/jD,EAAO+P,GAAQg0C,EAC9F0iC,EAAYhkF,KAAOgkF,EAAYhkF,MAAQ,MACvCgkF,EAAYjpF,KAAKqvE,UAAUz+B,UAAYq4C,EAAY5oF,IAAMM,EAAKuC,aAEtC,SAApB+lF,EAAYhkF,OAAoBgkF,EAAYziC,IAAK,CACnD,GAAIA,GAAMxmD,KAAK2Q,KAAKhQ,KAAKmuE,OAAO/5C,EAAI/0B,KAAKkE,MAAMkM,MAAQ,EACvD64E,GAAYziC,IAAMmsB,EAAOA,EAAKnsB,EAAKhkD,EAAO+P,GAAQi0C,OAUpD,IAPAyiC,GACE1iC,MAAOosB,EAAOA,EAAKpsB,EAAO/jD,EAAO+P,GAAQg0C,EACzChW,QAAS,YAEX04C,EAAYjpF,KAAKqvE,UAAUz+B,UAAYjwC,EAAKuC,aAGlB,UAAtBlD,KAAKgO,QAAQ/I,KAAkB,CACjC,GAAIuhD,GAAMxmD,KAAK2Q,KAAKhQ,KAAKmuE,OAAO/5C,EAAI/0B,KAAKkE,MAAMkM,MAAQ,EACvD64E,GAAYziC,IAAMmsB,EAAOA,EAAKnsB,EAAKhkD,EAAO+P,GAAQi0C,EAItD,GAAI2qB,GAAQnxE,KAAKwyE,gBAAgBjqE,EAC7B4oE,KACF8X,EAAY9X,MAAQA,EAAM6B,SAI5BiW,EAAcjpF,KAAKqmF,eAAe4C,GAClCjpF,KAAKgO,QAAQsyE,MAAM2I,EAAa,SAAUr6E,GACpCA,IACFmjC,EAAGs9B,UAAUj8B,aAAa3iB,IAAI7hB,GACZ,QAAdrG,EAAMtD,MACR8sC,EAAGk/B,cAAcriE,EAAKvO,WAahC8sE,EAAQ96D,UAAUiwE,mBAAqB,SAAU/5E,GAC/C,GAAKvI,KAAKgO,QAAQ8xE,WAAlB,CAEA,GAAIlxE,GAAO5O,KAAKuyE,eAAehqE,EAE/B,IAAIqG,EAAM,CAGR,GAAImiE,GAAY/wE,KAAKgO,QAAQ+xE,YAAc//E,KAAKgxE,iBAKhD,KAFezoE,EAAM0uD,UAAY1uD,EAAM0uD,SAASyU,WAAY,IAE5C1rE,KAAKgO,QAAQ+xE,YAAa,CAExC,GAAImJ,GAAYlpF,KAAKqvE,UAAU53D,IAAI7I,EAAKvO,IAAI8wE,MAGxCgY,MAAoBtlF,EACpB7D,MAAKgO,QAAQo7E,qBACXrY,EAAUntE,OAAS,IACrBulF,EAAoBnpF,KAAKqvE,UAAU53D,IAAIs5D,EAAU,IAAII,OAKpDnxE,KAAKgO,QAAQo7E,yBAA4CvlF,IAArBslF,GAAkCA,GAAqBD,GAC9FnY,EAAUlsE,KAAK+J,EAAKvO,GAEtB,IAAIi7C,GAAQ6xB,EAAQkc,cAAcrpF,KAAKqvE,UAAU53D,IAAIs5D,EAAW/wE,KAAKkhF,aAErE,KAAKlhF,KAAKgO,QAAQo7E,qBAAuBD,GAAqBD,EAAW,CAEvEnY,IACA,KAAK,GAAI1wE,KAAML,MAAKiyC,MAClB,GAAIjyC,KAAKiyC,MAAM3uC,eAAejD,GAAK,CACjC,GAAIipF,GAAQtpF,KAAKiyC,MAAM5xC,GACnBkmD,EAAQ+iC,EAAM90D,KAAK+xB,MACnBC,MAAyB3iD,KAAnBylF,EAAM90D,KAAKgyB,IAAoB8iC,EAAM90D,KAAKgyB,IAAMD,IAEtDA,GAASjL,EAAMl5C,KAAOokD,GAAOlL,EAAMj5C,MAASrC,KAAKgO,QAAQo7E,qBAAuBD,GAAqBnpF,KAAKqvE,UAAU53D,IAAI6xE,EAAMjpF,IAAI8wE,OAAYmY,YAAiB/c,IACjKwE,EAAUlsE,KAAKykF,EAAMjpF,UAKxB,CAEL,GAAI0S,GAAQg+D,EAAUnsE,QAAQgK,EAAKvO,KACrB,GAAV0S,EAEFg+D,EAAUlsE,KAAK+J,EAAKvO,IAGpB0wE,EAAUl5C,OAAO9kB,EAAO,GAI5B/S,KAAKixE,aAAaF,GAElB/wE,KAAK2Q,KAAK49D,QAAQrhB,KAAK,UACrBjb,MAAOjyC,KAAKgxE,eACZzoE,MAAOA,OAWb4kE,EAAQkc,cAAgB,SAAUha,GAChC,GAAIhtE,GAAM,KACND,EAAM,IAkBV,OAhBAitE,GAAUnoE,QAAQ,SAAUstB,IACf,MAAPpyB,GAAeoyB,EAAK+xB,MAAQnkD,KAC9BA,EAAMoyB,EAAK+xB,WAGG1iD,IAAZ2wB,EAAKgyB,KACI,MAAPnkD,GAAemyB,EAAKgyB,IAAMnkD,KAC5BA,EAAMmyB,EAAKgyB,MAGF,MAAPnkD,GAAemyB,EAAK+xB,MAAQlkD,KAC9BA,EAAMmyB,EAAK+xB,UAMfnkD,IAAKA,EACLC,IAAKA,IAUT8qE,EAAQ96D,UAAUk3E,gBAAkB,SAAU1hF,GAE5C,IADA,GAAI2hF,GAAM3hF,EACH2hF,GAAK,CACV,GAAIA,EAAIlmF,eAAe,iBACrB,MAAOkmF,GAAI,gBAEbA,GAAMA,EAAI1gF,WAGZ,MAAO,OASTqkE,EAAQ96D,UAAUkgE,eAAiB,SAAUhqE,GAC3C,MAAOvI,MAAKupF,gBAAgBhhF,EAAMI,SASpCwkE,EAAQ96D,UAAUs2E,sBAAwB,SAAUpgF,GAClD,MAAOvI,MAAKupF,gBAAgBhhF,EAAMkhF,gBASpCtc,EAAQ96D,UAAUmgE,gBAAkB,SAAUjqE,GAC5C,GAAI4uC,GAAU5uC,EAAMozC,OAASpzC,EAAMozC,OAAOhtB,EAAIpmB,EAAM4uC,QAChDwqC,EAAW3hF,KAAK2hF,QAEhBA,GAAS/9E,QAAU,GAAK5D,KAAKsvE,aAC/BqS,EAAW3hF,KAAKsvE,WAAWn8B,QACzBJ,MAAO/yC,KAAKgO,QAAQ6xE,aAIxB,KAAK,GAAI97E,GAAI,EAAGA,EAAI49E,EAAS/9E,OAAQG,IAAK,CACxC,GAAIivE,GAAU2O,EAAS59E,GACnBotE,EAAQnxE,KAAKutE,OAAOyF,GACpBF,EAAa3B,EAAMliB,IAAI6jB,WACvBxsE,EAAM3F,EAAK0F,eAAeysE,EAC9B,IAAI37B,EAAU7wC,GAAO6wC,EAAU7wC,EAAMwsE,EAAW1jB,aAC9C,MAAO+hB,EAGT,IAAsC,QAAlCnxE,KAAKgO,QAAQ4/D,YAAYh/D,MAC3B,GAAI7K,IAAM/D,KAAK2hF,SAAS/9E,OAAS,GAAKuzC,EAAU7wC,EAC9C,MAAO6qE,OAGT,IAAU,IAANptE,GAAWozC,EAAU7wC,EAAMwsE,EAAWn2C,OACxC,MAAOw0C,GAKb,MAAO,OASThE,EAAQuc,kBAAoB,SAAUnhF,GAEpC,IADA,GAAII,GAASJ,EAAMI,OACZA,GAAQ,CACb,GAAIA,EAAOrF,eAAe,oBACxB,MAAOqF,GAAO,mBAEhBA,GAASA,EAAOG,WAGlB,MAAO,OAYTqkE,EAAQ96D,UAAUg0E,eAAiB,SAAUhV,EAAUpsE,GACrD,GAAIq4B,GAAQ38B,EAAKC,UAAWywE,EAc5B,OAZKpsE,KAEHA,EAAOjF,KAAKqvE,UAAUj8B,aAAazC,SAAS1rC,UAG3BpB,IAAfy5B,EAAMipB,QACRjpB,EAAMipB,MAAQ5lD,EAAKqE,QAAQs4B,EAAMipB,MAAOthD,GAAQA,EAAKshD,OAAS,aAE/C1iD,IAAby5B,EAAMkpB,MACRlpB,EAAMkpB,IAAM7lD,EAAKqE,QAAQs4B,EAAMkpB,IAAKvhD,GAAQA,EAAKuhD,KAAO,SAGnDlpB,GAGTz9B,EAAOD,QAAUutE,GAIb,SAAUttE,EAAQD,EAASM,GAkC/B,QAASksE,GAAS7lB,EAAOC,EAAKmjC,EAAanb,GACzCxuE,KAAKyB,OAASA,EAGdzB,KAAKq5E,QAAUr5E,KAAKyB,SACpBzB,KAAKozD,OAASpzD,KAAKyB,SACnBzB,KAAKqzD,KAAOrzD,KAAKyB,SAEjBzB,KAAK4pF,WAAY,EACjB5pF,KAAKwC,MAAQ,MACbxC,KAAKuS,KAAO,EAGZvS,KAAKwzD,SAASjN,EAAOC,EAAKmjC,GAG1B3pF,KAAKw5E,aAAc,EACnBx5E,KAAKu5E,eAAgB,EACrBv5E,KAAKs5E,cAAe,EAChBn1E,MAAMC,QAAQoqE,GAChBxuE,KAAKwuE,YAAcA,EAEnBxuE,KAAKwuE,gBADmB3qE,IAAf2qE,GACWA,MAKtBxuE,KAAKyF,OAAS2mE,EAASyd,OAzDzB,GAAIpoF,GAASvB,EAAoB,IAC7BisE,EAAWjsE,EAAoB,KAC/BS,EAAOT,EAAoB,EA2D/BksE,GAASyd,QACPC,aACElvD,YAAa,MACbD,OAAQ,IACRD,OAAQ,QACRX,KAAM,QACNrK,QAAS,QACTsB,IAAK,IACLvB,KAAM,IACN3D,MAAO,MACPD,KAAM,QAERk+D,aACEnvD,YAAa,WACbD,OAAQ,eACRD,OAAQ,aACRX,KAAM,aACNrK,QAAS,YACTsB,IAAK,YACLvB,KAAM,YACN3D,MAAO,OACPD,KAAM,KASVugD,EAAS/5D,UAAU23E,UAAY,SAAUvoF,GACvCzB,KAAKyB,OAASA,EAGdzB,KAAKq5E,QAAUr5E,KAAKyB,OAAOzB,KAAKq5E,QAAQj0E,WACxCpF,KAAKozD,OAASpzD,KAAKyB,OAAOzB,KAAKozD,OAAOhuD,WACtCpF,KAAKqzD,KAAOrzD,KAAKyB,OAAOzB,KAAKqzD,KAAKjuD,YASpCgnE,EAAS/5D,UAAU43E,UAAY,SAAUxkF,GACvC,GAAIs8B,GAAgBphC,EAAK+D,cAAe0nE,EAASyd,OACjD7pF,MAAKyF,OAAS9E,EAAK+D,WAAWq9B,EAAet8B,IAa/C2mE,EAAS/5D,UAAUmhD,SAAW,SAAUjN,EAAOC,EAAKmjC,GAClD,KAAMpjC,YAAiB1jD,OAAW2jD,YAAe3jD,OAC/C,KAAM,+CAGR7C,MAAKozD,WAAkBvvD,IAAT0iD,EAAqBvmD,KAAKyB,OAAO8kD,EAAMnhD,WAAa,GAAIvC,MACtE7C,KAAKqzD,SAAcxvD,IAAP2iD,EAAmBxmD,KAAKyB,OAAO+kD,EAAIphD,WAAa,GAAIvC,MAE5D7C,KAAK4pF,WACP5pF,KAAKkqF,eAAeP,IAOxBvd,EAAS/5D,UAAUk0C,MAAQ,WACzBvmD,KAAKq5E,QAAUr5E,KAAKozD,OAAO91B,QAC3Bt9B,KAAKmqF,gBAOP/d,EAAS/5D,UAAU83E,aAAe,WAIhC,OAAQnqF,KAAKwC,OACX,IAAK,OACHxC,KAAKq5E,QAAQxtD,KAAK7rB,KAAKuS,KAAO9P,KAAKqK,MAAM9M,KAAKq5E,QAAQxtD,OAAS7rB,KAAKuS,OACpEvS,KAAKq5E,QAAQvtD,MAAM,EACrB,KAAK,QACH9rB,KAAKq5E,QAAQ9rD,KAAK,EACpB,KAAK,OACHvtB,KAAKq5E,QAAQ3pD,QAAQ,EACvB,KAAK,MACL,IAAK,UACH1vB,KAAKq5E,QAAQ/lD,MAAM,EACrB,KAAK,OACHtzB,KAAKq5E,QAAQ5lD,QAAQ,EACvB,KAAK,SACHzzB,KAAKq5E,QAAQn9C,QAAQ,EACvB,KAAK,SACHl8B,KAAKq5E,QAAQl9C,aAAa,GAI9B,GAAiB,GAAbn8B,KAAKuS,KAEP,OAAQvS,KAAKwC,OACX,IAAK,cACHxC,KAAKq5E,QAAQh7C,SAASr+B,KAAKq5E,QAAQl9C,eAAiBn8B,KAAKuS,KAAM,eAAgB,MACjF,KAAK,SACHvS,KAAKq5E,QAAQh7C,SAASr+B,KAAKq5E,QAAQn9C,UAAYl8B,KAAKuS,KAAM,UAAW,MACvE,KAAK,SACHvS,KAAKq5E,QAAQh7C,SAASr+B,KAAKq5E,QAAQ5lD,UAAYzzB,KAAKuS,KAAM,UAAW,MACvE,KAAK,OACHvS,KAAKq5E,QAAQh7C,SAASr+B,KAAKq5E,QAAQ/lD,QAAUtzB,KAAKuS,KAAM,QAAS,MACnE,KAAK,UACL,IAAK,MACHvS,KAAKq5E,QAAQh7C,UAAUr+B,KAAKq5E,QAAQ9rD,OAAS,GAAKvtB,KAAKuS,KAAM,MAAO,MACtE,KAAK,OACHvS,KAAKq5E,QAAQh7C,SAASr+B,KAAKq5E,QAAQ5pD,OAASzvB,KAAKuS,KAAM,OAAQ,MACjE,KAAK,QACHvS,KAAKq5E,QAAQh7C,SAASr+B,KAAKq5E,QAAQvtD,QAAU9rB,KAAKuS,KAAM,QAAS,MACnE,KAAK,OACHvS,KAAKq5E,QAAQh7C,SAASr+B,KAAKq5E,QAAQxtD,OAAS7rB,KAAKuS,KAAM,UAW/D65D,EAAS/5D,UAAU+3E,QAAU,WAC3B,MAAOpqF,MAAKq5E,QAAQj0E,WAAapF,KAAKqzD,KAAKjuD,WAM7CgnE,EAAS/5D,UAAUZ,KAAO,WACxB,GAAIsgD,GAAO/xD,KAAKq5E,QAAQj0E,SAIxB,QAAQpF,KAAKwC,OACX,IAAK,cACHxC,KAAKq5E,QAAQ5oD,IAAIzwB,KAAKuS,KAAM,cAAe,MAC7C,KAAK,SACHvS,KAAKq5E,QAAQ5oD,IAAIzwB,KAAKuS,KAAM,SAAU,MACxC,KAAK,SACHvS,KAAKq5E,QAAQ5oD,IAAIzwB,KAAKuS,KAAM,SAAU,MACxC,KAAK,OACHvS,KAAKq5E,QAAQ5oD,IAAIzwB,KAAKuS,KAAM,QAExBvS,KAAKq5E,QAAQvtD,QAAU,EACzB9rB,KAAKq5E,QAAQh7C,SAASr+B,KAAKq5E,QAAQ/lD,QAAUtzB,KAAKuS,KAAM,QAEpDvS,KAAKq5E,QAAQ/lD,QAAUtzB,KAAKuS,MAAS,GACvCvS,KAAKq5E,QAAQ5oD,IAAIzwB,KAAKuS,KAAOvS,KAAKq5E,QAAQ/lD,QAAUtzB,KAAKuS,KAAM,OAGnE,MACF,KAAK,UACL,IAAK,MACHvS,KAAKq5E,QAAQ5oD,IAAIzwB,KAAKuS,KAAM,MAAO,MACrC,KAAK,OACH,GAA+B,IAA3BvS,KAAKq5E,QAAQ3pD,UAEf1vB,KAAKq5E,QAAQ3pD,QAAQ,GACrB1vB,KAAKq5E,QAAQ5oD,IAAIzwB,KAAKuS,KAAM,YACvB,CAEL,GAAIu0B,GAAW9mC,KAAKq5E,QAAQ/7C,OAC5BwJ,GAASrW,IAAI,EAAG,QACZqW,EAASjG,OAAO7gC,KAAKq5E,QAAS,SAEhCr5E,KAAKq5E,QAAQ5oD,IAAIzwB,KAAKuS,KAAM,SAG5BvS,KAAKq5E,QAAQ5oD,IAAIzwB,KAAKuS,KAAM,QAC5BvS,KAAKq5E,QAAQ9rD,KAAK,IAGtB,KACF,KAAK,QACHvtB,KAAKq5E,QAAQ5oD,IAAIzwB,KAAKuS,KAAM,QAAS,MACvC,KAAK,OACHvS,KAAKq5E,QAAQ5oD,IAAIzwB,KAAKuS,KAAM,QAKhC,GAAiB,GAAbvS,KAAKuS,KAEP,OAAQvS,KAAKwC,OACX,IAAK,cACCxC,KAAKq5E,QAAQl9C,eAAiB,GAAKn8B,KAAKq5E,QAAQl9C,eAAiBn8B,KAAKuS,MAAMvS,KAAKq5E,QAAQl9C,aAAa,EAAG,MAC/G,KAAK,SACCn8B,KAAKq5E,QAAQn9C,UAAY,GAAKl8B,KAAKq5E,QAAQn9C,UAAYl8B,KAAKuS,MAAMvS,KAAKq5E,QAAQn9C,QAAQ,EAAG,MAChG,KAAK,SACCl8B,KAAKq5E,QAAQ5lD,UAAY,GAAKzzB,KAAKq5E,QAAQ5lD,UAAYzzB,KAAKuS,MAAMvS,KAAKq5E,QAAQ5lD,QAAQ,EAAG,MAChG,KAAK,OACCzzB,KAAKq5E,QAAQ/lD,QAAU,GAAKtzB,KAAKq5E,QAAQ/lD,QAAUtzB,KAAKuS,MAAMvS,KAAKq5E,QAAQ/lD,MAAM,EAAG,MAC1F,KAAK,UACL,IAAK,MACCtzB,KAAKq5E,QAAQ9rD,OAASvtB,KAAKuS,KAAO,GAAGvS,KAAKq5E,QAAQ9rD,KAAK,EAAG,MAChE,KAAK,OACCvtB,KAAKq5E,QAAQ5pD,OAASzvB,KAAKuS,MAAMvS,KAAKq5E,QAAQ5pD,KAAK,EAAG,MAC5D,KAAK,QACCzvB,KAAKq5E,QAAQvtD,QAAU9rB,KAAKuS,MAAMvS,KAAKq5E,QAAQvtD,MAAM,GAS3D9rB,KAAKq5E,QAAQj0E,WAAa2sD,IAC5B/xD,KAAKq5E,QAAUr5E,KAAKqzD,KAAK/1B,SAI3Bt9B,KAAKw5E,aAAc,EACnBx5E,KAAKu5E,eAAgB,EACrBv5E,KAAKs5E,cAAe,EAEpBnN,EAAS6M,oBAAoBh5E,KAAKyB,OAAQzB,KAAM+xD,IAOlDqa,EAAS/5D,UAAUo0C,WAAa,WAC9B,MAAOzmD,MAAKq5E,SAedjN,EAAS/5D,UAAUg4E,SAAW,SAAU14C,GAClCA,GAAiC,gBAAhBA,GAAOnvC,QAC1BxC,KAAKwC,MAAQmvC,EAAOnvC,MACpBxC,KAAKuS,KAAOo/B,EAAOp/B,KAAO,EAAIo/B,EAAOp/B,KAAO,EAC5CvS,KAAK4pF,WAAY,IAQrBxd,EAAS/5D,UAAUi4E,aAAe,SAAUvvB,GAC1C/6D,KAAK4pF,UAAY7uB,GAOnBqR,EAAS/5D,UAAU63E,eAAiB,SAAUP,GAC5C,OAAmB9lF,IAAf8lF,EAAJ,CAeIY,QAAkBZ,IACpB3pF,KAAKwC,MAAQ,OAAOxC,KAAKuS,KAAO,KAE9Bg4E,QAAiBZ,IACnB3pF,KAAKwC,MAAQ,OAAOxC,KAAKuS,KAAO,KAE9Bg4E,QAAiBZ,IACnB3pF,KAAKwC,MAAQ,OAAOxC,KAAKuS,KAAO,KAE9Bg4E,QAAgBZ,IAClB3pF,KAAKwC,MAAQ,OAAOxC,KAAKuS,KAAO,IAE9Bg4E,QAAgBZ,IAClB3pF,KAAKwC,MAAQ,OAAOxC,KAAKuS,KAAO,IAE9Bg4E,QAAeZ,IACjB3pF,KAAKwC,MAAQ,OAAOxC,KAAKuS,KAAO,GAzBnB,QA2BAo3E,IACb3pF,KAAKwC,MAAQ,OAAOxC,KAAKuS,KAAO,GAE9Bi4E,OAAgBb,IAClB3pF,KAAKwC,MAAQ,QAAQxC,KAAKuS,KAAO,GA9BnB,OAgCAo3E,IACd3pF,KAAKwC,MAAQ,QAAQxC,KAAKuS,KAAO,GAE/Bk4E,MAAcd,IAChB3pF,KAAKwC,MAAQ,MAAMxC,KAAKuS,KAAO,GAE7Bk4E,OAAcd,IAChB3pF,KAAKwC,MAAQ,MAAMxC,KAAKuS,KAAO,GAtCnB,MAwCAo3E,IACZ3pF,KAAKwC,MAAQ,MAAMxC,KAAKuS,KAAO,GAE7Bk4E,MAAcd,IAChB3pF,KAAKwC,MAAQ,UAAUxC,KAAKuS,KAAO,GAEjCm4E,MAAef,IACjB3pF,KAAKwC,MAAQ,OAAOxC,KAAKuS,KAAO,GA9CnB,KAgDAo3E,IACb3pF,KAAKwC,MAAQ,OAAOxC,KAAKuS,KAAO,GAE9Bo4E,IAAkBhB,IACpB3pF,KAAKwC,MAAQ,SAASxC,KAAKuS,KAAO,IAEhCo4E,IAAkBhB,IACpB3pF,KAAKwC,MAAQ,SAASxC,KAAKuS,KAAO,IAEhCo4E,IAAiBhB,IACnB3pF,KAAKwC,MAAQ,SAASxC,KAAKuS,KAAO,GAzDnB,IA2DAo3E,IACf3pF,KAAKwC,MAAQ,SAASxC,KAAKuS,KAAO,GAEhCq4E,KAAkBjB,IACpB3pF,KAAKwC,MAAQ,SAASxC,KAAKuS,KAAO,IAEhCq4E,IAAkBjB,IACpB3pF,KAAKwC,MAAQ,SAASxC,KAAKuS,KAAO,IAEhCq4E,IAAiBjB,IACnB3pF,KAAKwC,MAAQ,SAASxC,KAAKuS,KAAO,GApEnB,IAsEAo3E,IACf3pF,KAAKwC,MAAQ,SAASxC,KAAKuS,KAAO,GAEhCs4E,IAAwBlB,IAC1B3pF,KAAKwC,MAAQ,cAAcxC,KAAKuS,KAAO,KAErCs4E,IAAwBlB,IAC1B3pF,KAAKwC,MAAQ,cAAcxC,KAAKuS,KAAO,KAErCs4E,GAAuBlB,IACzB3pF,KAAKwC,MAAQ,cAAcxC,KAAKuS,KAAO,IAErCs4E,GAAuBlB,IACzB3pF,KAAKwC,MAAQ,cAAcxC,KAAKuS,KAAO,IAErCs4E,EAAsBlB,IACxB3pF,KAAKwC,MAAQ,cAAcxC,KAAKuS,KAAO,GArFnB,EAuFAo3E,IACpB3pF,KAAKwC,MAAQ,cAAcxC,KAAKuS,KAAO,KAc3C65D,EAASuG,KAAO,SAAUplD,EAAM/qB,EAAO+P,GACrC,GAAI+qB,GAAQ77B,EAAO8rB,EAEnB,IAAa,QAAT/qB,EAAiB,CACnB,GAAIqpB,GAAOyR,EAAMzR,OAASppB,KAAKi6B,MAAMY,EAAMxR,QAAU,GACrDwR,GAAMzR,KAAKppB,KAAKi6B,MAAM7Q,EAAOtZ,GAAQA,GACrC+qB,EAAMxR,MAAM,GACZwR,EAAM/P,KAAK,GACX+P,EAAMhK,MAAM,GACZgK,EAAM7J,QAAQ,GACd6J,EAAMpB,QAAQ,GACdoB,EAAMnB,aAAa,OACd,IAAa,SAAT35B,EACL86B,EAAM/P,OAAS,IACjB+P,EAAM/P,KAAK,GACX+P,EAAM7M,IAAI,EAAG,UAGb6M,EAAM/P,KAAK,GAGb+P,EAAMhK,MAAM,GACZgK,EAAM7J,QAAQ,GACd6J,EAAMpB,QAAQ,GACdoB,EAAMnB,aAAa,OACd,IAAa,QAAT35B,EACL86B,EAAM5N,UAAY,GAEpB4N,EAAM5N,QAAQ,GACd4N,EAAM7M,IAAI,EAAG,SAEb6M,EAAM5N,QAAQ,GAGhB4N,EAAMhK,MAAM,GACZgK,EAAM7J,QAAQ,GACd6J,EAAMpB,QAAQ,GACdoB,EAAMnB,aAAa,OACd,IAAa,OAAT35B,EAAgB,CAEzB,OAAQ+P,GACN,IAAK,GACL,IAAK,GACH+qB,EAAMhK,MAAuC,GAAjC7wB,KAAKi6B,MAAMY,EAAMhK,QAAU,IAAU,MACnD,SACEgK,EAAMhK,MAAuC,GAAjC7wB,KAAKi6B,MAAMY,EAAMhK,QAAU,KAE3CgK,EAAM7J,QAAQ,GACd6J,EAAMpB,QAAQ,GACdoB,EAAMnB,aAAa,OACd,IAAa,WAAT35B,EAAoB,CAE7B,OAAQ+P,GACN,IAAK,GACL,IAAK,GACH+qB,EAAMhK,MAAuC,GAAjC7wB,KAAKi6B,MAAMY,EAAMhK,QAAU,IAAU,MACnD,SACEgK,EAAMhK,MAAsC,EAAhC7wB,KAAKi6B,MAAMY,EAAMhK,QAAU,IAE3CgK,EAAM7J,QAAQ,GACd6J,EAAMpB,QAAQ,GACdoB,EAAMnB,aAAa,OACd,IAAa,QAAT35B,EAAiB,CAC1B,OAAQ+P,GACN,IAAK,GACH+qB,EAAM7J,QAA2C,GAAnChxB,KAAKi6B,MAAMY,EAAM7J,UAAY,IAAU,MACvD,SACE6J,EAAM7J,QAA2C,GAAnChxB,KAAKi6B,MAAMY,EAAM7J,UAAY,KAE/C6J,EAAMpB,QAAQ,GACdoB,EAAMnB,aAAa,OACd,IAAa,UAAT35B,EAAmB,CAE5B,OAAQ+P,GACN,IAAK,IACL,IAAK,IACH+qB,EAAM7J,QAA0C,EAAlChxB,KAAKi6B,MAAMY,EAAM7J,UAAY,IAC3C6J,EAAMpB,QAAQ,EACd,MACF,KAAK,GACHoB,EAAMpB,QAA2C,GAAnCz5B,KAAKi6B,MAAMY,EAAMpB,UAAY,IAAU,MACvD,SACEoB,EAAMpB,QAA2C,GAAnCz5B,KAAKi6B,MAAMY,EAAMpB,UAAY,KAE/CoB,EAAMnB,aAAa,OACd,IAAa,UAAT35B,EAET,OAAQ+P,GACN,IAAK,IACL,IAAK,IACH+qB,EAAMpB,QAA0C,EAAlCz5B,KAAKi6B,MAAMY,EAAMpB,UAAY,IAC3CoB,EAAMnB,aAAa,EACnB,MACF,KAAK,GACHmB,EAAMnB,aAAuD,IAA1C15B,KAAKi6B,MAAMY,EAAMnB,eAAiB,KAAc,MACrE,SACEmB,EAAMnB,aAAsD,IAAzC15B,KAAKi6B,MAAMY,EAAMnB,eAAiB,UAEpD,IAAa,eAAT35B,EAAwB,CACjC,GAAI+O,GAAQgB,EAAO,EAAIA,EAAO,EAAI,CAClC+qB,GAAMnB,aAAa15B,KAAKi6B,MAAMY,EAAMnB,eAAiB5qB,GAASA,GAGhE,MAAO+rB,IAQT8uC,EAAS/5D,UAAUy4E,QAAU,WAC3B,GAAyB,GAArB9qF,KAAKs5E,aACP,OAAQt5E,KAAKwC,OACX,IAAK,OACL,IAAK,QACL,IAAK,OACL,IAAK,UACL,IAAK,MACL,IAAK,OACL,IAAK,SACL,IAAK,SACL,IAAK,cACH,OAAO,CACT,SACE,OAAO,MAEN,IAA0B,GAAtBxC,KAAKu5E,cACd,OAAQv5E,KAAKwC,OACX,IAAK,OACL,IAAK,UACL,IAAK,MACL,IAAK,OACL,IAAK,SACL,IAAK,SACL,IAAK,cACH,OAAO,CACT,SACE,OAAO,MAEN,IAAwB,GAApBxC,KAAKw5E,YACd,OAAQx5E,KAAKwC,OACX,IAAK,cACL,IAAK,SACL,IAAK,SACL,IAAK,OACH,OAAO,CACT,SACE,OAAO,EAIb,GAAI+qB,GAAOvtB,KAAKyB,OAAOzB,KAAKq5E,QAC5B,QAAQr5E,KAAKwC,OACX,IAAK,cACH,MAA8B,IAAvB+qB,EAAK4O,cACd,KAAK,SACH,MAAyB,IAAlB5O,EAAK2O,SACd,KAAK,SACH,MAAuB,IAAhB3O,EAAK+F,SAAkC,GAAlB/F,EAAKkG,SACnC,KAAK,OACH,MAAuB,IAAhBlG,EAAK+F,OACd,KAAK,UACL,IAAK,MAEL,IAAK,OACH,MAAsB,IAAf/F,EAAKA,MACd,KAAK,QACH,MAAuB,IAAhBA,EAAKzB,OACd,KAAK,OAEL,QACE,OAAO,IAUbsgD,EAAS/5D,UAAU04E,cAAgB,SAAUx9D,GAQ3C,OAPY1pB,IAAR0pB,IACFA,EAAOvtB,KAAKq5E,SAEV9rD,YAAgB1qB,QAClB0qB,EAAOvtB,KAAKyB,OAAO8rB,IAGkB,kBAA5BvtB,MAAKyF,OAAOqkF,YACrB,MAAO9pF,MAAKyF,OAAOqkF,YAAYv8D,EAAMvtB,KAAKwC,MAAOxC,KAAKuS,KAGxD,IAAI9M,GAASzF,KAAKyF,OAAOqkF,YAAY9pF,KAAKwC,MAE1C,QAAQxC,KAAKwC,OACX,IAAK,OACH,GAAIxC,KAAK8qF,WAAgC,IAAnBv9D,EAAKmC,UACzB,MAAO,EAEX,SACE,MAAOjqB,IAAUA,EAAO7B,OAAS,EAAI5D,KAAKyB,OAAO8rB,GAAM9nB,OAAOA,GAAU,KAU9E2mE,EAAS/5D,UAAU24E,cAAgB,SAAUz9D,GAQ3C,OAPY1pB,IAAR0pB,IACFA,EAAOvtB,KAAKq5E,SAEV9rD,YAAgB1qB,QAClB0qB,EAAOvtB,KAAKyB,OAAO8rB,IAGkB,kBAA5BvtB,MAAKyF,OAAOskF,YACrB,MAAO/pF,MAAKyF,OAAOskF,YAAYx8D,EAAMvtB,KAAKwC,MAAOxC,KAAKuS,KAGxD,IAAI9M,GAASzF,KAAKyF,OAAOskF,YAAY/pF,KAAKwC,MAC1C,OAAOiD,IAAUA,EAAO7B,OAAS,EAAI5D,KAAKyB,OAAO8rB,GAAM9nB,OAAOA,GAAU,IAG1E2mE,EAAS/5D,UAAU44E,aAAe,WAOhC,QAASC,GAAK3oF,GACZ,MAAOA,GAAQgQ,EAAO,GAAK,EAAI,YAAc,WAG/C,QAAS44E,GAAM59D,GACb,MAAIA,GAAKsT,OAAO,GAAIh+B,MAAQ,OACnB,aAEL0qB,EAAKsT,OAAOuqD,IAAU36D,IAAI,EAAG,OAAQ,OAChC,gBAELlD,EAAKsT,OAAOuqD,IAAU36D,KAAK,EAAG,OAAQ,OACjC,iBAEF,GAGT,QAAS46D,GAAY99D,GACnB,MAAOA,GAAKsT,OAAO,GAAIh+B,MAAQ,QAAU,oBAAsB,GAGjE,QAASyoF,GAAa/9D,GACpB,MAAOA,GAAKsT,OAAO,GAAIh+B,MAAQ,SAAW,qBAAuB,GA5BnE,GAAIuoF,GAAUprF,KAAKyB,OACfjB,EAAIR,KAAKyB,OAAOzB,KAAKq5E,SACrBA,EAAU74E,EAAE6gB,OAAS7gB,EAAE6gB,OAAO,MAAQ7gB,EAAE6pC,KAAK,MAC7C93B,EAAOvS,KAAKuS,KACZ/L,IA+BJ,QAAQxG,KAAKwC,OACX,IAAK,cACHgE,EAAW3B,KAAKsmF,EAAM9R,IACtB7yE,EAAW3B,KAAKqmF,EAAK7R,EAAQl9C,gBAC7B,MACF,KAAK,SACH31B,EAAW3B,KAAKsmF,EAAM9R,IACtB7yE,EAAW3B,KAAKqmF,EAAK7R,EAAQn9C,WAC7B,MACF,KAAK,SACH11B,EAAW3B,KAAKsmF,EAAM9R,IACtB7yE,EAAW3B,KAAKqmF,EAAK7R,EAAQ5lD,WAC7B,MACF,KAAK,OACHjtB,EAAW3B,KAAK,QAAUw0E,EAAQ/lD,QAAUtzB,KAAKuS,MAAQ,EAAI,MAAQ8mE,EAAQ/lD,QAAU,GAAK,IAC5F9sB,EAAW3B,KAAKsmF,EAAM9R,IACtB7yE,EAAW3B,KAAKqmF,EAAK7R,EAAQ/lD,SAC7B,MACF,KAAK,UACH9sB,EAAW3B,KAAK,OAASw0E,EAAQ5zE,OAAO,QAAQsiB,eAChDvhB,EAAW3B,KAAKsmF,EAAM9R,IACtB7yE,EAAW3B,KAAKwmF,EAAYhS,IAC5B7yE,EAAW3B,KAAKqmF,EAAK7R,EAAQ9rD,QAC7B,MACF,KAAK,MACH/mB,EAAW3B,KAAK,UAAYw0E,EAAQ9rD,QACpC/mB,EAAW3B,KAAK,OAASw0E,EAAQ5zE,OAAO,QAAQsiB,eAChDvhB,EAAW3B,KAAKsmF,EAAM9R,IACtB7yE,EAAW3B,KAAKymF,EAAajS,IAC7B7yE,EAAW3B,KAAK7E,KAAKuS,MAAQ,EAAI44E,EAAM9R,GAAW,IAClD7yE,EAAW3B,KAAK7E,KAAKuS,MAAQ,EAAI,OAAS8mE,EAAQ5zE,OAAO,QAAQsiB,cAAgB;8DACjFvhB,EAAW3B,KAAKqmF,EAAK7R,EAAQ9rD,OAAS,GACtC,MACF,KAAK,OACH/mB,EAAW3B,KAAK,WAAaw0E,EAAQ5zE,OAAO,MAC5Ce,EAAW3B,KAAKwmF,EAAYhS,IAC5B7yE,EAAW3B,KAAKqmF,EAAK7R,EAAQ5pD,QAC7B,MACF,KAAK,QACHjpB,EAAW3B,KAAK,OAASw0E,EAAQ5zE,OAAO,QAAQsiB,eAChDvhB,EAAW3B,KAAKymF,EAAajS,IAC7B7yE,EAAW3B,KAAKqmF,EAAK7R,EAAQvtD,SAC7B,MACF,KAAK,OACHtlB,EAAW3B,KAAK,WAAaw0E,EAAQxtD,QACrCrlB,EAAW3B,KAjDf,SAAqB0oB,GACnB,MAAOA,GAAKsT,OAAO,GAAIh+B,MAAQ,QAAU,oBAAsB,IAgDjCw2E,IAC5B7yE,EAAW3B,KAAKqmF,EAAK7R,EAAQxtD,SAGjC,MAAOrlB,GAAWM,OAAOnE,QAAQoE,KAAK,MAGxClH,EAAOD,QAAUwsE,GAIb,SAAUvsE,EAAQD,EAASM,GAoB/B,QAASgtE,GAAM8F,EAASx+C,EAAM46C,GAC5BpvE,KAAKgzE,QAAUA,EACfhzE,KAAKurF,aACLvrF,KAAKwrF,cAAgB,EACrBxrF,KAAKyrF,gBAAkBj3D,GAAQA,EAAKk3D,cACpC1rF,KAAKovE,QAAUA,EACfpvE,KAAKmjF,UAAY,KACjBnjF,KAAK2rF,YAAa,EAEdn3D,GAAQA,EAAKkwD,eACf1kF,KAAK0kF,aAAelwD,EAAKkwD,aACF,GAAnBlwD,EAAKswD,WACP9kF,KAAK8kF,YAAa,EAElB9kF,KAAK8kF,YAAa,GAItB9kF,KAAK6kF,cAAgB,KAErB7kF,KAAKivD,OACLjvD,KAAKkE,OACHksC,OACEhgC,MAAO,EACPC,OAAQ,IAGZrQ,KAAK0G,UAAY,KAEjB1G,KAAKiyC,SACLjyC,KAAKojF,gBACLpjF,KAAK4rF,gBACL5rF,KAAKoO,cACHy9E,WACAC,UAEF9rF,KAAK+rF,kBAAmB,CACxB,IAAIh6C,GAAK/xC,IACTA,MAAKovE,QAAQz+D,KAAK49D,QAAQl9B,GAAG,mBAAoB,WAC/CU,EAAGg6C,kBAAmB,IAGxB/rF,KAAKmB,UAELnB,KAAKw1C,QAAQhhB,GA5Df,GAAInzB,GAAQnB,EAAoB,IAE5BoB,EAEJ,SAAgCR,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,IAFrDO,GAIhCV,EAAOT,EAAoB,GAC3BwlB,EAAQxlB,EAAoB,IAChBA,GAAoB,IA2DpCgtE,GAAM76D,UAAUlR,QAAU,WACxB,GAAIivC,GAAQlgC,SAASC,cAAc,MAC/BnQ,MAAKovE,QAAQphE,QAAQqyE,cAActtC,MACrC3C,EAAM1pC,UAAY,sBAElB0pC,EAAM1pC,UAAY,YAEpB1G,KAAKivD,IAAI7e,MAAQA,CAEjB,IAAIngC,GAAQC,SAASC,cAAc,MACnCF,GAAMvJ,UAAY,YAClB0pC,EAAM1/B,YAAYT,GAClBjQ,KAAKivD,IAAIh/C,MAAQA,CAEjB,IAAI6iE,GAAa5iE,SAASC,cAAc,MACxC2iE,GAAWpsE,UAAY,YACvBosE,EAAW,kBAAoB9yE,KAC/BA,KAAKivD,IAAI6jB,WAAaA,EAEtB9yE,KAAKivD,IAAIvjD,WAAawE,SAASC,cAAc,OAC7CnQ,KAAKivD,IAAIvjD,WAAWhF,UAAY,YAEhC1G,KAAKivD,IAAI4e,KAAO39D,SAASC,cAAc,OACvCnQ,KAAKivD,IAAI4e,KAAKnnE,UAAY,YAK1B1G,KAAKivD,IAAI+8B,OAAS97E,SAASC,cAAc,OACzCnQ,KAAKivD,IAAI+8B,OAAO3/E,MAAMmE,WAAa,SACnCxQ,KAAKivD,IAAI+8B,OAAO3/E,MAAMkE,SAAW,WACjCvQ,KAAKivD,IAAI+8B,OAAO7pC,UAAY,GAC5BniD,KAAKivD,IAAIvjD,WAAWgF,YAAY1Q,KAAKivD,IAAI+8B,SAO3C9e,EAAM76D,UAAUmjC,QAAU,SAAUhhB,GAElC,GAAI+b,GACA07C,CASJ,IAPIjsF,KAAKovE,QAAQphE,SAAWhO,KAAKovE,QAAQphE,QAAQgiC,eAC/Ci8C,EAAmBjsF,KAAKovE,QAAQphE,QAAQgiC,cAAcsnB,KAAKt3D,MAC3DuwC,EAAU07C,EAAiBz3D,EAAMx0B,KAAKivD,IAAIh/C,QAE1CsgC,EAAU/b,GAAQA,EAAK+b,QAGrBA,YAAmB27C,SAAS,CAE9B,IADAlsF,KAAKivD,IAAIh/C,MAAMS,YAAY6/B,GACpBvwC,KAAKivD,IAAIh/C,MAAMhO,YACpBjC,KAAKivD,IAAIh/C,MAAM/N,YAAYlC,KAAKivD,IAAIh/C,MAAMhO,WAE5CjC,MAAKivD,IAAIh/C,MAAMS,YAAY6/B,OAClBA,aAAmB9rC,QAC5BwnF,EAAiBz3D,EAAMx0B,KAAKivD,IAAIh/C,OAEhCjQ,KAAKivD,IAAIh/C,MAAMkyC,cADMt+C,KAAZ0sC,GAAqC,OAAZA,EACPA,EAEAvwC,KAAKgzE,SAAW,EAW7C,IAPAhzE,KAAKivD,IAAI7e,MAAMgtC,MAAQ5oD,GAAQA,EAAK4oD,OAAS,GACxCp9E,KAAKivD,IAAIh/C,MAAMhO,WAGlBtB,EAAKqG,gBAAgBhH,KAAKivD,IAAIh/C,MAAO,cAFrCtP,EAAK4F,aAAavG,KAAKivD,IAAIh/C,MAAO,cAKhCukB,GAAQA,EAAKkwD,aAAc,CACxB1kF,KAAK0kF,cAAgB1kF,KAAK0kF,cAAgBlwD,EAAKkwD,eAClD1kF,KAAK0kF,aAAelwD,EAAKkwD,kBAGH7gF,KAApB2wB,EAAKswD,gBAAgDjhF,KAApB7D,KAAK8kF,aACjB,GAAnBtwD,EAAKswD,WACP9kF,KAAK8kF,YAAa,EAElB9kF,KAAK8kF,YAAa,GAItBnkF,EAAK4F,aAAavG,KAAKivD,IAAI7e,MAAO,oBAClC,IAAIo3C,GAAwBxnF,KAAKovE,QAAQphE,QAAQggE,IAAM,gBAAkB,WACrEhuE,MAAK8kF,YACPnkF,EAAKqG,gBAAgBhH,KAAKivD,IAAI7e,MAAOo3C,GACrC7mF,EAAK4F,aAAavG,KAAKivD,IAAI7e,MAAO,cAElCzvC,EAAKqG,gBAAgBhH,KAAKivD,IAAI7e,MAAO,YACrCzvC,EAAK4F,aAAavG,KAAKivD,IAAI7e,MAAOo3C,QAE/B,IAAIxnF,KAAK0kF,aAAc,CAC5B1kF,KAAK0kF,aAAe,IAEpB,IAAI8C,GAAwBxnF,KAAKovE,QAAQphE,QAAQggE,IAAM,gBAAkB,WACzErtE,GAAKqG,gBAAgBhH,KAAKivD,IAAI7e,MAAOo3C,GACrC7mF,EAAKqG,gBAAgBhH,KAAKivD,IAAI7e,MAAO,YACrCzvC,EAAKqG,gBAAgBhH,KAAKivD,IAAI7e,MAAO,qBAGnC5b,GAAQA,EAAKqwD,gBACflkF,EAAK4F,aAAavG,KAAKivD,IAAI7e,MAAO,oBAC9BpwC,KAAKovE,QAAQphE,SAAWhO,KAAKovE,QAAQphE,QAAQggE,IAC/ChuE,KAAKivD,IAAIh/C,MAAM5D,MAAM8/E,aAAe,OAEpCnsF,KAAKivD,IAAIh/C,MAAM5D,MAAM+/E,YAAc,OAKvC,IAAI1lF,GAAY8tB,GAAQA,EAAK9tB,WAAa,IACtCA,IAAa1G,KAAK0G,YAChB1G,KAAK0G,YACP/F,EAAKqG,gBAAgBhH,KAAKivD,IAAI7e,MAAOpwC,KAAK0G,WAC1C/F,EAAKqG,gBAAgBhH,KAAKivD,IAAI6jB,WAAY9yE,KAAK0G,WAC/C/F,EAAKqG,gBAAgBhH,KAAKivD,IAAIvjD,WAAY1L,KAAK0G,WAC/C/F,EAAKqG,gBAAgBhH,KAAKivD,IAAI4e,KAAM7tE,KAAK0G,YAE3C/F,EAAK4F,aAAavG,KAAKivD,IAAI7e,MAAO1pC,GAClC/F,EAAK4F,aAAavG,KAAKivD,IAAI6jB,WAAYpsE,GACvC/F,EAAK4F,aAAavG,KAAKivD,IAAIvjD,WAAYhF,GACvC/F,EAAK4F,aAAavG,KAAKivD,IAAI4e,KAAMnnE,GACjC1G,KAAK0G,UAAYA,GAIf1G,KAAKqM,QACP1L,EAAKgM,cAAc3M,KAAKivD,IAAI7e,MAAOpwC,KAAKqM,OACxCrM,KAAKqM,MAAQ,MAEXmoB,GAAQA,EAAKnoB,QACf1L,EAAK6L,WAAWxM,KAAKivD,IAAI7e,MAAO5b,EAAKnoB,OACrCrM,KAAKqM,MAAQmoB,EAAKnoB,QAQtB6gE,EAAM76D,UAAUg6E,cAAgB,WAC9B,MAAOrsF,MAAKkE,MAAMksC,MAAMhgC,OAU1B88D,EAAM76D,UAAU6uC,OAAS,SAAU5F,EAAOiK,EAAQq+B,GAChD,GAAI/L,IAAU,EAIVyU,EAAetsF,KAAKivD,IAAI+8B,OAAOhpC,YAC/BspC,IAAgBtsF,KAAKusF,mBACvBvsF,KAAKusF,iBAAmBD,EACxB3rF,EAAKuG,QAAQlH,KAAKiyC,MAAO,SAAUrjC,GACjCA,EAAKk0E,OAAQ,EACTl0E,EAAKm0E,WAAWn0E,EAAKsyC,WAG3B0iC,GAAe,GAIjB5jF,KAAKwsF,0BAA0BjnC,EAG/B,IAAIutB,GAAa9yE,KAAKivD,IAAI6jB,UAC1B9yE,MAAKsG,IAAMwsE,EAAWiW,UACtB/oF,KAAKoG,MAAQ0sE,EAAWiU,WACxB/mF,KAAKoQ,MAAQ0iE,EAAWjiE,WAExB,IAAI47E,GAAgBzsF,KAAKmjF,SAMzB,IALAnjF,KAAKmjF,UAAYnjF,KAAK0sF,gBAAgBpxC,EAAOiK,GAE/Bq+B,GAAgB5jF,KAAK2rF,YAAc3rF,KAAKmjF,YAAcsJ,EAGvD,CACX,GAA0C,kBAA/BzsF,MAAKovE,QAAQphE,QAAQ+kC,MAAsB,CAKpD,GAAIhB,GAAK/xC,IAETW,GAAKuG,QAAQlH,KAAKiyC,MAAO,SAAUrjC,GAC5BA,EAAKm0E,YACRn0E,EAAKsyC,SACLnP,EAAGqxC,aAAav+E,KAAK+J,IAEvBA,EAAKmjE,aANS,IAUhB,IAAI4a,GAAqB3sF,KAAKoO,aAAay9E,QAAQlhF,QAAQke,KAAK,SAAUrlB,EAAGC,GAC3E,MAAOsuC,GAAGq9B,QAAQphE,QAAQ+kC,MAAMvvC,EAAEgxB,KAAM/wB,EAAE+wB,OAE5C9O,GAAMA,MAAMinE,EAAoBpnC,GAAQ,GACxCvlD,KAAKojF,aAAepjF,KAAK4sF,oBAAoB5sF,KAAKoO,aAAcpO,KAAKojF,aAAc9nC,OAGnFt7C,MAAKojF,aAAepjF,KAAK4sF,oBAAoB5sF,KAAKoO,aAAcpO,KAAKojF,aAAc9nC,GAE/Et7C,KAAKovE,QAAQphE,QAAQ0X,MAEvBA,EAAMA,MAAM1lB,KAAKojF,aAAc79B,GAAQ,GAGvC7/B,EAAMmnE,QAAQ7sF,KAAKojF,aAAc79B,EAAQvlD,KAAKurF,UAAWvrF,KAAKovE,QAAQphE,QAAQwxE,eAIlFx/E,MAAK2rF,YAAa,EAGpB3rF,KAAK8sF,uBAGL,IAAIz8E,GAASrQ,KAAK+sF,iBAAiBxnC,GAG/ButB,EAAa9yE,KAAKivD,IAAI6jB,UAC1B9yE,MAAKsG,IAAMwsE,EAAWiW,UACtB/oF,KAAKoG,MAAQ0sE,EAAWiU,WACxB/mF,KAAKoQ,MAAQ0iE,EAAWjiE,YACxBgnE,EAAUl3E,EAAK2G,eAAetH,KAAM,SAAUqQ,IAAWwnE,EAEzDA,EAAUl3E,EAAK2G,eAAetH,KAAKkE,MAAMksC,MAAO,QAASpwC,KAAKivD,IAAIh/C,MAAMc,cAAgB8mE,EACxFA,EAAUl3E,EAAK2G,eAAetH,KAAKkE,MAAMksC,MAAO,SAAUpwC,KAAKivD,IAAIh/C,MAAM+yC,eAAiB60B,EAG1F73E,KAAKivD,IAAIvjD,WAAWW,MAAMgE,OAASA,EAAS,KAC5CrQ,KAAKivD,IAAI6jB,WAAWzmE,MAAMgE,OAASA,EAAS,KAC5CrQ,KAAKivD,IAAI7e,MAAM/jC,MAAMgE,OAASA,EAAS,IAGvC,KAAK,GAAItM,GAAI,EAAG0oB,EAAKzsB,KAAKojF,aAAax/E,OAAQG,EAAI0oB,EAAI1oB,IAAK,CAC1D,GAAI6K,GAAO5O,KAAKojF,aAAar/E,EAC7B6K,GAAKo+E,YAAYznC,GACZvlD,KAAKmjF,WAA6B,kBAAhBnjF,KAAKgzE,SACtBpkE,EAAKm0E,WAAWn0E,EAAKkD,OAI7B,OAAK9R,KAAKmjF,WAAanjF,KAAKqQ,OACnBwnE,GAAU,EAGZA,GAOT3K,EAAM76D,UAAUm6E,0BAA4B,SAAUjnC,GACpD,IAAI,EAAIjkD,EAAgB,SAAGtB,KAAKurF,WAAW3nF,OAAS,EAAG,CACrD,GAAImuC,GAAK/xC,IAETA,MAAKitF,iBAELtsF,EAAKuG,QAAQlH,KAAKojF,aAAc,SAAUx0E,OACb/K,KAAvB+K,EAAK4lB,KAAK04D,WACZn7C,EAAGw5C,UAAU38E,EAAK4lB,KAAK04D,UAAU78E,OAAS5N,KAAKJ,IAAI0vC,EAAGw5C,UAAU38E,EAAK4lB,KAAK04D,UAAU78E,OAAQzB,EAAKyB,OAASk1C,EAAO32C,KAAKyrC,UACtHtI,EAAGw5C,UAAU38E,EAAK4lB,KAAK04D,UAAUpmC,SAAU,OAUnDomB,EAAM76D,UAAUq6E,gBAAkB,SAAUpxC,EAAOiK,GAEjD,MADgBvlD,MAAKsG,KAAOg1C,EAAM3qC,KAAK29D,SAASgE,gBAAgBjiE,OAASirC,EAAM3qC,KAAK29D,SAASoM,UAAYn1B,EAAOsoB,MAAQ7tE,KAAKsG,IAAMtG,KAAKqQ,OAASk1C,EAAOsoB,OAASvyB,EAAM3qC,KAAK29D,SAASoM,WAUvLxN,EAAM76D,UAAU06E,iBAAmB,SAAUxnC,GAE3C,GAAIl1C,GACAu7E,EAAe5rF,KAAKojF,YACxB,IAAIwI,EAAahoF,OAAS,EAAG,CAC3B,GAAIxB,GAAMwpF,EAAa,GAAGtlF,IACtBjE,EAAMupF,EAAa,GAAGtlF,IAAMslF,EAAa,GAAGv7E,MAKhD,IAJA1P,EAAKuG,QAAQ0kF,EAAc,SAAUh9E,GACnCxM,EAAMK,KAAKL,IAAIA,EAAKwM,EAAKtI,KACzBjE,EAAMI,KAAKJ,IAAIA,EAAKuM,EAAKtI,IAAMsI,EAAKyB,UAElCjO,EAAMmjD,EAAOsoB,KAAM,CAErB,GAAIlxC,GAASv6B,EAAMmjD,EAAOsoB,IAC1BxrE,IAAOs6B,EACPh8B,EAAKuG,QAAQ0kF,EAAc,SAAUh9E,GACnCA,EAAKtI,KAAOq2B,IAGhBtsB,EAAShO,EAAMkjD,EAAO32C,KAAKyrC,SAAW,MAEtChqC,GAAS,CAIX,OAFAA,GAAS5N,KAAKJ,IAAIgO,EAAQrQ,KAAKkE,MAAMksC,MAAM//B,SAQ7C68D,EAAM76D,UAAUy/D,KAAO,WAChB9xE,KAAKivD,IAAI7e,MAAMtnC,YAClB9I,KAAKovE,QAAQngB,IAAI8jB,SAASriE,YAAY1Q,KAAKivD,IAAI7e,OAG5CpwC,KAAKivD,IAAI6jB,WAAWhqE,YACvB9I,KAAKovE,QAAQngB,IAAI6jB,WAAWpiE,YAAY1Q,KAAKivD,IAAI6jB,YAG9C9yE,KAAKivD,IAAIvjD,WAAW5C,YACvB9I,KAAKovE,QAAQngB,IAAIvjD,WAAWgF,YAAY1Q,KAAKivD,IAAIvjD,YAG9C1L,KAAKivD,IAAI4e,KAAK/kE,YACjB9I,KAAKovE,QAAQngB,IAAI4e,KAAKn9D,YAAY1Q,KAAKivD,IAAI4e,OAO/CX,EAAM76D,UAAUP,KAAO,WACrB,GAAIs+B,GAAQpwC,KAAKivD,IAAI7e,KACjBA,GAAMtnC,YACRsnC,EAAMtnC,WAAW5G,YAAYkuC,EAG/B,IAAI0iC,GAAa9yE,KAAKivD,IAAI6jB,UACtBA,GAAWhqE,YACbgqE,EAAWhqE,WAAW5G,YAAY4wE,EAGpC,IAAIpnE,GAAa1L,KAAKivD,IAAIvjD,UACtBA,GAAW5C,YACb4C,EAAW5C,WAAW5G,YAAYwJ,EAGpC,IAAImiE,GAAO7tE,KAAKivD,IAAI4e,IAChBA,GAAK/kE,YACP+kE,EAAK/kE,WAAW5G,YAAY2rE,IAQhCX,EAAM76D,UAAUoe,IAAM,SAAU7hB,GAU9B,GATA5O,KAAKiyC,MAAMrjC,EAAKvO,IAAMuO,EACtBA,EAAKu+E,UAAUntF,MACfA,KAAK2rF,YAAa,MAES9nF,KAAvB+K,EAAK4lB,KAAK04D,WACZltF,KAAKotF,eAAex+E,GACpB5O,KAAKqtF,mBAGiC,GAApCrtF,KAAKojF,aAAax+E,QAAQgK,GAAa,CACzC,GAAI0sC,GAAQt7C,KAAKovE,QAAQz+D,KAAK2qC,KAC9Bt7C,MAAKstF,gBAAgB1+E,EAAM5O,KAAKojF,aAAc9nC,KAIlD4xB,EAAM76D,UAAU+6E,eAAiB,SAAUx+E,EAAM2+E,GAC/CA,EAAaA,GAAc3+E,EAAK4lB,KAAK04D,aACnBrpF,IAAd0pF,OAA0D1pF,KAA/B7D,KAAKurF,UAAUgC,KAC5CvtF,KAAKurF,UAAUgC,IACbl9E,OAAQ,EACR/J,IAAK,EACLigD,MAAO33C,EAAK4lB,KAAK+xB,MACjBC,IAAK53C,EAAK4lB,KAAKgyB,IACfM,SAAS,EACT/zC,MAAO/S,KAAKwrF,cACZv5C,UAEFjyC,KAAKwrF,iBAGH,GAAI3oF,MAAK+L,EAAK4lB,KAAK+xB,OAAS,GAAI1jD,MAAK7C,KAAKurF,UAAUgC,GAAYhnC,SAClEvmD,KAAKurF,UAAUgC,GAAYhnC,MAAQ33C,EAAK4lB,KAAK+xB,OAE3C,GAAI1jD,MAAK+L,EAAK4lB,KAAKgyB,KAAO,GAAI3jD,MAAK7C,KAAKurF,UAAUgC,GAAY/mC,OAChExmD,KAAKurF,UAAUgC,GAAY/mC,IAAM53C,EAAK4lB,KAAKgyB,KAG7CxmD,KAAKurF,UAAUgC,GAAYt7C,MAAMptC,KAAK+J,IAGxCs+D,EAAM76D,UAAUy6E,sBAAwB,WACtC,GAAI/6C,GAAK/xC,IACT,IAAI+xC,EAAGw5C,UACL,IAAK,GAAI2B,KAAYn7C,GAAGw5C,UAAW,CACjC,GAAI5V,GAAW5jC,EAAGw5C,UAAU2B,GAAUj7C,MAAM,GAAGzd,KAAK+xB,MAChDqvB,EAAS7jC,EAAGw5C,UAAU2B,GAAUj7C,MAAM,GAAGzd,KAAKgyB,GAElDzU,GAAGw5C,UAAU2B,GAAUj7C,MAAM/qC,QAAQ,SAAU0H,GACzC,GAAI/L,MAAK+L,EAAK4lB,KAAK+xB,OAAS,GAAI1jD,MAAK8yE,KACvCA,EAAW/mE,EAAK4lB,KAAK+xB,OAEnB,GAAI1jD,MAAK+L,EAAK4lB,KAAKgyB,KAAO,GAAI3jD,MAAK+yE,KACrCA,EAAShnE,EAAK4lB,KAAKgyB,OAIvBzU,EAAGw5C,UAAU2B,GAAU3mC,MAAQovB,EAC/B5jC,EAAGw5C,UAAU2B,GAAU1mC,IAAMovB,IAKnC1I,EAAM76D,UAAUg7E,eAAiB,WAC/B,OAA6BxpF,KAAzB7D,KAAKyrF,gBAA+B,CACtC,GAAI+B,KACJ,IAAmC,gBAAxBxtF,MAAKyrF,gBAA6B,CAC3C,IAAK,GAAIyB,KAAYltF,MAAKurF,UACxBiC,EAAU3oF,MAAOqoF,SAAUA,EAAUO,UAAWztF,KAAKurF,UAAU2B,GAAUj7C,MAAM,GAAGzd,KAAKx0B,KAAKyrF,kBAE9F+B,GAAU3kE,KAAK,SAAUrlB,EAAGC,GAC1B,MAAOD,GAAEiqF,UAAYhqF,EAAEgqF,gBAEpB,IAAmC,kBAAxBztF,MAAKyrF,gBAA+B,CACpD,IAAK,GAAIyB,KAAYltF,MAAKurF,UACxBiC,EAAU3oF,KAAK7E,KAAKurF,UAAU2B,GAAUj7C,MAAM,GAAGzd,KAEnDg5D,GAAU3kE,KAAK7oB,KAAKyrF,iBAGtB,GAAI+B,EAAU5pF,OAAS,EACrB,IAAK,GAAIG,GAAI,EAAGA,EAAIypF,EAAU5pF,OAAQG,IACpC/D,KAAKurF,UAAUiC,EAAUzpF,GAAGmpF,UAAUn6E,MAAQhP,IAMtDmpE,EAAM76D,UAAU46E,eAAiB,WAC/B,IAAK,GAAIC,KAAYltF,MAAKurF,UACpBvrF,KAAKurF,UAAUjoF,eAAe4pF,KAChCltF,KAAKurF,UAAU2B,GAAUpmC,SAAU,EACnC9mD,KAAKurF,UAAU2B,GAAU78E,OAAS,IASxC68D,EAAM76D,UAAUqhC,OAAS,SAAU9kC,SAC1B5O,MAAKiyC,MAAMrjC,EAAKvO,IACvBuO,EAAKu+E,UAAU,MACfntF,KAAK2rF,YAAa,CAGlB,IAAI54E,GAAQ/S,KAAKojF,aAAax+E,QAAQgK,IACxB,GAAVmE,GAAa/S,KAAKojF,aAAavrD,OAAO9kB,EAAO,OAEtBlP,KAAvB+K,EAAK4lB,KAAK04D,WACZltF,KAAK0tF,oBAAoB9+E,GACzB5O,KAAKqtF,mBAITngB,EAAM76D,UAAUq7E,oBAAsB,SAAU9+E,EAAM2+E,GAEpD,OAAkB1pF,KADlB0pF,EAAaA,GAAc3+E,EAAK4lB,KAAK04D,UACR,CAC3B,GAAIA,GAAWltF,KAAKurF,UAAUgC,EAC9B,IAAIL,EAAU,CACZ,GAAIS,GAAYT,EAASj7C,MAAMrtC,QAAQgK,EAEnC++E,IAAa,IACfT,EAASj7C,MAAMpa,OAAO81D,EAAW,GAC5BT,EAASj7C,MAAMruC,OAGlB5D,KAAK8sF,8BAFE9sF,MAAKurF,UAAUgC,OAahCrgB,EAAM76D,UAAUu7E,kBAAoB,SAAUh/E,GAC5C5O,KAAKovE,QAAQ6V,WAAWr2E,EAAKvO,KAM/B6sE,EAAM76D,UAAU0gC,MAAQ,WAKtB,IAAK,GAJD1rC,GAAQ1G,EAAKyG,QAAQpH,KAAKiyC,OAC1B47C,KACAjI,KAEK7hF,EAAI,EAAGA,EAAIsD,EAAMzD,OAAQG,QACNF,KAAtBwD,EAAMtD,GAAGywB,KAAKgyB,KAChBo/B,EAAS/gF,KAAKwC,EAAMtD,IAEtB8pF,EAAWhpF,KAAKwC,EAAMtD,GAExB/D,MAAKoO,cACHy9E,QAASgC,EACT/B,MAAOlG,GAGTlgE,EAAMooE,aAAa9tF,KAAKoO,aAAay9E,SACrCnmE,EAAMqoE,WAAW/tF,KAAKoO,aAAa09E,QAWrC5e,EAAM76D,UAAUu6E,oBAAsB,SAAUx+E,EAAc4/E,EAAiB1yC,GAC7E,GAAI8nC,MACA6K,KAEAv7B,GAAYpX,EAAMkL,IAAMlL,EAAMiL,OAAS,EACvC2nC,EAAa5yC,EAAMiL,MAAQmM,EAC3By7B,EAAa7yC,EAAMkL,IAAMkM,EAGzB07B,EAAiB,SAAwB7rF,GAC3C,MAAIA,GAAQ2rF,GACF,EACC3rF,GAAS4rF,EACX,EAEA,EAOX,IAAIH,EAAgBpqF,OAAS,EAC3B,IAAK,GAAIG,GAAI,EAAGA,EAAIiqF,EAAgBpqF,OAAQG,IAC1C/D,KAAKquF,6BAA6BL,EAAgBjqF,GAAIq/E,EAAc6K,EAAoB3yC,EAK5F,IAAIgzC,GAAoB3tF,EAAKwN,mBAAmBC,EAAay9E,QAASuC,EAAgB,OAAQ,QAS9F,IANApuF,KAAKuuF,cAAcD,EAAmBlgF,EAAay9E,QAASzI,EAAc6K,EAAoB,SAAUr/E,GACtG,MAAOA,GAAK4lB,KAAK+xB,MAAQ2nC,GAAct/E,EAAK4lB,KAAK+xB,MAAQ4nC,IAK9B,GAAzBnuF,KAAK+rF,iBAEP,IADA/rF,KAAK+rF,kBAAmB,EACnBhoF,EAAI,EAAGA,EAAIqK,EAAa09E,MAAMloF,OAAQG,IACzC/D,KAAKquF,6BAA6BjgF,EAAa09E,MAAM/nF,GAAIq/E,EAAc6K,EAAoB3yC,OAExF,CAEL,GAAIkzC,GAAkB7tF,EAAKwN,mBAAmBC,EAAa09E,MAAOsC,EAAgB,OAAQ,MAG1FpuF,MAAKuuF,cAAcC,EAAiBpgF,EAAa09E,MAAO1I,EAAc6K,EAAoB,SAAUr/E,GAClG,MAAOA,GAAK4lB,KAAKgyB,IAAM0nC,GAAct/E,EAAK4lB,KAAKgyB,IAAM2nC,IAKzD,IAAK,GAAIpqF,GAAI,EAAGA,EAAIq/E,EAAax/E,OAAQG,IAAK,CAC5C,GAAI6K,GAAOw0E,EAAar/E,EACnB6K,GAAKm0E,WAAWn0E,EAAKkjE,OAE1BljE,EAAKmjE,cAGP,MAAOqR,IAGTlW,EAAM76D,UAAUk8E,cAAgB,SAAUE,EAAYx8C,EAAOmxC,EAAc6K,EAAoBS,GAC7F,IAAmB,GAAfD,EAAkB,CACpB,IAAK,GAAI1qF,GAAI0qF,EAAY1qF,GAAK,EAAGA,IAAK,CACpC,GAAI6K,GAAOqjC,EAAMluC,EACjB,IAAI2qF,EAAe9/E,GACjB,UAEoC/K,KAAhCoqF,EAAmBr/E,EAAKvO,MAC1B4tF,EAAmBr/E,EAAKvO,KAAM,EAC9B+iF,EAAav+E,KAAK+J,IAKxB,IAAK,GAAI7K,GAAI0qF,EAAa,EAAG1qF,EAAIkuC,EAAMruC,OAAQG,IAAK,CAClD,GAAI6K,GAAOqjC,EAAMluC,EACjB,IAAI2qF,EAAe9/E,GACjB,UAEoC/K,KAAhCoqF,EAAmBr/E,EAAKvO,MAC1B4tF,EAAmBr/E,EAAKvO,KAAM,EAC9B+iF,EAAav+E,KAAK+J,OAkB5Bs+D,EAAM76D,UAAUi7E,gBAAkB,SAAU1+E,EAAMw0E,EAAc9nC,GAC1D1sC,EAAKu0E,UAAU7nC,IACZ1sC,EAAKm0E,WAAWn0E,EAAKkjE,OAE1BljE,EAAKmjE,cACLqR,EAAav+E,KAAK+J,IAEdA,EAAKm0E,WAAWn0E,EAAKkD,QAe7Bo7D,EAAM76D,UAAUg8E,6BAA+B,SAAUz/E,EAAMw0E,EAAc6K,EAAoB3yC,GAC3F1sC,EAAKu0E,UAAU7nC,OACmBz3C,KAAhCoqF,EAAmBr/E,EAAKvO,MAC1B4tF,EAAmBr/E,EAAKvO,KAAM,EAC9B+iF,EAAav+E,KAAK+J,IAGhBA,EAAKm0E,WAAWn0E,EAAKkD,QAI7Bo7D,EAAM76D,UAAUs8E,eAAiB,SAAU//E,EAAMggF,EAAaC,GAC5D7uF,KAAK0tF,oBAAoB9+E,EAAMggF,GAC/B5uF,KAAKotF,eAAex+E,EAAMigF,GAC1B7uF,KAAKqtF,kBAGPxtF,EAAOD,QAAUstE,GAIb,SAAUrtE,EAAQD,GAWtBA,EAAQkuF,aAAe,SAAU77C,GAC/BA,EAAMppB,KAAK,SAAUrlB,EAAGC,GACtB,MAAOD,GAAEgxB,KAAK+xB,MAAQ9iD,EAAE+wB,KAAK+xB,SASjC3mD,EAAQmuF,WAAa,SAAU97C,GAC7BA,EAAMppB,KAAK,SAAUrlB,EAAGC,GAItB,OAHY,OAASD,GAAEgxB,KAAOhxB,EAAEgxB,KAAKgyB,IAAMhjD,EAAEgxB,KAAK+xB,QACtC,OAAS9iD,GAAE+wB,KAAO/wB,EAAE+wB,KAAKgyB,IAAM/iD,EAAE+wB,KAAK+xB,UAiBtD3mD,EAAQ8lB,MAAQ,SAAUusB,EAAOsT,EAAQ+kB,GACvC,GAAIA,EAEF,IAAK,GAAIvmE,GAAI,EAAGA,EAAIkuC,EAAMruC,OAAQG,IAChCkuC,EAAMluC,GAAGuC,IAAM,IAKnB,KAAK,GAAIvC,GAAI,EAAGA,EAAIkuC,EAAMruC,OAAQG,IAAK,CACrC,GAAI6K,GAAOqjC,EAAMluC,EACjB,IAAI6K,EAAK8W,OAAsB,OAAb9W,EAAKtI,IAAc,CAEnCsI,EAAKtI,IAAMi/C,EAAOsoB,IAElB,GAAG,CAID,IAAK,GADDihB,GAAgB,KACXjhF,EAAI,EAAGkhF,EAAK98C,EAAMruC,OAAQiK,EAAIkhF,EAAIlhF,IAAK,CAC9C,GAAI7J,GAAQiuC,EAAMpkC,EAClB,IAAkB,OAAd7J,EAAMsC,KAAgBtC,IAAU4K,GAAQ5K,EAAM0hB,OAAS9lB,EAAQovF,UAAUpgF,EAAM5K,EAAOuhD,EAAO32C,KAAM5K,EAAMgK,QAAQggE,KAAM,CACzH8gB,EAAgB9qF,CAChB,QAIiB,MAAjB8qF,IAEFlgF,EAAKtI,IAAMwoF,EAAcxoF,IAAMwoF,EAAcz+E,OAASk1C,EAAO32C,KAAKyrC,gBAE7Dy0C,MAcflvF,EAAQitF,QAAU,SAAU56C,EAAOsT,EAAQgmC,EAAW/L,GACpD,IAAK,GAAIz7E,GAAI,EAAGA,EAAIkuC,EAAMruC,OAAQG,IAChC,OAA8BF,IAA1BouC,EAAMluC,GAAGywB,KAAK04D,SAChBj7C,EAAMluC,GAAGuC,IAAMi/C,EAAO32C,KAAKyrC,aACtB,QAA+Bx2C,KAA3BouC,EAAMluC,GAAGywB,KAAK04D,UAA0B1N,EAAgB,CACjE,GAAIyP,GAAS,CACb,KAAK,GAAI/B,KAAY3B,GACfA,EAAUjoF,eAAe4pF,IACQ,GAA/B3B,EAAU2B,GAAUpmC,SAAmBykC,EAAU2B,GAAUn6E,MAAQw4E,EAAUt5C,EAAMluC,GAAGywB,KAAK04D,UAAUn6E,QACvGk8E,GAAU1D,EAAU2B,GAAU78E,OAC9Bk7E,EAAUt5C,EAAMluC,GAAGywB,KAAK04D,UAAU5mF,IAAM2oF,EAI9Ch9C,GAAMluC,GAAGuC,IAAM2oF,EAAS,GAAM1pC,EAAO32C,KAAKyrC,SAGzCmlC,GACH5/E,EAAQ4/E,eAAevtC,EAAOsT,EAAQgmC,IAY1C3rF,EAAQ4/E,eAAiB,SAAUvtC,EAAOsT,EAAQgmC,GAChD,IAAK,GAAI2B,KAAY3B,GACnB,GAAIA,EAAUjoF,eAAe4pF,GAAW,CAEtC3B,EAAU2B,GAAU5mF,IAAM,CAC1B,GAAG,CAGD,GAAIwoF,GAAgB,IACpB,KAAK,GAAII,KAAiB3D,GACxB,GAAqC,OAAjCA,EAAU2D,GAAe5oF,KAAgB4oF,IAAkBhC,GAAY3B,EAAU2B,GAAUn6E,MAAQw4E,EAAU2D,GAAen8E,OAASnT,EAAQuvF,iBAAiB5D,EAAU2B,GAAW3B,EAAU2D,IAAiB,CAChNJ,EAAgBvD,EAAU2D,EAC1B,OAIiB,MAAjBJ,IAEFvD,EAAU2B,GAAU5mF,IAAMwoF,EAAcxoF,IAAMwoF,EAAcz+E,cAEvDy+E,GAGb,IAAK,GAAI/qF,GAAI,EAAGA,EAAIkuC,EAAMruC,OAAQG,QACDF,KAA3BouC,EAAMluC,GAAGywB,KAAK04D,WAChBj7C,EAAMluC,GAAGuC,IAAMilF,EAAUt5C,EAAMluC,GAAGywB,KAAK04D,UAAU5mF,IAAM,GAAMi/C,EAAO32C,KAAKyrC,WAgB/Ez6C,EAAQovF,UAAY,SAAUxrF,EAAGC,EAAG8hD,EAAQyoB,GAC1C,MAAIA,GACKxqE,EAAE4C,MAAQm/C,EAAOnL,WA3Jd,KA2JqC32C,EAAE2C,MAAQ3C,EAAE2M,OAAS5M,EAAE4C,MAAQ5C,EAAE4M,MAAQm1C,EAAOnL,WA3JrF,KA2J4G32C,EAAE2C,OAAS5C,EAAE8C,IAAMi/C,EAAOlL,SA3JtI,KA2J2J52C,EAAE6C,IAAM7C,EAAE4M,QAAU7M,EAAE8C,IAAM9C,EAAE6M,OAASk1C,EAAOlL,SA3JzM,KA2J8N52C,EAAE6C,IAEnO9C,EAAE0C,KAAOq/C,EAAOnL,WA7Jb,KA6JoC32C,EAAEyC,KAAOzC,EAAE2M,OAAS5M,EAAE0C,KAAO1C,EAAE4M,MAAQm1C,EAAOnL,WA7JlF,KA6JyG32C,EAAEyC,MAAQ1C,EAAE8C,IAAMi/C,EAAOlL,SA7JlI,KA6JuJ52C,EAAE6C,IAAM7C,EAAE4M,QAAU7M,EAAE8C,IAAM9C,EAAE6M,OAASk1C,EAAOlL,SA7JrM,KA6J0N52C,EAAE6C,KAW1O1G,EAAQuvF,iBAAmB,SAAU3rF,EAAGC,GACtC,MAAOD,GAAE+iD,OAAS9iD,EAAE8iD,OAAS/iD,EAAEgjD,KAAO/iD,EAAE8iD,OAAS/iD,EAAE8C,IAAM7C,EAAE6C,IAAM7C,EAAE4M,QAAU7M,EAAE8C,IAAM9C,EAAE6M,OAAS5M,EAAE6C,KAAO7C,EAAE8iD,OAAS/iD,EAAE+iD,OAAS9iD,EAAE+iD,KAAOhjD,EAAE+iD,OAAS9iD,EAAE6C,IAAM9C,EAAE8C,IAAM9C,EAAE6M,QAAU5M,EAAE6C,IAAM7C,EAAE4M,OAAS7M,EAAE8C,MAKlM,SAAUzG,EAAQD,EAASM,GAiB/B,QAASwsE,GAAUl4C,EAAMigD,EAAYzmE,GASnC,GARAhO,KAAKkE,OACHqsC,SACEngC,MAAO,IAGXpQ,KAAKyQ,UAAW,EAChBzQ,KAAKgO,QAAUA,EAEXwmB,EAAM,CACR,OAAkB3wB,IAAd2wB,EAAK+xB,MACP,KAAM,IAAIliD,OAAM,oCAAsCmwB,EAAKn0B,GAE7D,QAAgBwD,IAAZ2wB,EAAKgyB,IACP,KAAM,IAAIniD,OAAM,kCAAoCmwB,EAAKn0B,IAI7DisE,EAAK/rE,KAAKP,KAAMw0B,EAAMigD,EAAYzmE,GA/BpC,GACIs+D,IADSpsE,EAAoB,KACtBA,EAAoB,KAiC/BwsE,GAAUr6D,UAAY,GAAIi6D,GAAK,KAAM,KAAM,MAE3CI,EAAUr6D,UAAU+8E,cAAgB,qBAOpC1iB,EAAUr6D,UAAU8wE,UAAY,SAAU7nC,GAExC,MAAOt7C,MAAKw0B,KAAK+xB,MAAQjL,EAAMkL,KAAOxmD,KAAKw0B,KAAKgyB,IAAMlL,EAAMiL,OAM9DmmB,EAAUr6D,UAAU6uC,OAAS,WAC3B,GAAI+N,GAAMjvD,KAAKivD,GAgCf,IA/BKA,IAEHjvD,KAAKivD,OACLA,EAAMjvD,KAAKivD,IAGXA,EAAIizB,IAAMhyE,SAASC,cAAc,OAIjC8+C,EAAIhR,MAAQ/tC,SAASC,cAAc,OACnC8+C,EAAIhR,MAAMv3C,UAAY,oBACtBuoD,EAAIizB,IAAIxxE,YAAYu+C,EAAIhR,OAGxBgR,EAAIogC,aAAen/E,SAASC,cAAc,OAC1C8+C,EAAIogC,aAAa3oF,UAAY,yBAC7BuoD,EAAIizB,IAAIxxE,YAAYu+C,EAAIogC,cAGxBpgC,EAAI1e,QAAUrgC,SAASC,cAAc,OACrC8+C,EAAI1e,QAAQ7pC,UAAY,mBACxBuoD,EAAIhR,MAAMvtC,YAAYu+C,EAAI1e,SAG1B0e,EAAIizB,IAAI,iBAAmBliF,KAE3BA,KAAK8iF,OAAQ,IAIV9iF,KAAKgJ,OACR,KAAM,IAAI3E,OAAM,yCAElB,KAAK4qD,EAAIizB,IAAIp5E,WAAY,CACvB,GAAIgqE,GAAa9yE,KAAKgJ,OAAOimD,IAAI6jB,UACjC,KAAKA,EACH,KAAM,IAAIzuE,OAAM,iEAElByuE,GAAWpiE,YAAYu+C,EAAIizB,KAQ7B,GANAliF,KAAK+iF,WAAY,EAMb/iF,KAAK8iF,MAAO,CACd9iF,KAAKsvF,gBAAgBtvF,KAAKivD,IAAI1e,SAC9BvwC,KAAKuvF,sBAAsBvvF,KAAKivD,IAAIizB,KACpCliF,KAAKwvF,aAAaxvF,KAAKivD,IAAIizB,IAE3B,IAAIjC,GAAWjgF,KAAKigF,SAASC,YAAclgF,KAAKigF,SAASE,YAGrDz5E,GAAa1G,KAAKw0B,KAAK9tB,UAAY,IAAM1G,KAAKw0B,KAAK9tB,UAAY,KAAO1G,KAAKmlF,SAAW,gBAAkB,KAAOlF,EAAW,gBAAkB,gBAChJhxB,GAAIizB,IAAIx7E,UAAY1G,KAAKovF,cAAgB1oF,EAGzC1G,KAAKyQ,SAA2D,WAAhDjI,OAAO2lE,iBAAiBlf,EAAIhR,OAAOxtC,SAKnDzQ,KAAKivD,IAAI1e,QAAQlkC,MAAMojF,SAAW,OAClCzvF,KAAKkE,MAAMqsC,QAAQngC,MAAQpQ,KAAKivD,IAAI1e,QAAQ1/B,YAC5C7Q,KAAKqQ,OAASrQ,KAAKivD,IAAIizB,IAAI9yB,aAC3BpvD,KAAKivD,IAAI1e,QAAQlkC,MAAMojF,SAAW,GAElCzvF,KAAK8iF,OAAQ,EAGf9iF,KAAK0vF,gCAAgCzgC,EAAIizB,KACzCliF,KAAK2vF,qBAAqB1gC,EAAIizB,KAC9BliF,KAAK4vF,qBACL5vF,KAAK6vF,mBACL7vF,KAAK8vF,qBAOPpjB,EAAUr6D,UAAUy/D,KAAO,WACpB9xE,KAAK+iF,WACR/iF,KAAKkhD,UAQTwrB,EAAUr6D,UAAUP,KAAO,WACzB,GAAI9R,KAAK+iF,UAAW,CAClB,GAAIb,GAAMliF,KAAKivD,IAAIizB,GAEfA,GAAIp5E,YACNo5E,EAAIp5E,WAAW5G,YAAYggF,GAG7BliF,KAAK+iF,WAAY,IAarBrW,EAAUr6D,UAAU0/D,YAAc,SAAUge,GAC1C,GAGIC,GACA9gC,EAJA+gC,EAAcjwF,KAAKgJ,OAAOoH,MAC1Bm2C,EAAQvmD,KAAKy0E,WAAW/F,SAAS1uE,KAAKw0B,KAAK+xB,OAC3CC,EAAMxmD,KAAKy0E,WAAW/F,SAAS1uE,KAAKw0B,KAAKgyB,SAK3B3iD,KAAdksF,IAAyC,IAAdA,IACzBxpC,GAAS0pC,IACX1pC,GAAS0pC,GAEPzpC,EAAM,EAAIypC,IACZzpC,EAAM,EAAIypC,GAKd,IAAIC,GAAWztF,KAAKJ,IAAImkD,EAAMD,EAAQ,GAAK,EA+B3C,QA7BIvmD,KAAKyQ,UACHzQ,KAAKgO,QAAQggE,IACfhuE,KAAKoG,MAAQmgD,EAEbvmD,KAAKkG,KAAOqgD,EAEdvmD,KAAKoQ,MAAQ8/E,EAAWlwF,KAAKkE,MAAMqsC,QAAQngC,MAC3C8+C,EAAelvD,KAAKkE,MAAMqsC,QAAQngC,QAM9BpQ,KAAKgO,QAAQggE,IACfhuE,KAAKoG,MAAQmgD,EAEbvmD,KAAKkG,KAAOqgD,EAEdvmD,KAAKoQ,MAAQ8/E,EACbhhC,EAAezsD,KAAKL,IAAIokD,EAAMD,EAAOvmD,KAAKkE,MAAMqsC,QAAQngC,QAGtDpQ,KAAKgO,QAAQggE,IACfhuE,KAAKivD,IAAIizB,IAAI71E,MAAMjG,MAAQpG,KAAKoG,MAAQ,KAExCpG,KAAKivD,IAAIizB,IAAI71E,MAAMnG,KAAOlG,KAAKkG,KAAO,KAExClG,KAAKivD,IAAIizB,IAAI71E,MAAM+D,MAAQ8/E,EAAW,KAE9BlwF,KAAKgO,QAAQuxE,OACnB,IAAK,OACCv/E,KAAKgO,QAAQggE,IACfhuE,KAAKivD,IAAI1e,QAAQlkC,MAAMjG,MAAQ,IAE/BpG,KAAKivD,IAAI1e,QAAQlkC,MAAMnG,KAAO,GAEhC,MAEF,KAAK,QACClG,KAAKgO,QAAQggE,IACfhuE,KAAKivD,IAAI1e,QAAQlkC,MAAMjG,MAAQ3D,KAAKJ,IAAI6tF,EAAWhhC,EAAc,GAAK,KAEtElvD,KAAKivD,IAAI1e,QAAQlkC,MAAMnG,KAAOzD,KAAKJ,IAAI6tF,EAAWhhC,EAAc,GAAK,IAEvE,MAEF,KAAK,SACClvD,KAAKgO,QAAQggE,IACfhuE,KAAKivD,IAAI1e,QAAQlkC,MAAMjG,MAAQ3D,KAAKJ,KAAK6tF,EAAWhhC,GAAgB,EAAG,GAAK,KAE5ElvD,KAAKivD,IAAI1e,QAAQlkC,MAAMnG,KAAOzD,KAAKJ,KAAK6tF,EAAWhhC,GAAgB,EAAG,GAAK,IAG7E,MAEF,SAKM8gC,EAFAhwF,KAAKyQ,SACH+1C,EAAM,EACe/jD,KAAKJ,KAAKkkD,EAAO,IAEhB2I,EAGtB3I,EAAQ,GACcA,EAED,EAGvBvmD,KAAKgO,QAAQggE,IACfhuE,KAAKivD,IAAI1e,QAAQlkC,MAAMjG,MAAQ4pF,EAAuB,MAEtDhwF,KAAKivD,IAAI1e,QAAQlkC,MAAMnG,KAAO8pF,EAAuB,KACrDhwF,KAAKivD,IAAI1e,QAAQlkC,MAAM+D,MAAQ,eAAiB4/E,EAAuB,SAS/EtjB,EAAUr6D,UAAU26E,YAAc,WAChC,GAAIpf,GAAc5tE,KAAKgO,QAAQ4/D,YAAYh/D,KACvCszE,EAAMliF,KAAKivD,IAAIizB,GAGjBA,GAAI71E,MAAM/F,IADO,OAAfsnE,EACc5tE,KAAKsG,IAAM,KAEXtG,KAAKgJ,OAAOqH,OAASrQ,KAAKsG,IAAMtG,KAAKqQ,OAAS,MAQlEq8D,EAAUr6D,UAAUw9E,iBAAmB,WACrC,GAAI7vF,KAAKmlF,UAAYnlF,KAAKgO,QAAQiyE,SAASC,aAAelgF,KAAKivD,IAAIm3B,SAAU,CAE3E,GAAIA,GAAWl2E,SAASC,cAAc,MACtCi2E,GAAS1/E,UAAY,gBACrB0/E,EAASP,aAAe7lF,KAExBA,KAAKivD,IAAIizB,IAAIxxE,YAAY01E,GACzBpmF,KAAKivD,IAAIm3B,SAAWA,OACVpmF,KAAKmlF,UAAYnlF,KAAKivD,IAAIm3B,WAEhCpmF,KAAKivD,IAAIm3B,SAASt9E,YACpB9I,KAAKivD,IAAIm3B,SAASt9E,WAAW5G,YAAYlC,KAAKivD,IAAIm3B,UAEpDpmF,KAAKivD,IAAIm3B,SAAW,OAQxB1Z,EAAUr6D,UAAUy9E,kBAAoB,WACtC,GAAI9vF,KAAKmlF,UAAYnlF,KAAKgO,QAAQiyE,SAASC,aAAelgF,KAAKivD,IAAIq3B,UAAW,CAE5E,GAAIA,GAAYp2E,SAASC,cAAc,MACvCm2E,GAAU5/E,UAAY,iBACtB4/E,EAAUR,cAAgB9lF,KAE1BA,KAAKivD,IAAIizB,IAAIxxE,YAAY41E,GACzBtmF,KAAKivD,IAAIq3B,UAAYA,OACXtmF,KAAKmlF,UAAYnlF,KAAKivD,IAAIq3B,YAEhCtmF,KAAKivD,IAAIq3B,UAAUx9E,YACrB9I,KAAKivD,IAAIq3B,UAAUx9E,WAAW5G,YAAYlC,KAAKivD,IAAIq3B,WAErDtmF,KAAKivD,IAAIq3B,UAAY,OAIzBzmF,EAAOD,QAAU8sE,GAIb,SAAU7sE,EAAQD,EAASM,GAY/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAezF,QAASwrE,GAAK93C,EAAMigD,EAAYzmE,GAC9BhO,KAAKK,GAAK,KACVL,KAAKgJ,OAAS,KACdhJ,KAAKw0B,KAAOA,EACZx0B,KAAKivD,IAAM,KACXjvD,KAAKy0E,WAAaA,MAClBz0E,KAAKgO,QAAUA,MACfhO,KAAKmlF,UAAW,EAChBnlF,KAAK+iF,WAAY,EACjB/iF,KAAK6xE,cAAe,EACpB7xE,KAAK8iF,OAAQ,EAEb9iF,KAAKsG,IAAM,KACXtG,KAAKoG,MAAQ,KACbpG,KAAKkG,KAAO,KACZlG,KAAKoQ,MAAQ,KACbpQ,KAAKqQ,OAAS,KAEdrQ,KAAKigF,SAAW,KAChBjgF,KAAKmwF,oBA1CP,GAAI5uF,GAAWrB,EAAoB,IAE/BsB,EAAWX,EAAuBU,GAElCF,EAAQnB,EAAoB,IAE5BoB,EAAST,EAAuBQ,GAIhC2tC,EAAS9uC,EAAoB,KAC7BS,EAAOT,EAAoB,GAC3BuB,EAASvB,EAAoB,GAiCjCosE,GAAKj6D,UAAUqT,OAAQ,EAKvB4mD,EAAKj6D,UAAU4wE,OAAS,WACtBjjF,KAAKmlF,UAAW,EAChBnlF,KAAK8iF,OAAQ,EACT9iF,KAAK+iF,WAAW/iF,KAAKkhD,UAM3BorB,EAAKj6D,UAAU2wE,SAAW,WACxBhjF,KAAKmlF,UAAW,EAChBnlF,KAAK8iF,OAAQ,EACT9iF,KAAK+iF,WAAW/iF,KAAKkhD,UAQ3BorB,EAAKj6D,UAAUmjC,QAAU,SAAUhhB,OACA3wB,IAAd2wB,EAAK28C,OAAsBnxE,KAAKw0B,KAAK28C,OAAS38C,EAAK28C,OACnC,MAAfnxE,KAAKgJ,QACvBhJ,KAAKgJ,OAAOomE,QAAQkY,aAAatnF,KAAMw0B,EAAK28C,OAE9CnxE,KAAKgJ,OAAO2iF,YAAa,MAEc9nF,IAAjB2wB,EAAK04D,UAAyBltF,KAAKw0B,KAAK04D,UAAY14D,EAAK04D,UACzC,MAAfltF,KAAKgJ,QAC1BhJ,KAAKgJ,OAAO2lF,eAAe3uF,KAAMA,KAAKw0B,KAAK04D,SAAU14D,EAAK04D,UAG5DltF,KAAKw0B,KAAOA,EACZx0B,KAAKmwF,oBACLnwF,KAAK8iF,OAAQ,EACT9iF,KAAK+iF,WAAW/iF,KAAKkhD,UAO3BorB,EAAKj6D,UAAU86E,UAAY,SAAUnkF,GAC/BhJ,KAAK+iF,WACP/iF,KAAK8R,OACL9R,KAAKgJ,OAASA,EACVhJ,KAAKgJ,QACPhJ,KAAK8xE,QAGP9xE,KAAKgJ,OAASA,GASlBsjE,EAAKj6D,UAAU8wE,UAAY,SAAU7nC,GACnC,OAAO,GAOTgxB,EAAKj6D,UAAUy/D,KAAO,WACpB,OAAO,GAOTxF,EAAKj6D,UAAUP,KAAO,WACpB,OAAO,GAMTw6D,EAAKj6D,UAAU6uC,OAAS,aAOxBorB,EAAKj6D,UAAU0/D,YAAc,aAO7BzF,EAAKj6D,UAAU26E,YAAc,aAQ7B1gB,EAAKj6D,UAAUu9E,mBAAqB,WAClC,GAAI5vF,KAAKmlF,UAAYnlF,KAAKgO,QAAQiyE,SAASC,aAAelgF,KAAKivD,IAAImhC,WAAY,CAC7E,GAAIr+C,GAAK/xC,KAELowF,EAAalgF,SAASC,cAAc,MACxCigF,GAAW1pF,UAAY,kBACvB0pF,EAAWC,eAAiBrwF,IAC5B,IAAI82D,GAAS,GAAI9nB,GAAOohD,EAExBt5B,GAAOzlB,GAAG,MAAO,SAAU9oC,GACzBwpC,EAAG/oC,OAAOomE,QAAQz+D,KAAK49D,QAAQrhB,KAAK,SAClC3kD,MAAOA,EACPqG,KAAMmjC,EAAG1xC,OAGby2D,EAAOzlB,GAAG,YAAa,SAAU9oC,GAC/BA,EAAM6uD,kBACNrlB,EAAG/oC,OAAOomE,QAAQ4Z,cAAcj3C,GAChCA,EAAG/oC,OAAOomE,QAAQz+D,KAAK49D,QAAQrhB,KAAK,eAClC3kD,MAAOA,EACPqG,KAAMmjC,EAAG1xC,OAITL,KAAKivD,IAAIizB,IACXliF,KAAKivD,IAAIizB,IAAIxxE,YAAY0/E,GAChBpwF,KAAKivD,IAAIr0C,OAClB5a,KAAKivD,IAAIr0C,MAAMlK,YAAY0/E,GAG7BpwF,KAAKivD,IAAImhC,WAAaA,OACZpwF,KAAKmlF,UAAYnlF,KAAKivD,IAAImhC,aAEhCpwF,KAAKivD,IAAImhC,WAAWtnF,YACtB9I,KAAKivD,IAAImhC,WAAWtnF,WAAW5G,YAAYlC,KAAKivD,IAAImhC,YAEtDpwF,KAAKivD,IAAImhC,WAAa,OAS1B9jB,EAAKj6D,UAAUs9E,qBAAuB,SAAUnuD,GAC9C,GAAIy+C,IAAYjgF,KAAKgO,QAAQiyE,SAASG,eAAkC,MAAjBpgF,KAAKigF,WAAqBjgF,KAAKgO,QAAQiyE,SAASvsC,SAAW1zC,KAAKgO,QAAQiyE,SAASG,eAAkC,MAAjBpgF,KAAKigF,UAAoBjgF,KAAKigF,SAASvsC,MAEhM,IAAI1zC,KAAKmlF,UAAYlF,IAAajgF,KAAKivD,IAAIqhC,aAAc,CAEvD,GAAIv+C,GAAK/xC,KAELswF,EAAepgF,SAASC,cAAc,MAEtCnQ,MAAKgO,QAAQggE,IACfsiB,EAAa5pF,UAAY,iBAEzB4pF,EAAa5pF,UAAY,aAE3B4pF,EAAalT,MAAQ,mBAGrB,GAAIpuC,GAAOshD,GAAcj/C,GAAG,MAAO,SAAU9oC,GAC3CA,EAAM6uD,kBACNrlB,EAAG/oC,OAAO4kF,kBAAkB77C,KAG9BvQ,EAAO9wB,YAAY4/E,GACnBtwF,KAAKivD,IAAIqhC,aAAeA,OACdtwF,KAAKmlF,UAAYnlF,KAAKivD,IAAIqhC,eAEhCtwF,KAAKivD,IAAIqhC,aAAaxnF,YACxB9I,KAAKivD,IAAIqhC,aAAaxnF,WAAW5G,YAAYlC,KAAKivD,IAAIqhC,cAExDtwF,KAAKivD,IAAIqhC,aAAe,OAS5BhkB,EAAKj6D,UAAUq9E,gCAAkC,SAAUluD,GACzD,GAAKxhC,KAAKgO,QAAQizE,wBAAlB,CAEA,GAAIhB,IAAYjgF,KAAKgO,QAAQiyE,SAASC,aAAqC,IAAvBlgF,KAAKw0B,KAAKyrD,YAA6C,IAAvBjgF,KAAKw0B,KAAKyrD,QAE9F,IAAIjgF,KAAKmlF,UAAYlF,IAAajgF,KAAKivD,IAAIshC,wBAAyB,CAElE,GAEIA,GAA0BrgF,SAASC,cAAc,MAErDogF,GAAwB7pF,UAAY,2BACpC86B,EAAO9wB,YAAY6/E,GACnBvwF,KAAKivD,IAAIshC,wBAA0BA,OACzBvwF,KAAKmlF,UAAYnlF,KAAKivD,IAAIshC,0BAEhCvwF,KAAKivD,IAAIshC,wBAAwBznF,YACnC9I,KAAKivD,IAAIshC,wBAAwBznF,WAAW5G,YAAYlC,KAAKivD,IAAIshC,yBAEnEvwF,KAAKivD,IAAIshC,wBAA0B,KAIrC,IAAIvwF,KAAKivD,IAAIshC,wBAAyB,CAGpCvwF,KAAKivD,IAAIshC,wBAAwBlkF,MAAMmE,WAAaxQ,KAAKgJ,OAAOomE,QAAQyS,YAAYoE,eAAiB,UAAY,SAG7GjmF,KAAKgO,QAAQggE,IACfhuE,KAAKivD,IAAIshC,wBAAwBlkF,MAAMjG,MAAQpG,KAAKivD,IAAI1e,QAAQlkC,MAAMjG,MAEtEpG,KAAKivD,IAAIshC,wBAAwBlkF,MAAMnG,KAAOlG,KAAKivD,IAAI1e,QAAQlkC,MAAMnG,IAIvE,IAKIsqF,GAJA9V,EAAY16E,KAAKgJ,OAAOomE,QAAQz+D,KAAK29D,SAASoM,SAMhD8V,GADmC,OAAjCxwF,KAAKgO,QAAQ4/D,YAAYh/D,KACL5O,KAAKsG,IAELtG,KAAKgJ,OAAOqH,OAASrQ,KAAKsG,IAAMtG,KAAKqQ,MAE1CmgF,GAAsBxwF,KAAKgJ,OAAO1C,IAXjC,IAWwDo0E,GAG1E16E,KAAKivD,IAAIshC,wBAAwBlkF,MAAMoyC,OAAS,GAChDz+C,KAAKivD,IAAIshC,wBAAwBlkF,MAAM/F,IAAMtG,KAAKqQ,OAAS,EAAI,OAE/DrQ,KAAKivD,IAAIshC,wBAAwBlkF,MAAM/F,IAAM,GAC7CtG,KAAKivD,IAAIshC,wBAAwBlkF,MAAMoyC,OAASz+C,KAAKqQ,OAAS,EAAI,KAIpE,IAAIkgC,GACA07C,CAEAjsF,MAAKgO,QAAQizE,yBAA2BjhF,KAAKgO,QAAQizE,wBAAwBwP,UAC/ExE,EAAmBjsF,KAAKgO,QAAQizE,wBAAwBwP,SAASn5B,KAAKt3D,MACtEuwC,EAAU07C,EAAiBjsF,KAAKw0B,QAEhC+b,EAAU,UAAY9uC,EAAOzB,KAAKw0B,KAAK+xB,OAAO9gD,OAAO,oBACjDzF,KAAKw0B,KAAKgyB,MACZjW,GAAW,aAAe9uC,EAAOzB,KAAKw0B,KAAKgyB,KAAK/gD,OAAO,sBAG3DzF,KAAKivD,IAAIshC,wBAAwBpuC,UAAY5R,KASjD+7B,EAAKj6D,UAAUi9E,gBAAkB,SAAUznF,GACzC,GAAI0oC,GACA07C,EACAyE,EACAC,EACAtf,EAAWrxE,KAAKgJ,OAAOomE,QAAQC,UAAU53D,IAAIzX,KAAKK,IAElDuwF,EAAe5wF,KAAKivD,IAAIizB,KAAOliF,KAAKivD,IAAIr0C,MACxCi2E,EAAiCD,EAAaE,uBAAuB,0BAA0B,EASnG,IAPI9wF,KAAKgO,QAAQ+iF,sBACfJ,EAA+B3wF,KAAKgO,QAAQ+iF,qBAAqBz5B,KAAKt3D,MACtE0wF,EAA0BC,EAA6Btf,EAAUuf,IAEjEF,EAA0B,GAGxBG,EACF,GAAIH,YAAmCjsF,WAAYisF,YAAmCxE,UACpFyE,EAA6Btf,EAAUwf,OAClC,CACL,GAAI7wB,GAAUhgE,KAAKgxF,iBAAiBhxF,KAAK0wF,2BAA6B1wF,KAAKgxF,iBAAiBN,EAC5F,IAAI1wB,EAAS,CAEX,GAAI0wB,YAAmCxE,SACrC2E,EAA+B1uC,UAAY,GAC3C0uC,EAA+BngF,YAAYggF,OACtC,QAA+B7sF,IAA3B6sF,EACTG,EAA+B1uC,UAAYuuC,MAE3C,IAAwB,cAAlB1wF,KAAKw0B,KAAKvvB,UAA8CpB,KAAtB7D,KAAKw0B,KAAK+b,QAChD,KAAM,IAAIlsC,OAAM,sCAAwCrE,KAAKK,GAIjEL,MAAK0wF,wBAA0BA,GAYrC,GAPI1wF,KAAKgO,QAAQyiF,UACfxE,EAAmBjsF,KAAKgO,QAAQyiF,SAASn5B,KAAKt3D,MAC9CuwC,EAAU07C,EAAiB5a,EAAUxpE,EAAS7H,KAAKw0B,OAEnD+b,EAAUvwC,KAAKw0B,KAAK+b,QAGlBA,YAAmB9rC,WAAY8rC,YAAmB27C,UACpDD,EAAiB5a,EAAUxpE,OACtB,CACL,GAAIm4D,GAAUhgE,KAAKgxF,iBAAiBhxF,KAAKuwC,WAAavwC,KAAKgxF,iBAAiBzgD,EAC5E,IAAIyvB,EAAS,CAEX,GAAIzvB,YAAmB27C,SACrBrkF,EAAQs6C,UAAY,GACpBt6C,EAAQ6I,YAAY6/B,OACf,QAAe1sC,IAAX0sC,EACT1oC,EAAQs6C,UAAY5R,MAEpB,IAAwB,cAAlBvwC,KAAKw0B,KAAKvvB,UAA8CpB,KAAtB7D,KAAKw0B,KAAK+b,QAChD,KAAM,IAAIlsC,OAAM,sCAAwCrE,KAAKK,GAGjEL,MAAKuwC,QAAUA,KAUrB+7B,EAAKj6D,UAAUk9E,sBAAwB,SAAU1nF,GAC/C,GAAI7H,KAAKgO,QAAQijF,gBAAkBjxF,KAAKgO,QAAQijF,eAAertF,OAAS,EAAG,CACzE,GAAIstF,KAEJ,IAAI/sF,MAAMC,QAAQpE,KAAKgO,QAAQijF,gBAC7BC,EAAalxF,KAAKgO,QAAQijF,mBACrB,CAAA,GAAmC,OAA/BjxF,KAAKgO,QAAQijF,eAGtB,MAFAC,IAAa,EAAI5vF,EAAgB,SAAGtB,KAAKw0B,MAK3C,IAAK,GAAIzwB,GAAI,EAAGA,EAAImtF,EAAWttF,OAAQG,IAAK,CAC1C,GAAIkR,GAAOi8E,EAAWntF,GAClBxB,EAAQvC,KAAKw0B,KAAKvf,EAET,OAAT1S,EACFsF,EAAQspF,aAAa,QAAUl8E,EAAM1S,GAErCsF,EAAQupF,gBAAgB,QAAUn8E,MAW1Cq3D,EAAKj6D,UAAUm9E,aAAe,SAAU3nF,GAElC7H,KAAKqM,QACP1L,EAAKgM,cAAc9E,EAAS7H,KAAKqM,OACjCrM,KAAKqM,MAAQ,MAIXrM,KAAKw0B,KAAKnoB,QACZ1L,EAAK6L,WAAW3E,EAAS7H,KAAKw0B,KAAKnoB,OACnCrM,KAAKqM,MAAQrM,KAAKw0B,KAAKnoB,QAU3BigE,EAAKj6D,UAAU2+E,iBAAmB,SAAUzgD,GAC1C,MAAuB,gBAAZA,GAA6BA,EACpCA,GAAW,aAAeA,GAAgBA,EAAQ8gD,UAC/C9gD,GAMT+7B,EAAKj6D,UAAU89E,kBAAoB,WAC7BnwF,KAAKgO,UAC8B,iBAA1BhO,MAAKgO,QAAQiyE,SACtBjgF,KAAKigF,UACHC,WAAYlgF,KAAKgO,QAAQiyE,SACzBE,YAAangF,KAAKgO,QAAQiyE,SAC1BvsC,OAAQ1zC,KAAKgO,QAAQiyE,UAEsC,YAApD,EAAIz+E,EAAkB,SAAGxB,KAAKgO,QAAQiyE,YAC/CjgF,KAAKigF,YACLt/E,EAAKsD,iBAAiB,aAAc,cAAe,UAAWjE,KAAKigF,SAAUjgF,KAAKgO,QAAQiyE,YAIzFjgF,KAAKgO,SAAYhO,KAAKgO,QAAQiyE,WAAoD,IAAxCjgF,KAAKgO,QAAQiyE,SAASG,eAC/DpgF,KAAKw0B,OAC2B,iBAAvBx0B,MAAKw0B,KAAKyrD,SACnBjgF,KAAKigF,UACHC,WAAYlgF,KAAKw0B,KAAKyrD,SACtBE,YAAangF,KAAKw0B,KAAKyrD,SACvBvsC,OAAQ1zC,KAAKw0B,KAAKyrD,UAEsC,YAAjD,EAAIz+E,EAAkB,SAAGxB,KAAKw0B,KAAKyrD,YAG5CjgF,KAAKigF,YACLt/E,EAAKsD,iBAAiB,aAAc,cAAe,UAAWjE,KAAKigF,SAAUjgF,KAAKw0B,KAAKyrD,aAU/F3T,EAAKj6D,UAAU8/D,aAAe,WAC5B,MAAO,IAOT7F,EAAKj6D,UAAU4/D,cAAgB,WAC7B,MAAO,IAOT3F,EAAKj6D,UAAUu2E,SAAW,WACxB,MAAO5oF,MAAKw0B,KAAK4oD,OAGnBv9E,EAAOD,QAAU0sE,GAIb,SAAUzsE,EAAQD,EAASM,GAmB/B,QAASysE,GAAgBqG,EAASx+C,EAAM46C,GACtClC,EAAM3sE,KAAKP,KAAMgzE,EAASx+C,EAAM46C,GAEhCpvE,KAAKoQ,MAAQ,EACbpQ,KAAKqQ,OAAS,EACdrQ,KAAKsG,IAAM,EACXtG,KAAKkG,KAAO,EArBd,GAAI/E,GAAUjB,EAAoB,IAE9BkB,EAEJ,SAAgCN,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,IAFnDK,GAKlC+rE,GADOhtE,EAAoB,GACnBA,EAAoB,KAiBhCysE,GAAgBt6D,WAAY,EAAIjR,EAAkB,SAAG8rE,EAAM76D,WAS3Ds6D,EAAgBt6D,UAAU6uC,OAAS,SAAU5F,EAAOiK,EAAQq+B,GAG1D5jF,KAAKojF,aAAepjF,KAAK4sF,oBAAoB5sF,KAAKoO,aAAcpO,KAAKojF,aAAc9nC,GAGnFt7C,KAAKoQ,MAAQpQ,KAAKivD,IAAIvjD,WAAWmF,YAGjC7Q,KAAKivD,IAAIvjD,WAAWW,MAAMgE,OAAS,GAGnC,KAAK,GAAItM,GAAI,EAAG0oB,EAAKzsB,KAAKojF,aAAax/E,OAAQG,EAAI0oB,EAAI1oB,IAAK,CAC/C/D,KAAKojF,aAAar/E,GACxBipF,YAAYznC,GAGnB,OAhBc,GAsBhBonB,EAAgBt6D,UAAUy/D,KAAO,WAC1B9xE,KAAKivD,IAAIvjD,WAAW5C,YACvB9I,KAAKovE,QAAQngB,IAAIvjD,WAAWgF,YAAY1Q,KAAKivD,IAAIvjD,aAIrD7L,EAAOD,QAAU+sE,GAIb,SAAU9sE,EAAQD,EAASM,GAiB/B,QAASssE,GAAQh4C,EAAMigD,EAAYzmE,GAajC,GAZAhO,KAAKkE,OACH01C,KACExpC,MAAO,EACPC,OAAQ,GAEVqpC,MACEtpC,MAAO,EACPC,OAAQ,IAGZrQ,KAAKgO,QAAUA,EAEXwmB,OACgB3wB,IAAd2wB,EAAK+xB,MACP,KAAM,IAAIliD,OAAM,oCAAsCmwB,EAI1D83C,GAAK/rE,KAAKP,KAAMw0B,EAAMigD,EAAYzmE,GAhCpC,GAAIs+D,GAAOpsE,EAAoB,IACpBA,GAAoB,EAkC/BssE,GAAQn6D,UAAY,GAAIi6D,GAAK,KAAM,KAAM,MAOzCE,EAAQn6D,UAAU8wE,UAAY,SAAU7nC,GAEtC,GACIikC,GAAQv/E,KAAKgO,QAAQuxE,MACrB+R,EAAYtxF,KAAKoQ,MAAQkrC,EAAMo6B,yBAUnC,OARa,SAAT6J,EACUv/E,KAAKw0B,KAAK+xB,MAAMvjC,UAAYs4B,EAAMiL,OAASvmD,KAAKw0B,KAAK+xB,MAAMvjC,UAAYsuE,EAAYh2C,EAAMkL,IACnF,QAAT+4B,EACGv/E,KAAKw0B,KAAK+xB,MAAMvjC,UAAYsuE,EAAYh2C,EAAMiL,OAASvmD,KAAKw0B,KAAK+xB,MAAMvjC,UAAYs4B,EAAMkL,IAGzFxmD,KAAKw0B,KAAK+xB,MAAMvjC,UAAYsuE,EAAY,EAAIh2C,EAAMiL,OAASvmD,KAAKw0B,KAAK+xB,MAAMvjC,UAAYsuE,EAAY,EAAIh2C,EAAMkL,KAQ7HgmB,EAAQn6D,UAAU6uC,OAAS,WACzB,GAAI+N,GAAMjvD,KAAKivD,GA6Bf,IA5BKA,IAEHjvD,KAAKivD,OACLA,EAAMjvD,KAAKivD,IAGXA,EAAIizB,IAAMhyE,SAASC,cAAc,OAGjC8+C,EAAI1e,QAAUrgC,SAASC,cAAc,OACrC8+C,EAAI1e,QAAQ7pC,UAAY,mBACxBuoD,EAAIizB,IAAIxxE,YAAYu+C,EAAI1e,SAGxB0e,EAAIvV,KAAOxpC,SAASC,cAAc,OAClC8+C,EAAIvV,KAAKhzC,UAAY,WAGrBuoD,EAAIrV,IAAM1pC,SAASC,cAAc,OACjC8+C,EAAIrV,IAAIlzC,UAAY,UAGpBuoD,EAAIizB,IAAI,iBAAmBliF,KAE3BA,KAAK8iF,OAAQ,IAIV9iF,KAAKgJ,OACR,KAAM,IAAI3E,OAAM,yCAElB,KAAK4qD,EAAIizB,IAAIp5E,WAAY,CACvB,GAAIgqE,GAAa9yE,KAAKgJ,OAAOimD,IAAI6jB,UACjC,KAAKA,EAAY,KAAM,IAAIzuE,OAAM,iEACjCyuE,GAAWpiE,YAAYu+C,EAAIizB,KAE7B,IAAKjzB,EAAIvV,KAAK5wC,WAAY,CACxB,GAAI4C,GAAa1L,KAAKgJ,OAAOimD,IAAIvjD,UACjC,KAAKA,EAAY,KAAM,IAAIrH,OAAM,iEACjCqH,GAAWgF,YAAYu+C,EAAIvV,MAE7B,IAAKuV,EAAIrV,IAAI9wC,WAAY,CACvB,GAAI+kE,GAAO7tE,KAAKgJ,OAAOimD,IAAI4e,IAC3B,KAAKniE,EAAY,KAAM,IAAIrH,OAAM,2DACjCwpE,GAAKn9D,YAAYu+C,EAAIrV,KAQvB,GANA55C,KAAK+iF,WAAY,EAMb/iF,KAAK8iF,MAAO,CACd9iF,KAAKsvF,gBAAgBtvF,KAAKivD,IAAI1e,SAC9BvwC,KAAKuvF,sBAAsBvvF,KAAKivD,IAAIizB,KACpCliF,KAAKwvF,aAAaxvF,KAAKivD,IAAIizB,IAE3B,IAAIjC,GAAWjgF,KAAKigF,SAASC,YAAclgF,KAAKigF,SAASE,YAGrDz5E,GAAa1G,KAAKw0B,KAAK9tB,UAAY,IAAM1G,KAAKw0B,KAAK9tB,UAAY,KAAO1G,KAAKmlF,SAAW,gBAAkB,KAAOlF,EAAW,gBAAkB,gBAChJhxB,GAAIizB,IAAIx7E,UAAY,mBAAqBA,EACzCuoD,EAAIvV,KAAKhzC,UAAY,oBAAsBA,EAC3CuoD,EAAIrV,IAAIlzC,UAAY,mBAAqBA,CAKzC,IAAI6qF,GAAgBtiC,EAAIizB,IAAI71E,MAAMjG,MAC9BorF,EAAeviC,EAAIizB,IAAI71E,MAAMnG,IAC7BlG,MAAKgO,QAAQggE,IACf/e,EAAIizB,IAAI71E,MAAMjG,MAAQ,MAEtB6oD,EAAIizB,IAAI71E,MAAMnG,KAAO,MAIvBlG,KAAKkE,MAAM01C,IAAIvpC,OAAS4+C,EAAIrV,IAAIwV,aAChCpvD,KAAKkE,MAAM01C,IAAIxpC,MAAQ6+C,EAAIrV,IAAI/oC,YAC/B7Q,KAAKkE,MAAMw1C,KAAKtpC,MAAQ6+C,EAAIvV,KAAK7oC,YACjC7Q,KAAKoQ,MAAQ6+C,EAAIizB,IAAIrxE,YACrB7Q,KAAKqQ,OAAS4+C,EAAIizB,IAAI9yB,aAGlBpvD,KAAKgO,QAAQggE,IACf/e,EAAIizB,IAAI71E,MAAMjG,MAAQmrF,EAEtBtiC,EAAIizB,IAAI71E,MAAMnG,KAAOsrF,EAGvBxxF,KAAK8iF,OAAQ,EAGf9iF,KAAK0vF,gCAAgCzgC,EAAIizB,KACzCliF,KAAK4vF,qBACL5vF,KAAK2vF,qBAAqB1gC,EAAIizB,MAOhC1V,EAAQn6D,UAAUy/D,KAAO,WAClB9xE,KAAK+iF,WACR/iF,KAAKkhD,UAOTsrB,EAAQn6D,UAAUP,KAAO,WACvB,GAAI9R,KAAK+iF,UAAW,CAClB,GAAI9zB,GAAMjvD,KAAKivD,GAEXA,GAAIizB,IAAIp5E,YAAYmmD,EAAIizB,IAAIp5E,WAAW5G,YAAY+sD,EAAIizB,KACvDjzB,EAAIvV,KAAK5wC,YAAYmmD,EAAIvV,KAAK5wC,WAAW5G,YAAY+sD,EAAIvV,MACzDuV,EAAIrV,IAAI9wC,YAAYmmD,EAAIrV,IAAI9wC,WAAW5G,YAAY+sD,EAAIrV,KAE3D55C,KAAK+iF,WAAY,IAQrBvW,EAAQn6D,UAAU0/D,YAAc,WAC9B,GAAIxrB,GAAQvmD,KAAKy0E,WAAW/F,SAAS1uE,KAAKw0B,KAAK+xB,OAC3Cg5B,EAAQv/E,KAAKgO,QAAQuxE,KAGZ,UAATA,EACEv/E,KAAKgO,QAAQggE,KACfhuE,KAAKoG,MAAQmgD,EAAQvmD,KAAKoQ,MAG1BpQ,KAAKivD,IAAIizB,IAAI71E,MAAMjG,MAAQpG,KAAKoG,MAAQ,KACxCpG,KAAKivD,IAAIvV,KAAKrtC,MAAMjG,MAAQmgD,EAAQvmD,KAAKkE,MAAMw1C,KAAKtpC,MAAQ,KAC5DpQ,KAAKivD,IAAIrV,IAAIvtC,MAAMjG,MAAQmgD,EAAQvmD,KAAKkE,MAAMw1C,KAAKtpC,MAAQ,EAAIpQ,KAAKkE,MAAM01C,IAAIxpC,MAAQ,EAAI,OAE1FpQ,KAAKkG,KAAOqgD,EAAQvmD,KAAKoQ,MAGzBpQ,KAAKivD,IAAIizB,IAAI71E,MAAMnG,KAAOlG,KAAKkG,KAAO,KACtClG,KAAKivD,IAAIvV,KAAKrtC,MAAMnG,KAAOqgD,EAAQvmD,KAAKkE,MAAMw1C,KAAKtpC,MAAQ,KAC3DpQ,KAAKivD,IAAIrV,IAAIvtC,MAAMnG,KAAOqgD,EAAQvmD,KAAKkE,MAAMw1C,KAAKtpC,MAAQ,EAAIpQ,KAAKkE,MAAM01C,IAAIxpC,MAAQ,EAAI,MAEzE,QAATmvE,EACLv/E,KAAKgO,QAAQggE,KACfhuE,KAAKoG,MAAQmgD,EAGbvmD,KAAKivD,IAAIizB,IAAI71E,MAAMjG,MAAQpG,KAAKoG,MAAQ,KACxCpG,KAAKivD,IAAIvV,KAAKrtC,MAAMjG,MAAQmgD,EAAQ,KACpCvmD,KAAKivD,IAAIrV,IAAIvtC,MAAMjG,MAAQmgD,EAAQvmD,KAAKkE,MAAMw1C,KAAKtpC,MAAQ,EAAIpQ,KAAKkE,MAAM01C,IAAIxpC,MAAQ,EAAI,OAE1FpQ,KAAKkG,KAAOqgD,EAGZvmD,KAAKivD,IAAIizB,IAAI71E,MAAMnG,KAAOlG,KAAKkG,KAAO,KACtClG,KAAKivD,IAAIvV,KAAKrtC,MAAMnG,KAAOqgD,EAAQ,KACnCvmD,KAAKivD,IAAIrV,IAAIvtC,MAAMnG,KAAOqgD,EAAQvmD,KAAKkE,MAAMw1C,KAAKtpC,MAAQ,EAAIpQ,KAAKkE,MAAM01C,IAAIxpC,MAAQ,EAAI,MAIvFpQ,KAAKgO,QAAQggE,KACfhuE,KAAKoG,MAAQmgD,EAAQvmD,KAAKoQ,MAAQ,EAGlCpQ,KAAKivD,IAAIizB,IAAI71E,MAAMjG,MAAQpG,KAAKoG,MAAQ,KACxCpG,KAAKivD,IAAIvV,KAAKrtC,MAAMjG,MAAQmgD,EAAQvmD,KAAKkE,MAAMw1C,KAAKtpC,MAAQ,KAC5DpQ,KAAKivD,IAAIrV,IAAIvtC,MAAMjG,MAAQmgD,EAAQvmD,KAAKkE,MAAM01C,IAAIxpC,MAAQ,EAAI,OAE9DpQ,KAAKkG,KAAOqgD,EAAQvmD,KAAKoQ,MAAQ,EAGjCpQ,KAAKivD,IAAIizB,IAAI71E,MAAMnG,KAAOlG,KAAKkG,KAAO,KACtClG,KAAKivD,IAAIvV,KAAKrtC,MAAMnG,KAAOqgD,EAAQvmD,KAAKkE,MAAMw1C,KAAKtpC,MAAQ,EAAI,KAC/DpQ,KAAKivD,IAAIrV,IAAIvtC,MAAMnG,KAAOqgD,EAAQvmD,KAAKkE,MAAM01C,IAAIxpC,MAAQ,EAAI,OASnEo8D,EAAQn6D,UAAU26E,YAAc,WAC9B,GAAIpf,GAAc5tE,KAAKgO,QAAQ4/D,YAAYh/D,KACvCszE,EAAMliF,KAAKivD,IAAIizB,IACfxoC,EAAO15C,KAAKivD,IAAIvV,KAChBE,EAAM55C,KAAKivD,IAAIrV,GAEnB,IAAmB,OAAfg0B,EACFsU,EAAI71E,MAAM/F,KAAOtG,KAAKsG,KAAO,GAAK,KAElCozC,EAAKrtC,MAAM/F,IAAM,IACjBozC,EAAKrtC,MAAMgE,OAASrQ,KAAKgJ,OAAO1C,IAAMtG,KAAKsG,IAAM,EAAI,KACrDozC,EAAKrtC,MAAMoyC,OAAS,OACf,CAEL,GAAIgzC,GAAgBzxF,KAAKgJ,OAAOomE,QAAQlrE,MAAMmM,OAC1Cg/C,EAAaoiC,EAAgBzxF,KAAKgJ,OAAO1C,IAAMtG,KAAKgJ,OAAOqH,OAASrQ,KAAKsG,GAE7E47E,GAAI71E,MAAM/F,KAAOtG,KAAKgJ,OAAOqH,OAASrQ,KAAKsG,IAAMtG,KAAKqQ,QAAU,GAAK,KACrEqpC,EAAKrtC,MAAM/F,IAAMmrF,EAAgBpiC,EAAa,KAC9C3V,EAAKrtC,MAAMoyC,OAAS,IAGtB7E,EAAIvtC,MAAM/F,KAAOtG,KAAKkE,MAAM01C,IAAIvpC,OAAS,EAAI,MAO/Cm8D,EAAQn6D,UAAU8/D,aAAe,WAC/B,MAAOnyE,MAAKoQ,MAAQ,GAOtBo8D,EAAQn6D,UAAU4/D,cAAgB,WAChC,MAAOjyE,MAAKoQ,MAAQ,GAGtBvQ,EAAOD,QAAU4sE,GAIb,SAAU3sE,EAAQD,EAASM,GAgB/B,QAASusE,GAAUj4C,EAAMigD,EAAYzmE,GAenC,GAdAhO,KAAKkE,OACH01C,KACEtzC,IAAK,EACL8J,MAAO,EACPC,OAAQ,GAEVkgC,SACElgC,OAAQ,EACRqhF,WAAY,EACZC,YAAa,IAGjB3xF,KAAKgO,QAAUA,EAEXwmB,OACgB3wB,IAAd2wB,EAAK+xB,MACP,KAAM,IAAIliD,OAAM,oCAAsCmwB,EAI1D83C,GAAK/rE,KAAKP,KAAMw0B,EAAMigD,EAAYzmE,GAjCpC,GAAIs+D,GAAOpsE,EAAoB,IAoC/BusE,GAAUp6D,UAAY,GAAIi6D,GAAK,KAAM,KAAM,MAO3CG,EAAUp6D,UAAU8wE,UAAY,SAAU7nC,GAExC,GAAIg2C,GAAYtxF,KAAKoQ,MAAQkrC,EAAMo6B,yBAEnC,OAAO11E,MAAKw0B,KAAK+xB,MAAMvjC,UAAYsuE,EAAYh2C,EAAMiL,OAASvmD,KAAKw0B,KAAK+xB,MAAQjL,EAAMkL,KAMxFimB,EAAUp6D,UAAU6uC,OAAS,WAC3B,GAAI+N,GAAMjvD,KAAKivD,GA0Bf,IAzBKA,IAEHjvD,KAAKivD,OACLA,EAAMjvD,KAAKivD,IAGXA,EAAIr0C,MAAQ1K,SAASC,cAAc,OAInC8+C,EAAI1e,QAAUrgC,SAASC,cAAc,OACrC8+C,EAAI1e,QAAQ7pC,UAAY,mBACxBuoD,EAAIr0C,MAAMlK,YAAYu+C,EAAI1e,SAG1B0e,EAAIrV,IAAM1pC,SAASC,cAAc,OACjC8+C,EAAIr0C,MAAMlK,YAAYu+C,EAAIrV,KAG1BqV,EAAIr0C,MAAM,iBAAmB5a,KAE7BA,KAAK8iF,OAAQ,IAIV9iF,KAAKgJ,OACR,KAAM,IAAI3E,OAAM,yCAElB,KAAK4qD,EAAIr0C,MAAM9R,WAAY,CACzB,GAAIgqE,GAAa9yE,KAAKgJ,OAAOimD,IAAI6jB,UACjC,KAAKA,EACH,KAAM,IAAIzuE,OAAM,iEAElByuE,GAAWpiE,YAAYu+C,EAAIr0C,OAQ7B,GANA5a,KAAK+iF,WAAY,EAMb/iF,KAAK8iF,MAAO,CACd9iF,KAAKsvF,gBAAgBtvF,KAAKivD,IAAI1e,SAC9BvwC,KAAKuvF,sBAAsBvvF,KAAKivD,IAAIr0C,OACpC5a,KAAKwvF,aAAaxvF,KAAKivD,IAAIr0C,MAE3B,IAAIqlE,GAAWjgF,KAAKigF,SAASC,YAAclgF,KAAKigF,SAASE,YAErDz5E,GAAa1G,KAAKw0B,KAAK9tB,UAAY,IAAM1G,KAAKw0B,KAAK9tB,UAAY,KAAO1G,KAAKmlF,SAAW,gBAAkB,KAAOlF,EAAW,gBAAkB,gBAChJhxB,GAAIr0C,MAAMlU,UAAY,qBAAuBA,EAC7CuoD,EAAIrV,IAAIlzC,UAAY,mBAAqBA,EAGzC1G,KAAKkE,MAAM01C,IAAIxpC,MAAQ6+C,EAAIrV,IAAI/oC,YAC/B7Q,KAAKkE,MAAM01C,IAAIvpC,OAAS4+C,EAAIrV,IAAIwV,aAChCpvD,KAAKkE,MAAMqsC,QAAQlgC,OAAS4+C,EAAI1e,QAAQ6e,aAGpCpvD,KAAKgO,QAAQggE,IACf/e,EAAI1e,QAAQlkC,MAAMslF,YAAc,EAAI3xF,KAAKkE,MAAM01C,IAAIxpC,MAAQ,KAE3D6+C,EAAI1e,QAAQlkC,MAAMqlF,WAAa,EAAI1xF,KAAKkE,MAAM01C,IAAIxpC,MAAQ,KAK5DpQ,KAAKoQ,MAAQ6+C,EAAIr0C,MAAM/J,YACvB7Q,KAAKqQ,OAAS4+C,EAAIr0C,MAAMw0C,aAGxBH,EAAIrV,IAAIvtC,MAAM/F,KAAOtG,KAAKqQ,OAASrQ,KAAKkE,MAAM01C,IAAIvpC,QAAU,EAAI,KAC5DrQ,KAAKgO,QAAQggE,IACf/e,EAAIrV,IAAIvtC,MAAMjG,MAAQpG,KAAKkE,MAAM01C,IAAIxpC,MAAQ,EAAI,KAEjD6+C,EAAIrV,IAAIvtC,MAAMnG,KAAOlG,KAAKkE,MAAM01C,IAAIxpC,MAAQ,EAAI,KAGlDpQ,KAAK8iF,OAAQ,EAGf9iF,KAAK0vF,gCAAgCzgC,EAAIr0C,OACzC5a,KAAK4vF,qBACL5vF,KAAK2vF,qBAAqB1gC,EAAIr0C;oCAOhC6xD,EAAUp6D,UAAUy/D,KAAO,WACpB9xE,KAAK+iF,WACR/iF,KAAKkhD,UAOTurB,EAAUp6D,UAAUP,KAAO,WACrB9R,KAAK+iF,YACH/iF,KAAKivD,IAAIr0C,MAAM9R,YACjB9I,KAAKivD,IAAIr0C,MAAM9R,WAAW5G,YAAYlC,KAAKivD,IAAIr0C,OAGjD5a,KAAK+iF,WAAY,IAQrBtW,EAAUp6D,UAAU0/D,YAAc,WAChC,GAAIxrB,GAAQvmD,KAAKy0E,WAAW/F,SAAS1uE,KAAKw0B,KAAK+xB,MAE3CvmD,MAAKgO,QAAQggE,KACfhuE,KAAKoG,MAAQmgD,EAAQvmD,KAAKkE,MAAM01C,IAAIxpC,MAGpCpQ,KAAKivD,IAAIr0C,MAAMvO,MAAMjG,MAAQpG,KAAKoG,MAAQ,OAE1CpG,KAAKkG,KAAOqgD,EAAQvmD,KAAKkE,MAAM01C,IAAIxpC,MAGnCpQ,KAAKivD,IAAIr0C,MAAMvO,MAAMnG,KAAOlG,KAAKkG,KAAO,OAQ5CumE,EAAUp6D,UAAU26E,YAAc,WAChC,GAAIpf,GAAc5tE,KAAKgO,QAAQ4/D,YAAYh/D,KACvCgM,EAAQ5a,KAAKivD,IAAIr0C,KAEnBA,GAAMvO,MAAM/F,IADK,OAAfsnE,EACgB5tE,KAAKsG,IAAM,KAEXtG,KAAKgJ,OAAOqH,OAASrQ,KAAKsG,IAAMtG,KAAKqQ,OAAS,MAQpEo8D,EAAUp6D,UAAU8/D,aAAe,WACjC,MAAOnyE,MAAKkE,MAAM01C,IAAIxpC,OAOxBq8D,EAAUp6D,UAAU4/D,cAAgB,WAClC,MAAOjyE,MAAKkE,MAAM01C,IAAIxpC,OAGxBvQ,EAAOD,QAAU6sE,GAIb,SAAU5sE,EAAQD,EAASM,GAoB/B,QAASqsE,GAAe/3C,EAAMigD,EAAYzmE,GASxC,GARAhO,KAAKkE,OACHqsC,SACEngC,MAAO,IAGXpQ,KAAKyQ,UAAW,EAGZ+jB,EAAM,CACR,OAAkB3wB,IAAd2wB,EAAK+xB,MACP,KAAM,IAAIliD,OAAM,oCAAsCmwB,EAAKn0B,GAE7D,QAAgBwD,IAAZ2wB,EAAKgyB,IACP,KAAM,IAAIniD,OAAM,kCAAoCmwB,EAAKn0B,IAI7DisE,EAAK/rE,KAAKP,KAAMw0B,EAAMigD,EAAYzmE,GAlCpC,GACIs+D,IADSpsE,EAAoB,KACtBA,EAAoB,MAC3BysE,EAAkBzsE,EAAoB,KACtCwsE,EAAYxsE,EAAoB,IAkCpCqsE,GAAel6D,UAAY,GAAIi6D,GAAK,KAAM,KAAM,MAEhDC,EAAel6D,UAAU+8E,cAAgB,0BACzC7iB,EAAel6D,UAAUqT,OAAQ,EAOjC6mD,EAAel6D,UAAU8wE,UAAY,SAAU7nC,GAE7C,MAAOt7C,MAAKw0B,KAAK+xB,MAAQjL,EAAMkL,KAAOxmD,KAAKw0B,KAAKgyB,IAAMlL,EAAMiL,OAM9DgmB,EAAel6D,UAAU6uC,OAAS,WAChC,GAAI+N,GAAMjvD,KAAKivD,GA4Bf,IA3BKA,IAEHjvD,KAAKivD,OACLA,EAAMjvD,KAAKivD,IAGXA,EAAIizB,IAAMhyE,SAASC,cAAc,OAIjC8+C,EAAIhR,MAAQ/tC,SAASC,cAAc,OACnC8+C,EAAIhR,MAAMv3C,UAAY,oBACtBuoD,EAAIizB,IAAIxxE,YAAYu+C,EAAIhR,OAGxBgR,EAAI1e,QAAUrgC,SAASC,cAAc,OACrC8+C,EAAI1e,QAAQ7pC,UAAY,mBACxBuoD,EAAIhR,MAAMvtC,YAAYu+C,EAAI1e,SAM1BvwC,KAAK8iF,OAAQ,IAIV9iF,KAAKgJ,OACR,KAAM,IAAI3E,OAAM,yCAElB,KAAK4qD,EAAIizB,IAAIp5E,WAAY,CACvB,GAAI4C,GAAa1L,KAAKgJ,OAAOimD,IAAIvjD,UACjC,KAAKA,EACH,KAAM,IAAIrH,OAAM,iEAElBqH,GAAWgF,YAAYu+C,EAAIizB,KAQ7B,GANAliF,KAAK+iF,WAAY,EAMb/iF,KAAK8iF,MAAO,CACd9iF,KAAKsvF,gBAAgBtvF,KAAKivD,IAAI1e,SAC9BvwC,KAAKuvF,sBAAsBvvF,KAAKivD,IAAI1e,SACpCvwC,KAAKwvF,aAAaxvF,KAAKivD,IAAIizB,IAG3B,IAAIx7E,IAAa1G,KAAKw0B,KAAK9tB,UAAY,IAAM1G,KAAKw0B,KAAK9tB,UAAY,KAAO1G,KAAKmlF,SAAW,gBAAkB,GAC5Gl2B,GAAIizB,IAAIx7E,UAAY1G,KAAKovF,cAAgB1oF,EAGzC1G,KAAKyQ,SAA6D,WAAlDjI,OAAO2lE,iBAAiBlf,EAAI1e,SAAS9/B,SAGrDzQ,KAAKkE,MAAMqsC,QAAQngC,MAAQpQ,KAAKivD,IAAI1e,QAAQ1/B,YAC5C7Q,KAAKqQ,OAAS,EAEdrQ,KAAK8iF,OAAQ,IAQjBvW,EAAel6D,UAAUy/D,KAAOpF,EAAUr6D,UAAUy/D,KAMpDvF,EAAel6D,UAAUP,KAAO46D,EAAUr6D,UAAUP,KAMpDy6D,EAAel6D,UAAU0/D,YAAcrF,EAAUr6D,UAAU0/D,YAM3DxF,EAAel6D,UAAU26E,YAAc,SAAUznC,GAC/C,GAAIl1C,GACAu9D,EAAc5tE,KAAKgO,QAAQ4/D,YAAYh/D,IAG3C,QAA2B/K,KAAvB7D,KAAKw0B,KAAK04D,SAAwB,CAGpC,GAAI0E,GAAe5xF,KAAKw0B,KAAK04D,SACzB3B,EAAYvrF,KAAKgJ,OAAOuiF,SACRA,GAAUqG,GAAc7+E,KAE5C/S,MAAKivD,IAAIizB,IAAI71E,MAAMgE,OAASrQ,KAAKgJ,OAAOuiF,UAAUqG,GAAcvhF,OAAS,KAGvErQ,KAAKivD,IAAIizB,IAAI71E,MAAM/F,IADF,OAAfsnE,EACuB5tE,KAAKgJ,OAAO1C,IAAMtG,KAAKgJ,OAAOuiF,UAAUqG,GAActrF,IAAM,KAE5DtG,KAAKgJ,OAAO1C,IAAMtG,KAAKgJ,OAAOqH,OAASrQ,KAAKgJ,OAAOuiF,UAAUqG,GAActrF,IAAMtG,KAAKgJ,OAAOuiF,UAAUqG,GAAcvhF,OAAS,KAEzJrQ,KAAKivD,IAAIizB,IAAI71E,MAAMoyC,OAAS,OAKtBz+C,MAAKgJ,iBAAkB2jE,IAEzBt8D,EAAS5N,KAAKJ,IAAIrC,KAAKgJ,OAAOqH,OAAQrQ,KAAKgJ,OAAOomE,QAAQz+D,KAAK29D,SAAS3yB,OAAOtrC,OAAQrQ,KAAKgJ,OAAOomE,QAAQz+D,KAAK29D,SAASgE,gBAAgBjiE,QACzIrQ,KAAKivD,IAAIizB,IAAI71E,MAAMoyC,OAAwB,UAAfmvB,EAA0B,IAAM,GAC5D5tE,KAAKivD,IAAIizB,IAAI71E,MAAM/F,IAAqB,OAAfsnE,EAAuB,IAAM,KAEtDv9D,EAASrQ,KAAKgJ,OAAOqH,OAErBrQ,KAAKivD,IAAIizB,IAAI71E,MAAM/F,IAAMtG,KAAKgJ,OAAO1C,IAAM,KAC3CtG,KAAKivD,IAAIizB,IAAI71E,MAAMoyC,OAAS,GAGlCz+C,MAAKivD,IAAIizB,IAAI71E,MAAMgE,OAASA,EAAS,MAGvCxQ,EAAOD,QAAU2sE,GAIb,SAAU1sE,EAAQD,EAASM,GAgB/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAZzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAIsvF,GAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GASvChQ,EAAQ,WACV,QAASA,GAAM7rC,EAAW8qC,IACxB,EAAI8Q,EAA0B,SAAG9xF,KAAM+hF,GAEvC/hF,KAAKk2C,UAAYA,EACjBl2C,KAAKghF,eAAiBA,GAAkB,MAExChhF,KAAK+0B,EAAI,EACT/0B,KAAK2uB,EAAI,EACT3uB,KAAKu5C,QAAU,EACfv5C,KAAK64E,QAAS,EAGd74E,KAAKi+C,MAAQ/tC,SAASC,cAAc,OACpCnQ,KAAKi+C,MAAMv3C,UAAY,cACvB1G,KAAKk2C,UAAUxlC,YAAY1Q,KAAKi+C,OA4HlC,OAnHA,EAAI+zC,EAAuB,SAAGjQ,IAC5Bx6E,IAAK,cACLhF,MAAO,SAAqBwyB,EAAGpG,GAC7B3uB,KAAK+0B,EAAI/qB,SAAS+qB,GAClB/0B,KAAK2uB,EAAI3kB,SAAS2kB,MASpBpnB,IAAK,UACLhF,MAAO,SAAiBguC,GAClBA,YAAmB27C,UACrBlsF,KAAKi+C,MAAMkE,UAAY,GACvBniD,KAAKi+C,MAAMvtC,YAAY6/B,IAEvBvwC,KAAKi+C,MAAMkE,UAAY5R,KAU3BhpC,IAAK,OACLhF,MAAO,SAAc0vF,GAKnB,OAJepuF,KAAXouF,IACFA,GAAS,IAGI,IAAXA,EAAiB,CACnB,GAAI5hF,GAASrQ,KAAKi+C,MAAM+E,aACpB5yC,EAAQpQ,KAAKi+C,MAAMltC,YACnB+8D,EAAY9tE,KAAKi+C,MAAMn1C,WAAWk6C,aAClCysC,EAAWzvF,KAAKi+C,MAAMn1C,WAAWiI,YAEjC7K,EAAO,EACPI,EAAM,CAEV,IAA2B,QAAvBtG,KAAKghF,eAA0B,CACjC,GAAIkR,IAAS,EACTC,GAAQ,CAERnyF,MAAK2uB,EAAIte,EAASrQ,KAAKu5C,UACzB44C,GAAQ,GAGNnyF,KAAK+0B,EAAI3kB,EAAQq/E,EAAWzvF,KAAKu5C,UACnC24C,GAAS,GAIThsF,EADEgsF,EACKlyF,KAAK+0B,EAAI3kB,EAETpQ,KAAK+0B,EAIZzuB,EADE6rF,EACInyF,KAAK2uB,EAAIte,EAETrQ,KAAK2uB,MAGbroB,GAAMtG,KAAK2uB,EAAIte,EACX/J,EAAM+J,EAASrQ,KAAKu5C,QAAUu0B,IAChCxnE,EAAMwnE,EAAYz9D,EAASrQ,KAAKu5C,SAE9BjzC,EAAMtG,KAAKu5C,UACbjzC,EAAMtG,KAAKu5C,SAGbrzC,EAAOlG,KAAK+0B,EACR7uB,EAAOkK,EAAQpQ,KAAKu5C,QAAUk2C,IAChCvpF,EAAOupF,EAAWr/E,EAAQpQ,KAAKu5C,SAE7BrzC,EAAOlG,KAAKu5C,UACdrzC,EAAOlG,KAAKu5C,QAIhBv5C,MAAKi+C,MAAM5xC,MAAMnG,KAAOA,EAAO,KAC/BlG,KAAKi+C,MAAM5xC,MAAM/F,IAAMA,EAAM,KAC7BtG,KAAKi+C,MAAM5xC,MAAMmE,WAAa,UAC9BxQ,KAAK64E,QAAS,MAEd74E,MAAK8R,UASTvK,IAAK,OACLhF,MAAO,WACLvC,KAAK64E,QAAS,EACd74E,KAAKi+C,MAAM5xC,MAAMmE,WAAa,YAQhCjJ,IAAK,UACLhF,MAAO,WACLvC,KAAKi+C,MAAMn1C,WAAW5G,YAAYlC,KAAKi+C,WAGpC8jC,IAGTniF,GAAiB,QAAImiF,GAIjB,SAAUliF,EAAQD,GAItBA,EAAQmB,YAAa,EAErBnB,EAAQoB,QAAU,SAAUoxF,EAAUl+E,GACpC,KAAMk+E,YAAoBl+E,IACxB,KAAM,IAAI3P,WAAU,uCAMpB,SAAU1E,EAAQD,EAASM,GAI/BN,EAAQmB,YAAa,CAErB,IAAIsxF,GAAkBnyF,EAAoB,KAEtCoyF,EAEJ,SAAgCxxF,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAASF,IAFzCuxF,EAI9CzyF,GAAQoB,QAAU,WAChB,QAASkY,GAAiBvQ,EAAQzE,GAChC,IAAK,GAAIH,GAAI,EAAGA,EAAIG,EAAMN,OAAQG,IAAK,CACrC,GAAIkU,GAAa/T,EAAMH,EACvBkU,GAAWJ,WAAaI,EAAWJ,aAAc,EACjDI,EAAWH,cAAe,EACtB,SAAWG,KAAYA,EAAWF,UAAW,IACjD,EAAIu6E,EAAiBtxF,SAAS2H,EAAQsP,EAAW1Q,IAAK0Q,IAI1D,MAAO,UAAU/D,EAAaq+E,EAAYC,GAGxC,MAFID,IAAYr5E,EAAiBhF,EAAY7B,UAAWkgF,GACpDC,GAAat5E,EAAiBhF,EAAas+E,GACxCt+E,OAMP,SAAUrU,EAAQD,EAASM,GAE/BL,EAAOD,SAAYoB,QAAWd,EAAoB,KAAMa,YAAY,IAIhE,SAAUlB,EAAQD,EAASM,GAE/BA,EAAoB,IACpB,IAAIwb,GAAUxb,EAAoB,IAAIuE,MACtC5E,GAAOD,QAAU,SAAwBuT,EAAI5L,EAAKkrF,GAChD,MAAO/2E,GAAQpE,eAAenE,EAAI5L,EAAKkrF,KAKrC,SAAU5yF,EAAQD,EAASM,GAE/B,GAAIqT,GAAUrT,EAAoB,GAElCqT,GAAQA,EAAQuC,EAAIvC,EAAQ6B,GAAKlV,EAAoB,IAAK,UAAWoX,eAAgBpX,EAAoB,IAAI6M,KAIzG,SAAUlN,EAAQD,EAASM,GAwB/B,QAASotE,GAAS38D,EAAM3C,GACtBhO,KAAKivD,KACH6jB,WAAY,KACZ4f,SACAC,cACAC,cACAvjD,WACEqjD,SACAC,cACAC,gBAGJ5yF,KAAKkE,OACHo3C,OACEiL,MAAO,EACPC,IAAK,EACLmjC,YAAa,GAEfkJ,QAAS,GAGX7yF,KAAK0tE,gBACHE,aACEC,KAAM,UAERilB,iBAAiB,EACjBC,iBAAiB,EACjBC,cAAe,EACfvtF,OAAQ2mE,EAASyd,OACjBpoF,OAAQA,EACRgtE,SAAU,MAEZzuE,KAAKgO,QAAUrN,EAAKC,UAAWZ,KAAK0tE,gBAEpC1tE,KAAK2Q,KAAOA,EAGZ3Q,KAAKmB,UAELnB,KAAKgxC,WAAWhjC,GA3DlB,GAAIzM,GAAWrB,EAAoB,IAE/BsB,EAEJ,SAAgCV,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,IAFnDS,GAIlCZ,EAAOT,EAAoB,GAC3B0sE,EAAY1sE,EAAoB,KAChCksE,EAAWlsE,EAAoB,KAC/BisE,EAAWjsE,EAAoB,KAC/BuB,EAASvB,EAAoB,GAoDjCotE,GAASj7D,UAAY,GAAIu6D,GAUzBU,EAASj7D,UAAU2+B,WAAa,SAAUhjC,GACpCA,IAEFrN,EAAKsD,iBAAiB,kBAAmB,kBAAmB,gBAAiB,cAAe,WAAY,SAAU,OAAQjE,KAAKgO,QAASA,GAGxIrN,EAAK2D,qBAAqB,UAAWtE,KAAKgO,QAASA,GAE/C,eAAiBA,KACgB,gBAAxBA,GAAQ4/D,YACjB5tE,KAAKgO,QAAQ4/D,YAAYC,KAAO7/D,EAAQ4/D,YACmB,YAAlD,EAAIpsE,EAAkB,SAAGwM,EAAQ4/D,cAA6B,QAAU5/D,GAAQ4/D,cACzF5tE,KAAKgO,QAAQ4/D,YAAYC,KAAO7/D,EAAQ4/D,YAAYC,OAMpD,UAAY7/D,KACe,kBAAlBvM,GAAO4f,OAEhB5f,EAAO4f,OAAOrT,EAAQqT,QAEtB5f,EAAO4oC,KAAKr8B,EAAQqT,WAS5BisD,EAASj7D,UAAUlR,QAAU,WAC3BnB,KAAKivD,IAAI6jB,WAAa5iE,SAASC,cAAc,OAC7CnQ,KAAKivD,IAAIvjD,WAAawE,SAASC,cAAc,OAE7CnQ,KAAKivD,IAAI6jB,WAAWpsE,UAAY,+BAChC1G,KAAKivD,IAAIvjD,WAAWhF,UAAY,gCAMlC4mE,EAASj7D,UAAU++B,QAAU,WAEvBpxC,KAAKivD,IAAI6jB,WAAWhqE,YACtB9I,KAAKivD,IAAI6jB,WAAWhqE,WAAW5G,YAAYlC,KAAKivD,IAAI6jB,YAElD9yE,KAAKivD,IAAIvjD,WAAW5C,YACtB9I,KAAKivD,IAAIvjD,WAAW5C,WAAW5G,YAAYlC,KAAKivD,IAAIvjD,YAGtD1L,KAAK2Q,KAAO,MAOd28D,EAASj7D,UAAU6uC,OAAS,WAC1B,GAAIh9C,GAAQlE,KAAKkE,MACb4uE,EAAa9yE,KAAKivD,IAAI6jB,WACtBpnE,EAAa1L,KAAKivD,IAAIvjD,WAGtB1C,EAA0C,OAAjChJ,KAAKgO,QAAQ4/D,YAAYC,KAAgB7tE,KAAK2Q,KAAKs+C,IAAI3oD,IAAMtG,KAAK2Q,KAAKs+C,IAAIxQ,OACpFw0C,EAAgBngB,EAAWhqE,aAAeE,CAG9ChJ,MAAKkzF,oBAGL,IAAIJ,GAAkB9yF,KAAKgO,QAAQ8kF,iBAAqD,SAAlC9yF,KAAKgO,QAAQ4/D,YAAYC,KAC3EklB,EAAkB/yF,KAAKgO,QAAQ+kF,iBAAqD,SAAlC/yF,KAAKgO,QAAQ4/D,YAAYC,IAG/E3pE,GAAMivF,iBAAmBL,EAAkB5uF,EAAMkvF,gBAAkB,EACnElvF,EAAMmvF,iBAAmBN,EAAkB7uF,EAAMovF,gBAAkB,EACnEpvF,EAAMmM,OAASnM,EAAMivF,iBAAmBjvF,EAAMmvF,iBAC9CnvF,EAAMkM,MAAQ0iE,EAAWjiE,YAEzB3M,EAAMqvF,gBAAkBvzF,KAAK2Q,KAAK29D,SAAS5uE,KAAK2Q,OAASnM,EAAMmvF,kBAAqD,OAAjCrzF,KAAKgO,QAAQ4/D,YAAYC,KAAgB7tE,KAAK2Q,KAAK29D,SAAS7vB,OAAOpuC,OAASrQ,KAAK2Q,KAAK29D,SAAShoE,IAAI+J,QACtLnM,EAAMsvF,eAAiB,EACvBtvF,EAAMuvF,gBAAkBvvF,EAAMqvF,gBAAkBrvF,EAAMmvF,iBACtDnvF,EAAMwvF,eAAiB,CAGvB,IAAIC,GAAwB7gB,EAAW8gB,YACnCC,EAAwBnoF,EAAWkoF,WAmBvC,OAlBA9gB,GAAWhqE,YAAcgqE,EAAWhqE,WAAW5G,YAAY4wE,GAC3DpnE,EAAW5C,YAAc4C,EAAW5C,WAAW5G,YAAYwJ,GAE3DonE,EAAWzmE,MAAMgE,OAASrQ,KAAKkE,MAAMmM,OAAS,KAE9CrQ,KAAK8zF,iBAGDH,EACF3qF,EAAO8mC,aAAagjC,EAAY6gB,GAEhC3qF,EAAO0H,YAAYoiE,GAEjB+gB,EACF7zF,KAAK2Q,KAAKs+C,IAAIosB,mBAAmBvrC,aAAapkC,EAAYmoF,GAE1D7zF,KAAK2Q,KAAKs+C,IAAIosB,mBAAmB3qE,YAAYhF,GAExC1L,KAAK43E,cAAgBqb,GAO9B3lB,EAASj7D,UAAUyhF,eAAiB,WAClC,GAAIlmB,GAAc5tE,KAAKgO,QAAQ4/D,YAAYC,KAGvCtnB,EAAQ5lD,EAAKqE,QAAQhF,KAAK2Q,KAAK2qC,MAAMiL,MAAO,UAC5CC,EAAM7lD,EAAKqE,QAAQhF,KAAK2Q,KAAK2qC,MAAMkL,IAAK,UACxCutC,EAAgB/zF,KAAK2Q,KAAKhQ,KAAKmuE,QAAQ9uE,KAAKkE,MAAM8vF,gBAAkB,IAAMh0F,KAAKgO,QAAQglF,eAAe5tF,UACtGukF,EAAcoK,EAAgB5nB,EAASgL,wBAAwBn3E,KAAKgO,QAAQvM,OAAQzB,KAAK2Q,KAAK69D,YAAaxuE,KAAK2Q,KAAK2qC,MAAOy4C,EAChIpK,IAAe3pF,KAAK2Q,KAAKhQ,KAAKmuE,OAAO,GAAG1pE,SAExC,IAAImN,GAAO,GAAI65D,GAAS,GAAIvpE,MAAK0jD,GAAQ,GAAI1jD,MAAK2jD,GAAMmjC,EAAa3pF,KAAK2Q,KAAK69D,YAC/Ej8D,GAAKy3E,UAAUhqF,KAAKgO,QAAQvM,QACxBzB,KAAKgO,QAAQvI,QACf8M,EAAK03E,UAAUjqF,KAAKgO,QAAQvI,QAE1BzF,KAAKgO,QAAQygE,UACfl8D,EAAK83E,SAASrqF,KAAKgO,QAAQygE,UAE7BzuE,KAAKuS,KAAOA,CAKZ,IAAI08C,GAAMjvD,KAAKivD,GACfA,GAAI5f,UAAUqjD,MAAQzjC,EAAIyjC,MAC1BzjC,EAAI5f,UAAUsjD,WAAa1jC,EAAI0jC,WAC/B1jC,EAAI5f,UAAUujD,WAAa3jC,EAAI2jC,WAC/B3jC,EAAIyjC,SACJzjC,EAAI0jC,cACJ1jC,EAAI2jC,aAEJ,IACInhF,GACAsjB,EACAk/D,EACAnJ,EACAoJ,EAEAC,EACAz6C,EACA06C,EAIA1tF,EAPA0J,EAAQ,EAIRikF,MAAmBxwF,GACnBwwC,EAAQ,CAOZ,KAHA9hC,EAAKg0C,QACL90C,EAAOc,EAAKk0C,aACZwtC,EAAQj0F,KAAK2Q,KAAKhQ,KAAK+tE,SAASj9D,GACzBc,EAAK63E,WAAa/1C,EANf,KAM4B,CAiBpC,OAhBAA,IAEAy2C,EAAUv4E,EAAKu4E,UACfpkF,EAAY6L,EAAK04E,eACjBmJ,EAAa7hF,EAAKw4E,gBAERt5E,EACVsjB,EAAIk/D,EAEJ1hF,EAAKd,OACLA,EAAOc,EAAKk0C,aACEl0C,EAAKu4E,UACnBmJ,EAAQj0F,KAAK2Q,KAAKhQ,KAAK+tE,SAASj9D,GAEhC0iF,EAAY/jF,EACZA,EAAQ6jF,EAAQl/D,EACRxiB,EAAK/P,OACX,IAAK,OACH0xF,GAAgB,CAAK,MACvB,SACEA,EAAgB9jF,GAAqB,GAAZ+jF,EAG7B,GAAIn0F,KAAKgO,QAAQ8kF,iBAAmBoB,EAAe,CACjD,GAAI9jD,GAAQpwC,KAAKs0F,kBAAkBv/D,EAAGq/D,EAAYxmB,EAAalnE,EAC/D0pC,GAAM/jC,MAAM+D,MAAQA,EAAQ,KAG1B06E,GAAW9qF,KAAKgO,QAAQ+kF,iBACtBh+D,EAAI,QACkBlxB,IAApBwwF,IACFA,EAAmBt/D,GAErBqb,EAAQpwC,KAAKu0F,kBAAkBx/D,EAAGxiB,EAAKy4E,gBAAiBpd,EAAalnE,IAEvEgzC,EAAO15C,KAAKw0F,kBAAkBz/D,EAAG3kB,EAAOw9D,EAAalnE,IAGjDwtF,EACFx6C,EAAO15C,KAAKy0F,kBAAkB1/D,EAAG3kB,EAAOw9D,EAAalnE,GAEjDgzC,IAEFA,EAAKrtC,MAAM+D,MAAQpG,SAAS0vC,EAAKrtC,MAAM+D,OAASA,EAAQ,MAYhE,GA9DU,MAwDNikC,GAAkBqgD,IACpBpvE,QAAQH,KAAK,4FACbuvE,GAAoB,GAIlB10F,KAAKgO,QAAQ+kF,gBAAiB,CAChC,GAAI4B,GAAW30F,KAAK2Q,KAAKhQ,KAAKmuE,OAAO,GACjC8lB,EAAWriF,EAAKy4E,cAAc2J,GAC9BE,EAAYD,EAAShxF,QAAU5D,KAAKkE,MAAM4wF,gBAAkB,IAAM,QAE9CjxF,IAApBwwF,GAAiCQ,EAAYR,IAC/Cr0F,KAAKu0F,kBAAkB,EAAGK,EAAUhnB,EAAalnE,GAKrD/F,EAAKuG,QAAQlH,KAAKivD,IAAI5f,UAAW,SAAU1pC,GACzC,KAAOA,EAAI/B,QAAQ,CACjB,GAAIoC,GAAOL,EAAIovF,KACX/uF,IAAQA,EAAK8C,YACf9C,EAAK8C,WAAW5G,YAAY8D,OAepCsnE,EAASj7D,UAAUiiF,kBAAoB,SAAUv/D,EAAG0yB,EAAMmmB,EAAalnE,GAErE,GAAI0pC,GAAQpwC,KAAKivD,IAAI5f,UAAUujD,WAAWvuD,OAE1C,KAAK+L,EAAO,CAEV,GAAIG,GAAUrgC,SAAS8kF,eAAe,GACtC5kD,GAAQlgC,SAASC,cAAc,OAC/BigC,EAAM1/B,YAAY6/B,GAClBvwC,KAAKivD,IAAI6jB,WAAWpiE,YAAY0/B,GAgBlC,MAdApwC,MAAKivD,IAAI2jC,WAAW/tF,KAAKurC,GACzBA,EAAM+R,UAAYsF,EAElBrX,EAAM/jC,MAAM/F,IAAqB,OAAfsnE,EAAuB5tE,KAAKkE,MAAMmvF,iBAAmB,KAAO,IAE1ErzF,KAAKgO,QAAQggE,KACf59B,EAAM/jC,MAAMnG,KAAO,GACnBkqC,EAAM/jC,MAAMjG,MAAQ2uB,EAAI,MAExBqb,EAAM/jC,MAAMnG,KAAO6uB,EAAI,KAEzBqb,EAAM1pC,UAAY,sBAAwBA,EAGnC0pC,GAYTk9B,EAASj7D,UAAUkiF,kBAAoB,SAAUx/D,EAAG0yB,EAAMmmB,EAAalnE,GAErE,GAAI0pC,GAAQpwC,KAAKivD,IAAI5f,UAAUsjD,WAAWtuD,OAE1C,KAAK+L,EAAO,CAEV,GAAIG,GAAUrgC,SAASC,cAAc,MACrCigC,GAAQlgC,SAASC,cAAc,OAC/BigC,EAAM1/B,YAAY6/B,GAClBvwC,KAAKivD,IAAI6jB,WAAWpiE,YAAY0/B,GAgBlC,MAbAA,GAAM6kD,WAAW,GAAG9yC,UAAYsF,EAChCrX,EAAM1pC,UAAY,sBAAwBA,EAG1C0pC,EAAM/jC,MAAM/F,IAAqB,OAAfsnE,EAAuB,IAAM5tE,KAAKkE,MAAMivF,iBAAmB,KACzEnzF,KAAKgO,QAAQggE,KACf59B,EAAM/jC,MAAMnG,KAAO,GACnBkqC,EAAM/jC,MAAMjG,MAAQ2uB,EAAI,MAExBqb,EAAM/jC,MAAMnG,KAAO6uB,EAAI,KAGzB/0B,KAAKivD,IAAI0jC,WAAW9tF,KAAKurC,GAClBA,GAYTk9B,EAASj7D,UAAUoiF,kBAAoB,SAAU1/D,EAAG3kB,EAAOw9D,EAAalnE,GAEtE,GAAIgzC,GAAO15C,KAAKivD,IAAI5f,UAAUqjD,MAAMruD,OAC/BqV,KAEHA,EAAOxpC,SAASC,cAAc,OAC9BnQ,KAAKivD,IAAIvjD,WAAWgF,YAAYgpC,IAElC15C,KAAKivD,IAAIyjC,MAAM7tF,KAAK60C,EAEpB,IAAIx1C,GAAQlE,KAAKkE,KAiBjB,OAfEw1C,GAAKrtC,MAAM/F,IADM,OAAfsnE,EACe1pE,EAAMmvF,iBAAmB,KAEzBrzF,KAAK2Q,KAAK29D,SAAShoE,IAAI+J,OAAS,KAEnDqpC,EAAKrtC,MAAMgE,OAASnM,EAAMqvF,gBAAkB,KACxCvzF,KAAKgO,QAAQggE,KACft0B,EAAKrtC,MAAMnG,KAAO,GAClBwzC,EAAKrtC,MAAMjG,MAAQ2uB,EAAI7wB,EAAMsvF,eAAiB,EAAI,KAClD95C,EAAKhzC,UAAY,uCAAyCA,IAE1DgzC,EAAKrtC,MAAMnG,KAAO6uB,EAAI7wB,EAAMsvF,eAAiB,EAAI,KACjD95C,EAAKhzC,UAAY,mCAAqCA,GAExDgzC,EAAKrtC,MAAM+D,MAAQA,EAAQ,KAEpBspC,GAYT4zB,EAASj7D,UAAUmiF,kBAAoB,SAAUz/D,EAAG3kB,EAAOw9D,EAAalnE,GAEtE,GAAIgzC,GAAO15C,KAAKivD,IAAI5f,UAAUqjD,MAAMruD,OAC/BqV,KAEHA,EAAOxpC,SAASC,cAAc,OAC9BnQ,KAAKivD,IAAIvjD,WAAWgF,YAAYgpC,IAElC15C,KAAKivD,IAAIyjC,MAAM7tF,KAAK60C,EAEpB,IAAIx1C,GAAQlE,KAAKkE,KAmBjB,OAjBEw1C,GAAKrtC,MAAM/F,IADM,OAAfsnE,EACe,IAEA5tE,KAAK2Q,KAAK29D,SAAShoE,IAAI+J,OAAS,KAG/CrQ,KAAKgO,QAAQggE,KACft0B,EAAKrtC,MAAMnG,KAAO,GAClBwzC,EAAKrtC,MAAMjG,MAAQ2uB,EAAI7wB,EAAMwvF,eAAiB,EAAI,KAClDh6C,EAAKhzC,UAAY,uCAAyCA,IAE1DgzC,EAAKrtC,MAAMnG,KAAO6uB,EAAI7wB,EAAMwvF,eAAiB,EAAI,KACjDh6C,EAAKhzC,UAAY,mCAAqCA,GAGxDgzC,EAAKrtC,MAAMgE,OAASnM,EAAMuvF,gBAAkB,KAC5C/5C,EAAKrtC,MAAM+D,MAAQA,EAAQ,KAEpBspC,GAQT4zB,EAASj7D,UAAU6gF,mBAAqB,WAKjClzF,KAAKivD,IAAIimC,mBACZl1F,KAAKivD,IAAIimC,iBAAmBhlF,SAASC,cAAc,OACnDnQ,KAAKivD,IAAIimC,iBAAiBxuF,UAAY,iCACtC1G,KAAKivD,IAAIimC,iBAAiB7oF,MAAMkE,SAAW,WAE3CvQ,KAAKivD,IAAIimC,iBAAiBxkF,YAAYR,SAAS8kF,eAAe,MAC9Dh1F,KAAKivD,IAAI6jB,WAAWpiE,YAAY1Q,KAAKivD,IAAIimC,mBAE3Cl1F,KAAKkE,MAAMkvF,gBAAkBpzF,KAAKivD,IAAIimC,iBAAiBlyC,aACvDhjD,KAAKkE,MAAM8vF,eAAiBh0F,KAAKivD,IAAIimC,iBAAiBnkF,YAGjD/Q,KAAKivD,IAAIkmC,mBACZn1F,KAAKivD,IAAIkmC,iBAAmBjlF,SAASC,cAAc,OACnDnQ,KAAKivD,IAAIkmC,iBAAiBzuF,UAAY,iCACtC1G,KAAKivD,IAAIkmC,iBAAiB9oF,MAAMkE,SAAW,WAE3CvQ,KAAKivD,IAAIkmC,iBAAiBzkF,YAAYR,SAAS8kF,eAAe,MAC9Dh1F,KAAKivD,IAAI6jB,WAAWpiE,YAAY1Q,KAAKivD,IAAIkmC,mBAE3Cn1F,KAAKkE,MAAMovF,gBAAkBtzF,KAAKivD,IAAIkmC,iBAAiBnyC,aACvDhjD,KAAKkE,MAAM4wF,eAAiB90F,KAAKivD,IAAIkmC,iBAAiBpkF,YAGxD,IAAI2jF,IAAoB,CAExB70F,GAAOD,QAAU0tE,GAIb,SAAUztE,EAAQD,EAASM,GAmB/B,QAASo6E,GAAUpkC,GACjBl2C,KAAK+8E,QAAS,EAEd/8E,KAAKivD,KACH/Y,UAAWA,GAGbl2C,KAAKivD,IAAImmC,QAAUllF,SAASC,cAAc,OAC1CnQ,KAAKivD,IAAImmC,QAAQ1uF,UAAY,cAE7B1G,KAAKivD,IAAI/Y,UAAUxlC,YAAY1Q,KAAKivD,IAAImmC,SAExCp1F,KAAK82D,OAAS9nB,EAAOhvC,KAAKivD,IAAImmC,SAC9Bp1F,KAAK82D,OAAOzlB,GAAG,MAAOrxC,KAAKq1F,cAAc/9B,KAAKt3D,MAG9C,IAAI+xC,GAAK/xC,MACK,MAAO,YAAa,QAAS,QAAS,MAAO,WAAY,UAAW,UAC3EkH,QAAQ,SAAUqB,GACvBwpC,EAAG+kB,OAAOzlB,GAAG9oC,EAAO,SAAUA,GAC5BA,EAAM6uD,sBAKNlnD,UAAYA,SAASS,OACvB3Q,KAAKs1F,QAAU,SAAU/sF,GAClBgtF,EAAWhtF,EAAMI,OAAQutC,IAC5BnE,EAAGyjD,cAGPtlF,SAASS,KAAK/I,iBAAiB,QAAS5H,KAAKs1F,cAGzBzxF,KAAlB7D,KAAKivC,UACPjvC,KAAKivC,SAASmC,UAEhBpxC,KAAKivC,SAAWA,IAGhBjvC,KAAKy1F,YAAcz1F,KAAKw1F,WAAWl+B,KAAKt3D,MAsF1C,QAASu1F,GAAW1tF,EAASmB,GAC3B,KAAOnB,GAAS,CACd,GAAIA,IAAYmB,EACd,OAAO,CAETnB,GAAUA,EAAQiB,WAEpB,OAAO,EApJT,GAAImmC,GAAW/uC,EAAoB,KAC/Bo3C,EAAUp3C,EAAoB,IAC9B8uC,EAAS9uC,EAAoB,KAC7BS,EAAOT,EAAoB,EAwD/Bo3C,GAAQgjC,EAAUjoE,WAGlBioE,EAAUjB,QAAU,KAKpBiB,EAAUjoE,UAAU++B,QAAU,WAC5BpxC,KAAKw1F,aAGLx1F,KAAKivD,IAAImmC,QAAQtsF,WAAW5G,YAAYlC,KAAKivD,IAAImmC,SAG7Cp1F,KAAKs1F,SACPplF,SAASS,KAAKvI,oBAAoB,QAASpI,KAAKs1F,SAIlDt1F,KAAK82D,OAAO1lB,UACZpxC,KAAK82D,OAAS,MAQhBwjB,EAAUjoE,UAAUqjF,SAAW,WAEzBpb,EAAUjB,SACZiB,EAAUjB,QAAQmc,aAEpBlb,EAAUjB,QAAUr5E,KAEpBA,KAAK+8E,QAAS,EACd/8E,KAAKivD,IAAImmC,QAAQ/oF,MAAMoM,QAAU,OACjC9X,EAAK4F,aAAavG,KAAKivD,IAAI/Y,UAAW,cAEtCl2C,KAAKktD,KAAK,UACVltD,KAAKktD,KAAK,YAIVltD,KAAKivC,SAASqoB,KAAK,MAAOt3D,KAAKy1F,cAOjCnb,EAAUjoE,UAAUmjF,WAAa,WAC/Bx1F,KAAK+8E,QAAS,EACd/8E,KAAKivD,IAAImmC,QAAQ/oF,MAAMoM,QAAU,GACjC9X,EAAKqG,gBAAgBhH,KAAKivD,IAAI/Y,UAAW,cACzCl2C,KAAKivC,SAAS48B,OAAO,MAAO7rE,KAAKy1F,aAEjCz1F,KAAKktD,KAAK,UACVltD,KAAKktD,KAAK,eAQZotB,EAAUjoE,UAAUgjF,cAAgB,SAAU9sF,GAE5CvI,KAAK01F,WACLntF,EAAM6uD,mBAsBRv3D,EAAOD,QAAU06E,GAIb,SAAUz6E,EAAQD,EAASM,GAqB/B,QAAS4sE,GAAWn8D,EAAM3C,GACxBhO,KAAK2Q,KAAOA,EAGZ3Q,KAAK0tE,gBACHjsE,OAAQA,EACR0yB,QAASA,EACT9S,OAAQ,KACRhhB,OAAIwD,GACJu5E,UAAOv5E,IAET7D,KAAKgO,QAAUrN,EAAKC,UAAWZ,KAAK0tE,gBAEhC1/D,GAAWA,EAAQoyB,KACrBpgC,KAAKyyE,WAAazkE,EAAQoyB,KAE1BpgC,KAAKyyE,WAAa,GAAI5vE,MAGxB7C,KAAK21F,eAEL31F,KAAKgxC,WAAWhjC,GAGhBhO,KAAKmB,UAzCP,GAAI6tC,GAAS9uC,EAAoB,KAC7BS,EAAOT,EAAoB,GAC3B0sE,EAAY1sE,EAAoB,KAChCuB,EAASvB,EAAoB,IAC7Bi0B,EAAUj0B,EAAoB,IAwClC4sE,GAAWz6D,UAAY,GAAIu6D,GAS3BE,EAAWz6D,UAAU2+B,WAAa,SAAUhjC,GACtCA,GAEFrN,EAAKsD,iBAAiB,SAAU,SAAU,UAAW,MAAOjE,KAAKgO,QAASA,IAQ9E8+D,EAAWz6D,UAAUlR,QAAU,WAgB7B,QAASo5E,GAAatxE,GACpBjJ,KAAK2Q,KAAK2qC,MAAM84B,cAAcnrE,GAhBhC,GAAI+oD,GAAM9hD,SAASC,cAAc,MACjC6hD,GAAI,eAAiBhyD,KACrBgyD,EAAItrD,UAAY,oBAAsB1G,KAAKgO,QAAQ3N,IAAM,IACzD2xD,EAAI3lD,MAAMkE,SAAW,WACrByhD,EAAI3lD,MAAM/F,IAAM,MAChB0rD,EAAI3lD,MAAMgE,OAAS,OACnBrQ,KAAKgyD,IAAMA,CAEX,IAAI4jC,GAAO1lF,SAASC,cAAc,MAClCylF,GAAKvpF,MAAMkE,SAAW,WACtBqlF,EAAKvpF,MAAM/F,IAAM,MACjBsvF,EAAKvpF,MAAMnG,KAAO,QAClB0vF,EAAKvpF,MAAMgE,OAAS,OACpBulF,EAAKvpF,MAAM+D,MAAQ,OAMfwlF,EAAKhuF,kBAEPguF,EAAKhuF,iBAAiB,aAAc2yE,EAAajjB,KAAKt3D,OAAO,GAE7D41F,EAAKhuF,iBAAiB,iBAAkB2yE,EAAajjB,KAAKt3D,OAAO,IAGjE41F,EAAKztF,YAAY,eAAgBoyE,EAAajjB,KAAKt3D,OAGrDgyD,EAAIthD,YAAYklF,GAEhB51F,KAAK82D,OAAS,GAAI9nB,GAAO4mD,GACzB51F,KAAK82D,OAAOzlB,GAAG,WAAYrxC,KAAKi0E,aAAa3c,KAAKt3D,OAClDA,KAAK82D,OAAOzlB,GAAG,UAAWrxC,KAAKk0E,QAAQ5c,KAAKt3D,OAC5CA,KAAK82D,OAAOzlB,GAAG,SAAUrxC,KAAKm0E,WAAW7c,KAAKt3D,OAC9CA,KAAK82D,OAAOr/C,IAAI,OAAOsH,KAAMmnB,UAAW,EAAGtG,UAAWoP,EAAO+1B,wBAM/D+H,EAAWz6D,UAAU++B,QAAU,WAC7BpxC,KAAK8R,OAEL9R,KAAK82D,OAAO1lB,UACZpxC,KAAK82D,OAAS,KAEd92D,KAAK2Q,KAAO,MAOdm8D,EAAWz6D,UAAU6uC,OAAS,WAC5B,GAAIl4C,GAAShJ,KAAK2Q,KAAKs+C,IAAIosB,kBACvBr7E,MAAKgyD,IAAIlpD,YAAcE,IAErBhJ,KAAKgyD,IAAIlpD,YACX9I,KAAKgyD,IAAIlpD,WAAW5G,YAAYlC,KAAKgyD,KAEvChpD,EAAO0H,YAAY1Q,KAAKgyD,KAG1B,IAAIj9B,GAAI/0B,KAAK2Q,KAAKhQ,KAAK+tE,SAAS1uE,KAAKyyE,YAEjCpxD,EAASrhB,KAAKgO,QAAQmmB,QAAQn0B,KAAKgO,QAAQqT,OAC1CA,KACErhB,KAAK61F,SACRvwE,QAAQuuC,IAAI,6BAAgC7zD,KAAKgO,QAAQqT,OAAS,kEAClErhB,KAAK61F,QAAS,GAEhBx0E,EAASrhB,KAAKgO,QAAQmmB,QAAY,GAGpC,IAAIipD,GAAQp9E,KAAKgO,QAAQovE,KAYzB,YAVcv5E,KAAVu5E,GACFA,EAAQ/7D,EAAO+e,KAAO,KAAOpgC,KAAKgO,QAAQvM,OAAOzB,KAAKyyE,YAAYhtE,OAAO,+BACzE23E,EAAQA,EAAMniE,OAAO,GAAG8L,cAAgBq2D,EAAM0Y,UAAU,IAC9B,kBAAV1Y,KAChBA,EAAQA,EAAM78E,KAAKP,KAAKyyE,aAG1BzyE,KAAKgyD,IAAI3lD,MAAMnG,KAAO6uB,EAAI,KAC1B/0B,KAAKgyD,IAAIorB,MAAQA,GAEV,GAMTtQ,EAAWz6D,UAAUP,KAAO,WAEtB9R,KAAKgyD,IAAIlpD,YACX9I,KAAKgyD,IAAIlpD,WAAW5G,YAAYlC,KAAKgyD,MAQzC8a,EAAWz6D,UAAU4qE,cAAgB,SAAU78C,GAC7CpgC,KAAKyyE,WAAa9xE,EAAKqE,QAAQo7B,EAAM,QACrCpgC,KAAKkhD,UAOP4rB,EAAWz6D,UAAU6qE,cAAgB,WACnC,MAAO,IAAIr6E,MAAK7C,KAAKyyE,WAAWrtE,YAOlC0nE,EAAWz6D,UAAUgrE,eAAiB,SAAUD,GAC9Cp9E,KAAKgO,QAAQovE,MAAQA,GAQvBtQ,EAAWz6D,UAAU4hE,aAAe,SAAU1rE,GAC5CvI,KAAK21F,YAAYtgB,UAAW,EAC5Br1E,KAAK21F,YAAYljB,WAAazyE,KAAKyyE,WAEnClqE,EAAM6uD,mBAQR0V,EAAWz6D,UAAU6hE,QAAU,SAAU3rE,GACvC,GAAKvI,KAAK21F,YAAYtgB,SAAtB,CAEA,GAAItgD,GAAI/0B,KAAK2Q,KAAKhQ,KAAK+tE,SAAS1uE,KAAK21F,YAAYljB,YAAclqE,EAAM80D,OACjEj9B,EAAOpgC,KAAK2Q,KAAKhQ,KAAKmuE,OAAO/5C,EAEjC/0B,MAAKi9E,cAAc78C,GAGnBpgC,KAAK2Q,KAAK49D,QAAQrhB,KAAK,cACrB7sD,GAAIL,KAAKgO,QAAQ3N,GACjB+/B,KAAM,GAAIv9B,MAAK7C,KAAKyyE,WAAWrtE,WAC/BmD,MAAOA,IAGTA,EAAM6uD,oBAQR0V,EAAWz6D,UAAU8hE,WAAa,SAAU5rE,GACrCvI,KAAK21F,YAAYtgB,WAGtBr1E,KAAK2Q,KAAK49D,QAAQrhB,KAAK,eACrB7sD,GAAIL,KAAKgO,QAAQ3N,GACjB+/B,KAAM,GAAIv9B,MAAK7C,KAAKyyE,WAAWrtE,WAC/BmD,MAAOA,IAGTA,EAAM6uD,oBASR0V,EAAW4F,qBAAuB,SAAUnqE,GAE1C,IADA,GAAII,GAASJ,EAAMI,OACZA,GAAQ,CACb,GAAIA,EAAOrF,eAAe,eACxB,MAAOqF,GAAO,cAEhBA,GAASA,EAAOG,WAGlB,MAAO,OAGTjJ,EAAOD,QAAUktE,GAIb,SAAUjtE,EAAQD,GAKtBA,EAAY,IACVy5E,QAAS,UACTj5C,KAAM,QAERxgC,EAAe,MAAIA,EAAY,GAC/BA,EAAe,MAAIA,EAAY,GAG/BA,EAAY,IACVy5E,QAAS,UACTj5C,KAAM,SAERxgC,EAAe,MAAIA,EAAY,GAC/BA,EAAe,MAAIA,EAAY,GAG/BA,EAAY,IACVy5E,QAAS,UACTj5C,KAAM,QAERxgC,EAAe,MAAIA,EAAY,GAC/BA,EAAe,MAAIA,EAAY,GAG/BA,EAAY,IACVy5E,QAAS,WACTj5C,KAAM,QAERxgC,EAAe,MAAIA,EAAY,GAG/BA,EAAY,IACVy5E,QAAS,SACTj5C,KAAM,SAERxgC,EAAe,MAAIA,EAAY,GAC/BA,EAAe,MAAIA,EAAY,GAC/BA,EAAe,MAAIA,EAAY,GAG/BA,EAAY,IACVy5E,QAAS,YACTj5C,KAAM,QAERxgC,EAAe,MAAIA,EAAY,IAI3B,SAAUC,EAAQD,EAASM,GAiB/B,QAAS2sE,GAAYl8D,EAAM3C,GACzBhO,KAAK2Q,KAAOA,EAGZ3Q,KAAK0tE,gBACHM,KAAK,EACL+nB,iBAAiB,EAEjBt0F,OAAQA,EACR0yB,QAASA,EACT9S,OAAQ,MAEVrhB,KAAKgO,QAAUrN,EAAKC,UAAWZ,KAAK0tE,gBACpC1tE,KAAK28B,OAAS,EAEd38B,KAAKmB,UAELnB,KAAKgxC,WAAWhjC,GA9BlB,GAAIrN,GAAOT,EAAoB,GAC3B0sE,EAAY1sE,EAAoB,KAChCuB,EAASvB,EAAoB,IAC7Bi0B,EAAUj0B,EAAoB,IA8BlC2sE,GAAYx6D,UAAY,GAAIu6D,GAM5BC,EAAYx6D,UAAUlR,QAAU,WAC9B,GAAI6wD,GAAM9hD,SAASC,cAAc,MACjC6hD,GAAItrD,UAAY,mBAChBsrD,EAAI3lD,MAAMkE,SAAW,WACrByhD,EAAI3lD,MAAM/F,IAAM,MAChB0rD,EAAI3lD,MAAMgE,OAAS,OAEnBrQ,KAAKgyD,IAAMA,GAMb6a,EAAYx6D,UAAU++B,QAAU,WAC9BpxC,KAAKgO,QAAQ+nF,iBAAkB,EAC/B/1F,KAAKkhD,SAELlhD,KAAK2Q,KAAO,MAQdk8D,EAAYx6D,UAAU2+B,WAAa,SAAUhjC,GACvCA,GAEFrN,EAAKsD,iBAAiB,MAAO,kBAAmB,SAAU,SAAU,WAAYjE,KAAKgO,QAASA,IAQlG6+D,EAAYx6D,UAAU6uC,OAAS,WAC7B,GAAIlhD,KAAKgO,QAAQ+nF,gBAAiB,CAChC,GAAI/sF,GAAShJ,KAAK2Q,KAAKs+C,IAAIosB,kBACvBr7E,MAAKgyD,IAAIlpD,YAAcE,IAErBhJ,KAAKgyD,IAAIlpD,YACX9I,KAAKgyD,IAAIlpD,WAAW5G,YAAYlC,KAAKgyD,KAEvChpD,EAAO0H,YAAY1Q,KAAKgyD,KAExBhyD,KAAKumD,QAGP,IAAI9/B,GAAMzmB,KAAKgO,QAAQvM,QAAO,GAAIoB,OAAOuC,UAAYpF,KAAK28B,QACtD5H,EAAI/0B,KAAK2Q,KAAKhQ,KAAK+tE,SAASjoD,GAE5BpF,EAASrhB,KAAKgO,QAAQmmB,QAAQn0B,KAAKgO,QAAQqT,OAC1CA,KACErhB,KAAK61F,SACRvwE,QAAQuuC,IAAI,6BAAgC7zD,KAAKgO,QAAQqT,OAAS,kEAClErhB,KAAK61F,QAAS,GAEhBx0E,EAASrhB,KAAKgO,QAAQmmB,QAAY,GAEpC,IAAIipD,GAAQ/7D,EAAOg4D,QAAU,IAAMh4D,EAAO+e,KAAO,KAAO3Z,EAAIhhB,OAAO,8BACnE23E,GAAQA,EAAMniE,OAAO,GAAG8L,cAAgBq2D,EAAM0Y,UAAU,GAEpD91F,KAAKgO,QAAQggE,IACfhuE,KAAKgyD,IAAI3lD,MAAMjG,MAAQ2uB,EAAI,KAE3B/0B,KAAKgyD,IAAI3lD,MAAMnG,KAAO6uB,EAAI,KAE5B/0B,KAAKgyD,IAAIorB,MAAQA,MAGbp9E,MAAKgyD,IAAIlpD,YACX9I,KAAKgyD,IAAIlpD,WAAW5G,YAAYlC,KAAKgyD,KAEvChyD,KAAKqjD,MAGP,QAAO,GAMTwpB,EAAYx6D,UAAUk0C,MAAQ,WAG5B,QAASrU,KACPH,EAAGsR,MAGH,IAAI7gD,GAAQuvC,EAAGphC,KAAK2qC,MAAMm5B,WAAW1iC,EAAGphC,KAAK29D,SAAS3yB,OAAOvrC,OAAO5N,MAChEkwD,EAAW,EAAIlwD,EAAQ,EACvBkwD,GAAW,KAAIA,EAAW,IAC1BA,EAAW,MAAMA,EAAW,KAEhC3gB,EAAGmP,SACHnP,EAAGphC,KAAK49D,QAAQrhB,KAAK,mBAGrBnb,EAAG2iC,iBAAmBr/B,WAAWnD,EAAQwgB,GAf3C,GAAI3gB,GAAK/xC,IAkBTkyC,MAMF26B,EAAYx6D,UAAUgxC,KAAO,eACGx/C,KAA1B7D,KAAK00E,mBACPt/B,aAAap1C,KAAK00E,wBACX10E,MAAK00E,mBAUhB7H,EAAYx6D,UAAUssE,eAAiB,SAAUv+C,GAC/C,GAAInzB,GAAItM,EAAKqE,QAAQo7B,EAAM,QAAQh7B,UAC/BqhB,GAAM,GAAI5jB,OAAOuC,SACrBpF,MAAK28B,OAAS1vB,EAAIwZ,EAClBzmB,KAAKkhD,UAOP2rB,EAAYx6D,UAAUusE,eAAiB,WACrC,MAAO,IAAI/7E,OAAK,GAAIA,OAAOuC,UAAYpF,KAAK28B,SAG9C98B,EAAOD,QAAUitE,GAIb,SAAUhtE,EAAQD,EAASM,GA6B/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAzBzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,IAET3C,EAAQ0wE,eAAazsE,EAErB,IAAIsZ,GAAajd,EAAoB,IAEjC+wC,EAAcpwC,EAAuBsc,GAErC5b,EAAWrB,EAAoB,IAE/BsB,EAAWX,EAAuBU,GAElCF,EAAQnB,EAAoB,IAE5BoB,EAAST,EAAuBQ,GAEhCwwF,EAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAIvCpxF,EAAOT,EAAoB,GAE3B81F,GAAa,EACbzlB,MAAa,GACbD,EAAa,sCAKbI,EAAY,WACd,QAASA,MACP,EAAIohB,EAA0B,SAAG9xF,KAAM0wE,GAkSzC,OAvRA,EAAIshB,EAAuB,SAAGthB,EAAW,OACvCnpE,IAAK,WACLhF,MAAO,SAAkByL,EAASioF,EAAkBC,GAClDF,GAAa,EACbzlB,EAAa0lB,CACb,IAAIE,GAAcF,CAKlB,YAJkBpyF,KAAdqyF,IACFC,EAAcF,EAAiBC,IAEjCxlB,EAAUztE,MAAM+K,EAASmoF,MAClBH,KAWTzuF,IAAK,QACLhF,MAAO,SAAeyL,EAASioF,EAAkBG,GAC/C,IAAK,GAAIltF,KAAU8E,GACbA,EAAQ1K,eAAe4F,IACzBwnE,EAAU2lB,MAAMntF,EAAQ8E,EAASioF,EAAkBG,MAczD7uF,IAAK,QACLhF,MAAO,SAAe2G,EAAQ8E,EAASioF,EAAkBG,OACtBvyF,KAA7BoyF,EAAiB/sF,QAAsDrF,KAA7BoyF,EAAiBK,QAC7D5lB,EAAU6lB,cAAcrtF,EAAQ+sF,EAAkBG,OACZvyF,KAA7BoyF,EAAiB/sF,QAAsDrF,KAA7BoyF,EAAiBK,QAEzB,WAAvC5lB,EAAUnrE,QAAQyI,EAAQ9E,SAAkErF,KAAzCoyF,EAA0B,QAAEO,SAEjF9lB,EAAU+lB,YAAYvtF,EAAQ8E,EAASioF,EAAkB,UAAWA,EAA0B,QAAEO,SAAUJ,GAE1G1lB,EAAU+lB,YAAYvtF,EAAQ8E,EAASioF,EAAkB,UAAWA,EAA0B,QAAGG,OAIzDvyF,KAAtCoyF,EAAiB/sF,GAAQstF,SAE3B9lB,EAAU+lB,YAAYvtF,EAAQ8E,EAASioF,EAAkB/sF,EAAQ+sF,EAAiB/sF,GAAQstF,SAAUJ,GAEpG1lB,EAAU+lB,YAAYvtF,EAAQ8E,EAASioF,EAAkB/sF,EAAQ+sF,EAAiB/sF,GAASktF,MAgBjG7uF,IAAK,cACLhF,MAAO,SAAqB2G,EAAQ8E,EAASioF,EAAkBS,EAAiBC,EAAcP,GAC5F,GAAIQ,GAAalmB,EAAUnrE,QAAQyI,EAAQ9E,IACvC2tF,EAAgBF,EAAaC,OACX/yF,KAAlBgzF,EAEuC,UAArCnmB,EAAUnrE,QAAQsxF,KAC4B,IAA5CA,EAAcjyF,QAAQoJ,EAAQ9E,KAChCoc,QAAQuuC,IAAI,iCAAmC3qD,EAAS,yBAAgCwnE,EAAUomB,MAAMD,GAAiB,SAAW7oF,EAAQ9E,GAAU,MAAQwnE,EAAUqmB,cAAcX,EAAMltF,GAASonE,GACrM0lB,GAAa,GAKS,WAAfY,GAA+C,YAApBF,IACpCN,EAAOz1F,EAAK+E,mBAAmB0wF,EAAMltF,GACrCwnE,EAAUztE,MAAM+K,EAAQ9E,GAAS+sF,EAAiBS,GAAkBN,QAErCvyF,KAAxB8yF,EAAkB,MAE3BrxE,QAAQuuC,IAAI,gCAAkC3qD,EAAS,gBAAkBwnE,EAAUomB,OAAM,EAAIx1F,EAAgB,SAAGq1F,IAAiB,eAAiBC,EAAa,MAAQ5oF,EAAQ9E,GAAU,IAAMwnE,EAAUqmB,cAAcX,EAAMltF,GAASonE,GACtO0lB,GAAa,MAIjBzuF,IAAK,UACLhF,MAAO,SAAiBX,GACtB,GAAIqD,OAAyB,KAAXrD,EAAyB,aAAc,EAAIJ,EAAkB,SAAGI,EAElF,OAAa,WAATqD,EACa,OAAXrD,EACK,OAELA,YAAkBuD,SACb,UAELvD,YAAkBC,QACb,SAELD,YAAkBe,QACb,SAELwB,MAAMC,QAAQxC,GACT,QAELA,YAAkBiB,MACb,WAEegB,KAApBjC,EAAOiH,SACF,OAEuB,IAA5BjH,EAAO8hB,iBACF,SAEF,SACW,WAATze,EACF,SACW,YAATA,EACF,UACW,WAATA,EACF,aACWpB,KAAToB,EACF,YAEFA,KAGTsC,IAAK,gBACLhF,MAAO,SAAuB2G,EAAQ8E,EAASooF,GAC7C,GAAIY,GAActmB,EAAUumB,cAAc/tF,EAAQ8E,EAASooF,GAAM,GAC7Dc,EAAexmB,EAAUumB,cAAc/tF,EAAQqnE,MAAgB,OAKpC1sE,KAA3BmzF,EAAYG,WACd7xE,QAAQuuC,IAAI,+BAAiC3qD,EAAS,QAAUwnE,EAAUqmB,cAAcC,EAAYZ,KAAMltF,EAAQ,IAAM,6CAA+C8tF,EAAYG,WAAa,SAAU7mB,GACjM4mB,EAAa58C,UAJI,GAIiC08C,EAAY18C,SAAW48C,EAAa58C,SAC/Fh1B,QAAQuuC,IAAI,+BAAiC3qD,EAAS,QAAUwnE,EAAUqmB,cAAcC,EAAYZ,KAAMltF,EAAQ,IAAM,uDAAyDwnE,EAAUqmB,cAAcG,EAAad,KAAMc,EAAaE,aAAc,IAAK9mB,GACnP0mB,EAAY18C,UAPI,EAQzBh1B,QAAQuuC,IAAI,+BAAiC3qD,EAAS,oBAAsB8tF,EAAYI,aAAe,KAAO1mB,EAAUqmB,cAAcC,EAAYZ,KAAMltF,GAASonE,GAEjKhrD,QAAQuuC,IAAI,+BAAiC3qD,EAAS,iCAAmCwnE,EAAUomB,OAAM,EAAIx1F,EAAgB,SAAG0M,IAAY0iE,EAAUqmB,cAAcX,EAAMltF,GAASonE,GAGrL0lB,GAAa,KAafzuF,IAAK,gBACLhF,MAAO,SAAuB2G,EAAQ8E,EAASooF,GAC7C,GAAIiB,GAAY1zF,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,IAAmBA,UAAU,GAE3EvB,EAAM,IACNg1F,EAAe,GACfE,KACAC,EAAkBruF,EAAO6e,cACzBovE,MAAatzF,EACjB,KAAK,GAAI2zF,KAAMxpF,GAAS,CACtB,GAAIssC,OAAW,EACf,QAA6Bz2C,KAAzBmK,EAAQwpF,GAAIhB,WAAwC,IAAda,EAAoB,CAC5D,GAAIttF,GAAS2mE,EAAUumB,cAAc/tF,EAAQ8E,EAAQwpF,GAAK72F,EAAK+E,mBAAmB0wF,EAAMoB,GACpFp1F,GAAM2H,EAAOuwC,WACf88C,EAAertF,EAAOqtF,aACtBE,EAAmBvtF,EAAOqsF,KAC1Bh0F,EAAM2H,EAAOuwC,SACb68C,EAAaptF,EAAOotF,iBAG6B,IAA/CK,EAAGzvE,cAAcnjB,QAAQ2yF,KAC3BJ,EAAaK,GAEfl9C,EAAWo2B,EAAU+mB,oBAAoBvuF,EAAQsuF,GAC7Cp1F,EAAMk4C,IACR88C,EAAeI,EACfF,EAAmB32F,EAAKmF,UAAUswF,GAClCh0F,EAAMk4C,GAIZ,OAAS88C,aAAcA,EAAchB,KAAMkB,EAAkBh9C,SAAUl4C,EAAK+0F,WAAYA,MAG1F5vF,IAAK,gBACLhF,MAAO,SAAuB6zF,EAAMltF,GAIlC,IAAK,GAHDy4B,GAASh+B,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,GAAK,6BAE7E+wD,EAAM,OAAS/yB,EAAS,gBACnB59B,EAAI,EAAGA,EAAIqyF,EAAKxyF,OAAQG,IAAK,CACpC,IAAK,GAAI8J,GAAI,EAAGA,EAAI9J,EAAI,EAAG8J,IACzB6mD,GAAO,IAETA,IAAO0hC,EAAKryF,GAAK,QAEnB,IAAK,GAAI2zF,GAAK,EAAGA,EAAKtB,EAAKxyF,OAAS,EAAG8zF,IACrChjC,GAAO,IAETA,IAAOxrD,EAAS,IAChB,KAAK,GAAI0J,GAAK,EAAGA,EAAKwjF,EAAKxyF,OAAS,EAAGgP,IAAM,CAC3C,IAAK,GAAI+kF,GAAM,EAAGA,EAAMvB,EAAKxyF,OAASgP,EAAI+kF,IACxCjjC,GAAO,IAETA,IAAO,MAET,MAAOA,GAAM,UAGfntD,IAAK,QACLhF,MAAO,SAAeyL,GACpB,OAAO,EAAIijC,EAAqB,SAAGjjC,GAASpE,QAAQ,gCAAiC,IAAIA,QAAQ,QAAS,SAa5GrC,IAAK,sBACLhF,MAAO,SAA6BiB,EAAGC,GACrC,GAAiB,IAAbD,EAAEI,OAAc,MAAOH,GAAEG,MAC7B,IAAiB,IAAbH,EAAEG,OAAc,MAAOJ,GAAEI,MAE7B,IAGIG,GAHA6zF,IAIJ,KAAK7zF,EAAI,EAAGA,GAAKN,EAAEG,OAAQG,IACzB6zF,EAAO7zF,IAAMA,EAIf,IAAI8J,EACJ,KAAKA,EAAI,EAAGA,GAAKrK,EAAEI,OAAQiK,IACzB+pF,EAAO,GAAG/pF,GAAKA,CAIjB,KAAK9J,EAAI,EAAGA,GAAKN,EAAEG,OAAQG,IACzB,IAAK8J,EAAI,EAAGA,GAAKrK,EAAEI,OAAQiK,IACrBpK,EAAEwX,OAAOlX,EAAI,IAAMP,EAAEyX,OAAOpN,EAAI,GAClC+pF,EAAO7zF,GAAG8J,GAAK+pF,EAAO7zF,EAAI,GAAG8J,EAAI,GAEjC+pF,EAAO7zF,GAAG8J,GAAKpL,KAAKL,IAAIw1F,EAAO7zF,EAAI,GAAG8J,EAAI,GAAK,EAC/CpL,KAAKL,IAAIw1F,EAAO7zF,GAAG8J,EAAI,GAAK,EAC5B+pF,EAAO7zF,EAAI,GAAG8J,GAAK,GAKzB,OAAO+pF,GAAOn0F,EAAEG,QAAQJ,EAAEI,YAGvB8sE,IAGT9wE,GAAiB,QAAI8wE,EACrB9wE,EAAQ0wE,WAAaA,GAIjB,SAAUzwE,EAAQD,GAItB6E,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAST,IAAI+kB,GAAS,SACTuwE,EAAO,UACPtzE,EAAS,SAGT3iB,EAAS,SAKT2uE,GACFqM,WACE1uE,SAAW4pF,QAAWD,GACtB/wF,QAAUgxF,QAAWD,EAAME,SAAY,YACvC7hD,WAAa+Y,IARP,OASNunC,UAAY50F,OAAQA,EAAQk2F,QAAWD,EAAME,SAAY,aAI3DxY,OAASj4D,OAAQA,GACjB0mD,KAAO8pB,QAAWD,EAAMh0F,UAAa,aACrCwqE,aACE0F,QAAU+jB,QAAWD,GACrBl7D,QAAUpY,OAAQA,EAAQ1gB,UAAa,aACvC2yF,UAAY50F,OAAQA,IAEtB64E,gBAAkBqd,QAAWD,EAAMh0F,UAAa,aAChD6yE,kBAAoBohB,QAAWD,EAAMh0F,UAAa,aAClD8pE,YAAcmqB,QAAWD,GACzBpqB,gBAAkBlpD,OAAQA,GAC1Bg4D,YAAcub,QAAWD,GACzB5G,gBAAkB3pE,OAAQA,EAAQjgB,MA5BxB,SA6BV44E,UACExvD,KAAOqnE,QAAWD,EAAMh0F,UAAa,aACrC6vC,QAAUokD,QAAWD,EAAMh0F,UAAa,aACxCs8E,aAAe2X,QAAWD,EAAMh0F,UAAa,aAC7Cq8E,YAAc4X,QAAWD,EAAMh0F,UAAa,aAC5Cu8E,eAAiB0X,QAAWD,EAAMh0F,UAAa,aAC/C2yF,UAAYsB,QAAWD,EAAMj2F,OAAQA,IAEvC4kD,KAAOjiC,OAAQA,EAAQgJ,KApCd,OAoC0BjG,OAAQA,EAAQ7lB,OAjCxC,UAkCXgE,QACEqkF,aACElvD,aAAetT,OAAQA,EAAQzjB,UAAa,aAC5C82B,QAAUrT,OAAQA,EAAQzjB,UAAa,aACvC62B,QAAUpT,OAAQA,EAAQzjB,UAAa,aACvCk2B,MAAQzS,OAAQA,EAAQzjB,UAAa,aACrC6rB,SAAWpI,OAAQA,EAAQzjB,UAAa,aACxCmtB,KAAO1J,OAAQA,EAAQzjB,UAAa,aACpC4rB,MAAQnI,OAAQA,EAAQzjB,UAAa,aACrCioB,OAASxE,OAAQA,EAAQzjB,UAAa,aACtCgoB,MAAQvE,OAAQA,EAAQzjB,UAAa,aACrC2yF,UAAY50F,OAAQA,EAAQm2F,SAAY,aAE1ChO,aACEnvD,aAAetT,OAAQA,EAAQzjB,UAAa,aAC5C82B,QAAUrT,OAAQA,EAAQzjB,UAAa,aACvC62B,QAAUpT,OAAQA,EAAQzjB,UAAa,aACvCk2B,MAAQzS,OAAQA,EAAQzjB,UAAa,aACrC6rB,SAAWpI,OAAQA,EAAQzjB,UAAa,aACxCmtB,KAAO1J,OAAQA,EAAQzjB,UAAa,aACpC4rB,MAAQnI,OAAQA,EAAQzjB,UAAa,aACrCioB,OAASxE,OAAQA,EAAQzjB,UAAa,aACtCgoB,MAAQvE,OAAQA,EAAQzjB,UAAa,aACrC2yF,UAAY50F,OAAQA,EAAQm2F,SAAY,aAE1CvB,UAAY50F,OAAQA,IAEtBH,QAAUs2F,SAAY,YACtBlY,YAAcv4D,OAAQA,EAAQywE,SAAY,YAC1C1X,eACE5vD,KAAOqnE,QAAWD,EAAMh0F,UAAa,aACrC6vC,QAAUokD,QAAWD,EAAMh0F,UAAa,aACxCkvC,OAAS+kD,QAAWD,EAAMh0F,UAAa,aACvC2yF,UAAYsB,QAAWD,EAAMj2F,OAAQA,IAEvC69E,gBAAkBsY,SAAY,YAC9B1nF,QAAUiX,OAAQA,EAAQ/C,OAAQA,GAClCiqD,aACEjoB,OAASh5B,KA3EF,OA2EchJ,OAAQA,EAAQ+C,OAAQA,EAAQ7lB,OAxE5C,UAyET+kD,KAAOj5B,KA5EA,OA4EYhJ,OAAQA,EAAQ+C,OAAQA,EAAQ7lB,OAzE1C,UA0ETw2E,QAAU3wD,OAAQA,GAClBkvE,UAAY50F,OAAQA,EAAQyF,MA/EpB,UAiFV24E,sBAAwB8X,QAAWD,GACnCx2E,QAAUiG,OAAQA,GAClB6M,SACEmiE,SAAW0B,IA/EL,OAgFNxB,UAAY50F,OAAQA,IAEtB2jD,QACEsoB,MAAQtpD,OAAQA,GAChB3V,MACEwrC,YAAc71B,OAAQA,EAAQ1gB,UAAa,aAC3Cw2C,UAAY91B,OAAQA,EAAQ1gB,UAAa,aACzC2yF,UAAY50F,OAAQA,EAAQ2iB,OAAQA,IAEtCiyE,UAAY50F,OAAQA,EAAQ2iB,OAAQA,IAEtCliB,KAAOkrB,KA/FE,OA+FUhJ,OAAQA,EAAQ+C,OAAQA,EAAQ7lB,OA5FxC,UA6FXqsE,WAAavpD,OAAQA,EAAQ+C,OAAQA,GACrC0rE,eAAiBzuE,OAAQA,GACzBniB,KAAOmrB,KAlGE,OAkGUhJ,OAAQA,EAAQ+C,OAAQA,EAAQ7lB,OA/FxC,UAgGXssE,WAAaxpD,OAAQA,EAAQ+C,OAAQA,GACrCqsD,UAAYmkB,QAAWD,GACvB9X,aAAe+X,QAAWD,GAC1BzO,qBAAuB0O,QAAWD,GAClCvX,OAASyX,SAAY,YACrBxX,UAAYwX,SAAY,YACxBvX,QAAUuX,SAAY,YACtBrX,UAAYqX,SAAY,YACxBtX,UAAYsX,SAAY,YACxBpX,YAAcoX,SAAY,YAC1BnX,aAAemX,SAAY,YAC3BlX,eAAiBkX,SAAY,YAC7BhlD,OAASglD,SAAY,YACrBnqB,aACEC,MAAQvmD,OAAQA,EAAQzjB,UAAa,aACrC+K,MAAQ0Y,OAAQA,EAAQzjB,UAAa,aACrC2yF,UAAYlvE,OAAQA,EAAQ1lB,OAAQA,IAEtCk+E,YAAcgY,QAAWD,GACzB9B,iBAAmB+B,QAAWD,GAC9B9E,iBAAmB+E,QAAWD,GAC9B/E,iBAAmBgF,QAAWD,GAC9BnyE,OAASoyE,QAAWD,GACpBrY,gBAAkBsY,QAAWD,GAC7BllB,MAAQolB,SAAY,WAAYE,KAAQ,QACxC1xC,OAASh5B,KA5HA,OA4HYhJ,OAAQA,EAAQ+C,OAAQA,EAAQ7lB,OAzH1C,UA0HXgvF,UAAYsH,SAAY,YACxB/nD,eAAiB+nD,SAAY,YAC7BhH,sBAAwBzpE,OAAQA,EAAQywE,SAAY,YACpDjX,cAAgBgX,QAAWD,GAC3Bx+C,SACE0nC,aAAe+W,QAAWD,GAC1B7W,gBAAkB15D,QAAW,MAAO,SACpCkvE,UAAY50F,OAAQA,IAEtBq/E,yBACEwP,UAAYsH,SAAY,YACxBvB,UAAYsB,QAAWD,EAAMj2F,OAAQA,IAEvC6sE,UACEjsE,OAAS8kB,OAAQA,EAAQzjB,UAAa,aACtC0O,MAAQgS,OAAQA,EAAQ1gB,UAAa,aACrC2yF,UAAY50F,OAAQA,IAEtBqD,MAAQqiB,OAAQA,GAChBlX,OAASkX,OAAQA,EAAQ/C,OAAQA,GACjCqvD,UAAYkkB,QAAWD,GACvBphB,SAAWnvD,QAAS,UAAW,SAAU,UAAW,KACpDwsD,SAAWvvD,OAAQA,GACnBsvD,SAAWtvD,OAAQA,GAEnBiyE,UAAY50F,OAAQA,IAGlB4uE,GACF3+D,QACE0tE,OAAQ,SAAU,OAAQ,SAC1B3/C,WAAW,EACX+tC,YAAY,EACZ4O,YAAY,EAEZ0D,UACExvD,KAAK,EACLijB,QAAQ,EACRysC,aAAa,EACbD,YAAY,GAEd15B,IAAK,GACL/gD,QACEqkF,aACElvD,YAAa,MACbD,OAAQ,IACRD,OAAQ,QACRX,KAAM,QACNrK,QAAS,QACTsB,IAAK,IACLvB,KAAM,IACN3D,MAAO,MACPD,KAAM,QAERk+D,aACEnvD,YAAa,WACbD,OAAQ,eACRD,OAAQ,aACRX,KAAM,aACNrK,QAAS,YACTsB,IAAK,YACLvB,KAAM,YACN3D,MAAO,OACPD,KAAM,KAKVqsE,iBAAiB,EACjB7nF,OAAQ,GAERgR,OAAQ,GACRkkC,QACEsoB,MAAO,GAAI,EAAG,IAAK,GACnBj/D,MACEwrC,YAAa,GAAI,EAAG,IAAK,GACzBC,UAAW,GAAI,EAAG,IAAK,KAG3Bh4C,IAAK,GACLyrE,UAAW,GACXklB,eAAgB,EAAG,EAAG,GAAI,GAC1B5wF,IAAK,GACL2rE,UAAW,GACX4F,UAAU,EACVoM,aAAa,EACbqJ,qBAAqB,EAOrBxb,aACEC,MAAO,OAAQ,SAAU,OACzBj/D,MAAO,SAAU,QAEnBkxE,YAAY,EACZiW,iBAAiB,EACjBhD,iBAAiB,EACjBD,iBAAiB,EACjBptE,OAAO,EACP85D,gBAAgB,EAEhBj5B,MAAO,GAMPu6B,cAAc,EACdznC,SACE0nC,aAAa,EACbC,eAAgB,QAElBC,yBAAyB,EACzBh8E,MAAO,MAAO,QAAS,QAAS,cAChCmL,MAAO,OACPwjE,UAAU,EACV6C,SAAU,UAAW,SAAU,UAAW,IAC1C3C,SAAU,SAAiB,GAAI,SAAiB,GAChDD,SAAU,GAAI,GAAI,SAAiB,IAIvCj0E,GAAQ2wE,WAAaA,EACrB3wE,EAAQ4wE,iBAAmBA,GAIvB,SAAU3wE,EAAQD,EAASM,GAwB/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GApBzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAI4a,GAAajd,EAAoB,IAEjC+wC,EAAcpwC,EAAuBsc,GAErC5b,EAAWrB,EAAoB,IAE/BsB,EAAWX,EAAuBU,GAElCswF,EAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAIvCpxF,EAAOT,EAAoB,GAE3Bi4F,EAAcj4F,EAAoB,KAAc,QAiBhDuwE,EAAe,WACjB,QAASA,GAAa2nB,EAAcC,EAAkB7nB,GACpD,GAAI8nB,GAAa30F,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,GAAK,GACrF,EAAImuF,EAA0B,SAAG9xF,KAAMywE,GAEvCzwE,KAAKgJ,OAASovF,EACdp4F,KAAKu4F,kBACLv4F,KAAKk2C,UAAYmiD,EACjBr4F,KAAKw4F,eAAgB,EAErBx4F,KAAKgO,WACLhO,KAAKy4F,aAAc,EACnBz4F,KAAK04F,aAAe,EACpB14F,KAAK0tE,gBACHx/D,SAAS,EACTpH,QAAQ,EACRovC,cAAWryC,GACX80F,YAAY,GAEdh4F,EAAKC,OAAOZ,KAAKgO,QAAShO,KAAK0tE,gBAE/B1tE,KAAKwwE,iBAAmBA,EACxBxwE,KAAK44F,iBACL54F,KAAK64F,eACL74F,KAAK84F,YACL94F,KAAK+4F,WAAa,EAClB/4F,KAAKg5F,gBACLh5F,KAAKi5F,YAAc,GAAId,GAAYG,GACnCt4F,KAAK43D,YAAU/zD,GAmuBjB,OAxtBA,EAAImuF,EAAuB,SAAGvhB,IAC5BlpE,IAAK,aACLhF,MAAO,SAAoByL,GACzB,OAAgBnK,KAAZmK,EAAuB,CAEzBhO,KAAKg5F,gBACLh5F,KAAKk5F,cAEL,IAAIhrF,IAAU,CACS,iBAAZF,GACThO,KAAKgO,QAAQlH,OAASkH,EACbA,YAAmB7J,OAC5BnE,KAAKgO,QAAQlH,OAASkH,EAAQjH,OACkE,gBAAnE,KAAZiH,EAA0B,aAAc,EAAIxM,EAAkB,SAAGwM,SACxDnK,KAAtBmK,EAAQkoC,YACVl2C,KAAKgO,QAAQkoC,UAAYloC,EAAQkoC,eAEZryC,KAAnBmK,EAAQlH,SACV9G,KAAKgO,QAAQlH,OAASkH,EAAQlH,YAELjD,KAAvBmK,EAAQ2qF,aACV34F,KAAKgO,QAAQ2qF,WAAa3qF,EAAQ2qF,gBAEZ90F,KAApBmK,EAAQE,UACVA,EAAUF,EAAQE,UAEQ,iBAAZF,IAChBhO,KAAKgO,QAAQlH,QAAS,EACtBoH,EAAUF,GACkB,kBAAZA,KAChBhO,KAAKgO,QAAQlH,OAASkH,EACtBE,GAAU,IAEgB,IAAxBlO,KAAKgO,QAAQlH,SACfoH,GAAU,GAGZlO,KAAKgO,QAAQE,QAAUA,EAEzBlO,KAAKm5F,YAGP5xF,IAAK,mBACLhF,MAAO,SAA0Bq2F,GAC/B54F,KAAK44F,cAAgBA,GACQ,IAAzB54F,KAAKgO,QAAQE,UACflO,KAAKm5F,aAC0Bt1F,KAA3B7D,KAAKgO,QAAQkoC,YACfl2C,KAAKk2C,UAAYl2C,KAAKgO,QAAQkoC,WAEhCl2C,KAAKmB,cAUToG,IAAK,UACLhF,MAAO,WACL,GAAI62F,GAAQp5F,IAEZA,MAAKm5F,SACLn5F,KAAKu4F,iBAEL,IAAIzxF,GAAS9G,KAAKgO,QAAQlH,OACtBg4C,EAAU,EACVgzB,GAAO,CACX,KAAK,GAAI5oE,KAAUlJ,MAAKwwE,iBAClBxwE,KAAKwwE,iBAAiBltE,eAAe4F,KACvClJ,KAAKw4F,eAAgB,EACrB1mB,GAAO,EACe,kBAAXhrE,IACTgrE,EAAOhrE,EAAOoC,MACd4oE,EAAOA,GAAQ9xE,KAAKq5F,cAAcr5F,KAAKwwE,iBAAiBtnE,IAAUA,IAAS,KACvD,IAAXpC,IAA+C,IAA5BA,EAAOlC,QAAQsE,KAC3C4oE,GAAO,IAGI,IAATA,IACF9xE,KAAKw4F,eAAgB,EAGjB15C,EAAU,GACZ9+C,KAAKs5F,cAGPt5F,KAAKu5F,YAAYrwF,GAGjBlJ,KAAKq5F,cAAcr5F,KAAKwwE,iBAAiBtnE,IAAUA,KAErD41C,IAIJ,KAAgC,IAA5B9+C,KAAKgO,QAAQ2qF,WAAqB,CACpC,GAAIa,GAAiBtpF,SAASC,cAAc,MAC5CqpF,GAAe9yF,UAAY,sCAC3B8yF,EAAer3C,UAAY,mBAC3Bq3C,EAAe52C,QAAU,WACvBw2C,EAAMK,iBAERD,EAAe9pB,YAAc,WAC3B8pB,EAAe9yF,UAAY,6CAE7B8yF,EAAeE,WAAa,WAC1BF,EAAe9yF,UAAY,uCAG7B1G,KAAK25F,iBAAmBzpF,SAASC,cAAc;oDAC/CnQ,KAAK25F,iBAAiBjzF,UAAY,gDAElC1G,KAAK64F,YAAYh0F,KAAK7E,KAAK25F,kBAC3B35F,KAAK64F,YAAYh0F,KAAK20F,GAGxBx5F,KAAK45F,WAUPryF,IAAK,QACLhF,MAAO,WACLvC,KAAK43D,QAAU1nD,SAASC,cAAc,OACtCnQ,KAAK43D,QAAQlxD,UAAY,4BACzB1G,KAAKk2C,UAAUxlC,YAAY1Q,KAAK43D,QAChC,KAAK,GAAI7zD,GAAI,EAAGA,EAAI/D,KAAK64F,YAAYj1F,OAAQG,IAC3C/D,KAAK43D,QAAQlnD,YAAY1Q,KAAK64F,YAAY90F,GAG5C/D,MAAK65F,wBASPtyF,IAAK,SACLhF,MAAO,WACL,IAAK,GAAIwB,GAAI,EAAGA,EAAI/D,KAAK64F,YAAYj1F,OAAQG,IAC3C/D,KAAK43D,QAAQ11D,YAAYlC,KAAK64F,YAAY90F,QAGvBF,KAAjB7D,KAAK43D,UACP53D,KAAKk2C,UAAUh0C,YAAYlC,KAAK43D,SAChC53D,KAAK43D,YAAU/zD,IAEjB7D,KAAK64F,eAEL74F,KAAKk5F,kBAWP3xF,IAAK,YACLhF,MAAO,SAAmB6zF,GAExB,IAAK,GADD52D,GAAOx/B,KAAK44F,cACP70F,EAAI,EAAGA,EAAIqyF,EAAKxyF,OAAQG,IAAK,CACpC,OAAsBF,KAAlB27B,EAAK42D,EAAKryF,IAEP,CACLy7B,MAAO37B,EACP,OAHA27B,EAAOA,EAAK42D,EAAKryF,IAMrB,MAAOy7B,MAWTj4B,IAAK,YACLhF,MAAO,SAAmB6zF,GACxB,IAA2B,IAAvBp2F,KAAKw4F,cAAwB,CAC/B,GAAI5pF,GAAOsB,SAASC,cAAc,MAClCvB,GAAKlI,UAAY,iDAAmD0vF,EAAKxyF,MAEzE,KAAK,GAAIk2F,GAAOn2F,UAAUC,OAAQi1F,EAAc10F,MAAM21F,EAAO,EAAIA,EAAO,EAAI,GAAIC,EAAO,EAAGA,EAAOD,EAAMC,IACrGlB,EAAYkB,EAAO,GAAKp2F,UAAUo2F,EAOpC,OAJAlB,GAAY3xF,QAAQ,SAAUW,GAC5B+G,EAAK8B,YAAY7I,KAEnB7H,KAAK64F,YAAYh0F,KAAK+J,GACf5O,KAAK64F,YAAYj1F,OAE1B,MAAO,MAUT2D,IAAK,cACLhF,MAAO,SAAqB0S,GAC1B,GAAI+kF,GAAM9pF,SAASC,cAAc,MACjC6pF,GAAItzF,UAAY,sCAChBszF,EAAI73C,UAAYltC,EAChBjV,KAAKs5F,aAAcU,MAarBzyF,IAAK,aACLhF,MAAO,SAAoB0S,EAAMmhF,GAC/B,GAAI6D,GAAct2F,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,IAAmBA,UAAU,GAE7Eq2F,EAAM9pF,SAASC,cAAc,MAOjC,OANA6pF,GAAItzF,UAAY,kDAAoD0vF,EAAKxyF,OAEvEo2F,EAAI73C,WADc,IAAhB83C,EACc,SAAWhlF,EAAO,YAElBA,EAAO,IAElB+kF,KAYTzyF,IAAK,gBACLhF,MAAO,SAAuBoD,EAAKpD,EAAO6zF,GACxC,GAAInT,GAAS/yE,SAASC,cAAc,SACpC8yE,GAAOv8E,UAAY,qCACnB,IAAIwzF,GAAgB,MACNr2F,KAAVtB,IAC0B,IAAxBoD,EAAIf,QAAQrC,KACd23F,EAAgBv0F,EAAIf,QAAQrC,GAIhC,KAAK,GAAIwB,GAAI,EAAGA,EAAI4B,EAAI/B,OAAQG,IAAK,CACnC,GAAImF,GAASgH,SAASC,cAAc,SACpCjH,GAAO3G,MAAQoD,EAAI5B,GACfA,IAAMm2F,IACRhxF,EAAOi8E,SAAW,YAEpBj8E,EAAOi5C,UAAYx8C,EAAI5B,GACvBk/E,EAAOvyE,YAAYxH,GAGrB,GAAI6oC,GAAK/xC,IACTijF,GAAOh8B,SAAW,WAChBlV,EAAGooD,QAAQn6F,KAAKuC,MAAO6zF,GAGzB,IAAIhmD,GAAQpwC,KAAKo6F,WAAWhE,EAAKA,EAAKxyF,OAAS,GAAIwyF,EACnDp2F,MAAKs5F,UAAUlD,EAAMhmD,EAAO6yC,MAY9B17E,IAAK,aACLhF,MAAO,SAAoBoD,EAAKpD,EAAO6zF,GACrC,GAAIhtF,GAAezD,EAAI,GACnBvD,EAAMuD,EAAI,GACVtD,EAAMsD,EAAI,GACV4M,EAAO5M,EAAI,GACX21C,EAAQprC,SAASC,cAAc,QACnCmrC,GAAM50C,UAAY,oCAClB,KACE40C,EAAMr2C,KAAO,QACbq2C,EAAMl5C,IAAMA,EACZk5C,EAAMj5C,IAAMA,EACZ,MAAOuP,IACT0pC,EAAM/oC,KAAOA,CAGb,IAAI8nF,GAAc,GACdC,EAAa,CAEjB,QAAcz2F,KAAVtB,EAAqB,CAEnBA,EAAQ,GADC,IACIA,EAAiBH,GAChCk5C,EAAMl5C,IAAMK,KAAKoX,KAFN,IAEWtX,GACtB+3F,EAAah/C,EAAMl5C,IACnBi4F,EAAc,mBACL93F,EALE,IAKeH,IAC1Bk5C,EAAMl5C,IAAMK,KAAKoX,KAAKtX,EANX,KAOX+3F,EAAah/C,EAAMl5C,IACnBi4F,EAAc,mBARH,IAUT93F,EAAiBF,GAAe,IAARA,IAC1Bi5C,EAAMj5C,IAAMI,KAAKoX,KAXN,IAWWtX,GACtB+3F,EAAah/C,EAAMj5C,IACnBg4F,EAAc,mBAEhB/+C,EAAM/4C,MAAQA,MAEd+4C,GAAM/4C,MAAQ6G,CAGhB,IAAI2X,GAAQ7Q,SAASC,cAAc,QACnC4Q,GAAMra,UAAY,0CAClBqa,EAAMxe,MAAQ+4C,EAAM/4C,KAEpB,IAAIwvC,GAAK/xC,IACTs7C,GAAM2L,SAAW,WACflmC,EAAMxe,MAAQvC,KAAKuC,MAAMwvC,EAAGooD,QAAQt4F,OAAO7B,KAAKuC,OAAQ6zF,IAE1D96C,EAAMi/C,QAAU,WACdx5E,EAAMxe,MAAQvC,KAAKuC,MAGrB,IAAI6tC,GAAQpwC,KAAKo6F,WAAWhE,EAAKA,EAAKxyF,OAAS,GAAIwyF,GAC/CzI,EAAY3tF,KAAKs5F,UAAUlD,EAAMhmD,EAAOkL,EAAOv6B,EAG/B,MAAhBs5E,GAAsBr6F,KAAKg5F,aAAarL,KAAe2M,IACzDt6F,KAAKg5F,aAAarL,GAAa2M,EAC/Bt6F,KAAKw6F,YAAYH,EAAa1M,OAYlCpmF,IAAK,cACLhF,MAAO,SAAqB+kB,EAAQvU,GAClC,GAAI0nF,GAASz6F,IAEb,KAAyB,IAArBA,KAAKy4F,cAA+C,IAAvBz4F,KAAKw4F,eAA0Bx4F,KAAK04F,aAAe14F,KAAK+4F,WAAY,CACnG,GAAIiB,GAAM9pF,SAASC,cAAc,MACjC6pF,GAAI35F,GAAK,0BACT25F,EAAItzF,UAAY,0BAChBszF,EAAI73C,UAAY76B,EAChB0yE,EAAIp3C,QAAU,WACZ63C,EAAOvB,gBAETl5F,KAAK04F,cAAgB,EACrB14F,KAAK84F,UAAa4B,KAAMV,EAAKjnF,MAAOA,OAUxCxL,IAAK,eACLhF,MAAO,eACsBsB,KAAvB7D,KAAK84F,SAAS4B,OAChB16F,KAAK84F,SAAS4B,KAAK5xF,WAAW5G,YAAYlC,KAAK84F,SAAS4B,MACxDtlD,aAAap1C,KAAK84F,SAAS6B,aAC3BvlD,aAAap1C,KAAK84F,SAAS8B,eAC3B56F,KAAK84F,gBAUTvxF,IAAK,qBACLhF,MAAO,WACL,GAAIs4F,GAAS76F,IAEb,QAA2B6D,KAAvB7D,KAAK84F,SAAS4B,KAAoB,CACpC,GAAII,GAAuB96F,KAAK64F,YAAY74F,KAAK84F,SAAS/lF,OACtD29B,EAAOoqD,EAAqB70F,uBAChCjG,MAAK84F,SAAS4B,KAAKruF,MAAMnG,KAAOwqC,EAAKxqC,KAAO,KAC5ClG,KAAK84F,SAAS4B,KAAKruF,MAAM/F,IAAMoqC,EAAKpqC,IAAM,GAAK,KAC/C4J,SAASS,KAAKD,YAAY1Q,KAAK84F,SAAS4B,MACxC16F,KAAK84F,SAAS6B,YAActlD,WAAW,WACrCwlD,EAAO/B,SAAS4B,KAAKruF,MAAMlC,QAAU,GACpC,MACHnK,KAAK84F,SAAS8B,cAAgBvlD,WAAW,WACvCwlD,EAAO3B,gBACN,UAaP3xF,IAAK,gBACLhF,MAAO,SAAuB6G,EAAc7G,EAAO6zF,GACjD,GAAI2E,GAAW7qF,SAASC,cAAc,QACtC4qF,GAAS91F,KAAO,WAChB81F,EAASr0F,UAAY,wCACrBq0F,EAASC,QAAU5xF,MACLvF,KAAVtB,IACFw4F,EAASC,QAAUz4F,EACfA,IAAU6G,IACyF,gBAAxE,KAAjBA,EAA+B,aAAc,EAAI5H,EAAkB,SAAG4H,IAC5E7G,IAAU6G,EAAa8E,SACzBlO,KAAKu4F,eAAe1zF,MAAOuxF,KAAMA,EAAM7zF,MAAOA,IAGhDvC,KAAKu4F,eAAe1zF,MAAOuxF,KAAMA,EAAM7zF,MAAOA,KAKpD,IAAIwvC,GAAK/xC,IACT+6F,GAAS9zC,SAAW,WAClBlV,EAAGooD,QAAQn6F,KAAKg7F,QAAS5E,GAG3B,IAAIhmD,GAAQpwC,KAAKo6F,WAAWhE,EAAKA,EAAKxyF,OAAS,GAAIwyF,EACnDp2F,MAAKs5F,UAAUlD,EAAMhmD,EAAO2qD,MAY9BxzF,IAAK,iBACLhF,MAAO,SAAwB6G,EAAc7G,EAAO6zF,GAClD,GAAI2E,GAAW7qF,SAASC,cAAc,QACtC4qF,GAAS91F,KAAO,OAChB81F,EAASr0F,UAAY,oCACrBq0F,EAASx4F,MAAQA,EACbA,IAAU6G,GACZpJ,KAAKu4F,eAAe1zF,MAAOuxF,KAAMA,EAAM7zF,MAAOA,GAGhD,IAAIwvC,GAAK/xC,IACT+6F,GAAS9zC,SAAW,WAClBlV,EAAGooD,QAAQn6F,KAAKuC,MAAO6zF,GAGzB,IAAIhmD,GAAQpwC,KAAKo6F,WAAWhE,EAAKA,EAAKxyF,OAAS,GAAIwyF,EACnDp2F,MAAKs5F,UAAUlD,EAAMhmD,EAAO2qD,MAY9BxzF,IAAK,kBACLhF,MAAO,SAAyBoD,EAAKpD,EAAO6zF,GAC1C,GAAI6E,GAASj7F,KAETk7F,EAAev1F,EAAI,GACnBq0F,EAAM9pF,SAASC,cAAc,MACjC5N,OAAkBsB,KAAVtB,EAAsB24F,EAAe34F,EAE/B,SAAVA,GACFy3F,EAAItzF,UAAY,0CAChBszF,EAAI3tF,MAAMytC,gBAAkBv3C,GAE5By3F,EAAItzF,UAAY,+CAGlBnE,MAAkBsB,KAAVtB,EAAsB24F,EAAe34F,EAC7Cy3F,EAAIp3C,QAAU,WACZq4C,EAAOE,iBAAiB54F,EAAOy3F,EAAK5D,GAGtC,IAAIhmD,GAAQpwC,KAAKo6F,WAAWhE,EAAKA,EAAKxyF,OAAS,GAAIwyF,EACnDp2F,MAAKs5F,UAAUlD,EAAMhmD,EAAO4pD,MAa9BzyF,IAAK,mBACLhF,MAAO,SAA0BA,EAAOy3F,EAAK5D,GAC3C,GAAIgF,GAASp7F,IAGbg6F,GAAIp3C,QAAU,aAEd5iD,KAAKi5F,YAAYoC,SAASrB,GAC1Bh6F,KAAKi5F,YAAYnnB,OAEjB9xE,KAAKi5F,YAAYqC,SAAS/4F,GAC1BvC,KAAKi5F,YAAYsC,kBAAkB,SAAUrxF,GAC3C,GAAIsxF,GAAc,QAAUtxF,EAAML,EAAI,IAAMK,EAAMJ,EAAI,IAAMI,EAAMzG,EAAI,IAAMyG,EAAM1G,EAAI,GACtFw2F,GAAI3tF,MAAMytC,gBAAkB0hD,EAC5BJ,EAAOjB,QAAQqB,EAAapF,KAI9Bp2F,KAAKi5F,YAAYwC,iBAAiB,WAChCzB,EAAIp3C,QAAU,WACZw4C,EAAOD,iBAAiB54F,EAAOy3F,EAAK5D,SAa1C7uF,IAAK,gBACLhF,MAAO,SAAuBzB,GAC5B,GAAIs1F,GAAOzyF,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,MACtE+3F,EAAY/3F,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,IAAmBA,UAAU,GAE3EmuE,GAAO,EACPhrE,EAAS9G,KAAKgO,QAAQlH,OACtB60F,GAAe,CACnB,KAAK,GAAIC,KAAU96F,GACjB,GAAIA,EAAIwC,eAAes4F,GAAS,CAC9B9pB,GAAO,CACP,IAAIljE,GAAO9N,EAAI86F,GACXC,EAAUl7F,EAAK+E,mBAAmB0wF,EAAMwF,EAc5C,IAbsB,kBAAX90F,KAII,KAHbgrE,EAAOhrE,EAAO80F,EAAQxF,OAIdxnF,YAAgBzK,SAA0B,gBAATyK,IAAqC,iBAATA,IAAsBA,YAAgBnK,UACvGzE,KAAKw4F,eAAgB,EACrB1mB,EAAO9xE,KAAKq5F,cAAczqF,EAAMitF,GAAS,GACzC77F,KAAKw4F,eAA8B,IAAdkD,IAKd,IAAT5pB,EAAgB,CAClB6pB,GAAe,CACf,IAAIp5F,GAAQvC,KAAK87F,UAAUD,EAE3B,IAAIjtF,YAAgBzK,OAClBnE,KAAK+7F,aAAantF,EAAMrM,EAAOs5F,OAC1B,IAAoB,gBAATjtF,GAChB5O,KAAKg8F,eAAeptF,EAAMrM,EAAOs5F,OAC5B,IAAoB,iBAATjtF,GAChB5O,KAAKi8F,cAAcrtF,EAAMrM,EAAOs5F,OAC3B,IAAIjtF,YAAgBnK,QAAQ,CAEjC,GAAIy3F,IAAO,CAOX,KANiC,IAA7B9F,EAAKxxF,QAAQ,YACX5E,KAAK44F,cAAcuD,QAAQC,SAAWR,IACxCM,GAAO,IAIE,IAATA,EAEF,OAAqBr4F,KAAjB+K,EAAKV,QAAuB,CAC9B,GAAImuF,GAAc17F,EAAK+E,mBAAmBm2F,EAAS,WAC/CS,EAAet8F,KAAK87F,UAAUO,EAClC,KAAqB,IAAjBC,EAAuB,CACzB,GAAIlsD,GAAQpwC,KAAKo6F,WAAWwB,EAAQC,GAAS,EAC7C77F,MAAKs5F,UAAUuC,EAASzrD,GACxBurD,EAAe37F,KAAKq5F,cAAczqF,EAAMitF,IAAYF,MAEpD37F,MAAKi8F,cAAcrtF,EAAM0tF,EAAcT,OAEpC,CACL,GAAIU,GAASv8F,KAAKo6F,WAAWwB,EAAQC,GAAS,EAC9C77F,MAAKs5F,UAAUuC,EAASU,GACxBZ,EAAe37F,KAAKq5F,cAAczqF,EAAMitF,IAAYF,OAIxDr2E,SAAQk3E,MAAM,0BAA2B5tF,EAAMgtF,EAAQC,IAK/D,MAAOF,MAaTp0F,IAAK,eACLhF,MAAO,SAAsBoD,EAAKpD,EAAO6zF,GACjB,gBAAXzwF,GAAI,IAA8B,UAAXA,EAAI,IACpC3F,KAAKy8F,gBAAgB92F,EAAKpD,EAAO6zF,GAC7BzwF,EAAI,KAAOpD,GACbvC,KAAKu4F,eAAe1zF,MAAOuxF,KAAMA,EAAM7zF,MAAOA,KAErB,gBAAXoD,GAAI,IACpB3F,KAAK08F,cAAc/2F,EAAKpD,EAAO6zF,GAC3BzwF,EAAI,KAAOpD,GACbvC,KAAKu4F,eAAe1zF,MAAOuxF,KAAMA,EAAM7zF,MAAOA,KAErB,gBAAXoD,GAAI,KACpB3F,KAAK28F,WAAWh3F,EAAKpD,EAAO6zF,GACxBzwF,EAAI,KAAOpD,GACbvC,KAAKu4F,eAAe1zF,MAAOuxF,KAAMA,EAAM7zF,MAAOV,OAAOU,SAa3DgF,IAAK,UACLhF,MAAO,SAAiBA,EAAO6zF,GAC7B,GAAIpoF,GAAUhO,KAAK48F,kBAAkBr6F,EAAO6zF,EAExCp2F,MAAKgJ,OAAO2H,MAAQ3Q,KAAKgJ,OAAO2H,KAAK49D,SAAWvuE,KAAKgJ,OAAO2H,KAAK49D,QAAQrhB,MAC3EltD,KAAKgJ,OAAO2H,KAAK49D,QAAQrhB,KAAK,eAAgBl/C,GAEhDhO,KAAKy4F,aAAc,EACnBz4F,KAAKgJ,OAAOgoC,WAAWhjC,MAGzBzG,IAAK,oBACLhF,MAAO,SAA2BA,EAAO6zF,GACvC,GAAIyG,GAAal5F,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,MAE5EizE,EAAUimB,CAGdt6F,GAAkB,SAAVA,GAA0BA,EAClCA,EAAkB,UAAVA,GAA4BA,CAEpC,KAAK,GAAIwB,GAAI,EAAGA,EAAIqyF,EAAKxyF,OAAQG,IACf,WAAZqyF,EAAKryF,SACkBF,KAArB+yE,EAAQwf,EAAKryF,MACf6yE,EAAQwf,EAAKryF,QAEXA,IAAMqyF,EAAKxyF,OAAS,EACtBgzE,EAAUA,EAAQwf,EAAKryF,IAEvB6yE,EAAQwf,EAAKryF,IAAMxB,EAIzB,OAAOs6F,MAGTt1F,IAAK,gBACLhF,MAAO,WACL,GAAIyL,GAAUhO,KAAK88F,YACnB98F,MAAK25F,iBAAiBx3C,UAAY,uBAAwB,EAAIlR,EAAqB,SAAGjjC,EAAS,KAAM,GAAK,YAG5GzG,IAAK,aACLhF,MAAO,WAEL,IAAK,GADDyL,MACKjK,EAAI,EAAGA,EAAI/D,KAAKu4F,eAAe30F,OAAQG,IAC9C/D,KAAK48F,kBAAkB58F,KAAKu4F,eAAex0F,GAAGxB,MAAOvC,KAAKu4F,eAAex0F,GAAGqyF,KAAMpoF,EAEpF,OAAOA,OAGJyiE,IAGT7wE,GAAiB,QAAI6wE,GAIjB,SAAU5wE,EAAQD,EAASM,GAoB/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAhBzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAI4a,GAAajd,EAAoB,IAEjC+wC,EAAcpwC,EAAuBsc,GAErC00E,EAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAIvC/iD,EAAS9uC,EAAoB,KAC7Bm6E,EAAan6E,EAAoB,KACjCS,EAAOT,EAAoB,GAE3Bi4F,EAAc,WAChB,QAASA,KACP,GAAIG,GAAa30F,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,GAAK,GACrF,EAAImuF,EAA0B,SAAG9xF,KAAMm4F,GAEvCn4F,KAAKs4F,WAAaA,EAClBt4F,KAAK+8F,WAAY,EACjB/8F,KAAKg9F,mBAAsBjoE,EAAG,MAASpG,EAAG,OAC1C3uB,KAAK6J,EAAI,IAAM,IACf7J,KAAKkK,OAAUL,EAAG,IAAKC,EAAG,IAAKrG,EAAG,IAAKD,EAAG,GAC1CxD,KAAKi9F,cAAYp5F,GACjB7D,KAAKk9F,cAAiBrzF,EAAG,IAAKC,EAAG,IAAKrG,EAAG,IAAKD,EAAG,GACjDxD,KAAKm9F,kBAAgBt5F,GACrB7D,KAAKo9F,SAAU,EAGfp9F,KAAKq9F,eAAiB,aACtBr9F,KAAKs9F,cAAgB,aAGrBt9F,KAAKmB,UAwkBP,OA/jBA,EAAI6wF,EAAuB,SAAGmG,IAC5B5wF,IAAK,WACLhF,MAAO,SAAkB2zC,OACHryC,KAAhB7D,KAAK82D,SACP92D,KAAK82D,OAAO1lB,UACZpxC,KAAK82D,WAASjzD,IAEhB7D,KAAKk2C,UAAYA,EACjBl2C,KAAKk2C,UAAUxlC,YAAY1Q,KAAKi+C,OAChCj+C,KAAKu9F,cAELv9F,KAAK8iD,cASPv7C,IAAK,oBACLhF,MAAO,SAA2B4E,GAChC,GAAwB,kBAAbA,GAGT,KAAM,IAAI9C,OAAM,8EAFhBrE,MAAKq9F,eAAiBl2F,KAY1BI,IAAK,mBACLhF,MAAO,SAA0B4E,GAC/B,GAAwB,kBAAbA,GAGT,KAAM,IAAI9C,OAAM,+EAFhBrE,MAAKs9F,cAAgBn2F,KAMzBI,IAAK,iBACLhF,MAAO,SAAwB2H,GAC7B,GAAIszF,IAAeC,MAAO,UAAWC,KAAM,UAAWC,SAAU,UAAWC,WAAY,UAAWnzF,KAAM,UAAWozF,UAAW,UAAWrzF,MAAO,UAAWszF,KAAM,UAAWC,SAAU,UAAWC,YAAa,UAAWC,cAAe,UAAWC,kBAAmB,UAAWC,KAAM,UAAWC,YAAa,UAAWC,KAAM,UAAWC,KAAM,UAAWC,aAAc,UAAWC,WAAY,UAAWC,cAAe,UAAWC,YAAa,UAAWC,SAAU,UAAWC,cAAe,UAAWC,UAAW,UAAWC,eAAgB,UAAWC,UAAW,UAAWC,UAAW,UAAWC,UAAW,UAAWC,cAAe,UAAWC,gBAAiB,UAAWC,OAAQ,UAAWC,eAAgB,UAAWC,UAAW,UAAWC,eAAgB,UAAWC,iBAAkB,UAAWC,QAAS,UAAWC,UAAW,UAAWC,UAAW,UAAWC,UAAW,UAAWC,eAAgB,UAAWC,gBAAiB,UAAWC,UAAW,UAAWC,WAAY,UAAWC,WAAY,UAAWC,OAAQ,UAAWC,OAAQ,UAAWC,MAAO,UAAWC,KAAM,UAAWC,QAAS,UAAWC,aAAc,UAAWC,WAAY,UAAWC,QAAS,UAAWC,YAAa,UAAWC,YAAa,UAAWC,aAAc,UAAWC,WAAY,UAAWC,aAAc,UAAWC,WAAY,UAAWC,UAAW,UAAWC,WAAY,UAAWC,YAAa,UAAWC,OAAQ,UAAWC,MAAO,UAAWC,SAAU,UAAWC,UAAW,UAAWC,YAAa,UAAWC,cAAe,UAAWC,eAAgB,UAAWC,WAAY,UAAWC,UAAW,UAAWC,cAAe,UAAWC,aAAc,UAAWC,UAAW,UAAWC,UAAW,UAAWC,OAAQ,UAAWC,gBAAiB,UAAWC,UAAW,UAAWC,KAAM,UAAWC,UAAW,UAAWC,IAAK,UAAWC,UAAW,UAAWC,cAAe,UAAWC,QAAS,UAAWC,OAAQ,UAAWC,UAAW,UAAWC,QAAS,UAAWC,UAAW,UAAWC,KAAM,UAAWC,UAAW,UAAWC,UAAW,UAAWC,SAAU,UAAWC,WAAY,UAAWC,OAAQ,UAAWC,cAAe,UAAWC,WAAY,UAAWC,MAAO,UAAWC,UAAW,UAAWC,SAAU,UAAWC,MAAO,UAAWC,WAAY,UAAWC,MAAO,UAAWC,MAAO,UAAWC,WAAY,UAAWC,UAAW,UAAWC,WAAY,UAAWC,OAAQ,UAAWC,aAAc,UAAWC,MAAO,UAAWC,qBAAsB,UAAWC,QAAS,UAAW55F,IAAK,UAAW65F,QAAS,UAAWC,QAAS,UAAWC,SAAU,UAAWC,UAAW,UAAWC,OAAQ,UAAWC,QAAS,UAAWC,MAAO,UAAWC,WAAY,UAAWC,YAAa,UAAWC,OAAQ,UAAWC,UAAW,UAAWC,KAAM,UAAWC,KAAM,UAAWC,UAAW,UAAWC,YAAa,UAAWC,SAAU,UAAWC,OAAQ,UAAWC,UAAW,UAAWC,eAAgB,UAAWC,WAAY,UAAWC,cAAe,UAAWC,SAAU,UAAWC,SAAU,UAAWC,aAAc,UAAWC,YAAa,UAAWC,KAAM,UAAWC,OAAQ,UAAWC,YAAa,UAAWC,MAAO,UAAWC,MAAO,UACjgG,IAAqB,gBAAV/7F,GACT,MAAOszF,GAAWtzF,MAkBtB3C,IAAK,WACLhF,MAAO,SAAkB2H,GACvB,GAAIg8F,KAAaviG,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,KAAmBA,UAAU,EAEhF,IAAc,SAAVuG,EAAJ,CAIA,GAAIkD,OAAO,GAGP+4F,EAAYnmG,KAAKomG,eAAel8F,EAMpC,QALkBrG,KAAdsiG,IACFj8F,EAAQi8F,IAImB,IAAzBxlG,EAAK+B,SAASwH,IAChB,IAA+B,IAA3BvJ,EAAKkK,WAAWX,GAAiB,CACnC,GAAIm8F,GAAYn8F,EAAMG,OAAO,GAAGA,OAAO,EAAGH,EAAMtG,OAAS,GAAG+C,MAAM,IAClEyG,IAASvD,EAAGw8F,EAAU,GAAIv8F,EAAGu8F,EAAU,GAAI5iG,EAAG4iG,EAAU,GAAI7iG,EAAG,OAC1D,KAAgC,IAA5B7C,EAAKwM,YAAYjD,GAAiB,CAC3C,GAAIo8F,GAAap8F,EAAMG,OAAO,GAAGA,OAAO,EAAGH,EAAMtG,OAAS,GAAG+C,MAAM,IACnEyG,IAASvD,EAAGy8F,EAAW,GAAIx8F,EAAGw8F,EAAW,GAAI7iG,EAAG6iG,EAAW,GAAI9iG,EAAG8iG,EAAW,QACxE,KAA+B,IAA3B3lG,EAAKoK,WAAWb,GAAiB,CAC1C,GAAIq8F,GAAS5lG,EAAK8I,SAASS,EAC3BkD,IAASvD,EAAG08F,EAAO18F,EAAGC,EAAGy8F,EAAOz8F,EAAGrG,EAAG8iG,EAAO9iG,EAAGD,EAAG,QAGrD,IAAI0G,YAAiBzF,aACHZ,KAAZqG,EAAML,OAA+BhG,KAAZqG,EAAMJ,OAA+BjG,KAAZqG,EAAMzG,EAAiB,CAC3E,GAAI+iG,OAAoB3iG,KAAZqG,EAAM1G,EAAkB0G,EAAM1G,EAAI,KAC9C4J,IAASvD,EAAGK,EAAML,EAAGC,EAAGI,EAAMJ,EAAGrG,EAAGyG,EAAMzG,EAAGD,EAAGgjG,GAMtD,OAAa3iG,KAATuJ,EACF,KAAM,IAAI/I,OAAM,iIAAkI,EAAI4sC,EAAqB,SAAG/mC,GAE9KlK,MAAKymG,UAAUr5F,EAAM84F,OAUzB3+F,IAAK,OACLhF,MAAO,eACsBsB,KAAvB7D,KAAKs9F,gBACPt9F,KAAKs9F,gBACLt9F,KAAKs9F,kBAAgBz5F,IAGvB7D,KAAKo9F,SAAU,EACfp9F,KAAKi+C,MAAM5xC,MAAMoM,QAAU,QAC3BzY,KAAK0mG,wBAaPn/F,IAAK,QACLhF,MAAO,WACL,GAAI62F,GAAQp5F,MAKU,OAHF2D,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,KAAmBA,UAAU,MAIjF3D,KAAKm9F,cAAgBx8F,EAAKC,UAAWZ,KAAKkK,SAGvB,IAAjBlK,KAAKo9F,SACPp9F,KAAKq9F,eAAer9F,KAAKk9F,cAG3Bl9F,KAAKi+C,MAAM5xC,MAAMoM,QAAU,OAI3B48B,WAAW,eACmBxxC,KAAxBu1F,EAAMkE,gBACRlE,EAAMkE,gBACNlE,EAAMkE,kBAAgBz5F,KAEvB,MASL0D,IAAK,QACLhF,MAAO,WACLvC,KAAKq9F,eAAer9F,KAAKkK,OACzBlK,KAAKo9F,SAAU,EACfp9F,KAAK2mG,WASPp/F,IAAK,SACLhF,MAAO,WACLvC,KAAKo9F,SAAU,EACfp9F,KAAKq9F,eAAer9F,KAAKkK,OACzBlK,KAAK4mG,cAAc5mG,KAAKkK,UAS1B3C,IAAK,YACLhF,MAAO,eACsBsB,KAAvB7D,KAAKm9F,cACPn9F,KAAKs7F,SAASt7F,KAAKm9F,eAAe,GAElC0J,MAAM,wCAYVt/F,IAAK,YACLhF,MAAO,SAAmB6K,IAIL,OAHFzJ,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,KAAmBA,UAAU,MAI9E3D,KAAKk9F,aAAev8F,EAAKC,UAAWwM,IAGtCpN,KAAKkK,MAAQkD,CACb,IAAIpC,GAAMrK,EAAKmL,SAASsB,EAAKvD,EAAGuD,EAAKtD,EAAGsD,EAAK3J,GAEzCqjG,EAAe,EAAIrkG,KAAKunD,GACxBH,EAAS7pD,KAAK6J,EAAImB,EAAII,EACtB2pB,EAAI/0B,KAAKg9F,kBAAkBjoE,EAAI80B,EAASpnD,KAAKs6C,IAAI+pD,EAAe97F,EAAIG,GACpEwjB,EAAI3uB,KAAKg9F,kBAAkBruE,EAAIk7B,EAASpnD,KAAKw6C,IAAI6pD,EAAe97F,EAAIG,EAExEnL,MAAK+mG,oBAAoB16F,MAAMnG,KAAO6uB,EAAI,GAAM/0B,KAAK+mG,oBAAoBh2F,YAAc,KACvF/Q,KAAK+mG,oBAAoB16F,MAAM/F,IAAMqoB,EAAI,GAAM3uB,KAAK+mG,oBAAoB/jD,aAAe,KAEvFhjD,KAAK4mG,cAAcx5F,MAUrB7F,IAAK,cACLhF,MAAO,SAAqBA,GAC1BvC,KAAKkK,MAAM1G,EAAIjB,EAAQ,IACvBvC,KAAK4mG,cAAc5mG,KAAKkK,UAU1B3C,IAAK,iBACLhF,MAAO,SAAwBA,GAC7B,GAAIyI,GAAMrK,EAAKmL,SAAS9L,KAAKkK,MAAML,EAAG7J,KAAKkK,MAAMJ,EAAG9J,KAAKkK,MAAMzG,EAC/DuH,GAAIK,EAAI9I,EAAQ,GAChB,IAAI6K,GAAOzM,EAAKkM,SAAS7B,EAAIG,EAAGH,EAAII,EAAGJ,EAAIK,EAC3C+B,GAAQ,EAAIpN,KAAKkK,MAAM1G,EACvBxD,KAAKkK,MAAQkD,EACbpN,KAAK4mG,mBAUPr/F,IAAK,gBACLhF,MAAO,WACL,GAAI6K,GAAOzJ,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,GAAK3D,KAAKkK,MAEhFc,EAAMrK,EAAKmL,SAASsB,EAAKvD,EAAGuD,EAAKtD,EAAGsD,EAAK3J,GACzC6R,EAAMtV,KAAKgnG,kBAAkBjiD,WAAW,UACnBlhD,KAArB7D,KAAKinG,cACPjnG,KAAKs4F,YAAc9vF,OAAO0+F,kBAAoB,IAAM5xF,EAAI6xF,8BAAgC7xF,EAAI8xF,2BAA6B9xF,EAAI+xF,0BAA4B/xF,EAAIgyF,yBAA2BhyF,EAAIiyF,wBAA0B,IAExNjyF,EAAIkyF,aAAaxnG,KAAKs4F,WAAY,EAAG,EAAGt4F,KAAKs4F,WAAY,EAAG,EAG5D,IAAIt4E,GAAIhgB,KAAKgnG,kBAAkBj2F,YAC3B5F,EAAInL,KAAKgnG,kBAAkBhkD,YAC/B1tC,GAAI4vC,UAAU,EAAG,EAAGllC,EAAG7U,GAEvBmK,EAAImyF,aAAaznG,KAAKi9F,UAAW,EAAG,GACpC3nF,EAAI6wC,UAAY,eAAiB,EAAIn7C,EAAIK,GAAK,IAC9CiK,EAAIoyF,OAAO1nG,KAAKg9F,kBAAkBjoE,EAAG/0B,KAAKg9F,kBAAkBruE,EAAG3uB,KAAK6J,GACpEyL,EAAI0kC,OAEJh6C,KAAK2nG,gBAAgBplG,MAAQ,IAAMyI,EAAIK,EACvCrL,KAAK4nG,aAAarlG,MAAQ,IAAM6K,EAAK5J,EAErCxD,KAAK6nG,gBAAgBx7F,MAAMytC,gBAAkB,QAAU95C,KAAKk9F,aAAarzF,EAAI,IAAM7J,KAAKk9F,aAAapzF,EAAI,IAAM9J,KAAKk9F,aAAaz5F,EAAI,IAAMzD,KAAKk9F,aAAa15F,EAAI,IACjKxD,KAAK8nG,YAAYz7F,MAAMytC,gBAAkB,QAAU95C,KAAKkK,MAAML,EAAI,IAAM7J,KAAKkK,MAAMJ,EAAI,IAAM9J,KAAKkK,MAAMzG,EAAI,IAAMzD,KAAKkK,MAAM1G,EAAI,OASnI+D,IAAK,WACLhF,MAAO,WACLvC,KAAKgnG,kBAAkB36F,MAAM+D,MAAQ,OACrCpQ,KAAKgnG,kBAAkB36F,MAAMgE,OAAS,OAEtCrQ,KAAKgnG,kBAAkB52F,MAAQ,IAAMpQ,KAAKs4F,WAC1Ct4F,KAAKgnG,kBAAkB32F,OAAS,IAAMrQ,KAAKs4F,cAU7C/wF,IAAK,UACLhF,MAAO,WAYL,GAXAvC,KAAKi+C,MAAQ/tC,SAASC,cAAc,OACpCnQ,KAAKi+C,MAAMv3C,UAAY,mBAEvB1G,KAAK+nG,eAAiB73F,SAASC,cAAc,OAC7CnQ,KAAK+mG,oBAAsB72F,SAASC,cAAc,OAClDnQ,KAAK+mG,oBAAoBrgG,UAAY,eACrC1G,KAAK+nG,eAAer3F,YAAY1Q,KAAK+mG,qBAErC/mG,KAAKgnG,kBAAoB92F,SAASC,cAAc,UAChDnQ,KAAK+nG,eAAer3F,YAAY1Q,KAAKgnG,mBAEhChnG,KAAKgnG,kBAAkBjiD,WAOrB,CACL,GAAIzvC,GAAMtV,KAAKgnG,kBAAkBjiD,WAAW,KAC5C/kD,MAAKs4F,YAAc9vF,OAAO0+F,kBAAoB,IAAM5xF,EAAI6xF,8BAAgC7xF,EAAI8xF,2BAA6B9xF,EAAI+xF,0BAA4B/xF,EAAIgyF,yBAA2BhyF,EAAIiyF,wBAA0B,GAEtNvnG,KAAKgnG,kBAAkBjiD,WAAW,MAAMyiD,aAAaxnG,KAAKs4F,WAAY,EAAG,EAAGt4F,KAAKs4F,WAAY,EAAG,OAX1D,CACtC,GAAIr2C,GAAW/xC,SAASC,cAAc,MACtC8xC,GAAS51C,MAAMnC,MAAQ,MACvB+3C,EAAS51C,MAAM61C,WAAa,OAC5BD,EAAS51C,MAAMktC,QAAU,OACzB0I,EAASE,UAAY,mDACrBniD,KAAKgnG,kBAAkBt2F,YAAYuxC,GAQrCjiD,KAAK+nG,eAAerhG,UAAY,YAEhC1G,KAAKgoG,WAAa93F,SAASC,cAAc,OACzCnQ,KAAKgoG,WAAWthG,UAAY,cAE5B1G,KAAKioG,cAAgB/3F,SAASC,cAAc,OAC5CnQ,KAAKioG,cAAcvhG,UAAY,iBAE/B1G,KAAKkoG,SAAWh4F,SAASC,cAAc,OACvCnQ,KAAKkoG,SAASxhG,UAAY,YAE1B1G,KAAK4nG,aAAe13F,SAASC,cAAc,QAC3C,KACEnQ,KAAK4nG,aAAa3iG,KAAO,QACzBjF,KAAK4nG,aAAaxlG,IAAM,IACxBpC,KAAK4nG,aAAavlG,IAAM,MACxB,MAAOuP,IACT5R,KAAK4nG,aAAarlG,MAAQ,MAC1BvC,KAAK4nG,aAAalhG,UAAY,YAE9B1G,KAAK2nG,gBAAkBz3F,SAASC,cAAc,QAC9C,KACEnQ,KAAK2nG,gBAAgB1iG,KAAO,QAC5BjF,KAAK2nG,gBAAgBvlG,IAAM,IAC3BpC,KAAK2nG,gBAAgBtlG,IAAM,MAC3B,MAAOuP,IACT5R,KAAK2nG,gBAAgBplG,MAAQ,MAC7BvC,KAAK2nG,gBAAgBjhG,UAAY,YAEjC1G,KAAKgoG,WAAWt3F,YAAY1Q,KAAK4nG,cACjC5nG,KAAKioG,cAAcv3F,YAAY1Q,KAAK2nG,gBAEpC,IAAI51D,GAAK/xC,IACTA,MAAK4nG,aAAa3gD,SAAW,WAC3BlV,EAAGo2D,YAAYnoG,KAAKuC,QAEtBvC,KAAK4nG,aAAarN,QAAU,WAC1BxoD,EAAGo2D,YAAYnoG,KAAKuC,QAEtBvC,KAAK2nG,gBAAgB1gD,SAAW,WAC9BlV,EAAGq2D,eAAepoG,KAAKuC,QAEzBvC,KAAK2nG,gBAAgBpN,QAAU,WAC7BxoD,EAAGq2D,eAAepoG,KAAKuC,QAGzBvC,KAAKqoG,gBAAkBn4F,SAASC,cAAc,OAC9CnQ,KAAKqoG,gBAAgB3hG,UAAY,2BACjC1G,KAAKqoG,gBAAgBlmD,UAAY,cAEjCniD,KAAKsoG,aAAep4F,SAASC,cAAc,OAC3CnQ,KAAKsoG,aAAa5hG,UAAY,wBAC9B1G,KAAKsoG,aAAanmD,UAAY,WAE9BniD,KAAK8nG,YAAc53F,SAASC,cAAc,OAC1CnQ,KAAK8nG,YAAYphG,UAAY,gBAC7B1G,KAAK8nG,YAAY3lD,UAAY,MAE7BniD,KAAK6nG,gBAAkB33F,SAASC,cAAc,OAC9CnQ,KAAK6nG,gBAAgBnhG,UAAY,oBACjC1G,KAAK6nG,gBAAgB1lD,UAAY,UAEjCniD,KAAKuoG,aAAer4F,SAASC,cAAc,OAC3CnQ,KAAKuoG,aAAa7hG,UAAY,wBAC9B1G,KAAKuoG,aAAapmD,UAAY,SAC9BniD,KAAKuoG,aAAa3lD,QAAU5iD,KAAK2mG,MAAMrvC,KAAKt3D,MAAM,GAElDA,KAAKwoG,YAAct4F,SAASC,cAAc,OAC1CnQ,KAAKwoG,YAAY9hG,UAAY,uBAC7B1G,KAAKwoG,YAAYrmD,UAAY,QAC7BniD,KAAKwoG,YAAY5lD,QAAU5iD,KAAKyoG,OAAOnxC,KAAKt3D,MAE5CA,KAAK0oG,WAAax4F,SAASC,cAAc,OACzCnQ,KAAK0oG,WAAWhiG,UAAY,sBAC5B1G,KAAK0oG,WAAWvmD,UAAY,OAC5BniD,KAAK0oG,WAAW9lD,QAAU5iD,KAAK2oG,MAAMrxC,KAAKt3D,MAE1CA,KAAK4oG,WAAa14F,SAASC,cAAc,OACzCnQ,KAAK4oG,WAAWliG,UAAY,sBAC5B1G,KAAK4oG,WAAWzmD,UAAY,YAC5BniD,KAAK4oG,WAAWhmD,QAAU5iD,KAAK6oG,UAAUvxC,KAAKt3D,MAE9CA,KAAKi+C,MAAMvtC,YAAY1Q,KAAK+nG,gBAC5B/nG,KAAKi+C,MAAMvtC,YAAY1Q,KAAKkoG,UAC5BloG,KAAKi+C,MAAMvtC,YAAY1Q,KAAKqoG,iBAC5BroG,KAAKi+C,MAAMvtC,YAAY1Q,KAAKioG,eAC5BjoG,KAAKi+C,MAAMvtC,YAAY1Q,KAAKsoG,cAC5BtoG,KAAKi+C,MAAMvtC,YAAY1Q,KAAKgoG,YAC5BhoG,KAAKi+C,MAAMvtC,YAAY1Q,KAAK8nG,aAC5B9nG,KAAKi+C,MAAMvtC,YAAY1Q,KAAK6nG,iBAE5B7nG,KAAKi+C,MAAMvtC,YAAY1Q,KAAKuoG,cAC5BvoG,KAAKi+C,MAAMvtC,YAAY1Q,KAAKwoG,aAC5BxoG,KAAKi+C,MAAMvtC,YAAY1Q,KAAK0oG,YAC5B1oG,KAAKi+C,MAAMvtC,YAAY1Q,KAAK4oG,eAS9BrhG,IAAK,cACLhF,MAAO,WACL,GAAIk4F,GAASz6F,IAEbA,MAAK41F,QACL51F,KAAK8oG,SACL9oG,KAAK82D,OAAS,GAAI9nB,GAAOhvC,KAAKgnG,mBAC9BhnG,KAAK82D,OAAOr/C,IAAI,SAASsH,KAAMg8C,QAAQ,IAEvCsf,EAAW/C,QAAQt3E,KAAK82D,OAAQ,SAAUvuD,GACxCkyF,EAAOsO,cAAcxgG,KAEvBvI,KAAK82D,OAAOzlB,GAAG,MAAO,SAAU9oC,GAC9BkyF,EAAOsO,cAAcxgG,KAEvBvI,KAAK82D,OAAOzlB,GAAG,WAAY,SAAU9oC,GACnCkyF,EAAOsO,cAAcxgG,KAEvBvI,KAAK82D,OAAOzlB,GAAG,UAAW,SAAU9oC,GAClCkyF,EAAOsO,cAAcxgG,KAEvBvI,KAAK82D,OAAOzlB,GAAG,SAAU,SAAU9oC,GACjCkyF,EAAOsO,cAAcxgG,QAUzBhB,IAAK,qBACLhF,MAAO,WACL,IAAuB,IAAnBvC,KAAK+8F,UAAqB,CAC5B,GAAIznF,GAAMtV,KAAKgnG,kBAAkBjiD,WAAW,UACnBlhD,KAArB7D,KAAKinG,cACPjnG,KAAKs4F,YAAc9vF,OAAO0+F,kBAAoB,IAAM5xF,EAAI6xF,8BAAgC7xF,EAAI8xF,2BAA6B9xF,EAAI+xF,0BAA4B/xF,EAAIgyF,yBAA2BhyF,EAAIiyF,wBAA0B,IAExNjyF,EAAIkyF,aAAaxnG,KAAKs4F,WAAY,EAAG,EAAGt4F,KAAKs4F,WAAY,EAAG,EAG5D,IAAIt4E,GAAIhgB,KAAKgnG,kBAAkBj2F,YAC3B5F,EAAInL,KAAKgnG,kBAAkBhkD,YAC/B1tC,GAAI4vC,UAAU,EAAG,EAAGllC,EAAG7U,EAGvB,IAAI4pB,OAAI,GACJpG,MAAI,GACJg3B,MAAM,GACNqjD,MAAM,EACVhpG,MAAKg9F,mBAAsBjoE,EAAO,GAAJ/U,EAAS2O,EAAO,GAAJxjB,GAC1CnL,KAAK6J,EAAI,IAAOmW,CAChB,IAAI8mF,GAAe,EAAIrkG,KAAKunD,GAAK,IAE7Bi/C,EAAO,EAAIjpG,KAAK6J,EAChBO,MAAM,EACV,KAAKu7C,EAAM,EAAGA,EAAM,IAAKA,IACvB,IAAKqjD,EAAM,EAAGA,EAAMhpG,KAAK6J,EAAGm/F,IAC1Bj0E,EAAI/0B,KAAKg9F,kBAAkBjoE,EAAIi0E,EAAMvmG,KAAKs6C,IAAI+pD,EAAenhD,GAC7Dh3B,EAAI3uB,KAAKg9F,kBAAkBruE,EAAIq6E,EAAMvmG,KAAKw6C,IAAI6pD,EAAenhD,GAC7Dv7C,EAAMzJ,EAAKkM,SAAS84C,GAPb,EAAI,KAOqBqjD,EAAMC,EAAM,GAC5C3zF,EAAI6wC,UAAY,OAAS/7C,EAAIP,EAAI,IAAMO,EAAIN,EAAI,IAAMM,EAAI3G,EAAI,IAC7D6R,EAAI4zF,SAASn0E,EAAI,GAAKpG,EAAI,GAAK,EAAG,EAGtCrZ,GAAIuwC,YAAc,gBAClBvwC,EAAIoyF,OAAO1nG,KAAKg9F,kBAAkBjoE,EAAG/0B,KAAKg9F,kBAAkBruE,EAAG3uB,KAAK6J,GACpEyL,EAAI2kC,SAEJj6C,KAAKi9F,UAAY3nF,EAAI6zF,aAAa,EAAG,EAAGnpF,EAAG7U,GAE7CnL,KAAK+8F,WAAY,KAWnBx1F,IAAK,gBACLhF,MAAO,SAAuBgG,GAC5B,GAAImoC,GAAO1wC,KAAK+nG,eAAe9hG,wBAC3BC,EAAOqC,EAAMozC,OAAO5mB,EAAI2b,EAAKxqC,KAC7BI,EAAMiC,EAAMozC,OAAOhtB,EAAI+hB,EAAKpqC,IAE5B8iG,EAAU,GAAMppG,KAAK+nG,eAAe/kD,aACpCqmD,EAAU,GAAMrpG,KAAK+nG,eAAeh3F,YAEpCgkB,EAAI7uB,EAAOmjG,EACX16E,EAAIroB,EAAM8iG,EAEVrsC,EAAQt6D,KAAKq8D,MAAM/pC,EAAGpG,GACtBk7B,EAAS,IAAOpnD,KAAKL,IAAIK,KAAKusD,KAAKj6B,EAAIA,EAAIpG,EAAIA,GAAI06E,GAEnDpa,EAASxsF,KAAKw6C,IAAI8f,GAASlT,EAASu/C,EACpCE,EAAU7mG,KAAKs6C,IAAIggB,GAASlT,EAASw/C,CAEzCrpG,MAAK+mG,oBAAoB16F,MAAM/F,IAAM2oF,EAAS,GAAMjvF,KAAK+mG,oBAAoB/jD,aAAe,KAC5FhjD,KAAK+mG,oBAAoB16F,MAAMnG,KAAOojG,EAAU,GAAMtpG,KAAK+mG,oBAAoBh2F,YAAc,IAG7F,IAAI5F,GAAI4xD,GAAS,EAAIt6D,KAAKunD,GAC1B7+C,GAAIA,EAAI,EAAIA,EAAI,EAAIA,CACpB,IAAIC,GAAIy+C,EAAS7pD,KAAK6J,EAClBmB,EAAMrK,EAAKmL,SAAS9L,KAAKkK,MAAML,EAAG7J,KAAKkK,MAAMJ,EAAG9J,KAAKkK,MAAMzG,EAC/DuH,GAAIG,EAAIA,EACRH,EAAII,EAAIA,CACR,IAAIgC,GAAOzM,EAAKkM,SAAS7B,EAAIG,EAAGH,EAAII,EAAGJ,EAAIK,EAC3C+B,GAAQ,EAAIpN,KAAKkK,MAAM1G,EACvBxD,KAAKkK,MAAQkD,EAGbpN,KAAK6nG,gBAAgBx7F,MAAMytC,gBAAkB,QAAU95C,KAAKk9F,aAAarzF,EAAI,IAAM7J,KAAKk9F,aAAapzF,EAAI,IAAM9J,KAAKk9F,aAAaz5F,EAAI,IAAMzD,KAAKk9F,aAAa15F,EAAI,IACjKxD,KAAK8nG,YAAYz7F,MAAMytC,gBAAkB,QAAU95C,KAAKkK,MAAML,EAAI,IAAM7J,KAAKkK,MAAMJ,EAAI,IAAM9J,KAAKkK,MAAMzG,EAAI,IAAMzD,KAAKkK,MAAM1G,EAAI,QAG9H20F,IAGTv4F,GAAiB,QAAIu4F,GAIjB,SAAUt4F,EAAQD,EAASM,GAgC/B,QAAS8rE,GAAQ91B,EAAWjE,EAAOs7B,EAAQv/D,GAEzC,KAAM7J,MAAMC,QAAQmpE,IAAWA,YAAkBl/B,IAAWk/B,YAAkBj/B,KAAai/B,YAAkB9oE,QAAQ,CACnH,GAAI+oE,GAAgBx/D,CACpBA,GAAUu/D,EACVA,EAASC,EAKPx/D,GAAWA,EAAQy/D,gBACrBnoD,QAAQH,KAAK,uHAGf,IAAI4sB,GAAK/xC,IACTA,MAAK0tE,gBACHnnB,MAAO,KACPC,IAAK,KAELmnB,YAAY,EAEZC,aACEC,KAAM,SACNj/D,KAAM,UAGRnN,OAAQA,EAER2O,MAAO,KACPC,OAAQ,KACRy9D,UAAW,KACXC,UAAW,MAEb/tE,KAAKgO,QAAUrN,EAAK+D,cAAe1E,KAAK0tE,gBAGxC1tE,KAAKmB,QAAQ+0C,GAGbl2C,KAAKqsE,cAELrsE,KAAK2Q,MACHs+C,IAAKjvD,KAAKivD,IACVqf,SAAUtuE,KAAKkE,MACfqqE,SACEl9B,GAAIrxC,KAAKqxC,GAAGimB,KAAKt3D,MACjBwxC,IAAKxxC,KAAKwxC,IAAI8lB,KAAKt3D,MACnBktD,KAAMltD,KAAKktD,KAAKoK,KAAKt3D,OAEvBwuE,eACA7tE,MACE+tE,SAAU38B,EAAG48B,UAAUrX,KAAKvlB,GAC5B68B,eAAgB78B,EAAG88B,gBAAgBvX,KAAKvlB,GACxC+8B,OAAQ/8B,EAAGg9B,QAAQzX,KAAKvlB,GACxBi9B,aAAcj9B,EAAGk9B,cAAc3X,KAAKvlB,KAKxC/xC,KAAKs7C,MAAQ,GAAI/D,GAAMv3C,KAAK2Q,MAC5B3Q,KAAKqsE,WAAWxnE,KAAK7E,KAAKs7C,OAC1Bt7C,KAAK2Q,KAAK2qC,MAAQt7C,KAAKs7C,MAGvBt7C,KAAKyuE,SAAW,GAAInB,GAASttE,KAAK2Q,MAClC3Q,KAAKqsE,WAAWxnE,KAAK7E,KAAKyuE,UAI1BzuE,KAAKmvE,YAAc,GAAItC,GAAY7sE,KAAK2Q,MACxC3Q,KAAKqsE,WAAWxnE,KAAK7E,KAAKmvE,aAG1BnvE,KAAKupG,UAAY,GAAIl8B,GAAUrtE,KAAK2Q,MAEpC3Q,KAAKqsE,WAAWxnE,KAAK7E,KAAKupG,WAE1BvpG,KAAKqvE,UAAY,KACjBrvE,KAAKsvE,WAAa,KAGlBtvE,KAAKqxC,GAAG,MAAO,SAAU9oC,GACvBwpC,EAAGmb,KAAK,QAASnb,EAAGw9B,mBAAmBhnE,MAEzCvI,KAAKqxC,GAAG,YAAa,SAAU9oC,GAC7BwpC,EAAGmb,KAAK,cAAenb,EAAGw9B,mBAAmBhnE,MAE/CvI,KAAKivD,IAAIvvD,KAAK+vE,cAAgB,SAAUlnE,GACtCwpC,EAAGmb,KAAK,cAAenb,EAAGw9B,mBAAmBhnE,KAI3CyF,GACFhO,KAAKgxC,WAAWhjC,GAIdu/D,GACFvtE,KAAKmwE,UAAU5C,GAIbt7B,GACFjyC,KAAKowE,SAASn+B,GAIhBjyC,KAAKqwE,UAvIP,GAEI5uE,IAFUvB,EAAoB,IACrBA,EAAoB,KACpBA,EAAoB,KAC7BS,EAAOT,EAAoB,GAC3BmuC,EAAUnuC,EAAoB,IAC9BouC,EAAWpuC,EAAoB,IAC/Bq3C,EAAQr3C,EAAoB,KAC5BgsE,EAAOhsE,EAAoB,KAC3BotE,EAAWptE,EAAoB,KAC/B2sE,EAAc3sE,EAAoB,KAClC4sE,EAAa5sE,EAAoB,KACjCmtE,EAAYntE,EAAoB,KAEhCowE,EAAapwE,EAAoB,KAAKowE,WACtCC,EAAarwE,EAAoB,KAAKqwE,WACtCC,EAAmBtwE,EAAoB,KAAKswE,iBAE5CC,EAAevwE,EAAoB,KAAc,QACjDwwE,EAAYxwE,EAAoB,KAAc,OAyHlD8rE,GAAQ35D,UAAY,GAAI65D,GAExBF,EAAQ35D,UAAU2+B,WAAa,SAAUhjC,IAGpB,IADF0iE,EAAUI,SAAS9iE,EAASuiE,IAE3CjrD,QAAQuuC,IAAI,2DAA4Dyc,GAG1EpE,EAAK75D,UAAU2+B,WAAWzwC,KAAKP,KAAMgO,IAOvCg+D,EAAQ35D,UAAU+9D,SAAW,SAAUn+B,GACrC,GAGIi/B,GAHAs4B,EAAgC,MAAlBxpG,KAAKqvE,SAsBvB,IAfE6B,EAHGj/B,EAEMA,YAAiB5D,IAAW4D,YAAiB3D,GACzC2D,EAGA,GAAI5D,GAAQ4D,GACvBhtC,MACEshD,MAAO,OACPC,IAAK,UARI,KAcfxmD,KAAKqvE,UAAY6B,EACjBlxE,KAAKupG,WAAavpG,KAAKupG,UAAUn5B,SAASc,GAEtCs4B,EACF,OAA0B3lG,IAAtB7D,KAAKgO,QAAQu4C,WAA0C1iD,IAApB7D,KAAKgO,QAAQw4C,IAAkB,CACpE,GAAID,OAA8B1iD,IAAtB7D,KAAKgO,QAAQu4C,MAAqBvmD,KAAKgO,QAAQu4C,MAAQ,KAC/DC,MAA0B3iD,IAApB7D,KAAKgO,QAAQw4C,IAAmBxmD,KAAKgO,QAAQw4C,IAAM,IAC7DxmD,MAAKgwE,UAAUzpB,EAAOC,GAAOypB,WAAW,QAExCjwE,MAAKkwE,KAAMD,WAAW,KAS5BjE,EAAQ35D,UAAU89D,UAAY,SAAU5C,GAEtC,GAAI2D,EAIFA,GAHG3D,EAEMA,YAAkBl/B,IAAWk/B,YAAkBj/B,GAC3Ci/B,EAGA,GAAIl/B,GAAQk/B,GALZ,KAQfvtE,KAAKsvE,WAAa4B,EAClBlxE,KAAKupG,UAAUp5B,UAAUe,IAS3BlF,EAAQ35D,UAAUo3F,UAAY,SAAUz2B,EAAS5iE,EAAOC,GAOtD,WANcxM,KAAVuM,IACFA,EAAQ,QAEKvM,KAAXwM,IACFA,EAAS,QAE4BxM,KAAnC7D,KAAKupG,UAAUh8B,OAAOyF,GACjBhzE,KAAKupG,UAAUh8B,OAAOyF,GAASy2B,UAAUr5F,EAAOC,GAEhD,sBAAwB2iE,EAAU,KAS7ChH,EAAQ35D,UAAUq3F,eAAiB,SAAU12B,GAC3C,WAAuCnvE,KAAnC7D,KAAKupG,UAAUh8B,OAAOyF,KACjBhzE,KAAKupG,UAAUh8B,OAAOyF,GAASlsB,cAAkEjjD,KAAtD7D,KAAKupG,UAAUv7F,QAAQu/D,OAAO/8D,WAAWwiE,IAA+E,GAArDhzE,KAAKupG,UAAUv7F,QAAQu/D,OAAO/8D,WAAWwiE,MAYlKhH,EAAQ35D,UAAUk/D,aAAe,WAC/B,GAAInvE,GAAM,KACNC,EAAM,IAGV,KAAK,GAAI2wE,KAAWhzE,MAAKupG,UAAUh8B,OACjC,GAAIvtE,KAAKupG,UAAUh8B,OAAOjqE,eAAe0vE,IACO,GAA1ChzE,KAAKupG,UAAUh8B,OAAOyF,GAASlsB,QACjC,IAAK,GAAI/iD,GAAI,EAAGA,EAAI/D,KAAKupG,UAAUh8B,OAAOyF,GAAS3D,UAAUzrE,OAAQG,IAAK,CACxE,GAAI6K,GAAO5O,KAAKupG,UAAUh8B,OAAOyF,GAAS3D,UAAUtrE,GAChDxB,EAAQ5B,EAAKqE,QAAQ4J,EAAKmmB,EAAG,QAAQ3vB,SACzChD,GAAa,MAAPA,EAAcG,EAAQH,EAAMG,EAAQA,EAAQH,EAClDC,EAAa,MAAPA,EAAcE,EAAQF,EAAME,EAAQA,EAAQF,EAM1D,OACED,IAAY,MAAPA,EAAc,GAAIS,MAAKT,GAAO,KACnCC,IAAY,MAAPA,EAAc,GAAIQ,MAAKR,GAAO,OAUvC2pE,EAAQ35D,UAAUk9D,mBAAqB,SAAUhnE,GAC/C,GAAIyuC,GAAUzuC,EAAMozC,OAASpzC,EAAMozC,OAAO5mB,EAAIxsB,EAAMyuC,QAChDG,EAAU5uC,EAAMozC,OAASpzC,EAAMozC,OAAOhtB,EAAIpmB,EAAM4uC,QAChDpiB,EAAIiiB,EAAUr2C,EAAKoF,gBAAgB/F,KAAKivD,IAAIqjB,iBAC5C3jD,EAAIwoB,EAAUx2C,EAAK0F,eAAerG,KAAKivD,IAAIqjB,iBAC3ClyC,EAAOpgC,KAAK+uE,QAAQh6C,GAEpB09C,EAAa3F,EAAW4F,qBAAqBnqE,GAE7CV,EAAUlH,EAAK+H,UAAUH,GACzBsqE,EAAO,IACPlyE,GAAKoI,UAAUlB,EAAS7H,KAAKyuE,SAASxf,IAAI6jB,YAC5CD,EAAO,OACE7yE,KAAKkvE,WAAavuE,EAAKoI,UAAUlB,EAAS7H,KAAKkvE,UAAUjgB,IAAI6jB,YACtED,EAAO,OACElyE,EAAKoI,UAAUlB,EAAS7H,KAAKupG,UAAUI,UAAU16C,IAAIhR,OAC9D40B,EAAO,YACElyE,EAAKoI,UAAUlB,EAAS7H,KAAKupG,UAAUK,WAAW36C,IAAIhR,OAC/D40B,EAAO,YACElyE,EAAKoI,UAAUlB,EAAS7H,KAAKupG,UAAUM,WAAW56C,IAAIhR,OAC/D40B,EAAO,SACElyE,EAAKoI,UAAUlB,EAAS7H,KAAKupG,UAAUO,YAAY76C,IAAIhR,OAChE40B,EAAO,SACgB,MAAdJ,EACTI,EAAO,cACElyE,EAAKoI,UAAUlB,EAAS7H,KAAKmvE,YAAYnd,KAClD6gB,EAAO,eACElyE,EAAKoI,UAAUlB,EAAS7H,KAAKivD,IAAItT,UAC1Ck3B,EAAO,aAGT,IAAItwE,MACAonG,EAAY3pG,KAAKupG,UAAUI,UAC3BC,EAAa5pG,KAAKupG,UAAUK,UAQhC,QAPKD,EAAU9wB,QAAU74E,KAAKqvE,UAAUzrE,OAAS,GAC/CrB,EAAMsC,KAAK8kG,EAAUI,cAAcp7E,KAEhCi7E,EAAW/wB,QAAU74E,KAAKqvE,UAAUzrE,OAAS,GAChDrB,EAAMsC,KAAK+kG,EAAWG,cAAcp7E,KAIpCpmB,MAAOA,EACPsqE,KAAMA,EACNI,MAAO1qE,EAAM0uD,SAAW1uD,EAAM0uD,SAASgc,MAAQ1qE,EAAM0qE,MACrDC,MAAO3qE,EAAM0uD,SAAW1uD,EAAM0uD,SAASic,MAAQ3qE,EAAM2qE,MACrDn+C,EAAGA,EACHpG,EAAGA,EACHyR,KAAMA,EACN79B,MAAOA,IASXypE,EAAQ35D,UAAUs+D,oBAAsB,WACtC,MAAO,IAAIF,GAAazwE,KAAMA,KAAKivD,IAAI/Y,UAAWs6B,IAGpD3wE,EAAOD,QAAUosE,GAIb,SAAUnsE,EAAQD,EAASM,GA+B/B,QAASmtE,GAAU18D,EAAM3C,GACvBhO,KAAKK,GAAKM,EAAKuC,aACflD,KAAK2Q,KAAOA,EAEZ3Q,KAAK0tE,gBACHs8B,iBAAkB,OAClBC,aAAc,UACdphF,MAAM,EACNqhF,UAAU,EACVxkF,OAAO,EACPykF,YAAa,QACbC,QACEl8F,SAAS,EACT0/D,YAAa,UAEfvhE,MAAO,OACPg+F,UACEj6F,MAAO,GACPk6F,YAAY,EACZ/qB,MAAO,UAETgrB,eACEr8F,SAAS,EACTs8F,gBAAiB,cACjBhE,MAAO,IAETnqB,YACEnuE,SAAS,EACTiiC,KAAM,EACN9jC,MAAO,UAETo+F,YACAC,UACAn9B,QACE/8D,gBAKJxQ,KAAKgO,QAAUrN,EAAKC,UAAWZ,KAAK0tE,gBACpC1tE,KAAKivD,OACLjvD,KAAKkE,SACLlE,KAAK82D,OAAS,KACd92D,KAAKutE,UACLvtE,KAAK2qG,oBAAqB,EAC1B3qG,KAAK4qG,iBAAkB,EACvB5qG,KAAK6qG,yBAA0B,EAC/B7qG,KAAK8qG,kBAAmB,CAExB,IAAI/4D,GAAK/xC,IACTA,MAAKqvE,UAAY,KACjBrvE,KAAKsvE,WAAa,KAGlBtvE,KAAKmhF,eACH1wD,IAAO,SAAaloB,EAAOopC,EAAQC,GACjCG,EAAGqvC,OAAOzvC,EAAOM,QAEnBC,OAAU,SAAgB3pC,EAAOopC,EAAQC,GACvCG,EAAGsvC,UAAU1vC,EAAOM,QAEtByB,OAAU,SAAgBnrC,EAAOopC,EAAQC,GACvCG,EAAGuvC,UAAU3vC,EAAOM,SAKxBjyC,KAAKuhF,gBACH9wD,IAAO,SAAaloB,EAAOopC,EAAQC,GACjCG,EAAGyvC,aAAa7vC,EAAOM,QAEzBC,OAAU,SAAgB3pC,EAAOopC,EAAQC,GACvCG,EAAG0vC,gBAAgB9vC,EAAOM,QAE5ByB,OAAU,SAAgBnrC,EAAOopC,EAAQC,GACvCG,EAAG2vC,gBAAgB/vC,EAAOM,SAI9BjyC,KAAKiyC,SACLjyC,KAAK+wE,aACL/wE,KAAK+qG,UAAY/qG,KAAK2Q,KAAK2qC,MAAMiL,MACjCvmD,KAAK6hF,eAEL7hF,KAAKgrG,eACLhrG,KAAKgxC,WAAWhjC,GAChBhO,KAAKirG,0BAA4B,GACjCjrG,KAAK2Q,KAAK49D,QAAQl9B,GAAG,eAAgB,WACnCU,EAAGg5D,UAAYh5D,EAAGphC,KAAK2qC,MAAMiL,MAC7BxU,EAAGm5D,IAAI7+F,MAAMnG,KAAOvF,EAAKuI,OAAOK,QAAQwoC,EAAG7tC,MAAMkM,OAEjD2hC,EAAG+4D,kBAAmB,EAEtB/4D,EAAGmP,OAAO3gD,KAAKwxC,KAIjB/xC,KAAKmB,UACLnB,KAAKmrG,WAAcD,IAAKlrG,KAAKkrG,IAAKF,YAAahrG,KAAKgrG,YAAah9F,QAAShO,KAAKgO,QAASu/D,OAAQvtE,KAAKutE,QA7HvG,GAAIhsE,GAAWrB,EAAoB,IAE/BsB,EAEJ,SAAgCV,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,IAFnDS,GAIlCZ,EAAOT,EAAoB,GAC3BkuC,EAAUluC,EAAoB,IAC9BmuC,EAAUnuC,EAAoB,IAC9BouC,EAAWpuC,EAAoB,IAC/B0sE,EAAY1sE,EAAoB,KAChC6sE,EAAW7sE,EAAoB,KAC/B+sE,EAAa/sE,EAAoB,KACjCktE,EAASltE,EAAoB,KAC7BkrG,EAAOlrG,EAAoB,KAC3BmrG,EAAQnrG,EAAoB,KAC5BorG,EAASprG,EAAoB,IAgHjCmtE,GAAUh7D,UAAY,GAAIu6D,GAK1BS,EAAUh7D,UAAUlR,QAAU,WAC5B,GAAI88C,GAAQ/tC,SAASC,cAAc,MACnC8tC,GAAMv3C,UAAY,iBAClB1G,KAAKivD,IAAIhR,MAAQA,EAGjBj+C,KAAKkrG,IAAMh7F,SAASy/B,gBAAgB,6BAA8B,OAClE3vC,KAAKkrG,IAAI7+F,MAAMkE,SAAW,WAC1BvQ,KAAKkrG,IAAI7+F,MAAMgE,QAAU,GAAKrQ,KAAKgO,QAAQm8F,aAAavgG,QAAQ,KAAM,IAAM,KAC5E5J,KAAKkrG,IAAI7+F,MAAMoM,QAAU,QACzBwlC,EAAMvtC,YAAY1Q,KAAKkrG,KAGvBlrG,KAAKgO,QAAQy8F,SAAS78B,YAAc,OACpC5tE,KAAK2pG,UAAY,GAAI58B,GAAS/sE,KAAK2Q,KAAM3Q,KAAKgO,QAAQy8F,SAAUzqG,KAAKkrG,IAAKlrG,KAAKgO,QAAQu/D,QAEvFvtE,KAAKgO,QAAQy8F,SAAS78B,YAAc,QACpC5tE,KAAK4pG,WAAa,GAAI78B,GAAS/sE,KAAK2Q,KAAM3Q,KAAKgO,QAAQy8F,SAAUzqG,KAAKkrG,IAAKlrG,KAAKgO,QAAQu/D,cACjFvtE,MAAKgO,QAAQy8F,SAAS78B,YAG7B5tE,KAAK6pG,WAAa,GAAIz8B,GAAOptE,KAAK2Q,KAAM3Q,KAAKgO,QAAQ08F,OAAQ,OAAQ1qG,KAAKgO,QAAQu/D,QAClFvtE,KAAK8pG,YAAc,GAAI18B,GAAOptE,KAAK2Q,KAAM3Q,KAAKgO,QAAQ08F,OAAQ,QAAS1qG,KAAKgO,QAAQu/D,QAEpFvtE,KAAK8xE,QAOPzE,EAAUh7D,UAAU2+B,WAAa,SAAUhjC,GACzC,GAAIA,EAAS,CACX,GAAIV,IAAU,WAAY,eAAgB,QAAS,SAAU,cAAe,mBAAoB,QAAS,WAAY,WAAY,OAAQ,cAC7GzJ,KAAxBmK,EAAQm8F,iBAAgDtmG,KAAnBmK,EAAQqC,QAC/CrQ,KAAK4qG,iBAAkB,EACvB5qG,KAAK6qG,yBAA0B,OACwBhnG,KAA9C7D,KAAK2Q,KAAK29D,SAASgE,gBAAgBjiE,YAAgDxM,KAAxBmK,EAAQm8F,aACxEngG,UAAUgE,EAAQm8F,YAAc,IAAIvgG,QAAQ,KAAM,KAAO5J,KAAK2Q,KAAK29D,SAASgE,gBAAgBjiE,SAC9FrQ,KAAK4qG,iBAAkB,GAG3BjqG,EAAK2D,oBAAoBgJ,EAAQtN,KAAKgO,QAASA,GAC/CrN,EAAKmN,aAAa9N,KAAKgO,QAASA,EAAS,iBACzCrN,EAAKmN,aAAa9N,KAAKgO,QAASA,EAAS,cACzCrN,EAAKmN,aAAa9N,KAAKgO,QAASA,EAAS,UACzCrN,EAAKmN,aAAa9N,KAAKgO,QAASA,EAAS,UAErCA,EAAQu8F,eAC6C,WAAnD,EAAI/oG,EAAkB,SAAGwM,EAAQu8F,gBAC/Bv8F,EAAQu8F,cAAcC,kBACqB,WAAzCx8F,EAAQu8F,cAAcC,gBACxBxqG,KAAKgO,QAAQu8F,cAAc/D,MAAQ,EACe,WAAzCx4F,EAAQu8F,cAAcC,gBAC/BxqG,KAAKgO,QAAQu8F,cAAc/D,MAAQ,GAEnCxmG,KAAKgO,QAAQu8F,cAAcC,gBAAkB,cAC7CxqG,KAAKgO,QAAQu8F,cAAc/D,MAAQ,KAMvCxmG,KAAK2pG,eACkB9lG,KAArBmK,EAAQy8F,WACVzqG,KAAK2pG,UAAU34D,WAAWhxC,KAAKgO,QAAQy8F,UACvCzqG,KAAK4pG,WAAW54D,WAAWhxC,KAAKgO,QAAQy8F,WAIxCzqG,KAAK6pG,gBACgBhmG,KAAnBmK,EAAQ08F,SACV1qG,KAAK6pG,WAAW74D,WAAWhxC,KAAKgO,QAAQ08F,QACxC1qG,KAAK8pG,YAAY94D,WAAWhxC,KAAKgO,QAAQ08F,SAIzC1qG,KAAKutE,OAAOjqE,eAhMJ,kBAiMVtD,KAAKutE,OAAgB,cAAEv8B,WAAWhjC,GAKlChO,KAAKivD,IAAIhR,QAEXj+C,KAAK8qG,kBAAmB,EACxB9qG,KAAK2Q,KAAK49D,QAAQrhB,KAAK,WAAahc,OAAO,MAO/Cm8B,EAAUh7D,UAAUP,KAAO,WAErB9R,KAAKivD,IAAIhR,MAAMn1C,YACjB9I,KAAKivD,IAAIhR,MAAMn1C,WAAW5G,YAAYlC,KAAKivD,IAAIhR,QAQnDovB,EAAUh7D,UAAUy/D,KAAO,WAEpB9xE,KAAKivD,IAAIhR,MAAMn1C,YAClB9I,KAAK2Q,KAAKs+C,IAAItT,OAAOjrC,YAAY1Q,KAAKivD,IAAIhR,QAQ9CovB,EAAUh7D,UAAU+9D,SAAW,SAAUn+B,GACvC,GACIQ,GADAV,EAAK/xC,KAELwkF,EAAexkF,KAAKqvE,SAGxB,IAAKp9B,EAEE,CAAA,KAAIA,YAAiB5D,IAAW4D,YAAiB3D,IAGtD,KAAM,IAAI/pC,WAAU,kDAFpBvE,MAAKqvE,UAAYp9B,MAFjBjyC,MAAKqvE,UAAY,IAkBnB,IAXImV,IAEF7jF,EAAKuG,QAAQlH,KAAKmhF,cAAe,SAAUh6E,EAAUoB,GACnDi8E,EAAahzC,IAAIjpC,EAAOpB,KAI1BsrC,EAAM+xC,EAAarxC,SACnBnzC,KAAKshF,UAAU7uC,IAGbzyC,KAAKqvE,UAAW,CAElB,GAAIhvE,GAAKL,KAAKK,EACdM,GAAKuG,QAAQlH,KAAKmhF,cAAe,SAAUh6E,EAAUoB,GACnDwpC,EAAGs9B,UAAUh+B,GAAG9oC,EAAOpB,EAAU9G,KAInCoyC,EAAMzyC,KAAKqvE,UAAUl8B,SACrBnzC,KAAKohF,OAAO3uC,KAQhB46B,EAAUh7D,UAAU89D,UAAY,SAAU5C,GACxC,GACI96B,GADAV,EAAK/xC,IAIT,IAAIA,KAAKsvE,WAAY,CACnB3uE,EAAKuG,QAAQlH,KAAKuhF,eAAgB,SAAUp6E,EAAUoB,GACpDwpC,EAAGu9B,WAAW99B,IAAIjpC,EAAOpB,KAI3BsrC,EAAMzyC,KAAKsvE,WAAWn8B,SACtBnzC,KAAKsvE,WAAa,IAClB,KAAK,GAAIvrE,GAAI,EAAGA,EAAI0uC,EAAI7uC,OAAQG,IAC9B/D,KAAKurG,aAAa94D,EAAI1uC,IAK1B,GAAKwpE,EAEE,CAAA,KAAIA,YAAkBl/B,IAAWk/B,YAAkBj/B,IAGxD,KAAM,IAAI/pC,WAAU,kDAFpBvE,MAAKsvE,WAAa/B,MAFlBvtE,MAAKsvE,WAAa,IAOpB,IAAItvE,KAAKsvE,WAAY,CAEnB,GAAIjvE,GAAKL,KAAKK,EACdM,GAAKuG,QAAQlH,KAAKuhF,eAAgB,SAAUp6E,EAAUoB,GACpDwpC,EAAGu9B,WAAWj+B,GAAG9oC,EAAOpB,EAAU9G,KAIpCoyC,EAAMzyC,KAAKsvE,WAAWn8B,SACtBnzC,KAAKwhF,aAAa/uC,KAItB46B,EAAUh7D,UAAUgvE,UAAY,SAAU5uC,GACxCzyC,KAAKwrG,oBAAoB/4D,IAE3B46B,EAAUh7D,UAAU+uE,OAAS,SAAU3uC,GACrCzyC,KAAKqhF,UAAU5uC,IAEjB46B,EAAUh7D,UAAUivE,UAAY,SAAU7uC,GACxCzyC,KAAKqhF,UAAU5uC,IAEjB46B,EAAUh7D,UAAUovE,gBAAkB,SAAUE,GAC9C3hF,KAAKwrG,oBAAoB,KAAM7pB,IAEjCtU,EAAUh7D,UAAUmvE,aAAe,SAAUG,GAC3C3hF,KAAKyhF,gBAAgBE,IAQvBtU,EAAUh7D,UAAUqvE,gBAAkB,SAAUC;wCAC9C,IAAK,GAAI59E,GAAI,EAAGA,EAAI49E,EAAS/9E,OAAQG,IACnC/D,KAAKurG,aAAa5pB,EAAS59E,GAE7B/D,MAAK8qG,kBAAmB,EACxB9qG,KAAK2Q,KAAK49D,QAAQrhB,KAAK,WAAahc,OAAO,KAQ7Cm8B,EAAUh7D,UAAUk5F,aAAe,SAAUv4B,GACvChzE,KAAKutE,OAAOjqE,eAAe0vE,KACwB,SAAjDhzE,KAAKutE,OAAOyF,GAAShlE,QAAQg8F,kBAC/BhqG,KAAK4pG,WAAW6B,YAAYz4B,GAC5BhzE,KAAK8pG,YAAY2B,YAAYz4B,GAC7BhzE,KAAK8pG,YAAY5oD,WAEjBlhD,KAAK2pG,UAAU8B,YAAYz4B,GAC3BhzE,KAAK6pG,WAAW4B,YAAYz4B,GAC5BhzE,KAAK6pG,WAAW3oD,gBAEXlhD,MAAKutE,OAAOyF,KAWvB3F,EAAUh7D,UAAUq5F,aAAe,SAAUv6B,EAAO6B,GAC7ChzE,KAAKutE,OAAOjqE,eAAe0vE,IAU9BhzE,KAAKutE,OAAOyF,GAAS9gC,OAAOi/B,GACyB,SAAjDnxE,KAAKutE,OAAOyF,GAAShlE,QAAQg8F,kBAC/BhqG,KAAK4pG,WAAWzpB,YAAYnN,EAAShzE,KAAKutE,OAAOyF,IACjDhzE,KAAK8pG,YAAY3pB,YAAYnN,EAAShzE,KAAKutE,OAAOyF,IAElDhzE,KAAK2pG,UAAU8B,YAAYz4B,GAC3BhzE,KAAK6pG,WAAW4B,YAAYz4B,KAE5BhzE,KAAK2pG,UAAUxpB,YAAYnN,EAAShzE,KAAKutE,OAAOyF,IAChDhzE,KAAK6pG,WAAW1pB,YAAYnN,EAAShzE,KAAKutE,OAAOyF,IAEjDhzE,KAAK4pG,WAAW6B,YAAYz4B,GAC5BhzE,KAAK8pG,YAAY2B,YAAYz4B,MArB/BhzE,KAAKutE,OAAOyF,GAAW,GAAI/F,GAAWkE,EAAO6B,EAAShzE,KAAKgO,QAAShO,KAAKirG,0BACpB,SAAjDjrG,KAAKutE,OAAOyF,GAAShlE,QAAQg8F,kBAC/BhqG,KAAK4pG,WAAW+B,SAAS34B,EAAShzE,KAAKutE,OAAOyF,IAC9ChzE,KAAK8pG,YAAY6B,SAAS34B,EAAShzE,KAAKutE,OAAOyF,MAE/ChzE,KAAK2pG,UAAUgC,SAAS34B,EAAShzE,KAAKutE,OAAOyF,IAC7ChzE,KAAK6pG,WAAW8B,SAAS34B,EAAShzE,KAAKutE,OAAOyF,MAkBlDhzE,KAAK6pG,WAAW3oD,SAChBlhD,KAAK8pG,YAAY5oD,UAUnBmsB,EAAUh7D,UAAUm5F,oBAAsB,SAAU/4D,EAAKkvC,GACvD,GAAsB,MAAlB3hF,KAAKqvE,UAAmB,CAC1B,GAAIu8B,MACA35D,EAAQjyC,KAAKqvE,UAAU53D,MACvBo5B,EAAU7wC,KAAKqvE,UAAUz+B,SACzBi7D,IACAp5D,IACFA,EAAI3nC,IAAI,SAAUzK,GAChBwrG,EAAMxrG,GAAMA,GAMhB,KAAK,GADDyrG,MACK/nG,EAAI,EAAGA,EAAIkuC,EAAMruC,OAAQG,IAAK,CACrC,GAAI6K,GAAOqjC,EAAMluC,GACbivE,EAAUpkE,EAAKuiE,KACH,QAAZ6B,OAAgCnvE,KAAZmvE,IACtBA,EAvaQ,iBAyaV84B,EAAYxoG,eAAe0vE,GAAW84B,EAAY94B,KAAa84B,EAAY94B,GAAW,EAIxF,GAAI+4B,KACJ,KAAKpqB,GAAYlvC,EACf,IAAK,GAAIugC,KAAWhzE,MAAKutE,OACvB,GAAIvtE,KAAKutE,OAAOjqE,eAAe0vE,GAAU,CACvC,GAAI7B,GAAQnxE,KAAKutE,OAAOyF,GACpBg5B,EAAiB76B,EAAMsT,UAE3BmnB,GAAc54B,GAAWg5B,EAAellG,OAAO,SAAU8H,GAEvD,MADAm9F,GAAiBn9F,EAAKiiC,IAAYjiC,EAAKiiC,GAChCjiC,EAAKiiC,KAAag7D,EAAMj9F,EAAKiiC,KAEtC,IAAIud,GAAY09C,EAAY94B,EAC5B84B,GAAY94B,IAAY44B,EAAc54B,GAASpvE,OAC3CgoG,EAAc54B,GAASpvE,OAASwqD,IAClCw9C,EAAc54B,GAAS5kB,EAAY,OAO3C,IAAK,GAAIrqD,GAAI,EAAGA,EAAIkuC,EAAMruC,OAAQG,IAAK,CACrC,GAAI6K,GAAOqjC,EAAMluC,GACbivE,EAAUpkE,EAAKuiE,KAInB,IAHgB,OAAZ6B,OAAgCnvE,KAAZmvE,IACtBA,EAtcQ,iBAwcL2O,IAAYlvC,GAAO7jC,EAAKiiC,KAAag7D,EAAMj9F,EAAKiiC,MAAak7D,EAAiBzoG,eAAesL,EAAKiiC,IAAvG,CAGK+6D,EAActoG,eAAe0vE,KAChC44B,EAAc54B,GAAW,GAAI7uE,OAAM2nG,EAAY94B,IAGjD,IAAIi5B,GAAWtrG,EAAK8M,aAAamB,EACjCq9F,GAASl3E,EAAIp0B,EAAKqE,QAAQ4J,EAAKmmB,EAAG,QAClCk3E,EAASzlD,IAAM7lD,EAAKqE,QAAQ4J,EAAK43C,IAAK,QACtCylD,EAASC,SAAWt9F,EAAK+f,EACzBs9E,EAASt9E,EAAI9sB,OAAO+M,EAAK+f,GACzBs9E,EAASp7D,GAAWjiC,EAAKiiC,EAEzB,IAAI99B,GAAQ64F,EAAc54B,GAASpvE,OAASkoG,EAAY94B,IACxD44B,GAAc54B,GAASjgE,GAASk5F,GAIlC,IAAK,GAAIj5B,KAAWhzE,MAAKutE,OACnBvtE,KAAKutE,OAAOjqE,eAAe0vE,KACxB44B,EAActoG,eAAe0vE,KAChC44B,EAAc54B,GAAW,GAAI7uE,OAAM,IAMzC,KAAK,GAAI6uE,KAAW44B,GAClB,GAAIA,EAActoG,eAAe0vE,GAC/B,GAAqC,GAAjC44B,EAAc54B,GAASpvE,OACrB5D,KAAKutE,OAAOjqE,eAAe0vE,IAC7BhzE,KAAKurG,aAAav4B,OAEf,CACL,GAAI7B,OAAQttE,OACWA,IAAnB7D,KAAKsvE,aACP6B,EAAQnxE,KAAKsvE,WAAW73D,IAAIu7D,QAEjBnvE,IAATstE,IACFA,GAAU9wE,GAAI2yE,EAASziC,QAASvwC,KAAKgO,QAAQi8F,aAAej3B,IAE9DhzE,KAAK0rG,aAAav6B,EAAO6B,GACzBhzE,KAAKutE,OAAOyF,GAAS5C,SAASw7B,EAAc54B,IAIlDhzE,KAAK8qG,kBAAmB,EACxB9qG,KAAK2Q,KAAK49D,QAAQrhB,KAAK,WAAahc,OAAO,MAQ/Cm8B,EAAUh7D,UAAU6uC,OAAS,WAC3B,GAAI22B,IAAU,CAGd73E,MAAKkE,MAAMkM,MAAQpQ,KAAKivD,IAAIhR,MAAMptC,YAClC7Q,KAAKkE,MAAMmM,OAASrQ,KAAK2Q,KAAK29D,SAASgE,gBAAgBjiE,OAASrQ,KAAK2Q,KAAK29D,SAAS3iE,OAAOrF,IAAMtG,KAAK2Q,KAAK29D,SAAS3iE,OAAO8yC,OAG1Ho5B,EAAU73E,KAAK43E,cAAgBC,CAG/B,IAAI0L,GAAkBvjF,KAAK2Q,KAAK2qC,MAAMkL,IAAMxmD,KAAK2Q,KAAK2qC,MAAMiL,MACxDi9B,EAASD,GAAmBvjF,KAAKyjF,mBA2BrC,IA1BAzjF,KAAKyjF,oBAAsBF,EAIZ,GAAX1L,IACF73E,KAAKkrG,IAAI7+F,MAAM+D,MAAQzP,EAAKuI,OAAOK,OAAO,EAAIvJ,KAAKkE,MAAMkM,OACzDpQ,KAAKkrG,IAAI7+F,MAAMnG,KAAOvF,EAAKuI,OAAOK,QAAQvJ,KAAKkE,MAAMkM,QAGL,IAA3CpQ,KAAKgO,QAAQqC,OAAS,IAAIzL,QAAQ,MAA8C,GAAhC5E,KAAK6qG,0BACxD7qG,KAAK4qG,iBAAkB,IAKC,GAAxB5qG,KAAK4qG,iBACH5qG,KAAKgO,QAAQm8F,aAAenqG,KAAKkE,MAAMmM,OAAS,OAClDrQ,KAAKgO,QAAQm8F,YAAcnqG,KAAKkE,MAAMmM,OAAS,KAC/CrQ,KAAKkrG,IAAI7+F,MAAMgE,OAASrQ,KAAKkE,MAAMmM,OAAS,MAE9CrQ,KAAK4qG,iBAAkB,GAEvB5qG,KAAKkrG,IAAI7+F,MAAMgE,QAAU,GAAKrQ,KAAKgO,QAAQm8F,aAAavgG,QAAQ,KAAM,IAAM,KAI/D,GAAXiuE,GAA6B,GAAV2L,GAA6C,GAA3BxjF,KAAK2qG,oBAAuD,GAAzB3qG,KAAK8qG,iBAC/EjzB,EAAU73E,KAAKmsG,gBAAkBt0B,EACjC73E,KAAK8qG,kBAAmB,MAGxB,IAAsB,GAAlB9qG,KAAK+qG,UAAgB,CACvB,GAAIpuE,GAAS38B,KAAK2Q,KAAK2qC,MAAMiL,MAAQvmD,KAAK+qG,UACtCzvD,EAAQt7C,KAAK2Q,KAAK2qC,MAAMkL,IAAMxmD,KAAK2Q,KAAK2qC,MAAMiL,KAClD,IAAwB,GAApBvmD,KAAKkE,MAAMkM,MAAY,CACzB,GAAIg8F,GAAmBpsG,KAAKkE,MAAMkM,MAAQkrC,EACtCjL,EAAU1T,EAASyvE,CACvBpsG,MAAKkrG,IAAI7+F,MAAMnG,MAAQlG,KAAKkE,MAAMkM,MAAQigC,EAAU,MAM1D,MAFArwC,MAAK6pG,WAAW3oD,SAChBlhD,KAAK8pG,YAAY5oD,SACV22B,GAGTxK,EAAUh7D,UAAUg6F,mBAAqB,WAEvC,GAAIC,KACJ,KAAK,GAAIt5B,KAAWhzE,MAAKutE,OACvB,GAAIvtE,KAAKutE,OAAOjqE,eAAe0vE,GAAU,CACvC,GAAI7B,GAAQnxE,KAAKutE,OAAOyF,EACH,IAAjB7B,EAAMrqB,aAAgEjjD,KAA5C7D,KAAKgO,QAAQu/D,OAAO/8D,WAAWwiE,IAAqE,GAA3ChzE,KAAKgO,QAAQu/D,OAAO/8D,WAAWwiE,IACpHs5B,EAAUznG,MAAOxE,GAAI2yE,EAASu5B,OAAQp7B,EAAMnjE,QAAQu+F,SAI1D5rG,EAAK+M,WAAW4+F,EAAW,SAAU9oG,EAAGC,GACtC,GAAIi5C,GAAKl5C,EAAE+oG,OACPC,EAAK/oG,EAAE8oG,MAGX,YAFW1oG,KAAP64C,IAAkBA,EAAK,OAChB74C,KAAP2oG,IAAkBA,EAAK,GACpB9vD,GAAM8vD,EAAK,EAAI9vD,EAAK8vD,GAAM,EAAI,GAGvC,KAAK,GADD7qB,GAAW,GAAIx9E,OAAMmoG,EAAU1oG,QAC1BG,EAAI,EAAGA,EAAIuoG,EAAU1oG,OAAQG,IACpC49E,EAAS59E,GAAKuoG,EAAUvoG,GAAG1D,EAE7B,OAAOshF,IAOTtU,EAAUh7D,UAAU85F,aAAe,WAGjC,GADA/9D,EAAQc,gBAAgBlvC,KAAKgrG,aACL,GAApBhrG,KAAKkE,MAAMkM,OAAgC,MAAlBpQ,KAAKqvE,UAAmB,CACnD,GAAI8B,GAAOptE,EACP0oG,KAGAC,EAAU1sG,KAAK2Q,KAAKhQ,KAAKquE,cAAchvE,KAAK2Q,KAAK29D,SAAS5uE,KAAK0Q,OAC/Du8F,EAAU3sG,KAAK2Q,KAAKhQ,KAAKquE,aAAa,EAAIhvE,KAAK2Q,KAAK29D,SAAS5uE,KAAK0Q,OAGlEuxE,EAAW3hF,KAAKqsG,oBACpB,IAAI1qB,EAAS/9E,OAAS,EAAG,CACvB,GAAI0rE,KASJ,KANAtvE,KAAK4sG,iBAAiBjrB,EAAUrS,EAAYo9B,EAASC,GAGrD3sG,KAAK6sG,eAAelrB,EAAUrS,GAGzBvrE,EAAI,EAAGA,EAAI49E,EAAS/9E,OAAQG,IAC/B/D,KAAK8sG,qBAAqBx9B,EAAWqS,EAAS59E,IAWhD,IAPA/D,KAAK+sG,YAAYprB,EAAUrS,EAAYm9B,GAOnB,GAJLzsG,KAAKgtG,aAAarrB,EAAU8qB,GAOzC,MAFAr+D,GAAQmB,gBAAgBvvC,KAAKgrG,aAC7BhrG,KAAK2qG,oBAAqB,GACnB,CAET3qG,MAAK2qG,oBAAqB,CAG1B,IAAIsC,OAAQppG,EACZ,KAAKE,EAAI,EAAGA,EAAI49E,EAAS/9E,OAAQG,IAC/BotE,EAAQnxE,KAAKutE,OAAOoU,EAAS59E,KACF,IAAvB/D,KAAKgO,QAAQ0X,OAAyC,SAAvB1lB,KAAKgO,QAAQ3B,YACLxI,IAArCstE,EAAMnjE,QAAQk/F,qBAAqC/7B,EAAMnjE,QAAQk/F,0BACtDrpG,IAATopG,IACFjtG,KAAKmtG,OAAO79B,EAAW6B,EAAM9wE,IAAKivE,EAAW29B,EAAM5sG,KACf,GAAhC8wE,EAAMnjE,QAAQo8F,OAAOl8F,SAAwD,UAArCijE,EAAMnjE,QAAQo8F,OAAOx8B,cACvB,OAApCuD,EAAMnjE,QAAQo8F,OAAOx8B,aAA6D,UAArCq/B,EAAMj/F,QAAQo8F,OAAOx8B,aACpEq/B,EAAMj/F,QAAQo8F,OAAOx8B,YAAc,QACnCq/B,EAAMj/F,QAAQo8F,OAAOp3B,QAAU7B,EAAM9wE,KAErC8wE,EAAMnjE,QAAQo8F,OAAOx8B,YAAc,QACnCuD,EAAMnjE,QAAQo8F,OAAOp3B,QAAUi6B,EAAM5sG,MAI3C4sG,EAAQ97B,IAGZnxE,KAAKotG,qBAAqB99B,EAAWqS,EAAS59E,IAAKotE,EAIrD,IAAIjlC,KACJ,KAAKnoC,EAAI,EAAGA,EAAI49E,EAAS/9E,OAAQG,IAE/B,GADAotE,EAAQnxE,KAAKutE,OAAOoU,EAAS59E,IACD,SAAxBotE,EAAMnjE,QAAQ3B,OAAoD,GAAhC8kE,EAAMnjE,QAAQo8F,OAAOl8F,QAAiB,CAC1E,GAAIojE,GAAUhC,EAAWqS,EAAS59E,GAClC,IAAe,MAAXutE,GAAqC,GAAlBA,EAAQ1tE,OAC7B,QAKF,IAHKsoC,EAAM5oC,eAAeq+E,EAAS59E,MACjCmoC,EAAMy1C,EAAS59E,IAAMsnG,EAAMgC,SAAS/7B,EAASH,IAEN,UAArCA,EAAMnjE,QAAQo8F,OAAOx8B,YAAyB,CAChD,GAAI0/B,GAAan8B,EAAMnjE,QAAQo8F,OAAOp3B,OACtC,KAAsC,IAAlC2O,EAAS/8E,QAAQ0oG,GAAoB,CACvChoF,QAAQuuC,IAAIsd,EAAM9wE,GAAK,wCAA0CitG,EACjE,UAEGphE,EAAM5oC,eAAegqG,KACxBphE,EAAMohE,GAAcjC,EAAMgC,SAAS/9B,EAAWg+B,GAAattG,KAAKutE,OAAO+/B,KAEzEjC,EAAMkC,YAAYrhE,EAAMy1C,EAAS59E,IAAKotE,EAAOjlC,EAAMohE,GAAattG,KAAKmrG,eAErEE,GAAMkC,YAAYrhE,EAAMy1C,EAAS59E,IAAKotE,MAAOttE,GAAW7D,KAAKmrG,WAOnE,IADAC,EAAKlP,KAAKva,EAAUrS,EAAYtvE,KAAKmrG,WAChCpnG,EAAI,EAAGA,EAAI49E,EAAS/9E,OAAQG,IAE/B,GADAotE,EAAQnxE,KAAKutE,OAAOoU,EAAS59E,IACzBurE,EAAWqS,EAAS59E,IAAIH,OAAS,EACnC,OAAQutE,EAAMnjE,QAAQ3B,OACpB,IAAK,OACE6/B,EAAM5oC,eAAeq+E,EAAS59E,MACjCmoC,EAAMy1C,EAAS59E,IAAMsnG,EAAMgC,SAAS/9B,EAAWqS,EAAS59E,IAAKotE,IAE/Dk6B,EAAMnP,KAAKhwD,EAAMy1C,EAAS59E,IAAKotE,EAAOnxE,KAAKmrG,UAE7C,KAAK,QAEL,IAAK,SACwB,SAAvBh6B,EAAMnjE,QAAQ3B,OAA2C,UAAvB8kE,EAAMnjE,QAAQ3B,OAAyD,GAApC8kE,EAAMnjE,QAAQquE,WAAWnuE,SAChGo9F,EAAOpP,KAAK5sB,EAAWqS,EAAS59E,IAAKotE,EAAOnxE,KAAKmrG,aAgB/D,MADA/8D,GAAQmB,gBAAgBvvC,KAAKgrG,cACtB,GAGT39B,EAAUh7D,UAAU86F,OAAS,SAAU34E,EAAMg5E,GAC3C,GAAIz6F,GAAO6qC,EAAIC,EAAI4vD,EAAcC,CACjC36F,GAAQ,CAER,KAAK,GAAIlF,GAAI,EAAGA,EAAI2mB,EAAK5wB,OAAQiK,IAAK,CACpC4/F,MAAe5pG,GACf6pG,MAAe7pG,EAEf,KAAK,GAAI+J,GAAImF,EAAOnF,EAAI4/F,EAAQ5pG,OAAQgK,IAAK,CAE3C,GAAI4/F,EAAQ5/F,GAAGmnB,IAAMP,EAAK3mB,GAAGknB,EAAG,CAC9B04E,EAAeD,EAAQ5/F,GACvB8/F,EAAeF,EAAQ5/F,GACvBmF,EAAQnF,CACR,OACK,GAAI4/F,EAAQ5/F,GAAGmnB,EAAIP,EAAK3mB,GAAGknB,EAAG,CAEnC24E,EAAeF,EAAQ5/F,GAErB6/F,EADO,GAAL7/F,EACa8/F,EAEAF,EAAQ5/F,EAAI,GAE7BmF,EAAQnF,CACR,YAIiB/J,KAAjB6pG,IACFD,EAAeD,EAAQA,EAAQ5pG,OAAS,GACxC8pG,EAAeF,EAAQA,EAAQ5pG,OAAS,IAG1Cg6C,EAAK8vD,EAAa34E,EAAI04E,EAAa14E,EACnC8oB,EAAK6vD,EAAa/+E,EAAI8+E,EAAa9+E,EAEjC6F,EAAK3mB,GAAG8gB,EADA,GAANivB,EACUppB,EAAK3mB,GAAGq+F,SAAWwB,EAAa/+E,EAEhC6F,EAAK3mB,GAAGq+F,SAAWruD,EAAKD,GAAMppB,EAAK3mB,GAAGknB,EAAI04E,EAAa14E,GAAK04E,EAAa9+E,IAkB3F0+C,EAAUh7D,UAAUu6F,iBAAmB,SAAUjrB,EAAUrS,EAAYo9B,EAASC,GAC9E,GAAIx7B,GAAOptE,EAAG8J,EAAGe,CACjB,IAAI+yE,EAAS/9E,OAAS,EACpB,IAAKG,EAAI,EAAGA,EAAI49E,EAAS/9E,OAAQG,IAAK,CACpCotE,EAAQnxE,KAAKutE,OAAOoU,EAAS59E,GAC7B,IAAIsrE,GAAY8B,EAAMsT,UAEtB,IAA0B,GAAtBtT,EAAMnjE,QAAQ6a,KAAc,CAC9B,GAAI8kF,GAAiB,SAAwBnqG,EAAGC,GAC9C,MAAOD,GAAEwf,WAAavf,EAAEuf,UAAY,EAAIxf,EAAIC,GAAK,EAAI,GAEnDmqG,EAAQnrG,KAAKJ,IAAI,EAAG1B,EAAKmO,kBAAkBugE,EAAWq9B,EAAS,IAAK,SAAUiB,IAC9EtvC,EAAO57D,KAAKL,IAAIitE,EAAUzrE,OAAQjD,EAAKmO,kBAAkBugE,EAAWs9B,EAAS,IAAK,QAASgB,GAAkB,EAC7GtvC,IAAQ,IACVA,EAAOgR,EAAUzrE,OAEnB,IAAIiqG,GAAgB,GAAI1pG,OAAMk6D,EAAOuvC,EACrC,KAAK//F,EAAI+/F,EAAO//F,EAAIwwD,EAAMxwD,IACxBe,EAAOuiE,EAAM9B,UAAUxhE,GACvBggG,EAAchgG,EAAI+/F,GAASh/F,CAE7B0gE,GAAWqS,EAAS59E,IAAM8pG,MAG1Bv+B,GAAWqS,EAAS59E,IAAMotE,EAAM9B,YAYxChC,EAAUh7D,UAAUw6F,eAAiB,SAAUlrB,EAAUrS,GACvD,GAAI6B,EACJ,IAAIwQ,EAAS/9E,OAAS,EACpB,IAAK,GAAIG,GAAI,EAAGA,EAAI49E,EAAS/9E,OAAQG,IAEnC,GADAotE,EAAQnxE,KAAKutE,OAAOoU,EAAS59E,IACC,GAA1BotE,EAAMnjE,QAAQk8F,SAAkB,CAClC,GAAI2D,GAAgBv+B,EAAWqS,EAAS59E,GACxC,IAAI8pG,EAAcjqG,OAAS,EAAG,CAC5B,GAAIkqG,GAAY,EACZC,EAAiBF,EAAcjqG,OAK/BoqG,EAAYhuG,KAAK2Q,KAAKhQ,KAAKiuE,eAAei/B,EAAcA,EAAcjqG,OAAS,GAAGmxB,GAAK/0B,KAAK2Q,KAAKhQ,KAAKiuE,eAAei/B,EAAc,GAAG94E,GACtIk5E,EAAiBF,EAAiBC,CACtCF,GAAYrrG,KAAKL,IAAIK,KAAKoX,KAAK,GAAMk0F,GAAiBtrG,KAAKJ,IAAI,EAAGI,KAAKi6B,MAAMuxE,IAG7E,KAAK,GADDC,GAAc,GAAI/pG,OAAM4pG,GACnBlgG,EAAI,EAAGA,EAAIkgG,EAAgBlgG,GAAKigG,EAAW,CAClD,GAAI51C,GAAMz1D,KAAKi6B,MAAM7uB,EAAIigG,EACzBI,GAAYh2C,GAAO21C,EAAchgG,GAEnCyhE,EAAWqS,EAAS59E,IAAMmqG,EAAYr2E,OAAO,EAAGp1B,KAAKi6B,MAAMqxE,EAAiBD,OAetFzgC,EAAUh7D,UAAU06F,YAAc,SAAUprB,EAAUrS,EAAYm9B,GAChE,GAAIpnB,GAAWlU,EAAOptE,EAGlBiK,EAFAmgG,KACAC,IAEJ,IAAIzsB,EAAS/9E,OAAS,EAAG,CACvB,IAAKG,EAAI,EAAGA,EAAI49E,EAAS/9E,OAAQG,IAC/BshF,EAAY/V,EAAWqS,EAAS59E,IAChCiK,EAAUhO,KAAKutE,OAAOoU,EAAS59E,IAAIiK,QAC/Bq3E,EAAUzhF,OAAS,IACrButE,EAAQnxE,KAAKutE,OAAOoU,EAAS59E,KAEP,IAAlBiK,EAAQ0X,OAAoC,QAAlB1X,EAAQ3B,MACH,SAA7B2B,EAAQg8F,iBACVmE,EAAmBA,EAAiBtnG,OAAOw+E,GAE3C+oB,EAAoBA,EAAkBvnG,OAAOw+E,GAG/ConB,EAAY9qB,EAAS59E,IAAMotE,EAAMk9B,UAAUhpB,EAAW1D,EAAS59E,IAMrEqnG,GAAKkD,iBAAiBH,EAAkB1B,EAAa9qB,EAAU,iBAAkB,QACjFypB,EAAKkD,iBAAiBF,EAAmB3B,EAAa9qB,EAAU,kBAAmB,WAUvFtU,EAAUh7D,UAAU26F,aAAe,SAAUrrB,EAAU8qB,GACrD,GAOI8B,GACAC,EARA32B,GAAU,EACV42B,GAAgB,EAChBC,GAAiB,EACjBC,EAAU,IACVC,EAAW,IACXC,GAAW,IACXC,GAAY,GAIhB,IAAIntB,EAAS/9E,OAAS,EAAG,CAEvB,IAAK,GAAIG,GAAI,EAAGA,EAAI49E,EAAS/9E,OAAQG,IAAK,CACxC,GAAIotE,GAAQnxE,KAAKutE,OAAOoU,EAAS59E,GAC7BotE,IAA2C,SAAlCA,EAAMnjE,QAAQg8F,kBACzByE,GAAgB,EAChBE,EAAU,IACVE,GAAW,KACF19B,GAASA,EAAMnjE,QAAQg8F,mBAChC0E,GAAiB,EACjBE,EAAW,IACXE,GAAY,KAKhB,IAAK,GAAI/qG,GAAI,EAAGA,EAAI49E,EAAS/9E,OAAQG,IAC/B0oG,EAAYnpG,eAAeq+E,EAAS59E,MACE,IAApC0oG,EAAY9qB,EAAS59E,IAAIgrG,SAC3BR,EAAS9B,EAAY9qB,EAAS59E,IAAI3B,IAClCosG,EAAS/B,EAAY9qB,EAAS59E,IAAI1B,IAEe,SAA7CoqG,EAAY9qB,EAAS59E,IAAIimG,kBAC3ByE,GAAgB,EAChBE,EAAUA,EAAUJ,EAASA,EAASI,EACtCE,EAAUA,EAAUL,EAASA,EAASK,IAEtCH,GAAiB,EACjBE,EAAWA,EAAWL,EAASA,EAASK,EACxCE,EAAWA,EAAWN,EAASA,EAASM,GAM3B,IAAjBL,GACFzuG,KAAK2pG,UAAUn2C,SAASm7C,EAASE,GAEb,GAAlBH,GACF1uG,KAAK4pG,WAAWp2C,SAASo7C,EAAUE,GAGvCj3B,EAAU73E,KAAKgvG,qBAAqBP,EAAezuG,KAAK2pG,YAAc9xB,EACtEA,EAAU73E,KAAKgvG,qBAAqBN,EAAgB1uG,KAAK4pG,aAAe/xB,EAElD,GAAlB62B,GAA2C,GAAjBD,GAC5BzuG,KAAK2pG,UAAUsF,WAAY,EAC3BjvG,KAAK4pG,WAAWqF,WAAY,IAE5BjvG,KAAK2pG,UAAUsF,WAAY,EAC3BjvG,KAAK4pG,WAAWqF,WAAY,GAE9BjvG,KAAK4pG,WAAWsF,QAAUT,EAC1BzuG,KAAK4pG,WAAWuF,WAAanvG,KAAK2pG,UAEJ,GAA1B3pG,KAAK4pG,WAAWsF,QAEhBlvG,KAAK2pG,UAAUyF,WADK,GAAlBV,EAC0B1uG,KAAK4pG,WAAWx5F,MAEhB,EAG9BynE,EAAU73E,KAAK2pG,UAAUzoD,UAAY22B,EACrCA,EAAU73E,KAAK4pG,WAAW1oD,UAAY22B,GAEtCA,EAAU73E,KAAK4pG,WAAW1oD,UAAY22B,CAKxC,KAAK,GADDw3B,IAAc,iBAAkB,kBAAmB,kBAAmB,oBACjEtrG,EAAI,EAAGA,EAAIsrG,EAAWzrG,OAAQG,KACG,GAApC49E,EAAS/8E,QAAQyqG,EAAWtrG,KAC9B49E,EAAS9pD,OAAO8pD,EAAS/8E,QAAQyqG,EAAWtrG,IAAK,EAIrD,OAAO8zE,IAWTxK,EAAUh7D,UAAU28F,qBAAuB,SAAUM,EAAUzhC,GAC7D,GAAI7N,IAAU,CAYd,OAXgB,IAAZsvC,EACEzhC,EAAK5e,IAAIhR,MAAMn1C,YAA6B,GAAf+kE,EAAKgL,SACpChL,EAAK/7D,OACLkuD,GAAU,GAGP6N,EAAK5e,IAAIhR,MAAMn1C,YAA6B,GAAf+kE,EAAKgL,SACrChL,EAAKiE,OACL9R,GAAU,GAGPA,GAYTqN,EAAUh7D,UAAUy6F,qBAAuB,SAAUyC,GAEnD,IAAK,GADD7gC,GAAW1uE,KAAK2Q,KAAKhQ,KAAK+tE,SACrB3qE,EAAI,EAAGA,EAAIwrG,EAAW3rG,OAAQG,IACrCwrG,EAAWxrG,GAAGyrG,SAAW9gC,EAAS6gC,EAAWxrG,GAAGgxB,GAAK/0B,KAAKkE,MAAMkM,MAChEm/F,EAAWxrG,GAAG0rG,SAAWF,EAAWxrG,GAAG4qB,MACd9qB,IAArB0rG,EAAWxrG,GAAGyiD,IAChB+oD,EAAWxrG,GAAG2rG,WAAahhC,EAAS6gC,EAAWxrG,GAAGyiD,KAAOxmD,KAAKkE,MAAMkM,MAEpEm/F,EAAWxrG,GAAG2rG,eAAa7rG,IAejCwpE,EAAUh7D,UAAU+6F,qBAAuB,SAAUmC,EAAYp+B,GAC/D,GAAItD,GAAO7tE,KAAK2pG,UACZgG,EAAY9tG,OAAO7B,KAAKkrG,IAAI7+F,MAAMgE,OAAOzG,QAAQ,KAAM,IACrB,UAAlCunE,EAAMnjE,QAAQg8F,mBAChBn8B,EAAO7tE,KAAK4pG,WAEd,KAAK,GAAI7lG,GAAI,EAAGA,EAAIwrG,EAAW3rG,OAAQG,IACrCwrG,EAAWxrG,GAAG0rG,SAAWhtG,KAAKi6B,MAAMmxC,EAAK+hC,aAAaL,EAAWxrG,GAAG4qB,GAEtEwiD,GAAM0+B,gBAAgBptG,KAAKL,IAAIutG,EAAW9hC,EAAK+hC,aAAa,MAG9D/vG,EAAOD,QAAUytE,GAIb,SAAUxtE,EAAQD,EAASM,GAsB/B,QAAS6sE,GAASp8D,EAAM3C,EAASk9F,EAAK4E,GACpC9vG,KAAKK,GAAKM,EAAKuC,aACflD,KAAK2Q,KAAOA,EAEZ3Q,KAAK0tE,gBACHE,YAAa,OACbklB,iBAAiB,EACjBC,iBAAiB,EACjBgd,OAAO,EACPC,iBAAkB,EAClBC,iBAAkB,EAClBC,aAAc,GACdC,aAAc,EACdC,UAAW,GACXhgG,MAAO,OACP02C,SAAS,EACTupD,YAAY,EACZnqG,MACEo1C,OAASl5C,QAAKyB,GAAWxB,QAAKwB,IAC9B4B,OAAQ,SAAgBlD,GACtB,MAAO,GAAKg5B,WAAWh5B,EAAM2xD,YAAY,KAE3CkpB,OAAS31B,SAAM5jD,GAAWwI,UAAOxI,KAEnCuC,OACEk1C,OAASl5C,QAAKyB,GAAWxB,QAAKwB,IAC9B4B,OAAQ,SAAgBlD,GACtB,MAAO,GAAKg5B,WAAWh5B,EAAM2xD,YAAY,KAE3CkpB,OAAS31B,SAAM5jD,GAAWwI,UAAOxI,MAIrC7D,KAAK8vG,iBAAmBA,EACxB9vG,KAAKswG,aAAepF,EACpBlrG,KAAKkE,SACLlE,KAAKuwG,aACH7d,SACA8d,UACApzB,UAGFp9E,KAAKivD,OACLjvD,KAAKwC,UAAQqB,GACb7D,KAAKs7C,OAAUiL,MAAO,EAAGC,IAAK,GAE9BxmD,KAAKgO,QAAUrN,EAAKC,UAAWZ,KAAK0tE,gBACpC1tE,KAAKywG,iBAAmB,EAExBzwG,KAAKgxC,WAAWhjC,GAChBhO,KAAKoQ,MAAQvO,QAAQ,GAAK7B,KAAKgO,QAAQoC,OAAOxG,QAAQ,KAAM,KAC5D5J,KAAK0wG,SAAW1wG,KAAKoQ,MACrBpQ,KAAKqQ,OAASrQ,KAAKswG,aAAarqG,wBAAwBoK,OACxDrQ,KAAK64E,QAAS,EAEd74E,KAAK2wG,WAAa,GAClB3wG,KAAK4wG,cAAgB,EACrB5wG,KAAK6wG,eAAiB,EAEtB7wG,KAAKovG,WAAa,EAClBpvG,KAAKkvG,QAAS,EACdlvG,KAAKmvG,WAAa,KAClBnvG,KAAKgrG,eACLhrG,KAAK8wG,cAAe,EAEpB9wG,KAAKutE,UACLvtE,KAAK+wG,eAAiB,EAGtB/wG,KAAKmB,UACLnB,KAAKmrG,WAAcD,IAAKlrG,KAAKkrG,IAAKF,YAAahrG,KAAKgrG,YAAah9F,QAAShO,KAAKgO,QAASu/D,OAAQvtE,KAAKutE,OAErG,IAAIx7B,GAAK/xC,IACTA,MAAK2Q,KAAK49D,QAAQl9B,GAAG,eAAgB,WACnCU,EAAGkd,IAAI+hD,cAAc3kG,MAAM/F,IAAMyrC,EAAGphC,KAAK29D,SAASoM,UAAY,OA5FlE,GAAIr5E,GAAQnB,EAAoB,IAE5BoB,EAEJ,SAAgCR,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,IAFrDO,GAIhCV,EAAOT,EAAoB,GAC3BkuC,EAAUluC,EAAoB,IAC9B0sE,EAAY1sE,EAAoB,KAChC8sE,EAAY9sE,EAAoB,IAuFpC6sE,GAAS16D,UAAY,GAAIu6D,GAEzBG,EAAS16D,UAAUs5F,SAAW,SAAUv7D,EAAO6gE,GACxCjxG,KAAKutE,OAAOjqE,eAAe8sC,KAC9BpwC,KAAKutE,OAAOn9B,GAAS6gE,GAEvBjxG,KAAK+wG,gBAAkB,GAGzBhkC,EAAS16D,UAAU8tE,YAAc,SAAU/vC,EAAO6gE,GAC3CjxG,KAAKutE,OAAOjqE,eAAe8sC,KAC9BpwC,KAAK+wG,gBAAkB,GAEzB/wG,KAAKutE,OAAOn9B,GAAS6gE,GAGvBlkC,EAAS16D,UAAUo5F,YAAc,SAAUr7D,GACrCpwC,KAAKutE,OAAOjqE,eAAe8sC,WACtBpwC,MAAKutE,OAAOn9B,GACnBpwC,KAAK+wG,gBAAkB,IAI3BhkC,EAAS16D,UAAU2+B,WAAa,SAAUhjC,GACxC,GAAIA,EAAS,CACX,GAAIkzC,IAAS,CACTlhD,MAAKgO,QAAQ4/D,aAAe5/D,EAAQ4/D,iBAAuC/pE,KAAxBmK,EAAQ4/D,cAC7D1sB,GAAS,EAEX,IAAI5zC,IAAU,cAAe,kBAAmB,kBAAmB,QAAS,mBAAoB,mBAAoB,eAAgB,eAAgB,YAAa,QAAS,UAAW,OAAQ,QAAS,aACtM3M,GAAK2D,oBAAoBgJ,EAAQtN,KAAKgO,QAASA,GAE/ChO,KAAK0wG,SAAW7uG,QAAQ,GAAK7B,KAAKgO,QAAQoC,OAAOxG,QAAQ,KAAM,MAChD,IAAXs3C,GAAmBlhD,KAAKivD,IAAIhR,QAC9Bj+C,KAAK8R,OACL9R,KAAK8xE,UAQX/E,EAAS16D,UAAUlR,QAAU,WAC3BnB,KAAKivD,IAAIhR,MAAQ/tC,SAASC,cAAc,OACxCnQ,KAAKivD,IAAIhR,MAAM5xC,MAAM+D,MAAQpQ,KAAKgO,QAAQoC,MAC1CpQ,KAAKivD,IAAIhR,MAAM5xC,MAAMgE,OAASrQ,KAAKqQ,OAEnCrQ,KAAKivD,IAAI+hD,cAAgB9gG,SAASC,cAAc,OAChDnQ,KAAKivD,IAAI+hD,cAAc3kG,MAAM+D,MAAQ,OACrCpQ,KAAKivD,IAAI+hD,cAAc3kG,MAAMgE,OAASrQ,KAAKqQ,OAC3CrQ,KAAKivD,IAAI+hD,cAAc3kG,MAAMkE,SAAW,WAGxCvQ,KAAKkrG,IAAMh7F,SAASy/B,gBAAgB,6BAA8B,OAClE3vC,KAAKkrG,IAAI7+F,MAAMkE,SAAW,WAC1BvQ,KAAKkrG,IAAI7+F,MAAM/F,IAAM,MACrBtG,KAAKkrG,IAAI7+F,MAAMgE,OAAS,OACxBrQ,KAAKkrG,IAAI7+F,MAAM+D,MAAQ,OACvBpQ,KAAKkrG,IAAI7+F,MAAMoM,QAAU,QACzBzY,KAAKivD,IAAIhR,MAAMvtC,YAAY1Q,KAAKkrG,MAGlCn+B,EAAS16D,UAAU6+F,kBAAoB,WACrC9iE,EAAQc,gBAAgBlvC,KAAKgrG,YAE7B,IAAIj2E,GACAq7E,EAAYpwG,KAAKgO,QAAQoiG,UAGzBzhF,EAAIwiF,IAGNp8E,GAD+B,SAA7B/0B,KAAKgO,QAAQ4/D,YAHA,EAMX5tE,KAAKoQ,MAAQggG,EANF,CASjB,IAAIgB,IAAa,EAAI9vG,EAAgB,SAAGtB,KAAKutE,OAC7C6jC,GAAWvoF,KAAK,SAAUrlB,EAAGC,GAC3B,MAAOD,GAAIC,GAAK,EAAI,GAGtB,KAAK,GAAIM,GAAI,EAAGA,EAAIqtG,EAAWxtG,OAAQG,IAAK,CAC1C,GAAIivE,GAAUo+B,EAAWrtG,IACY,IAAjC/D,KAAKutE,OAAOyF,GAASlsB,aAAmEjjD,KAA9C7D,KAAK8vG,iBAAiBt/F,WAAWwiE,KAAwE,IAA9ChzE,KAAK8vG,iBAAiBt/F,WAAWwiE,KACxIhzE,KAAKutE,OAAOyF,GAASy2B,UAAU2G,EAlBlB,GAkByCpwG,KAAKmrG,UAAWp2E,EAAGpG,GACzEA,GAAK0iF,IAITjjE,EAAQmB,gBAAgBvvC,KAAKgrG,aAC7BhrG,KAAK8wG,cAAe,GAGtB/jC,EAAS16D,UAAUi/F,cAAgB,YACP,IAAtBtxG,KAAK8wG,eACP1iE,EAAQc,gBAAgBlvC,KAAKgrG,aAC7B58D,EAAQmB,gBAAgBvvC,KAAKgrG,aAC7BhrG,KAAK8wG,cAAe,IAOxB/jC,EAAS16D,UAAUy/D,KAAO,WACxB9xE,KAAK64E,QAAS,EACT74E,KAAKivD,IAAIhR,MAAMn1C,aACe,SAA7B9I,KAAKgO,QAAQ4/D,YACf5tE,KAAK2Q,KAAKs+C,IAAI/oD,KAAKwK,YAAY1Q,KAAKivD,IAAIhR,OAExCj+C,KAAK2Q,KAAKs+C,IAAI7oD,MAAMsK,YAAY1Q,KAAKivD,IAAIhR,QAIxCj+C,KAAKivD,IAAI+hD,cAAcloG,YAC1B9I,KAAK2Q,KAAKs+C,IAAIqsB,qBAAqB5qE,YAAY1Q,KAAKivD,IAAI+hD,gBAO5DjkC,EAAS16D,UAAUP,KAAO,WACxB9R,KAAK64E,QAAS,EACV74E,KAAKivD,IAAIhR,MAAMn1C,YACjB9I,KAAKivD,IAAIhR,MAAMn1C,WAAW5G,YAAYlC,KAAKivD,IAAIhR,OAG7Cj+C,KAAKivD,IAAI+hD,cAAcloG,YACzB9I,KAAKivD,IAAI+hD,cAAcloG,WAAW5G,YAAYlC,KAAKivD,IAAI+hD,gBAU3DjkC,EAAS16D,UAAUmhD,SAAW,SAAUjN,EAAOC,GAC7CxmD,KAAKs7C,MAAMiL,MAAQA,EACnBvmD,KAAKs7C,MAAMkL,IAAMA,GAOnBumB,EAAS16D,UAAU6uC,OAAS,WAC1B,GAAI22B,IAAU,EACV05B,EAAe,CAGnBvxG,MAAKivD,IAAI+hD,cAAc3kG,MAAM/F,IAAMtG,KAAK2Q,KAAK29D,SAASoM,UAAY,IAElE,KAAK,GAAI1H,KAAWhzE,MAAKutE,OACnBvtE,KAAKutE,OAAOjqE,eAAe0vE,MACQ,IAAjChzE,KAAKutE,OAAOyF,GAASlsB,aAAmEjjD,KAA9C7D,KAAK8vG,iBAAiBt/F,WAAWwiE,KAAwE,IAA9ChzE,KAAK8vG,iBAAiBt/F,WAAWwiE,IACxIu+B,IAIN,IAA4B,IAAxBvxG,KAAK+wG,gBAAyC,IAAjBQ,EAC/BvxG,KAAK8R,WACA,CACL9R,KAAK8xE,OACL9xE,KAAKqQ,OAASxO,OAAO7B,KAAKswG,aAAajkG,MAAMgE,OAAOzG,QAAQ,KAAM,KAGlE5J,KAAKivD,IAAI+hD,cAAc3kG,MAAMgE,OAASrQ,KAAKqQ,OAAS,KACpDrQ,KAAKoQ,OAAiC,IAAzBpQ,KAAKgO,QAAQ84C,QAAmBjlD,QAAQ,GAAK7B,KAAKgO,QAAQoC,OAAOxG,QAAQ,KAAM,KAAO,CAEnG,IAAI1F,GAAQlE,KAAKkE,MACb+5C,EAAQj+C,KAAKivD,IAAIhR,KAGrBA,GAAMv3C,UAAY,gBAGlB1G,KAAKkzF,oBAEL,IAAItlB,GAAc5tE,KAAKgO,QAAQ4/D,YAC3BklB,EAAkB9yF,KAAKgO,QAAQ8kF,gBAC/BC,EAAkB/yF,KAAKgO,QAAQ+kF,eAGnC7uF,GAAMivF,iBAAmBL,EAAkB5uF,EAAMkvF,gBAAkB,EACnElvF,EAAMmvF,iBAAmBN,EAAkB7uF,EAAMovF,gBAAkB,EAEnEpvF,EAAMsvF,eAAiBxzF,KAAK2Q,KAAKs+C,IAAIqsB,qBAAqBzqE,YAAc7Q,KAAKovG,WAAapvG,KAAKoQ,MAAQ,EAAIpQ,KAAKgO,QAAQiiG,iBACxH/rG,EAAMqvF,gBAAkB,EACxBrvF,EAAMwvF,eAAiB1zF,KAAK2Q,KAAKs+C,IAAIqsB,qBAAqBzqE,YAAc7Q,KAAKovG,WAAapvG,KAAKoQ,MAAQ,EAAIpQ,KAAKgO,QAAQgiG,iBACxH9rG,EAAMuvF,gBAAkB,EAGJ,SAAhB7lB,GACF3vB,EAAM5xC,MAAM/F,IAAM,IAClB23C,EAAM5xC,MAAMnG,KAAO,IACnB+3C,EAAM5xC,MAAMoyC,OAAS,GACrBR,EAAM5xC,MAAM+D,MAAQpQ,KAAKoQ,MAAQ,KACjC6tC,EAAM5xC,MAAMgE,OAASrQ,KAAKqQ,OAAS,KACnCrQ,KAAKkE,MAAMkM,MAAQpQ,KAAK2Q,KAAK29D,SAASpoE,KAAKkK,MAC3CpQ,KAAKkE,MAAMmM,OAASrQ,KAAK2Q,KAAK29D,SAASpoE,KAAKmK,SAG5C4tC,EAAM5xC,MAAM/F,IAAM,GAClB23C,EAAM5xC,MAAMoyC,OAAS,IACrBR,EAAM5xC,MAAMnG,KAAO,IACnB+3C,EAAM5xC,MAAM+D,MAAQpQ,KAAKoQ,MAAQ,KACjC6tC,EAAM5xC,MAAMgE,OAASrQ,KAAKqQ,OAAS,KACnCrQ,KAAKkE,MAAMkM,MAAQpQ,KAAK2Q,KAAK29D,SAASloE,MAAMgK,MAC5CpQ,KAAKkE,MAAMmM,OAASrQ,KAAK2Q,KAAK29D,SAASloE,MAAMiK,QAG/CwnE,EAAU73E,KAAKwxG,gBACf35B,EAAU73E,KAAK43E,cAAgBC,GAEJ,IAAvB73E,KAAKgO,QAAQ+hG,MACf/vG,KAAKkxG,oBAELlxG,KAAKsxG,gBAGPtxG,KAAKyxG,aAAa7jC,GAEpB,MAAOiK,IAOT9K,EAAS16D,UAAUm/F,cAAgB,WACjC,GAAIpY,GAAQp5F,KAER63E,GAAU,CACdzpC,GAAQc,gBAAgBlvC,KAAKuwG,YAAY7d,OACzCtkD,EAAQc,gBAAgBlvC,KAAKuwG,YAAYC,OACzC,IAAI5iC,GAAc5tE,KAAKgO,QAAqB,YACxC0jG,MAAiD7tG,IAAnC7D,KAAKgO,QAAQ4/D,GAAatyB,MAAqBt7C,KAAKgO,QAAQ4/D,GAAatyB,SAGvFq2D,GAAe,MACI9tG,IAAnB6tG,EAAYrvG,MACdrC,KAAKs7C,MAAMkL,IAAMkrD,EAAYrvG,IAC7BsvG,GAAe,EAEjB,IAAIC,IAAiB,MACE/tG,IAAnB6tG,EAAYtvG,MACdpC,KAAKs7C,MAAMiL,MAAQmrD,EAAYtvG,IAC/BwvG,GAAiB,GAGnB5xG,KAAKwC,MAAQ,GAAIwqE,GAAUhtE,KAAKs7C,MAAMiL,MAAOvmD,KAAKs7C,MAAMkL,IAAKorD,EAAgBD,EAAc3xG,KAAKivD,IAAIhR,MAAMmR,aAAcpvD,KAAKkE,MAAMovF,gBAAiBtzF,KAAKgO,QAAQqiG,WAAYrwG,KAAKgO,QAAQ4/D,GAAanoE,SAEnL,IAAhBzF,KAAKkvG,YAAuCrrG,IAAnB7D,KAAKmvG,YAChCnvG,KAAKwC,MAAMqvG,YAAY7xG,KAAKmvG,WAAW3sG,OAIzCxC,KAAK8xG,aAAe,EAER9xG,KAAKwC,MAAMuvG,WACjB7qG,QAAQ,SAAUwyC,GACtB,GAAI/qB,GAAI+qB,EAAK/qB,EACTm8D,EAAUpxC,EAAKs4D,KACf5Y,GAAMprF,QAAyB,kBAAiB,IAAZ88E,GACtCsO,EAAM6Y,aAAatjF,EAAI,EAAG+qB,EAAK/hC,IAAKi2D,EAAa,uBAAwBwrB,EAAMl1F,MAAMkvF,iBAEnFtI,GACEn8D,GAAK,GACPyqE,EAAM6Y,aAAatjF,EAAI,EAAG+qB,EAAK/hC,IAAKi2D,EAAa,uBAAwBwrB,EAAMl1F,MAAMovF,kBAGpE,IAAjB8F,EAAM8V,SACJpkB,EACFsO,EAAM8Y,YAAYvjF,EAAGi/C,EAAa,oCAAqCwrB,EAAMprF,QAAQgiG,iBAAkB5W,EAAMl1F,MAAMwvF,gBAEnH0F,EAAM8Y,YAAYvjF,EAAGi/C,EAAa,oCAAqCwrB,EAAMprF,QAAQiiG,iBAAkB7W,EAAMl1F,MAAMsvF,kBAMzH,IAAI2e,GAAa,MACuBtuG,KAApC7D,KAAKgO,QAAQ4/D,GAAawP,WAAgEv5E,KAAzC7D,KAAKgO,QAAQ4/D,GAAawP,MAAM31B,OACnF0qD,EAAanyG,KAAKkE,MAAMkuG,gBAE1B,IAAIz1E,IAAgC,IAAvB38B,KAAKgO,QAAQ+hG,MAAiBttG,KAAKJ,IAAIrC,KAAKgO,QAAQoiG,UAAW+B,GAAcnyG,KAAKgO,QAAQkiG,aAAe,GAAKiC,EAAanyG,KAAKgO,QAAQkiG,aAAe,EAyBpK,OAtBIlwG,MAAK8xG,aAAe9xG,KAAKoQ,MAAQusB,IAAmC,IAAzB38B,KAAKgO,QAAQ84C,SAC1D9mD,KAAKoQ,MAAQpQ,KAAK8xG,aAAen1E,EACjC38B,KAAKgO,QAAQoC,MAAQpQ,KAAKoQ,MAAQ,KAClCg+B,EAAQmB,gBAAgBvvC,KAAKuwG,YAAY7d,OACzCtkD,EAAQmB,gBAAgBvvC,KAAKuwG,YAAYC,QACzCxwG,KAAKkhD,SACL22B,GAAU,GAGH73E,KAAK8xG,aAAe9xG,KAAKoQ,MAAQusB,IAAmC,IAAzB38B,KAAKgO,QAAQ84C,SAAoB9mD,KAAKoQ,MAAQpQ,KAAK0wG,UACnG1wG,KAAKoQ,MAAQ3N,KAAKJ,IAAIrC,KAAK0wG,SAAU1wG,KAAK8xG,aAAen1E,GACzD38B,KAAKgO,QAAQoC,MAAQpQ,KAAKoQ,MAAQ,KAClCg+B,EAAQmB,gBAAgBvvC,KAAKuwG,YAAY7d,OACzCtkD,EAAQmB,gBAAgBvvC,KAAKuwG,YAAYC,QACzCxwG,KAAKkhD,SACL22B,GAAU,IAEVzpC,EAAQmB,gBAAgBvvC,KAAKuwG,YAAY7d,OACzCtkD,EAAQmB,gBAAgBvvC,KAAKuwG,YAAYC,QACzC34B,GAAU,GAGPA,GAGT9K,EAAS16D,UAAUu9F,aAAe,SAAUrtG,GAC1C,MAAOvC,MAAKwC,MAAMotG,aAAartG,IAGjCwqE,EAAS16D,UAAU03F,cAAgB,SAAUh1E,GAC3C,MAAO/0B,MAAKwC,MAAMunG,cAAch1E,IAYlCg4C,EAAS16D,UAAU4/F,aAAe,SAAUtjF,EAAG84B,EAAMmmB,EAAalnE,EAAW2rG,GAE3E,GAAIjiE,GAAQhC,EAAQwB,cAAc,MAAO5vC,KAAKuwG,YAAYC,OAAQxwG,KAAKivD,IAAIhR,MAC3E7N,GAAM1pC,UAAYA,EAClB0pC,EAAM+R,UAAYsF,EACE,SAAhBmmB,GACFx9B,EAAM/jC,MAAMnG,KAAO,IAAMlG,KAAKgO,QAAQkiG,aAAe,KACrD9/D,EAAM/jC,MAAMs6C,UAAY,UAExBvW,EAAM/jC,MAAMjG,MAAQ,IAAMpG,KAAKgO,QAAQkiG,aAAe,KACtD9/D,EAAM/jC,MAAMs6C,UAAY,QAG1BvW,EAAM/jC,MAAM/F,IAAMqoB,EAAI,GAAM0jF,EAAkBryG,KAAKgO,QAAQmiG,aAAe,KAE1E1oD,GAAQ,EAER,IAAI6qD,GAAe7vG,KAAKJ,IAAIrC,KAAKkE,MAAM4wF,eAAgB90F,KAAKkE,MAAM8vF,eAC9Dh0F,MAAK8xG,aAAerqD,EAAK7jD,OAAS0uG,IACpCtyG,KAAK8xG,aAAerqD,EAAK7jD,OAAS0uG,IAYtCvlC,EAAS16D,UAAU6/F,YAAc,SAAUvjF,EAAGi/C,EAAalnE,EAAWi2B,EAAQvsB,GAC5E,IAAoB,IAAhBpQ,KAAKkvG,OAAiB,CACxB,GAAIx1D,GAAOtL,EAAQwB,cAAc,MAAO5vC,KAAKuwG,YAAY7d,MAAO1yF,KAAKivD,IAAI+hD,cACzEt3D,GAAKhzC,UAAYA,EACjBgzC,EAAKyI,UAAY,GAEG,SAAhByrB,EACFl0B,EAAKrtC,MAAMnG,KAAOlG,KAAKoQ,MAAQusB,EAAS,KAExC+c,EAAKrtC,MAAMjG,MAAQpG,KAAKoQ,MAAQusB,EAAS,KAG3C+c,EAAKrtC,MAAM+D,MAAQA,EAAQ,KAC3BspC,EAAKrtC,MAAM/F,IAAMqoB,EAAI,OASzBo+C,EAAS16D,UAAUo/F,aAAe,SAAU7jC,GAI1C,GAHAx/B,EAAQc,gBAAgBlvC,KAAKuwG,YAAYnzB,WAGDv5E,KAApC7D,KAAKgO,QAAQ4/D,GAAawP,WAAgEv5E,KAAzC7D,KAAKgO,QAAQ4/D,GAAawP,MAAM31B,KAAoB,CACvG,GAAI21B,GAAQhvC,EAAQwB,cAAc,MAAO5vC,KAAKuwG,YAAYnzB,MAAOp9E,KAAKivD,IAAIhR,MAC1Em/B,GAAM12E,UAAY,4BAA8BknE,EAChDwP,EAAMj7B,UAAYniD,KAAKgO,QAAQ4/D,GAAawP,MAAM31B,SAGJ5jD,KAA1C7D,KAAKgO,QAAQ4/D,GAAawP,MAAM/wE,OAClC1L,EAAK6L,WAAW4wE,EAAOp9E,KAAKgO,QAAQ4/D,GAAawP,MAAM/wE,OAGrC,SAAhBuhE,EACFwP,EAAM/wE,MAAMnG,KAAOlG,KAAKkE,MAAMkuG,gBAAkB,KAEhDh1B,EAAM/wE,MAAMjG,MAAQpG,KAAKkE,MAAMkuG,gBAAkB,KAGnDh1B,EAAM/wE,MAAM+D,MAAQpQ,KAAKqQ,OAAS,KAIpC+9B,EAAQmB,gBAAgBvvC,KAAKuwG,YAAYnzB,QAQ3CrQ,EAAS16D,UAAU6gF,mBAAqB,WAEtC,KAAM,mBAAqBlzF,MAAKkE,OAAQ,CACtC,GAAIquG,GAAYriG,SAAS8kF,eAAe,KACpCE,EAAmBhlF,SAASC,cAAc,MAC9C+kF,GAAiBxuF,UAAY,mCAC7BwuF,EAAiBxkF,YAAY6hG,GAC7BvyG,KAAKivD,IAAIhR,MAAMvtC,YAAYwkF,GAE3Bl1F,KAAKkE,MAAMkvF,gBAAkB8B,EAAiBlyC,aAC9ChjD,KAAKkE,MAAM8vF,eAAiBkB,EAAiBnkF,YAE7C/Q,KAAKivD,IAAIhR,MAAM/7C,YAAYgzF,GAG7B,KAAM,mBAAqBl1F,MAAKkE,OAAQ,CACtC,GAAIsuG,GAAYtiG,SAAS8kF,eAAe,KACpCG,EAAmBjlF,SAASC,cAAc,MAC9CglF,GAAiBzuF,UAAY,mCAC7ByuF,EAAiBzkF,YAAY8hG,GAC7BxyG,KAAKivD,IAAIhR,MAAMvtC,YAAYykF,GAE3Bn1F,KAAKkE,MAAMovF,gBAAkB6B,EAAiBnyC,aAC9ChjD,KAAKkE,MAAM4wF,eAAiBK,EAAiBpkF,YAE7C/Q,KAAKivD,IAAIhR,MAAM/7C,YAAYizF,GAG7B,KAAM,mBAAqBn1F,MAAKkE,OAAQ,CACtC,GAAIuuG,GAAYviG,SAAS8kF,eAAe,KACpC0d,EAAmBxiG,SAASC,cAAc,MAC9CuiG,GAAiBhsG,UAAY,mCAC7BgsG,EAAiBhiG,YAAY+hG,GAC7BzyG,KAAKivD,IAAIhR,MAAMvtC,YAAYgiG,GAE3B1yG,KAAKkE,MAAMkuG,gBAAkBM,EAAiB1vD,aAC9ChjD,KAAKkE,MAAMyuG,eAAiBD,EAAiB3hG,YAE7C/Q,KAAKivD,IAAIhR,MAAM/7C,YAAYwwG,KAI/B7yG,EAAOD,QAAUmtE,GAIb,SAAUltE,EAAQD,GAQtB,QAASotE,GAAUzmB,EAAOC,EAAKorD,EAAgBD,EAAczzB,EAAiBoV,GAC5E,GAAIsf,GAAYjvG,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,IAAmBA,UAAU,GAC3EkvG,EAAqBlvG,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,IAAmBA,UAAU,EAsBxF,IApBA3D,KAAK8yG,YAAc,EAAG,EAAG,EAAG,IAC5B9yG,KAAK+yG,YAAc,IAAM,GAAK,EAAG,GACjC/yG,KAAKgzG,YAAc,KAEnBhzG,KAAKk+E,gBAAkBA,EACvBl+E,KAAKszF,gBAAkBA,EACvBtzF,KAAKozD,OAAS7M,EACdvmD,KAAKqzD,KAAO7M,EAEZxmD,KAAKwC,MAAQ,EACbxC,KAAKizG,cAAgB,EACrBjzG,KAAKkzG,gBAAkB,EACvBlzG,KAAKmzG,iBAELnzG,KAAK4yG,UAAYA,EACjB5yG,KAAK4xG,eAAiBA,EACtB5xG,KAAK2xG,aAAeA,EAEpB3xG,KAAK6yG,mBAAqBA,EAEtBjB,GAAkBD,EAAc,CAClC,GAAI5/D,GAAK/xC,KACLmqF,EAAe,SAAsB5nF,GACvC,GAAI6wG,GAAU7wG,EAAQA,GAASwvC,EAAGmhE,gBAAkBnhE,EAAGghE,WAAWhhE,EAAGkhE,cACrE,OAAI1wG,IAASwvC,EAAGmhE,gBAAkBnhE,EAAGghE,WAAWhhE,EAAGkhE,eAAwBlhE,EAAGmhE,gBAAkBnhE,EAAGghE,WAAWhhE,EAAGkhE,cAA7C,GAC3DG,EAAUrhE,EAAGmhE,gBAAkBnhE,EAAGghE,WAAWhhE,EAAGkhE,cAEhDG,EAGPxB,KACF5xG,KAAKozD,QAAiC,EAAvBpzD,KAAKkzG,gBAAsBlzG,KAAK+yG,WAAW/yG,KAAKizG,cAC/DjzG,KAAKozD,OAAS+2B,EAAanqF,KAAKozD,SAG9Bu+C,IACF3xG,KAAKqzD,MAAQrzD,KAAKkzG,gBAAkBlzG,KAAK+yG,WAAW/yG,KAAKizG,cACzDjzG,KAAKqzD,KAAO82B,EAAanqF,KAAKqzD,OAEhCrzD,KAAKmzG,kBAITnmC,EAAU36D,UAAUghG,cAAgB,SAAU/f,GAC5CtzF,KAAKszF,gBAAkBA,GAGzBtmB,EAAU36D,UAAUihG,UAAY,SAAUp1B,GACxCl+E,KAAKk+E,gBAAkBA,GAGzBlR,EAAU36D,UAAU8gG,eAAiB,WACnC,GAAI73D,GAAQt7C,KAAKqzD,KAAOrzD,KAAKozD,MAC7BpzD,MAAKwC,MAAQxC,KAAKk+E,gBAAkB5iC,CACpC,IAAIi4D,GAAmBvzG,KAAKszF,gBAAkBtzF,KAAKwC,MAC/CgxG,EAAmBl4D,EAAQ,EAAI74C,KAAKi6B,MAAMj6B,KAAKoxD,IAAIvY,GAAS74C,KAAKqxD,MAAQ,CAE7E9zD,MAAKizG,cAAgB,EACrBjzG,KAAKkzG,gBAAkBzwG,KAAKgnB,IAAI,GAAI+pF,EAEpC,IAAIjtD,GAAQ,CACRitD,GAAmB,IACrBjtD,EAAQitD,EAIV,KAAK,GADDC,IAAgB,EACX14F,EAAIwrC,EAAO9jD,KAAKwiB,IAAIlK,IAAMtY,KAAKwiB,IAAIuuF,GAAmBz4F,IAAK,CAClE/a,KAAKkzG,gBAAkBzwG,KAAKgnB,IAAI,GAAI1O,EACpC,KAAK,GAAIlN,GAAI,EAAGA,EAAI7N,KAAK+yG,WAAWnvG,OAAQiK,IAAK,CAE/C,GADe7N,KAAKkzG,gBAAkBlzG,KAAK+yG,WAAWllG,IACtC0lG,EAAkB,CAChCE,GAAgB,EAChBzzG,KAAKizG,aAAeplG,CACpB,QAGJ,IAAsB,IAAlB4lG,EACF,QAKNzmC,EAAU36D,UAAUqhG,SAAW,SAAUnxG,GACvC,MAAOA,IAASvC,KAAKkzG,gBAAkBlzG,KAAK8yG,WAAW9yG,KAAKizG,gBAAmB,GAGjFjmC,EAAU36D,UAAU8hD,QAAU,WAC5B,MAAOn0D,MAAKkzG,gBAAkBlzG,KAAK+yG,WAAW/yG,KAAKizG,eAGrDjmC,EAAU36D,UAAUshG,cAAgB,WAClC,GAAIC,GAAY5zG,KAAKkzG,gBAAkBlzG,KAAK8yG,WAAW9yG,KAAKizG,aAC5D,OAAOjzG,MAAK4vG,aAAa5vG,KAAKozD,QAAUwgD,EAAY5zG,KAAKozD,OAASwgD,GAAaA,IAGjF5mC,EAAU36D,UAAUwhG,YAAc,SAAUx6B,GAC1C,GAAI5wE,GAAc4wE,EAAQnlB,YAAY,EAKtC,OAJuC,kBAA5Bl0D,MAAK6yG,qBACdpqG,EAAczI,KAAK6yG,mBAAmBx5B,IAGb,gBAAhB5wE,GACF,GAAKA,EACoB,gBAAhBA,GACTA,EAEA4wE,EAAQnlB,YAAY,IAI/B8Y,EAAU36D,UAAU0/F,SAAW,WAI7B,IAAK,GAHDrf,MACAngF,EAAOvS,KAAKm0D,UACZ2/C,GAAgBvhG,EAAOvS,KAAKozD,OAAS7gD,GAAQA,EACxCxO,EAAI/D,KAAKozD,OAAS0gD,EAAc9zG,KAAKqzD,KAAOtvD,EAAI,KAASA,GAAKwO,EACjExO,GAAK/D,KAAKozD,QAEZs/B,EAAM7tF,MAAOmtG,MAAOhyG,KAAK0zG,SAAS3vG,GAAI4qB,EAAG3uB,KAAK4vG,aAAa7rG,GAAI4T,IAAK3X,KAAK6zG,YAAY9vG,IAGzF,OAAO2uF,IAGT1lB,EAAU36D,UAAUw/F,YAAc,SAAU7tG,GAC1C,GAAI+vG,GAAa/zG,KAAKizG,aAClBe,EAAWh0G,KAAKozD,OAChB6gD,EAASj0G,KAAKqzD,KAEdthB,EAAK/xC,KACLk0G,EAAoB,WACtBniE,EAAGmhE,iBAAmB,GAEpBiB,EAAoB,WACtBpiE,EAAGmhE,iBAAmB,EAGpBlvG,GAAMivG,cAAgB,GAAKjzG,KAAKizG,cAAgB,GAAKjvG,EAAMivG,aAAe,GAAKjzG,KAAKizG,aAAe,IAE5FjvG,EAAMivG,aAAejzG,KAAKizG,cAEnCjzG,KAAKizG,aAAe,EACF,GAAdc,EACFG,KAEAA,IACAA,OAIFl0G,KAAKizG,aAAe,EACF,GAAdc,EACFI,KAEAA,IACAA,MAYJ,KAPA,GACIC,IADQpwG,EAAM+tG,WACF/tG,EAAM4rG,aAAa,IAC/ByE,EAAYrwG,EAAMmwD,UAAYnwD,EAAMxB,MAEpCkP,GAAO,EACP2iC,EAAQ,GAEJ3iC,GAAQ2iC,IAAU,GAAG,CAG3Br0C,KAAKwC,MAAQ6xG,GAAar0G,KAAK+yG,WAAW/yG,KAAKizG,cAAgBjzG,KAAKkzG,gBACpE,IAAIoB,GAAWt0G,KAAKk+E,gBAAkBl+E,KAAKwC,KAG3CxC,MAAKozD,OAAS4gD,EACdh0G,KAAKqzD,KAAOrzD,KAAKozD,OAASkhD,CAE1B,IAAIC,GAAiBv0G,KAAKqzD,KAAOrzD,KAAKwC,MAClCoxG,EAAY5zG,KAAKkzG,gBAAkBlzG,KAAK8yG,WAAW9yG,KAAKizG,cACxDuB,EAAcx0G,KAAK2zG,gBAAkB3vG,EAAM2vG,eAE/C,IAAI3zG,KAAK4yG,UAAW,CAClB,GAAI6B,GAAaL,EAAYG,CAC7Bv0G,MAAKqzD,MAAQohD,EAAaz0G,KAAKwC,MAC/BxC,KAAKozD,OAASpzD,KAAKqzD,KAAOihD,MAErBt0G,MAAK4xG,gBAIR5xG,KAAKozD,QAAUohD,EAAcx0G,KAAKwC,MAClCxC,KAAKqzD,KAAOrzD,KAAKozD,OAASkhD,IAJ1Bt0G,KAAKozD,QAAUwgD,EAAYY,EAAcx0G,KAAKwC,MAC9CxC,KAAKqzD,KAAOrzD,KAAKozD,OAASkhD,EAM9B,KAAKt0G,KAAK2xG,cAAgB3xG,KAAKqzD,KAAO4gD,EAAS,KAE7CE,IACAziG,GAAO,MAHT,CAMA,IAAK1R,KAAK4xG,gBAAkB5xG,KAAKozD,OAAS4gD,EAAW,KAAS,CAC5D,KAAIh0G,KAAK4yG,WAAaoB,GAAY,GAE3B,CAELG,IACAziG,GAAO,CACP,UALA4T,QAAQH,KAAK,uDAQbnlB,KAAK4xG,gBAAkB5xG,KAAK2xG,cAAgB2C,EAAWL,EAASD,GAClEE,IACAxiG,GAAO,GAGTA,GAAO,KAIXs7D,EAAU36D,UAAUu9F,aAAe,SAAUrtG,GAC3C,MAAOvC,MAAKk+E,iBAAmB37E,EAAQvC,KAAKozD,QAAUpzD,KAAKwC,OAG7DwqE,EAAU36D,UAAU03F,cAAgB,SAAU2K,GAC5C,OAAQ10G,KAAKk+E,gBAAkBw2B,GAAU10G,KAAKwC,MAAQxC,KAAKozD,QAG7DvzD,EAAOD,QAAUotE,GAIb,SAAUntE,EAAQD,EAASM,GA0B/B,QAAS+sE,GAAWkE,EAAO6B,EAAShlE,EAASi9F,GAC3CjrG,KAAKK,GAAK2yE,CACV,IAAI1lE,IAAU,WAAY,QAAS,OAAQ,mBAAoB,WAAY,aAAc,SAAU,gBAAiB,SAAU,sBAAuB,oBACrJtN,MAAKgO,QAAUrN,EAAK0M,sBAAsBC,EAAQU,GAClDhO,KAAK20G,sBAAwC9wG,KAApBstE,EAAMzqE,UAC/B1G,KAAKirG,yBAA2BA,EAChCjrG,KAAK40G,aAAe,EACpB50G,KAAKkyC,OAAOi/B,GACkB,GAA1BnxE,KAAK20G,oBACP30G,KAAKirG,yBAAyB,IAAM,GAEtCjrG,KAAKqvE,aACLrvE,KAAK8mD,YAA4BjjD,KAAlBstE,EAAMrqB,SAA+BqqB,EAAMrqB,QAlC5D,GAAIvlD,GAAWrB,EAAoB,IAE/BsB,EAEJ,SAAgCV,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,IAFnDS,GAIlCZ,EAAOT,EAAoB,GAE3BkrG,GADUlrG,EAAoB,IACvBA,EAAoB,MAC3BmrG,EAAQnrG,EAAoB,KAC5BorG,EAASprG,EAAoB,IA+BjC+sE,GAAW56D,UAAU+9D,SAAW,SAAUn+B,GAC3B,MAATA,GACFjyC,KAAKqvE,UAAYp9B,EACQ,GAArBjyC,KAAKgO,QAAQ6a,MACfloB,EAAK+M,WAAW1N,KAAKqvE,UAAW,SAAU7rE,EAAGC,GAC3C,MAAOD,GAAEuxB,EAAItxB,EAAEsxB,EAAI,GAAK,KAI5B/0B,KAAKqvE,cAITpC,EAAW56D,UAAUoyE,SAAW,WAC9B,MAAOzkF,MAAKqvE,WAOdpC,EAAW56D,UAAUw9F,gBAAkB,SAAU/0F,GAC/C9a,KAAK40G,aAAe95F,GAOtBmyD,EAAW56D,UAAU2+B,WAAa,SAAUhjC,GAC1C,OAAgBnK,KAAZmK,EAAuB,CACzB,GAAIV,IAAU,WAAY,QAAS,OAAQ,mBAAoB,WAAY,SAAU,sBAAuB,oBAC5G3M,GAAK2D,oBAAoBgJ,EAAQtN,KAAKgO,QAASA,GAGd,kBAAtBA,GAAQquE,aACjBruE,EAAQquE,YACNC,SAAUtuE,EAAQquE,aAItB17E,EAAKmN,aAAa9N,KAAKgO,QAASA,EAAS,iBACzCrN,EAAKmN,aAAa9N,KAAKgO,QAASA,EAAS,cACzCrN,EAAKmN,aAAa9N,KAAKgO,QAASA,EAAS,UAErCA,EAAQu8F,eAC6C,WAAnD,EAAI/oG,EAAkB,SAAGwM,EAAQu8F,gBAC/Bv8F,EAAQu8F,cAAcC,kBACqB,WAAzCx8F,EAAQu8F,cAAcC,gBACxBxqG,KAAKgO,QAAQu8F,cAAc/D,MAAQ,EACe,WAAzCx4F,EAAQu8F,cAAcC,gBAC/BxqG,KAAKgO,QAAQu8F,cAAc/D,MAAQ,GAEnCxmG,KAAKgO,QAAQu8F,cAAcC,gBAAkB,cAC7CxqG,KAAKgO,QAAQu8F,cAAc/D,MAAQ,OAY/Cv5B,EAAW56D,UAAU6/B,OAAS,SAAUi/B,GACtCnxE,KAAKmxE,MAAQA,EACbnxE,KAAKuwC,QAAU4gC,EAAM5gC,SAAW,QAChCvwC,KAAK0G,UAAYyqE,EAAMzqE,WAAa1G,KAAK0G,WAAa,kBAAoB1G,KAAKirG,yBAAyB,GAAK,GAC7GjrG,KAAK8mD,YAA4BjjD,KAAlBstE,EAAMrqB,SAA+BqqB,EAAMrqB,QAC1D9mD,KAAKqM,MAAQ8kE,EAAM9kE,MACnBrM,KAAKgxC,WAAWmgC,EAAMnjE,UAUxBi/D,EAAW56D,UAAUo3F,UAAY,SAAU2G,EAAWiB,EAAYlG,EAAWp2E,EAAGpG,GAC9E,OAAiB9qB,IAAbsnG,GAAuC,MAAbA,EAAmB,CAE/CA,GAAcD,IADJh7F,SAASy/B,gBAAgB,6BAA8B,OACzCq7D,eAAiBh9F,QAAShO,KAAKgO,QAASu/D,QAASvtE,OAQ3E,WANS6D,IAALkxB,GAAuB,MAALA,IACpBA,EAAI,OAEGlxB,IAAL8qB,GAAuB,MAALA,IACpBA,EAAI,GAAM0iF,GAEJrxG,KAAKgO,QAAQ3B,OACnB,IAAK,OACHg/F,EAAMwJ,SAAS70G,KAAM+0B,EAAGpG,EAAGyhF,EAAWiB,EAAYlG,EAClD,MACF,KAAK,SACL,IAAK,QACHG,EAAOuJ,SAAS70G,KAAM+0B,EAAGpG,EAAGyhF,EAAWiB,EAAYlG,EACnD,MACF,KAAK,MACHC,EAAKyJ,SAAS70G,KAAM+0B,EAAGpG,EAAGyhF,EAAWiB,EAAYlG,GAGrD,OAAS2J,KAAM3J,EAAUD,IAAK96D,MAAOpwC,KAAKuwC,QAASq9B,YAAa5tE,KAAKgO,QAAQg8F,mBAG/E/8B,EAAW56D,UAAUg8F,UAAY,SAAUhpB,GAGzC,IAAK,GAFDvqC,GAAOuqC,EAAU,GAAG12D,EACpBosB,EAAOsqC,EAAU,GAAG12D,EACf9gB,EAAI,EAAGA,EAAIw3E,EAAUzhF,OAAQiK,IACpCitC,EAAOA,EAAOuqC,EAAUx3E,GAAG8gB,EAAI02D,EAAUx3E,GAAG8gB,EAAImsB,EAChDC,EAAOA,EAAOsqC,EAAUx3E,GAAG8gB,EAAI02D,EAAUx3E,GAAG8gB,EAAIosB,CAElD,QAAS34C,IAAK04C,EAAMz4C,IAAK04C,EAAMivD,iBAAkBhqG,KAAKgO,QAAQg8F,mBAGhEnqG,EAAOD,QAAUqtE,GAIb,SAAUptE,EAAQD,EAASM,GAO/B,QAAS60G,GAAS/hC,EAAShlE,IAH3B,GAAIogC,GAAUluC,EAAoB,IAC9BorG,EAASprG,EAAoB,IAIjC60G,GAASF,SAAW,SAAU1jC,EAAOp8C,EAAGpG,EAAGyhF,EAAWiB,EAAYlG,GAChE,GAAI6J,GAA0B,GAAb3D,EAGb4D,EAAU7mE,EAAQqB,cAAc,OAAQ07D,EAAUH,YAAaG,EAAUD,IAC7E+J,GAAQ/kE,eAAe,KAAM,IAAKnb,GAClCkgF,EAAQ/kE,eAAe,KAAM,IAAKvhB,EAAIqmF,GACtCC,EAAQ/kE,eAAe,KAAM,QAASkgE,GACtC6E,EAAQ/kE,eAAe,KAAM,SAAU,EAAI8kE,GAC3CC,EAAQ/kE,eAAe,KAAM,QAAS,cAEtC,IAAIglE,GAAWzyG,KAAKi6B,MAAM,GAAM0zE,GAC5B+E,EAAgBhkC,EAAMnjE,QAAQq8F,SAASj6F,MACvC5N,EAAQ2yG,EAAgBD,EACxBE,EAAa3yG,KAAKi6B,MAAM,GAAM20E,GAC9BgE,EAAa5yG,KAAKi6B,MAAM,IAAO20E,GAE/B10E,EAASl6B,KAAKi6B,OAAO0zE,EAAY,EAAI8E,GAAY,EAKrD,IAHA9mE,EAAQqC,QAAQ1b,EAAI,GAAMmgF,EAAWv4E,EAAQhO,EAAIqmF,EAAaI,EAAa,EAAGF,EAAUE,EAAYjkC,EAAMzqE,UAAY,WAAYykG,EAAUH,YAAaG,EAAUD,IAAK/5B,EAAM9kE,OAC9K+hC,EAAQqC,QAAQ1b,EAAI,IAAMmgF,EAAWv4E,EAAS,EAAGhO,EAAIqmF,EAAaK,EAAa,EAAGH,EAAUG,EAAYlkC,EAAMzqE,UAAY,WAAYykG,EAAUH,YAAaG,EAAUD,IAAK/5B,EAAM9kE,OAE1I,GAApC8kE,EAAMnjE,QAAQquE,WAAWnuE,QAAiB,CAC5C,GAAI8hC,IACF3jC,MAAO8kE,EAAMnjE,QAAQquE,WAAWhwE,MAChCD,OAAQ+kE,EAAMnjE,QAAQquE,WAAWjwE,OACjC+jC,KAAMghC,EAAMnjE,QAAQquE,WAAWlsC,KAAO3tC,EACtCkE,UAAWyqE,EAAMzqE,UAEnB0nC,GAAQ2B,UAAUhb,EAAI,GAAMmgF,EAAWv4E,EAAQhO,EAAIqmF,EAAaI,EAAa,EAAGplE,EAAem7D,EAAUH,YAAaG,EAAUD,KAChI98D,EAAQ2B,UAAUhb,EAAI,IAAMmgF,EAAWv4E,EAAS,EAAGhO,EAAIqmF,EAAaK,EAAa,EAAGrlE,EAAem7D,EAAUH,YAAaG,EAAUD,OAUxI6J,EAAS7Y,KAAO,SAAUva,EAAU2zB,EAAoBnK,GACtD,GAEIoK,GACAhuG,EAAKiuG,EACLrkC,EACAptE,EAAG8J,EALH4nG,KACAC,KAKAC,EAAY,CAGhB,KAAK5xG,EAAI,EAAGA,EAAI49E,EAAS/9E,OAAQG,IAE/B,GADAotE,EAAQg6B,EAAU59B,OAAOoU,EAAS59E,IACN,QAAxBotE,EAAMnjE,QAAQ3B,QACM,IAAlB8kE,EAAMrqB,cAA0EjjD,KAArDsnG,EAAUn9F,QAAQu/D,OAAO/8D,WAAWmxE,EAAS59E,MAA0E,IAArDonG,EAAUn9F,QAAQu/D,OAAO/8D,WAAWmxE,EAAS59E,KAC5I,IAAK8J,EAAI,EAAGA,EAAIynG,EAAmB3zB,EAAS59E,IAAIH,OAAQiK,IACtD4nG,EAAa5wG,MACX2qG,SAAU8F,EAAmB3zB,EAAS59E,IAAI8J,GAAG2hG,SAC7CE,WAAY4F,EAAmB3zB,EAAS59E,IAAI8J,GAAG6hG,WAC/CD,SAAU6F,EAAmB3zB,EAAS59E,IAAI8J,GAAG4hG,SAC7C16E,EAAGugF,EAAmB3zB,EAAS59E,IAAI8J,GAAGknB,EACtCyxB,IAAK8uD,EAAmB3zB,EAAS59E,IAAI8J,GAAG24C,IACxC73B,EAAG2mF,EAAmB3zB,EAAS59E,IAAI8J,GAAG8gB,EACtCqkD,QAAS2O,EAAS59E,GAClBqsC,MAAOklE,EAAmB3zB,EAAS59E,IAAI8J,GAAGuiC,QAE5CulE,GAAa,CAMrB,IAAkB,IAAdA,EAiBJ,IAZAF,EAAa5sF,KAAK,SAAUrlB,EAAGC,GAC7B,MAAID,GAAEgsG,WAAa/rG,EAAE+rG,SACZhsG,EAAEwvE,QAAUvvE,EAAEuvE,SAAW,EAAI,EAE7BxvE,EAAEgsG,SAAW/rG,EAAE+rG,WAK1BuF,EAASa,sBAAsBF,EAAeD,GAGzC1xG,EAAI,EAAGA,EAAI0xG,EAAa7xG,OAAQG,IAAK,CACxCotE,EAAQg6B,EAAU59B,OAAOkoC,EAAa1xG,GAAGivE,QACzC,IAAI09B,OAA8C7sG,IAAnCstE,EAAMnjE,QAAQq8F,SAASqG,SAAwBv/B,EAAMnjE,QAAQq8F,SAASqG,SAAW,GAAMv/B,EAAMnjE,QAAQq8F,SAASj6F,KAE7H7I,GAAMkuG,EAAa1xG,GAAGyrG,QACtB,IAAIqG,GAAe,CACnB,QAA2BhyG,KAAvB6xG,EAAcnuG,GACZxD,EAAI,EAAI0xG,EAAa7xG,SACvB2xG,EAAe9yG,KAAKwiB,IAAIwwF,EAAa1xG,EAAI,GAAGyrG,SAAWjoG,IAEzDiuG,EAAWT,EAASe,iBAAiBP,EAAcpkC,EAAOu/B,OACrD,CACL,GAAI/rC,GAAU5gE,GAAK2xG,EAAcnuG,GAAKwuG,OAASL,EAAcnuG,GAAKyuG,SAC/CN,GAAcnuG,GAAKyuG,QAClCrxC,GAAU8wC,EAAa7xG,SACzB2xG,EAAe9yG,KAAKwiB,IAAIwwF,EAAa9wC,GAAS6qC,SAAWjoG,IAE3DiuG,EAAWT,EAASe,iBAAiBP,EAAcpkC,EAAOu/B,GAC1DgF,EAAcnuG,GAAKyuG,UAAY,GAEH,IAAxB7kC,EAAMnjE,QAAQ0X,QAAwD,IAAtCyrD,EAAMnjE,QAAQk/F,oBAC5CuI,EAAa1xG,GAAG0rG,SAAWt+B,EAAMyjC,cACnCiB,EAAeH,EAAcnuG,GAAK0uG,oBAClCP,EAAcnuG,GAAK0uG,qBAAuB9kC,EAAMyjC,aAAea,EAAa1xG,GAAG0rG,WAE/EoG,EAAeH,EAAcnuG,GAAK2uG,oBAClCR,EAAcnuG,GAAK2uG,qBAAuB/kC,EAAMyjC,aAAea,EAAa1xG,GAAG0rG,WAElC,IAAtCt+B,EAAMnjE,QAAQq8F,SAASC,aAChCkL,EAASplG,MAAQolG,EAASplG,MAAQslG,EAAcnuG,GAAKwuG,OACrDP,EAAS74E,QAAU+4E,EAAcnuG,GAAKyuG,SAAWR,EAASplG,MAAQ,GAAMolG,EAASplG,OAASslG,EAAcnuG,GAAKwuG,OAAS,IAI1H,GAAII,GAAYX,EAASplG,MACrBm2C,EAAQkvD,EAAa1xG,GAAGyrG,QAa5B,QAVkC3rG,IAA9B4xG,EAAa1xG,GAAG2rG,YAClByG,EAAYV,EAAa1xG,GAAG2rG,WAAa+F,EAAa1xG,GAAGyrG,SACzDjpD,GAAqB,GAAZ4vD,GAET5vD,GAASivD,EAAS74E,OAGpByR,EAAQqC,QAAQ8V,EAAOkvD,EAAa1xG,GAAG0rG,SAAWoG,EAAcM,EAAWhlC,EAAMyjC,aAAea,EAAa1xG,GAAG0rG,SAAUt+B,EAAMzqE,UAAY,WAAYykG,EAAUH,YAAaG,EAAUD,IAAK/5B,EAAM9kE,QAG3J,IAArC8kE,EAAMnjE,QAAQquE,WAAWnuE,QAAkB,CAC7C,GAAIkoG,IACF5G,SAAUiG,EAAa1xG,GAAGyrG,SAC1BC,SAAUgG,EAAa1xG,GAAG0rG,SAAWoG,EACrC9gF,EAAG0gF,EAAa1xG,GAAGgxB,EACnBpG,EAAG8mF,EAAa1xG,GAAG4qB,EACnBqkD,QAASyiC,EAAa1xG,GAAGivE,QACzB5iC,MAAOqlE,EAAa1xG,GAAGqsC,MAEzBk7D,GAAOpP,MAAMka,GAAYjlC,EAAOg6B,EAAWqK,EAAS74E,WAY1Do4E,EAASa,sBAAwB,SAAUF,EAAeD,GAGxD,IAAK,GADDF,GACKxxG,EAAI,EAAGA,EAAI0xG,EAAa7xG,OAAQG,IACnCA,EAAI,EAAI0xG,EAAa7xG,SACvB2xG,EAAe9yG,KAAKwiB,IAAIwwF,EAAa1xG,EAAI,GAAGyrG,SAAWiG,EAAa1xG,GAAGyrG,WAErEzrG,EAAI,IACNwxG,EAAe9yG,KAAKL,IAAImzG,EAAc9yG,KAAKwiB,IAAIwwF,EAAa1xG,EAAI,GAAGyrG,SAAWiG,EAAa1xG,GAAGyrG,YAE3E,IAAjB+F,QAC8C1xG,KAA5C6xG,EAAcD,EAAa1xG,GAAGyrG,YAChCkG,EAAcD,EAAa1xG,GAAGyrG,WAC5BuG,OAAQ,EACRC,SAAU,EACVE,oBAAqB,EACrBD,oBAAqB,IAGzBP,EAAcD,EAAa1xG,GAAGyrG,UAAUuG,QAAU,IAcxDhB,EAASe,iBAAmB,SAAUP,EAAcpkC,EAAOu/B,GACzD,GAAItgG,GAAOusB,CAqBX,OApBI44E,GAAepkC,EAAMnjE,QAAQq8F,SAASj6F,OAASmlG,EAAe,GAChEnlG,EAAQmlG,EAAe7E,EAAWA,EAAW6E,EAE7C54E,EAAS,EAC4B,SAAjCw0C,EAAMnjE,QAAQq8F,SAAS9qB,MACzB5iD,GAAU,GAAM44E,EAC0B,UAAjCpkC,EAAMnjE,QAAQq8F,SAAS9qB,QAChC5iD,GAAU,GAAM44E,KAIlBnlG,EAAQ+gE,EAAMnjE,QAAQq8F,SAASj6F,MAC/BusB,EAAS,EAC4B,SAAjCw0C,EAAMnjE,QAAQq8F,SAAS9qB,MACzB5iD,GAAU,GAAMw0C,EAAMnjE,QAAQq8F,SAASj6F,MACG,UAAjC+gE,EAAMnjE,QAAQq8F,SAAS9qB,QAChC5iD,GAAU,GAAMw0C,EAAMnjE,QAAQq8F,SAASj6F,SAIlCA,MAAOA,EAAOusB,OAAQA,IAGjCo4E,EAASzG,iBAAmB,SAAUmH,EAAchJ,EAAa9qB,EAAU00B,EAAYzoC,GACrF,GAAI6nC,EAAa7xG,OAAS,EAAG,CAE3B6xG,EAAa5sF,KAAK,SAAUrlB,EAAGC,GAC7B,MAAID,GAAEgsG,WAAa/rG,EAAE+rG,SACZhsG,EAAEwvE,QAAUvvE,EAAEuvE,SAAW,EAAI,EAE7BxvE,EAAEgsG,SAAW/rG,EAAE+rG,UAG1B,IAAIkG,KAEJX,GAASa,sBAAsBF,EAAeD,GAC9ChJ,EAAY4J,GAActB,EAASuB,kBAAkBZ,EAAeD,GACpEhJ,EAAY4J,GAAYrM,iBAAmBp8B,EAC3C+T,EAAS98E,KAAKwxG,KAIlBtB,EAASuB,kBAAoB,SAAUZ,EAAeD,GAIpD,IAAK,GAHDluG,GACAuzC,EAAO26D,EAAa,GAAGhG,SACvB10D,EAAO06D,EAAa,GAAGhG,SAClB1rG,EAAI,EAAGA,EAAI0xG,EAAa7xG,OAAQG,IACvCwD,EAAMkuG,EAAa1xG,GAAGyrG,aACK3rG,KAAvB6xG,EAAcnuG,IAChBuzC,EAAOA,EAAO26D,EAAa1xG,GAAG0rG,SAAWgG,EAAa1xG,GAAG0rG,SAAW30D,EACpEC,EAAOA,EAAO06D,EAAa1xG,GAAG0rG,SAAWgG,EAAa1xG,GAAG0rG,SAAW10D,GAEhE06D,EAAa1xG,GAAG0rG,SAAW,EAC7BiG,EAAcnuG,GAAK0uG,qBAAuBR,EAAa1xG,GAAG0rG,SAE1DiG,EAAcnuG,GAAK2uG,qBAAuBT,EAAa1xG,GAAG0rG,QAIhE,KAAK,GAAI8G,KAAQb,GACXA,EAAcpyG,eAAeizG,KAC/Bz7D,EAAOA,EAAO46D,EAAca,GAAMN,oBAAsBP,EAAca,GAAMN,oBAAsBn7D,EAClGA,EAAOA,EAAO46D,EAAca,GAAML,oBAAsBR,EAAca,GAAML,oBAAsBp7D,EAClGC,EAAOA,EAAO26D,EAAca,GAAMN,oBAAsBP,EAAca,GAAMN,oBAAsBl7D,EAClGA,EAAOA,EAAO26D,EAAca,GAAML,oBAAsBR,EAAca,GAAML,oBAAsBn7D,EAItG,QAAS34C,IAAK04C,EAAMz4C,IAAK04C,IAG3Bl7C,EAAOD,QAAUm1G,GAIb,SAAUl1G,EAAQD,EAASM,GAY/B,QAASorG,GAAOt4B,EAAShlE,IA2CzB,QAASwoG,GAAiBrlC,EAAOslC,GAE/B,MADAA,OAA2C,KAAnBA,KAAsCA,GAE5DpqG,MAAOoqG,EAAepqG,OAAS8kE,EAAMnjE,QAAQquE,WAAWhwE,MACxDD,OAAQqqG,EAAerqG,QAAU+kE,EAAMnjE,QAAQquE,WAAWjwE,OAC1D+jC,KAAMsmE,EAAetmE,MAAQghC,EAAMnjE,QAAQquE,WAAWlsC,KACtDzpC,UAAW+vG,EAAe/vG,WAAayqE,EAAMzqE,WAIjD,QAASgwG,GAAYvL,EAAWh6B,GAC9B,GAAIhqE,OAAWtD,EAUf,OARIsnG,GAAUn9F,SAAWm9F,EAAUn9F,QAAQquE,YAAc8uB,EAAUn9F,QAAQquE,WAAWC,UAA4D,kBAAzC6uB,GAAUn9F,QAAQquE,WAAWC,WACpIn1E,EAAWgkG,EAAUn9F,QAAQquE,WAAWC,UAItCnL,EAAMA,MAAMnjE,SAAWmjE,EAAMA,MAAMnjE,QAAQquE,YAAclL,EAAMA,MAAMnjE,QAAQquE,WAAWC,UAA8D,kBAA3CnL,GAAMA,MAAMnjE,QAAQquE,WAAWC,WAC5In1E,EAAWgqE,EAAMA,MAAMnjE,QAAQquE,WAAWC,UAErCn1E,EAxET,GAAI5F,GAAWrB,EAAoB,IAE/BsB,EAEJ,SAAgCV,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,IAFnDS,GAIlC6sC,EAAUluC,EAAoB,GAalCorG,GAAOpP,KAAO,SAAU5qB,EAASH,EAAOg6B,EAAWxuE,GACjDA,EAASA,GAAU,CAGnB,KAAK,GAFDx1B,GAAWuvG,EAAYvL,EAAWh6B,GAE7BptE,EAAI,EAAGA,EAAIutE,EAAQ1tE,OAAQG,IAClC,GAAKoD,EAGE,CACL,GAAIsvG,GAAiBtvG,EAASmqE,EAAQvtE,GAAIotE,IACnB,IAAnBslC,GAAgI,gBAA1E,KAAnBA,EAAiC,aAAc,EAAIj1G,EAAkB,SAAGi1G,KAC7GroE,EAAQ2B,UAAUuhC,EAAQvtE,GAAGyrG,SAAW7yE,EAAQ20C,EAAQvtE,GAAG0rG,SAAU+G,EAAiBrlC,EAAOslC,GAAiBtL,EAAUH,YAAaG,EAAUD,IAAK55B,EAAQvtE,GAAGqsC,WAJjKhC,GAAQ2B,UAAUuhC,EAAQvtE,GAAGyrG,SAAW7yE,EAAQ20C,EAAQvtE,GAAG0rG,SAAU+G,EAAiBrlC,GAAQg6B,EAAUH,YAAaG,EAAUD,IAAK55B,EAAQvtE,GAAGqsC,QAUrJk7D,EAAOuJ,SAAW,SAAU1jC,EAAOp8C,EAAGpG,EAAGyhF,EAAWiB,EAAYlG,GAC9D,GAAI6J,GAA0B,GAAb3D,EAGb4D,EAAU7mE,EAAQqB,cAAc,OAAQ07D,EAAUH,YAAaG,EAAUD,IAC7E+J,GAAQ/kE,eAAe,KAAM,IAAKnb,GAClCkgF,EAAQ/kE,eAAe,KAAM,IAAKvhB,EAAIqmF,GACtCC,EAAQ/kE,eAAe,KAAM,QAASkgE,GACtC6E,EAAQ/kE,eAAe,KAAM,SAAU,EAAI8kE,GAC3CC,EAAQ/kE,eAAe,KAAM,QAAS,eAGtC9B,EAAQ2B,UAAUhb,EAAI,GAAMq7E,EAAWzhF,EAAG6nF,EAAiBrlC,GAAQg6B,EAAUH,YAAaG,EAAUD,MA2BtGrrG,EAAOD,QAAU0rG,GAIb,SAAUzrG,EAAQD,EAASM;kBAM/B,QAASy2G,GAAK3jC,EAAShlE,IAFvB,GAAIogC,GAAUluC,EAAoB,GAIlCy2G,GAAKtJ,SAAW,SAAU/7B,EAASH,GAC/B,GAAe,MAAXG,GACIA,EAAQ1tE,OAAS,EAAG,CASpB,MAL2C,IAAvCutE,EAAMnjE,QAAQu8F,cAAcr8F,QACxByoG,EAAKC,YAAYtlC,EAASH,GAE1BwlC,EAAKE,QAAQvlC,KAOjCqlC,EAAK9B,SAAW,SAAU1jC,EAAOp8C,EAAGpG,EAAGyhF,EAAWiB,EAAYlG,GAC1D,GACI/U,GAAM0gB,EADN9B,EAA0B,GAAb3D,EAGb4D,EAAU7mE,EAAQqB,cAAc,OAAQ07D,EAAUH,YAAaG,EAAUD,IA2B7E,IA1BA+J,EAAQ/kE,eAAe,KAAM,IAAKnb,GAClCkgF,EAAQ/kE,eAAe,KAAM,IAAKvhB,EAAIqmF,GACtCC,EAAQ/kE,eAAe,KAAM,QAASkgE,GACtC6E,EAAQ/kE,eAAe,KAAM,SAAU,EAAI8kE,GAC3CC,EAAQ/kE,eAAe,KAAM,QAAS,eAEtCkmD,EAAOhoD,EAAQqB,cAAc,OAAQ07D,EAAUH,YAAaG,EAAUD,KACtE9U,EAAKlmD,eAAe,KAAM,QAASihC,EAAMzqE,eACrB7C,KAAhBstE,EAAM9kE,OACN+pF,EAAKlmD,eAAe,KAAM,QAASihC,EAAM9kE,OAG7C+pF,EAAKlmD,eAAe,KAAM,IAAK,IAAMnb,EAAI,IAAMpG,EAAI,MAAQoG,EAAIq7E,GAAa,IAAMzhF,GAC9C,GAAhCwiD,EAAMnjE,QAAQo8F,OAAOl8F,UACrB4oG,EAAW1oE,EAAQqB,cAAc,OAAQ07D,EAAUH,YAAaG,EAAUD,KAClC,OAApC/5B,EAAMnjE,QAAQo8F,OAAOx8B,YACrBkpC,EAAS5mE,eAAe,KAAM,IAAK,IAAMnb,EAAI,MAAQpG,EAAIqmF,GAAc,IAAMjgF,EAAI,IAAMpG,EAAI,MAAQoG,EAAIq7E,GAAa,IAAMzhF,EAAI,MAAQoG,EAAIq7E,GAAa,KAAOzhF,EAAIqmF,IAElK8B,EAAS5mE,eAAe,KAAM,IAAK,IAAMnb,EAAI,IAAMpG,EAAI,KAAYoG,EAAI,KAAOpG,EAAIqmF,GAAc,MAAajgF,EAAIq7E,GAAa,KAAOzhF,EAAIqmF,GAAc,KAAOjgF,EAAIq7E,GAAa,IAAMzhF,GAEzLmoF,EAAS5mE,eAAe,KAAM,QAASihC,EAAMzqE,UAAY,sBACtB7C,KAA/BstE,EAAMnjE,QAAQo8F,OAAO/9F,OAAsD,KAA/B8kE,EAAMnjE,QAAQo8F,OAAO/9F,OACjEyqG,EAAS5mE,eAAe,KAAM,QAASihC,EAAMnjE,QAAQo8F,OAAO/9F,QAI5B,GAApC8kE,EAAMnjE,QAAQquE,WAAWnuE,QAAiB,CAC1C,GAAI8hC,IACA3jC,MAAO8kE,EAAMnjE,QAAQquE,WAAWhwE,MAChCD,OAAQ+kE,EAAMnjE,QAAQquE,WAAWjwE,OACjC+jC,KAAMghC,EAAMnjE,QAAQquE,WAAWlsC,KAC/BzpC,UAAWyqE,EAAMzqE,UAErB0nC,GAAQ2B,UAAUhb,EAAI,GAAMq7E,EAAWzhF,EAAGqhB,EAAem7D,EAAUH,YAAaG,EAAUD,OAIlGyL,EAAKpJ,YAAc,SAAUwJ,EAAW5lC,EAAO6lC,EAAc7L,GAEzD,GAAoC,GAAhCh6B,EAAMnjE,QAAQo8F,OAAOl8F,QAAiB,CACtC,GAAIyhG,GAAY9tG,OAAOspG,EAAUD,IAAI7+F,MAAMgE,OAAOzG,QAAQ,KAAM,KAC5DktG,EAAW1oE,EAAQqB,cAAc,OAAQ07D,EAAUH,YAAaG,EAAUD,KAC1EjmG,EAAO,GACgC,IAAvCksE,EAAMnjE,QAAQu8F,cAAcr8F,UAC5BjJ,EAAO,IAEX,IAAIgyG,GACAC,EAAO,CAEPA,GADoC,OAApC/lC,EAAMnjE,QAAQo8F,OAAOx8B,YACd,EACoC,UAApCuD,EAAMnjE,QAAQo8F,OAAOx8B,YACrB+hC,EAEAltG,KAAKL,IAAIK,KAAKJ,IAAI,EAAG8uE,EAAMyjC,cAAejF,GAGjDsH,EADoC,SAApC9lC,EAAMnjE,QAAQo8F,OAAOx8B,aAA0C,MAAhBopC,OAAwCnzG,IAAhBmzG,EAC/D,IAAMD,EAAU,GAAG,GAAK,IAAMA,EAAU,GAAG,GAAK,IAAM/2G,KAAKm3G,cAAcJ,EAAW9xG,GAAM,GAAS,KAAO+xG,EAAaA,EAAapzG,OAAS,GAAG,GAAK,IAAMozG,EAAaA,EAAapzG,OAAS,GAAG,GAAK,IAAM5D,KAAKm3G,cAAcH,EAAc/xG,GAAM,GAAQ+xG,EAAa,GAAG,GAAK,IAAMA,EAAa,GAAG,GAAK,KAE3S,IAAMD,EAAU,GAAG,GAAK,IAAMA,EAAU,GAAG,GAAK,IAAM/2G,KAAKm3G,cAAcJ,EAAW9xG,GAAM,GAAS,KAAOiyG,EAAO,KAAOH,EAAU,GAAG,GAAK,KAGtJD,EAAS5mE,eAAe,KAAM,QAASihC,EAAMzqE,UAAY,iBACtB7C,KAA/BstE,EAAMnjE,QAAQo8F,OAAO/9F,OACrByqG,EAAS5mE,eAAe,KAAM,QAASihC,EAAMnjE,QAAQo8F,OAAO/9F,OAEhEyqG,EAAS5mE,eAAe,KAAM,IAAK+mE,KAU3CN,EAAKza,KAAO,SAAU6a,EAAW5lC,EAAOg6B,GACpC,GAAiB,MAAb4L,OAAkClzG,IAAbkzG,EAAwB,CAC7C,GAAI3gB,GAAOhoD,EAAQqB,cAAc,OAAQ07D,EAAUH,YAAaG,EAAUD,IAC1E9U,GAAKlmD,eAAe,KAAM,QAASihC,EAAMzqE,eACrB7C,KAAhBstE,EAAM9kE,OACN+pF,EAAKlmD,eAAe,KAAM,QAASihC,EAAM9kE,MAG7C,IAAIpH,GAAO,GACgC,IAAvCksE,EAAMnjE,QAAQu8F,cAAcr8F,UAC5BjJ,EAAO,KAGXmxF,EAAKlmD,eAAe,KAAM,IAAK,IAAM6mE,EAAU,GAAG,GAAK,IAAMA,EAAU,GAAG,GAAK,IAAM/2G,KAAKm3G,cAAcJ,EAAW9xG,GAAM,MAIjI0xG,EAAKQ,cAAgB,SAAUJ,EAAW9xG,EAAMmyG,GAC5C,GAAIL,EAAUnzG,OAAS,EAEnB,MAAO,EAEX,IAAIqI,GAAIhH,CACR,IAAImyG,EACA,IAAK,GAAIrzG,GAAIgzG,EAAUnzG,OAAS,EAAGG,EAAI,EAAGA,IACtCkI,GAAK8qG,EAAUhzG,GAAG,GAAK,IAAMgzG,EAAUhzG,GAAG,GAAK,QAGnD,KAAK,GAAIA,GAAI,EAAGA,EAAIgzG,EAAUnzG,OAAQG,IAClCkI,GAAK8qG,EAAUhzG,GAAG,GAAK,IAAMgzG,EAAUhzG,GAAG,GAAK,GAGvD,OAAOkI,IAUX0qG,EAAKU,mBAAqB,SAAU7iF,GAEhC,GAAI8iF,GAAIpsF,EAAIC,EAAIC,EAAImsF,EAAKC,EACrBvrG,IACJA,GAAEpH,MAAMpC,KAAKi6B,MAAMlI,EAAK,GAAGg7E,UAAW/sG,KAAKi6B,MAAMlI,EAAK,GAAGi7E,WAGzD,KAAK,GADD7rG,GAAS4wB,EAAK5wB,OACTG,EAAI,EAAGA,EAAIH,EAAS,EAAGG,IAE5BuzG,EAAU,GAALvzG,EAASywB,EAAK,GAAKA,EAAKzwB,EAAI,GACjCmnB,EAAKsJ,EAAKzwB,GACVonB,EAAKqJ,EAAKzwB,EAAI,GACdqnB,EAAKrnB,EAAI,EAAIH,EAAS4wB,EAAKzwB,EAAI,GAAKonB,EASpCosF,GACI/H,WAAY8H,EAAG9H,SAAW,EAAItkF,EAAGskF,SAAWrkF,EAAGqkF,WAjBnC,EAAI,GAkBhBC,WAAY6H,EAAG7H,SAAW,EAAIvkF,EAAGukF,SAAWtkF,EAAGskF,WAlBnC,EAAI,IAoBpB+H,GACIhI,UAAWtkF,EAAGskF,SAAW,EAAIrkF,EAAGqkF,SAAWpkF,EAAGokF,WArBlC,EAAI,GAsBhBC,UAAWvkF,EAAGukF,SAAW,EAAItkF,EAAGskF,SAAWrkF,EAAGqkF,WAtBlC,EAAI,IA0BpBxjG,EAAEpH,MAAM0yG,EAAI/H,SAAU+H,EAAI9H,WAC1BxjG,EAAEpH,MAAM2yG,EAAIhI,SAAUgI,EAAI/H,WAC1BxjG,EAAEpH,MAAMsmB,EAAGqkF,SAAUrkF,EAAGskF,UAG5B,OAAOxjG,IAcX0qG,EAAKC,YAAc,SAAUpiF,EAAM28C,GAC/B,GAAIq1B,GAAQr1B,EAAMnjE,QAAQu8F,cAAc/D,KACxC,IAAa,GAATA,OAAwB3iG,KAAV2iG,EACd,MAAOxmG,MAAKq3G,mBAAmB7iF,EAE/B,IAAI8iF,GAAIpsF,EAAIC,EAAIC,EAAImsF,EAAKC,EAAKC,EAAIC,EAAIC,EAAI/nD,EAAG35C,EAAG2hG,EAAGhpF,EAC/CipF,EAAQC,EAAQC,EAASC,EAASC,EAASC,EAC3CjsG,IACJA,GAAEpH,MAAMpC,KAAKi6B,MAAMlI,EAAK,GAAGg7E,UAAW/sG,KAAKi6B,MAAMlI,EAAK,GAAGi7E,WAEzD,KAAK,GADD7rG,GAAS4wB,EAAK5wB,OACTG,EAAI,EAAGA,EAAIH,EAAS,EAAGG,IAE5BuzG,EAAU,GAALvzG,EAASywB,EAAK,GAAKA,EAAKzwB,EAAI,GACjCmnB,EAAKsJ,EAAKzwB,GACVonB,EAAKqJ,EAAKzwB,EAAI,GACdqnB,EAAKrnB,EAAI,EAAIH,EAAS4wB,EAAKzwB,EAAI,GAAKonB,EAEpCssF,EAAKh1G,KAAKusD,KAAKvsD,KAAKgnB,IAAI6tF,EAAG9H,SAAWtkF,EAAGskF,SAAU,GAAK/sG,KAAKgnB,IAAI6tF,EAAG7H,SAAWvkF,EAAGukF,SAAU,IAC5FiI,EAAKj1G,KAAKusD,KAAKvsD,KAAKgnB,IAAIyB,EAAGskF,SAAWrkF,EAAGqkF,SAAU,GAAK/sG,KAAKgnB,IAAIyB,EAAGukF,SAAWtkF,EAAGskF,SAAU,IAC5FkI,EAAKl1G,KAAKusD,KAAKvsD,KAAKgnB,IAAI0B,EAAGqkF,SAAWpkF,EAAGokF,SAAU,GAAK/sG,KAAKgnB,IAAI0B,EAAGskF,SAAWrkF,EAAGqkF,SAAU,IAY5FoI,EAASp1G,KAAKgnB,IAAIkuF,EAAInR,GACtBuR,EAAUt1G,KAAKgnB,IAAIkuF,EAAI,EAAInR,GAC3BsR,EAASr1G,KAAKgnB,IAAIiuF,EAAIlR,GACtBwR,EAAUv1G,KAAKgnB,IAAIiuF,EAAI,EAAIlR,GAC3B0R,EAASz1G,KAAKgnB,IAAIguF,EAAIjR,GACtByR,EAAUx1G,KAAKgnB,IAAIguF,EAAI,EAAIjR,GAE3B52C,EAAI,EAAIqoD,EAAU,EAAIC,EAASJ,EAASE,EACxC/hG,EAAI,EAAI8hG,EAAU,EAAIF,EAASC,EAASE,EACxCJ,EAAI,EAAIM,GAAUA,EAASJ,GACvBF,EAAI,IACJA,EAAI,EAAIA,GAEZhpF,EAAI,EAAIipF,GAAUA,EAASC,GACvBlpF,EAAI,IACJA,EAAI,EAAIA,GAGZ2oF,GACI/H,WAAYwI,EAAUV,EAAG9H,SAAW5/C,EAAI1kC,EAAGskF,SAAWyI,EAAU9sF,EAAGqkF,UAAYoI,EAC/EnI,WAAYuI,EAAUV,EAAG7H,SAAW7/C,EAAI1kC,EAAGukF,SAAWwI,EAAU9sF,EAAGskF,UAAYmI,GAGnFJ,GACIhI,UAAWuI,EAAU7sF,EAAGskF,SAAWv5F,EAAIkV,EAAGqkF,SAAWwI,EAAU5sF,EAAGokF,UAAY5gF,EAC9E6gF,UAAWsI,EAAU7sF,EAAGukF,SAAWx5F,EAAIkV,EAAGskF,SAAWuI,EAAU5sF,EAAGqkF,UAAY7gF,GAG9D,GAAhB2oF,EAAI/H,UAAiC,GAAhB+H,EAAI9H,WACzB8H,EAAMrsF,GAEU,GAAhBssF,EAAIhI,UAAiC,GAAhBgI,EAAI/H,WACzB+H,EAAMrsF,GAEVlf,EAAEpH,MAAM0yG,EAAI/H,SAAU+H,EAAI9H,WAC1BxjG,EAAEpH,MAAM2yG,EAAIhI,SAAUgI,EAAI/H,WAC1BxjG,EAAEpH,MAAMsmB,EAAGqkF,SAAUrkF,EAAGskF,UAG5B,OAAOxjG,IAUf0qG,EAAKE,QAAU,SAAUriF,GAGrB,IAAK,GADDvoB,MACKlI,EAAI,EAAGA,EAAIywB,EAAK5wB,OAAQG,IAC7BkI,EAAEpH,MAAM2vB,EAAKzwB,GAAGyrG,SAAUh7E,EAAKzwB,GAAG0rG,UAEtC,OAAOxjG,IAGXpM,EAAOD,QAAU+2G,GAIb,SAAU92G,EAAQD,EAASM,GAiB/B,QAASktE,GAAOz8D,EAAM3C,EAASmqG,EAAMrI,GACnC9vG,KAAK2Q,KAAOA,EACZ3Q,KAAK0tE,gBACHx/D,SAAS,EACT6hG,OAAO,EACPqI,SAAU,GACVC,YAAa,EACbnyG,MACE4gD,SAAS,EACTv2C,SAAU,YAEZnK,OACE0gD,SAAS,EACTv2C,SAAU,cAIdvQ,KAAKm4G,KAAOA,EACZn4G,KAAKgO,QAAUrN,EAAKC,UAAWZ,KAAK0tE,gBACpC1tE,KAAK8vG,iBAAmBA,EAExB9vG,KAAKgrG,eACLhrG,KAAKivD,OACLjvD,KAAKutE,UACLvtE,KAAK+wG,eAAiB,EACtB/wG,KAAKmB,UACLnB,KAAKmrG,WAAcD,IAAKlrG,KAAKkrG,IAAKF,YAAahrG,KAAKgrG,YAAah9F,QAAShO,KAAKgO,QAASu/D,OAAQvtE,KAAKutE,QAErGvtE,KAAKgxC,WAAWhjC,GAzClB,GAAI3M,GAAQnB,EAAoB,IAE5BoB,EAEJ,SAAgCR,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,IAFrDO,GAIhCV,EAAOT,EAAoB,GAC3BkuC,EAAUluC,EAAoB,IAC9B0sE,EAAY1sE,EAAoB,IAoCpCktE,GAAO/6D,UAAY,GAAIu6D,GAEvBQ,EAAO/6D,UAAU0hC,MAAQ,WACvB/zC,KAAKutE,UACLvtE,KAAK+wG,eAAiB,GAGxB3jC,EAAO/6D,UAAUs5F,SAAW,SAAUv7D,EAAO6gE,GAGG,GAA1CA,EAAajjG,QAAQsqG,oBAClBt4G,KAAKutE,OAAOjqE,eAAe8sC,KAC9BpwC,KAAKutE,OAAOn9B,GAAS6gE,GAEvBjxG,KAAK+wG,gBAAkB,IAI3B3jC,EAAO/6D,UAAU8tE,YAAc,SAAU/vC,EAAO6gE,GAC9CjxG,KAAKutE,OAAOn9B,GAAS6gE,GAGvB7jC,EAAO/6D,UAAUo5F,YAAc,SAAUr7D,GACnCpwC,KAAKutE,OAAOjqE,eAAe8sC,WACtBpwC,MAAKutE,OAAOn9B,GACnBpwC,KAAK+wG,gBAAkB,IAI3B3jC,EAAO/6D,UAAUlR,QAAU,WACzBnB,KAAKivD,IAAIhR,MAAQ/tC,SAASC,cAAc,OACxCnQ,KAAKivD,IAAIhR,MAAMv3C,UAAY,aAC3B1G,KAAKivD,IAAIhR,MAAM5xC,MAAMkE,SAAW,WAChCvQ,KAAKivD,IAAIhR,MAAM5xC,MAAM/F,IAAM,OAC3BtG,KAAKivD,IAAIhR,MAAM5xC,MAAMoM,QAAU,QAE/BzY,KAAKivD,IAAIspD,SAAWroG,SAASC,cAAc,OAC3CnQ,KAAKivD,IAAIspD,SAAS7xG,UAAY,kBAC9B1G,KAAKivD,IAAIspD,SAASlsG,MAAMkE,SAAW,WACnCvQ,KAAKivD,IAAIspD,SAASlsG,MAAM/F,IAAM,MAE9BtG,KAAKkrG,IAAMh7F,SAASy/B,gBAAgB,6BAA8B,OAClE3vC,KAAKkrG,IAAI7+F,MAAMkE,SAAW,WAC1BvQ,KAAKkrG,IAAI7+F,MAAM/F,IAAM,MACrBtG,KAAKkrG,IAAI7+F,MAAM+D,MAAQpQ,KAAKgO,QAAQoqG,SAAW,EAAI,KACnDp4G,KAAKkrG,IAAI7+F,MAAMgE,OAAS,OAExBrQ,KAAKivD,IAAIhR,MAAMvtC,YAAY1Q,KAAKkrG,KAChClrG,KAAKivD,IAAIhR,MAAMvtC,YAAY1Q,KAAKivD,IAAIspD,WAMtCnrC,EAAO/6D,UAAUP,KAAO,WAElB9R,KAAKivD,IAAIhR,MAAMn1C,YACjB9I,KAAKivD,IAAIhR,MAAMn1C,WAAW5G,YAAYlC,KAAKivD,IAAIhR,QAQnDmvB,EAAO/6D,UAAUy/D,KAAO,WAEjB9xE,KAAKivD,IAAIhR,MAAMn1C,YAClB9I,KAAK2Q,KAAKs+C,IAAItT,OAAOjrC,YAAY1Q,KAAKivD,IAAIhR,QAI9CmvB,EAAO/6D,UAAU2+B,WAAa,SAAUhjC,GACtC,GAAIV,IAAU,UAAW,cAAe,QAAS,OAAQ,QACzD3M,GAAK2D,oBAAoBgJ,EAAQtN,KAAKgO,QAASA,IAGjDo/D,EAAO/6D,UAAU6uC,OAAS,WACxB,GAAIqwD,GAAe,EACfH,GAAa,EAAI9vG,EAAgB,SAAGtB,KAAKutE,OAC7C6jC,GAAWvoF,KAAK,SAAUrlB,EAAGC,GAC3B,MAAOD,GAAIC,GAAK,EAAI,GAGtB,KAAK,GAAIM,GAAI,EAAGA,EAAIqtG,EAAWxtG,OAAQG,IAAK,CAC1C,GAAIivE,GAAUo+B,EAAWrtG,EACW,IAAhC/D,KAAKutE,OAAOyF,GAASlsB,aAAkEjjD,KAA9C7D,KAAK8vG,iBAAiBt/F,WAAWwiE,IAAuE,GAA7ChzE,KAAK8vG,iBAAiBt/F,WAAWwiE,IACvIu+B,IAIJ,GAAuC,GAAnCvxG,KAAKgO,QAAQhO,KAAKm4G,MAAMrxD,SAA2C,GAAvB9mD,KAAK+wG,gBAA+C,GAAxB/wG,KAAKgO,QAAQE,SAAoC,GAAhBqjG,EAC3GvxG,KAAK8R,WACA,CAoBL,GAnBA9R,KAAK8xE,OACmC,YAApC9xE,KAAKgO,QAAQhO,KAAKm4G,MAAM5nG,UAA8D,eAApCvQ,KAAKgO,QAAQhO,KAAKm4G,MAAM5nG,UAC5EvQ,KAAKivD,IAAIhR,MAAM5xC,MAAMnG,KAAO,MAC5BlG,KAAKivD,IAAIhR,MAAM5xC,MAAMs6C,UAAY,OACjC3mD,KAAKivD,IAAIspD,SAASlsG,MAAMs6C,UAAY,OACpC3mD,KAAKivD,IAAIspD,SAASlsG,MAAMnG,KAAOlG,KAAKgO,QAAQoqG,SAAW,GAAK,KAC5Dp4G,KAAKivD,IAAIspD,SAASlsG,MAAMjG,MAAQ,GAChCpG,KAAKkrG,IAAI7+F,MAAMnG,KAAO,MACtBlG,KAAKkrG,IAAI7+F,MAAMjG,MAAQ,KAEvBpG,KAAKivD,IAAIhR,MAAM5xC,MAAMjG,MAAQ,MAC7BpG,KAAKivD,IAAIhR,MAAM5xC,MAAMs6C,UAAY,QACjC3mD,KAAKivD,IAAIspD,SAASlsG,MAAMs6C,UAAY,QACpC3mD,KAAKivD,IAAIspD,SAASlsG,MAAMjG,MAAQpG,KAAKgO,QAAQoqG,SAAW,GAAK,KAC7Dp4G,KAAKivD,IAAIspD,SAASlsG,MAAMnG,KAAO,GAC/BlG,KAAKkrG,IAAI7+F,MAAMjG,MAAQ,MACvBpG,KAAKkrG,IAAI7+F,MAAMnG,KAAO,IAGgB,YAApClG,KAAKgO,QAAQhO,KAAKm4G,MAAM5nG,UAA8D,aAApCvQ,KAAKgO,QAAQhO,KAAKm4G,MAAM5nG,SAC5EvQ,KAAKivD,IAAIhR,MAAM5xC,MAAM/F,IAAM,EAAIzE,OAAO7B,KAAK2Q,KAAKs+C,IAAItT,OAAOtvC,MAAM/F,IAAIsD,QAAQ,KAAM,KAAO,KAC1F5J,KAAKivD,IAAIhR,MAAM5xC,MAAMoyC,OAAS,OACzB,CACL,GAAI+5D,GAAmBx4G,KAAK2Q,KAAK29D,SAAS3yB,OAAOtrC,OAASrQ,KAAK2Q,KAAK29D,SAASgE,gBAAgBjiE,MAC7FrQ,MAAKivD,IAAIhR,MAAM5xC,MAAMoyC,OAAS,EAAI+5D,EAAmB32G,OAAO7B,KAAK2Q,KAAKs+C,IAAItT,OAAOtvC,MAAM/F,IAAIsD,QAAQ,KAAM,KAAO,KAChH5J,KAAKivD,IAAIhR,MAAM5xC,MAAM/F,IAAM,GAGH,GAAtBtG,KAAKgO,QAAQ+hG,OACf/vG,KAAKivD,IAAIhR,MAAM5xC,MAAM+D,MAAQpQ,KAAKivD,IAAIspD,SAAS1nG,YAAc,GAAK,KAClE7Q,KAAKivD,IAAIspD,SAASlsG,MAAMjG,MAAQ,GAChCpG,KAAKivD,IAAIspD,SAASlsG,MAAMnG,KAAO,GAC/BlG,KAAKkrG,IAAI7+F,MAAM+D,MAAQ,QAEvBpQ,KAAKivD,IAAIhR,MAAM5xC,MAAM+D,MAAQpQ,KAAKgO,QAAQoqG,SAAW,GAAKp4G,KAAKivD,IAAIspD,SAAS1nG,YAAc,GAAK,KAC/F7Q,KAAKy4G,kBAIP,KAAK,GADDloE,GAAU,GACLxsC,EAAI,EAAGA,EAAIqtG,EAAWxtG,OAAQG,IAAK,CAC1C,GAAIivE,GAAUo+B,EAAWrtG,EACW,IAAhC/D,KAAKutE,OAAOyF,GAASlsB,aAAkEjjD,KAA9C7D,KAAK8vG,iBAAiBt/F,WAAWwiE,IAAuE,GAA7ChzE,KAAK8vG,iBAAiBt/F,WAAWwiE,KACvIziC,GAAWvwC,KAAKutE,OAAOyF,GAASziC,QAAU,UAG9CvwC,KAAKivD,IAAIspD,SAASp2D,UAAY5R,EAC9BvwC,KAAKivD,IAAIspD,SAASlsG,MAAMgjD,WAAa,IAAOrvD,KAAKgO,QAAQoqG,SAAWp4G,KAAKgO,QAAQqqG,YAAc,OAInGjrC,EAAO/6D,UAAUomG,gBAAkB,WACjC,GAAIz4G,KAAKivD,IAAIhR,MAAMn1C,WAAY,CAC7B,GAAIsoG,IAAa,EAAI9vG,EAAgB,SAAGtB,KAAKutE,OAC7C6jC,GAAWvoF,KAAK,SAAUrlB,EAAGC,GAC3B,MAAOD,GAAIC,GAAK,EAAI,IAItB2qC,EAAQoB,cAAcxvC,KAAKgrG,YAE3B,IAAIzxD,GAAU/wC,OAAO2lE,iBAAiBnuE,KAAKivD,IAAIhR,OAAOy6D,WAClDvH,EAAatvG,OAAO03C,EAAQ3vC,QAAQ,KAAM,KAC1CmrB,EAAIo8E,EACJf,EAAYpwG,KAAKgO,QAAQoqG,SACzB/G,EAAa,IAAOrxG,KAAKgO,QAAQoqG,SACjCzpF,EAAIwiF,EAAa,GAAME,EAAa,CAExCrxG,MAAKkrG,IAAI7+F,MAAM+D,MAAQggG,EAAY,EAAIe,EAAa,IAEpD,KAAK,GAAIptG,GAAI,EAAGA,EAAIqtG,EAAWxtG,OAAQG,IAAK,CAC1C,GAAIivE,GAAUo+B,EAAWrtG,EACW,IAAhC/D,KAAKutE,OAAOyF,GAASlsB,aAAkEjjD,KAA9C7D,KAAK8vG,iBAAiBt/F,WAAWwiE,IAAuE,GAA7ChzE,KAAK8vG,iBAAiBt/F,WAAWwiE,KACvIhzE,KAAKutE,OAAOyF,GAASy2B,UAAU2G,EAAWiB,EAAYrxG,KAAKmrG,UAAWp2E,EAAGpG,GACzEA,GAAK0iF,EAAarxG,KAAKgO,QAAQqqG,gBAMvCx4G,EAAOD,QAAUwtE,GAIb,SAAUvtE,EAAQD,GAItB6E,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAST,IAAI+kB,GAAS,SACTuwE,EAAO,UACPtzE,EAAS,SAGT3iB,EAAS,SAKT2uE,GACFqM,WACE1uE,SAAW4pF,QAAWD,GACtB/wF,QAAUgxF,QAAWD,EAAME,SAAY,YACvC7hD,WAAa+Y,IARP,OASNunC,UAAY50F,OAAQA,EAAQk2F,QAAWD,EAAME,SAAY,aAI3DiS,kBAAoB1iF,QAAS,OAAQ,UACrC2iF,cAAgB3iF,OAAQA,GACxBuB,MAAQivE,QAAWD,GACnBqS,UAAYpS,QAAWD,GACvBnyE,OAASoyE,QAAWD,GACpBsS,aAAe7iF,OAAQA,EAAQ/C,OAAQA,GACvC6lF,QACEl8F,SAAW4pF,QAAWD,GACtBjqB,aAAetmD,QAAS,SAAU,MAAO,OAAQ,UACjD0rD,SAAWpxE,OAAQA,GACnB40F,UAAYsB,QAAWD,EAAMj2F,OAAQA,IAEvCyK,OAASib,QAAS,OAAQ,MAAO,WACjC+iF,UACEj6F,OAASmU,OAAQA,GACjBmsF,UAAYnsF,OAAQA,GACpB+lF,YAAcxS,QAAWD,GACzBtY,OAASj4D,QAAS,OAAQ,SAAU,UACpCkvE,UAAY50F,OAAQA,IAEtB2oG,eACEr8F,SAAW4pF,QAAWD,GACtB2S,iBAAmBljF,QAAS,cAAe,UAAW,YACtDk/E,OAASjiF,OAAQA,GACjBiyE,UAAY50F,OAAQA,EAAQk2F,QAAWD,IAEzCxb,YACEnuE,SAAW4pF,QAAWD,GACtBvb,UAAYyb,SAAY,YACxB5nD,MAAQ5rB,OAAQA,GAChBlY,OAASib,QAAS,SAAU,WAC5BkvE,UAAY50F,OAAQA,EAAQk2F,QAAWD,EAAME,SAAY,aAE3D0S,UACE3X,iBAAmBgF,QAAWD,GAC9B9E,iBAAmB+E,QAAWD,GAC9BkY,OAASjY,QAAWD,GACpBznF,OAASkX,OAAQA,EAAQ/C,OAAQA,GACjCuiC,SAAWgxC,QAAWD,GACtBwY,YAAcvY,QAAWD,GACzB3xF,MACEo1C,OAASl5C,KAAOmiB,OAAQA,EAAQ1gB,UAAa,aAAexB,KAAOkiB,OAAQA,EAAQ1gB,UAAa,aAAe2yF,UAAY50F,OAAQA,IACnI6D,QAAUsyF,SAAY,YACtB3a,OAAS31B,MAAQngC,OAAQA,EAAQ/C,OAAQA,EAAQ1gB,UAAa,aAAewI,OAASib,OAAQA,EAAQzjB,UAAa,aAAe2yF,UAAY50F,OAAQA,IACtJ40F,UAAY50F,OAAQA,IAEtBwE,OACEk1C,OAASl5C,KAAOmiB,OAAQA,EAAQ1gB,UAAa,aAAexB,KAAOkiB,OAAQA,EAAQ1gB,UAAa,aAAe2yF,UAAY50F,OAAQA,IACnI6D,QAAUsyF,SAAY,YACtB3a,OAAS31B,MAAQngC,OAAQA,EAAQ/C,OAAQA,EAAQ1gB,UAAa,aAAewI,OAASib,OAAQA,EAAQzjB,UAAa,aAAe2yF,UAAY50F,OAAQA,IACtJ40F,UAAY50F,OAAQA,IAEtB40F,UAAY50F,OAAQA,IAEtB8oG,QACEx8F,SAAW4pF,QAAWD,GACtBkY,OAASjY,QAAWD,GACpB3xF,MACE4gD,SAAWgxC,QAAWD,GACtBtnF,UAAY+W,QAAS,YAAa,eAAgB,WAAY,gBAC9DkvE,UAAY50F,OAAQA,IAEtBwE,OACE0gD,SAAWgxC,QAAWD,GACtBtnF,UAAY+W,QAAS,YAAa,eAAgB,WAAY,gBAC9DkvE,UAAY50F,OAAQA,IAEtB40F,UAAY50F,OAAQA,EAAQk2F,QAAWD,IAEzCtqB,QACE/8D,YAAcwnF,IAjFR,OAkFNxB,UAAY50F,OAAQA,IAGtB+rE,YAAcmqB,QAAWD,GACzBpqB,gBAAkBlpD,OAAQA,GAC1Bg4D,YAAcub,QAAWD,GACzBrxC,KAAOjiC,OAAQA,EAAQgJ,KA5Fd,OA4F0BjG,OAAQA,EAAQ7lB,OAzFxC,UA0FXgE,QACEqkF,aACElvD,aAAetT,OAAQA,EAAQzjB,UAAa,aAC5C82B,QAAUrT,OAAQA,EAAQzjB,UAAa,aACvC62B,QAAUpT,OAAQA,EAAQzjB,UAAa,aACvCk2B,MAAQzS,OAAQA,EAAQzjB,UAAa,aACrC6rB,SAAWpI,OAAQA,EAAQzjB,UAAa,aACxCmtB,KAAO1J,OAAQA,EAAQzjB,UAAa,aACpCioB,OAASxE,OAAQA,EAAQzjB,UAAa,aACtCgoB,MAAQvE,OAAQA,EAAQzjB,UAAa,aACrC2yF,UAAY50F,OAAQA,IAEtBmoF,aACEnvD,aAAetT,OAAQA,EAAQzjB,UAAa,aAC5C82B,QAAUrT,OAAQA,EAAQzjB,UAAa,aACvC62B,QAAUpT,OAAQA,EAAQzjB,UAAa,aACvCk2B,MAAQzS,OAAQA,EAAQzjB,UAAa,aACrC6rB,SAAWpI,OAAQA,EAAQzjB,UAAa,aACxCmtB,KAAO1J,OAAQA,EAAQzjB,UAAa,aACpCioB,OAASxE,OAAQA,EAAQzjB,UAAa,aACtCgoB,MAAQvE,OAAQA,EAAQzjB,UAAa,aACrC2yF,UAAY50F,OAAQA,IAEtB40F,UAAY50F,OAAQA,IAEtBH,QAAUs2F,SAAY,YACtB1nF,QAAUiX,OAAQA,EAAQ/C,OAAQA,GAClCiqD,aACEjoB,OAASh5B,KAzHF,OAyHchJ,OAAQA,EAAQ+C,OAAQA,EAAQ7lB,OAtH5C,UAuHT+kD,KAAOj5B,KA1HA,OA0HYhJ,OAAQA,EAAQ+C,OAAQA,EAAQ7lB,OAvH1C,UAwHTw2E,QAAU3wD,OAAQA,GAClBkvE,UAAY50F,OAAQA,EAAQyF,MA7HpB,UA+HVga,QAAUiG,OAAQA,GAClB6M,SACEmiE,SAAW0B,IA5HL,OA6HNxB,UAAY50F,OAAQA,IAEtBS,KAAOkrB,KAnIE,OAmIUhJ,OAAQA,EAAQ+C,OAAQA,EAAQ7lB,OAhIxC,UAiIXqsE,WAAavpD,OAAQA,EAAQ+C,OAAQA,GACrC0rE,eAAiBzuE,OAAQA,GACzBniB,KAAOmrB,KAtIE,OAsIUhJ,OAAQA,EAAQ+C,OAAQA,EAAQ7lB,OAnIxC,UAoIXssE,WAAaxpD,OAAQA,EAAQ+C,OAAQA,GACrCqsD,UAAYmkB,QAAWD,GACvB9X,aAAe+X,QAAWD,GAC1BjqB,aAAetmD,OAAQA,GACvByuE,iBAAmB+B,QAAWD,GAC9B9E,iBAAmB+E,QAAWD,GAC9B/E,iBAAmBgF,QAAWD,GAC9BtxC,OAASh5B,KA9IA,OA8IYhJ,OAAQA,EAAQ+C,OAAQA,EAAQ7lB,OA3I1C,UA4IXgtE,UACEjsE,OAAS8kB,OAAQA,EAAQzjB,UAAa,aACtC0O,MAAQgS,OAAQA,EAAQ1gB,UAAa,aACrC2yF,UAAY50F,OAAQA,IAEtBwO,OAASkX,OAAQA,EAAQ/C,OAAQA,GACjCqvD,UAAYkkB,QAAWD,GACvBphB,SAAWnvD,QAAS,UAAW,SAAU,UAAW,KACpDwsD,SAAWvvD,OAAQA,GACnBsvD,SAAWtvD,OAAQA,GACnBgoF,QAAUhoF,OAAQA,GAClBiyE,UAAY50F,OAAQA,IAGlB4uE,GACF3+D,QAEEgX,MAAM,EACNqhF,UAAU,EACVxkF,OAAO,EACP0kF,QACEl8F,SAAS,EACT0/D,aAAc,OAAQ,MAAO,SAAU,UAEzCvhE,OAAQ,OAAQ,MAAO,UACvBg+F,UACEj6F,OAAQ,GAAI,EAAG,IAAK,GACpBsgG,UAAW,GAAI,EAAG,IAAK,GACvBpG,YAAY,EACZ/qB,OAAQ,OAAQ,SAAU,UAE5BgrB,eACEr8F,SAAS,EACTs8F,iBAAkB,cAAe,UAAW,YAE9CnuB,YACEnuE,SAAS,EACTiiC,MAAO,EAAG,EAAG,GAAI,GACjB9jC,OAAQ,SAAU,WAEpBo+F,UACE3X,iBAAiB,EACjBC,iBAAiB,EACjBgd,OAAO,EACP3/F,OAAQ,GAAI,EAAG,IAAK,GACpB02C,SAAS,EACTupD,YAAY,EACZnqG,MAGEk3E,OAAS31B,KAAM,GAAIp7C,MAAO,KAE5BjG,OAGEg3E,OAAS31B,KAAM,GAAIp7C,MAAO,MAG9Bq+F,QACEx8F,SAAS,EACT6hG,OAAO,EACP7pG,MACE4gD,SAAS,EACTv2C,UAAW,YAAa,eAAgB,WAAY,gBAEtDnK,OACE0gD,SAAS,EACTv2C,UAAW,YAAa,eAAgB,WAAY,iBAIxDo9D,YAAY,EACZ4O,YAAY,EACZ/1B,IAAK,GACL/gD,QACEqkF,aACElvD,YAAa,MACbD,OAAQ,IACRD,OAAQ,QACRX,KAAM,QACNrK,QAAS,QACTsB,IAAK,IACLlF,MAAO,MACPD,KAAM,QAERk+D,aACEnvD,YAAa,WACbD,OAAQ,eACRD,OAAQ,aACRX,KAAM,aACNrK,QAAS,YACTsB,IAAK,YACLlF,MAAO,OACPD,KAAM,KAIVxb,OAAQ,GACRgR,OAAQ,GACRhf,IAAK,GACLyrE,UAAW,GACXklB,eAAgB,EAAG,EAAG,GAAI,GAC1B5wF,IAAK,GACL2rE,UAAW,GACX4F,UAAU,EACV/F,aAAc,OAAQ,SAAU,OAChCmoB,iBAAiB,EACjBhD,iBAAiB,EACjBD,iBAAiB,EACjBvsC,MAAO,GACPn2C,MAAO,OACPwjE,UAAU,EACV6C,SAAU,UAAW,SAAU,UAAW,IAC1C3C,SAAU,SAAiB,GAAI,SAAiB,GAChDD,SAAU,GAAI,GAAI,SAAiB,GACnC04B,OAAQ,GAIZ3sG,GAAQ2wE,WAAaA,EACrB3wE,EAAQ4wE,iBAAmBA,GAIvB,SAAU3wE,EAAQD,EAASM,GAK/BN,EAAQe,KAAOT,EAAoB,GACnCN,EAAQwuC,QAAUluC,EAAoB,IAGtCN,EAAQyuC,QAAUnuC,EAAoB,IACtCN,EAAQ0uC,SAAWpuC,EAAoB,IACvCN,EAAQ2uC,MAAQruC,EAAoB,IAGpCN,EAAQ+4G,QAAUz4G,EAAoB,KACtCN,EAAQg5G,SACNC,OAAQ34G,EAAoB,KAC5B44G,UAAW54G,EAAoB,KAC/B64G,YAAa74G,EAAoB,KACjCqwE,WAAYrwE,EAAoB,MAElCN,EAAQg5G,QAAQI,WAAa,SAAUj4F,GACrC,MAAOnhB,GAAQg5G,QAAQE,UAAUG,WAAWl4F,IAE9CnhB,EAAQg5G,QAAQM,aAAe,SAAUn4F,EAAO/S,GAC9C,MAAOpO,GAAQg5G,QAAQG,YAAYI,WAAWp4F,EAAO/S,IAIvDpO,EAAQ6B,OAASvB,EAAoB,IACrCN,EAAQovC,OAAS9uC,EAAoB,KACrCN,EAAQqvC,SAAW/uC,EAAoB,MAInC,SAAUL,EAAQD,EAASM,GAoD/B,QAASy4G,GAAQziE,EAAW1hB,EAAMxmB,GAChC,GAAIorF,GAAQp5F,IAEZ,MAAMA,eAAgB24G,IACpB,KAAM,IAAIxiE,aAAY,mDAIxBn2C,MAAKgO,WACLhO,KAAK0tE,gBACHrsD,OAAQ,KACR8S,QAASA,EACTooD,YAAY,GAEd57E,EAAKC,OAAOZ,KAAKgO,QAAShO,KAAK0tE,gBAG/B1tE,KAAK2Q,MACHulC,UAAWA,EACXkjE,SACAC,eACAC,SACAC,eACAhrC,SACEl9B,GAAIrxC,KAAKqxC,GAAGimB,KAAKt3D,MACjBwxC,IAAKxxC,KAAKwxC,IAAI8lB,KAAKt3D,MACnBktD,KAAMltD,KAAKktD,KAAKoK,KAAKt3D,MACrBiwD,KAAMjwD,KAAKiwD,KAAKqH,KAAKt3D,OAEvBw5G,gBACEC,MAAO,aACPniC,QAAS,aACToiC,YAAa,aACbC,OAAQ,aACRC,YAAa,aACbC,OAAQ,aACRC,UAAW,aACXv/B,aAAc,aACdw/B,QAAS,aACTC,YAAa,aACbziC,UAAW,aACX0iC,UAAW,cAEbzlF,MACE4kF,MAAO,KACPE,MAAO,MAETY,WACEC,WAAY,aACZC,WAAY,aACZvjC,WAAY,cAEd52E,WACAo6G,MACE73G,MAAO,EACPy5C,aAAelnB,EAAG,EAAGpG,EAAG,KAK5B3uB,KAAKs6G,qBAGLt6G,KAAKu6G,OAAS,GAAI1B,GAAO,WACvB,MAAOzf,GAAMzoF,KAAK49D,QAAQrhB,KAAK,oBAEjCltD,KAAKutE,OAAS,GAAIitC,GAClBx6G,KAAKk+C,OAAS,GAAIu8D,GAAOz6G,KAAK2Q,MAC9B3Q,KAAK06G,iBAAmB,GAAIC,GAAiB36G,KAAK2Q,KAAM3Q,KAAKk+C,QAC7Dl+C,KAAK46G,mBAAqB,GAAIC,GAAmB76G,KAAK2Q,KAAM3Q,KAAKk+C,OAAQl+C,KAAK06G,kBAC9E16G,KAAKq6G,KAAO,GAAIS,GAAK96G,KAAK2Q,KAAM3Q,KAAKk+C,QACrCl+C,KAAK+6G,SAAW,GAAIC,GAAeh7G,KAAK2Q,KAAM3Q,KAAKk+C,QACnDl+C,KAAKm8F,QAAU,GAAI8e,GAAcj7G,KAAK2Q,MACtC3Q,KAAKk7G,aAAe,GAAIC,GAAan7G,KAAK2Q,MAC1C3Q,KAAKo7G,WAAa,GAAIC,GAAcr7G,KAAK2Q,MACzC3Q,KAAKs7G,aAAe,GAAIC,GAAmBv7G,KAAK2Q,KAAM3Q,KAAKk+C,OAAQl+C,KAAK06G,kBAExE16G,KAAKw7G,aAAe,GAAIC,GAAaz7G,KAAK2Q,KAAM3Q,KAAKu6G,OAAQv6G,KAAKutE,OAAQvtE,KAAKk7G,cAC/El7G,KAAK07G,aAAe,GAAIC,GAAa37G,KAAK2Q,KAAM3Q,KAAKu6G,OAAQv6G,KAAKutE,QAElEvtE,KAAK2Q,KAAK1Q,QAAqB,YAAI,GAAI27G,GAAY57G,KAAK2Q,KAAM,IAAK,KACnE3Q,KAAK2Q,KAAK1Q,QAAoB,WAAID,KAAKo7G,WAGvCp7G,KAAKk+C,OAAO/8C,UAGZnB,KAAKgxC,WAAWhjC,GAGhBhO,KAAKw1C,QAAQhhB,GAzIft0B,EAAoB,IAEpB,IAAIo3C,GAAUp3C,EAAoB,IAC9BS,EAAOT,EAAoB,GAG3B44G,GAFU54G,EAAoB,IACnBA,EAAoB,IACnBA,EAAoB,MAChC64G,EAAc74G,EAAoB,KAClCo6E,EAAYp6E,EAAoB,KAChCi0B,EAAUj0B,EAAoB,KAE9B24G,EAAS34G,EAAoB,KAAc,QAC3Cs6G,EAASt6G,EAAoB,KAAc,QAC3Cu7G,EAAev7G,EAAoB,KAAc,QACjDy7G,EAAez7G,EAAoB,KAAc,QACjD+6G,EAAgB/6G,EAAoB,KAAc,QAClDm7G,EAAgBn7G,EAAoB,KAAc,QAClD86G,EAAiB96G,EAAoB,KAAc,QACnDu6G,EAASv6G,EAAoB,KAAc,QAC3C46G,EAAO56G,EAAoB,KAAc,QACzC26G,EAAqB36G,EAAoB,KAAc,QACvDy6G,EAAmBz6G,EAAoB,KAAc,QACrDi7G,EAAej7G,EAAoB,KAAc,QACjDq7G,EAAqBr7G,EAAoB,KAAc,QACvDuwE,EAAevwE,EAAoB,KAAc,QACjDwwE,EAAYxwE,EAAoB,KAAc,QAE9C27G,EAAW37G,EAAoB,KAC/BowE,EAAaurC,EAASvrC,WAEtBwrC,EAAY57G,EAAoB,KAChCqwE,EAAaurC,EAAUvrC,WACvBC,EAAmBsrC,EAAUtrC,iBAE7BorC,EAAc17G,EAAoB,KAAc,OA2GpDo3C,GAAQqhE,EAAQtmG,WAMhBsmG,EAAQtmG,UAAU2+B,WAAa,SAAUhjC,GACvC,GAAIysF,GAASz6F,IAEb,QAAgB6D,KAAZmK,EAAuB,EAEN,IADF0iE,EAAUI,SAAS9iE,EAASuiE,IAE3CjrD,QAAQuuC,IAAI,2DAA4Dyc,EAI1E,IAAIhjE,IAAU,SAAU,UAAW,aAoCnC,IAnCA3M,EAAK2D,oBAAoBgJ,EAAQtN,KAAKgO,QAASA,GAG/CA,EAAUhO,KAAKk7G,aAAalqE,WAAWhjC,EAAQ+tG,OAAQ/tG,GAEvDhO,KAAKk+C,OAAOlN,WAAWhjC,GAGvBhO,KAAKutE,OAAOv8B,WAAWhjC,EAAQu/D,QAC/BvtE,KAAKw7G,aAAaxqE,WAAWhjC,EAAQorG,OACrCp5G,KAAK07G,aAAa1qE,WAAWhjC,EAAQsrG,OACrCt5G,KAAKm8F,QAAQnrD,WAAWhjC,EAAQmuF,SAChCn8F,KAAKs7G,aAAatqE,WAAWhjC,EAAQstG,aAActtG,EAAShO,KAAKgO,SAEjEhO,KAAK46G,mBAAmB5pE,WAAWhjC,EAAQguG,aAC3Ch8G,KAAK+6G,SAAS/pE,WAAWhjC,EAAQguG,aACjCh8G,KAAK06G,iBAAiB1pE,WAAWhjC,EAAQguG,iBAGlBn4G,KAAnBmK,EAAQu/D,QACVvtE,KAAK2Q,KAAK49D,QAAQrhB,KAAK,gBAMrB,aAAel/C,KACZhO,KAAK28E,eACR38E,KAAK28E,aAAe,GAAIlM,GAAazwE,KAAMA,KAAK2Q,KAAKulC,UAAWs6B,EAAkBxwE,KAAKk+C,OAAOo6C,aAGhGt4F,KAAK28E,aAAa3rC,WAAWhjC,EAAQ4uE,YAInC58E,KAAK28E,eAAsD,IAAtC38E,KAAK28E,aAAa3uE,QAAQE,QAAkB,CACnE,GAAI+tG,IAAmB7C,SAAWE,SAAWyC,UAAYC,eAAiBV,gBAAkBnf,WAAatqF,UACzGlR,GAAK+D,WAAWu3G,EAAe7C,MAAOp5G,KAAKw7G,aAAaxtG,SACxDrN,EAAK+D,WAAWu3G,EAAe3C,MAAOt5G,KAAK07G,aAAa1tG,SACxDrN,EAAK+D,WAAWu3G,EAAeF,OAAQ/7G,KAAKk7G,aAAaltG,SAEzDrN,EAAK+D,WAAWu3G,EAAeD,YAAah8G,KAAK06G,iBAAiB1sG,SAClErN,EAAK+D,WAAWu3G,EAAeD,YAAah8G,KAAK+6G,SAAS/sG,SAE1DrN,EAAK+D,WAAWu3G,EAAeD,YAAah8G,KAAK46G,mBAAmB5sG,SACpErN,EAAK+D,WAAWu3G,EAAeX,aAAct7G,KAAKs7G,aAAattG,SAC/DrN,EAAK+D,WAAWu3G,EAAe9f,QAASn8F,KAAKm8F,QAAQnuF,SAGrDrN,EAAK+D,WAAWu3G,EAAepqG,OAAQ7R,KAAKk+C,OAAOlwC,SACnDrN,EAAK+D,WAAWu3G,EAAepqG,OAAQ7R,KAAKgO,SAE5ChO,KAAK28E,aAAaG,iBAAiBm/B,OAIVp4G,KAAvBmK,EAAQuuE,YACiB,IAAvBvuE,EAAQuuE,eACa14E,KAAnB7D,KAAKw8E,YACPx8E,KAAKw8E,UAAY,GAAIlC,GAAUt6E,KAAKk+C,OAAOD,OAC3Cj+C,KAAKw8E,UAAUnrC,GAAG,SAAU,WAC1BopD,EAAO9pF,KAAK49D,QAAQrhB,KAAK,oBAINrpD,KAAnB7D,KAAKw8E,YACPx8E,KAAKw8E,UAAUprC,gBACRpxC,MAAKw8E,WAEdx8E,KAAK2Q,KAAK49D,QAAQrhB,KAAK,aAGzBltD,KAAK2Q,KAAK49D,QAAQrhB,KAAK,YAGzBltD,KAAKk+C,OAAOuR,UAEZzvD,KAAK2Q,KAAK49D,QAAQrhB,KAAK,qBAQ3ByrD,EAAQtmG,UAAU6pG,sBAAwB,WACxC,GAAI9C,GAAQp5G,KAAK2Q,KAAKyoG,MAClBE,EAAQt5G,KAAK2Q,KAAK2oG,KACtBt5G,MAAK2Q,KAAK0oG,eACVr5G,KAAK2Q,KAAK4oG,cAEV,KAAK,GAAI4C,KAAU/C,GACbA,EAAM91G,eAAe64G,KACc,IAAjC/C,EAAM+C,GAAQnuG,QAAQ6qE,QACxB74E,KAAK2Q,KAAK0oG,YAAYx0G,KAAKu0G,EAAM+C,GAAQ97G,GAK/C,KAAK,GAAI+7G,KAAU9C,GACbA,EAAMh2G,eAAe84G,KACc,IAAjC9C,EAAM8C,GAAQpuG,QAAQ6qE,QACxB74E,KAAK2Q,KAAK4oG,YAAY10G,KAAKy0G,EAAM8C,GAAQ/7G,KASjDs4G,EAAQtmG,UAAUioG,mBAAqB,WACrC,GAAIzf,GAAS76F,IAGbA,MAAK2Q,KAAK49D,QAAQl9B,GAAG,eAAgB,WAEnCwpD,EAAOqhB,wBACPrhB,EAAOlqF,KAAK49D,QAAQrhB,KAAK,kBAEzB2tC,EAAOlqF,KAAK49D,QAAQrhB,KAAK,kBAI3BltD,KAAK2Q,KAAK49D,QAAQl9B,GAAG,eAAgB,WAEnCwpD,EAAOwhB,kBAAkBxhB,EAAOlqF,KAAKyoG,OACrCve,EAAOwhB,kBAAkBxhB,EAAOlqF,KAAK2oG,OAErCze,EAAOlqF,KAAK49D,QAAQrhB,KAAK,mBACzB2tC,EAAOlqF,KAAK49D,QAAQrhB,KAAK,qBAc7ByrD,EAAQtmG,UAAUmjC,QAAU,SAAUhhB,GAQpC,GANAx0B,KAAK2Q,KAAK49D,QAAQrhB,KAAK,gBACvBltD,KAAK2Q,KAAK49D,QAAQrhB,KAAK,cAGvBltD,KAAK06G,iBAAiB4B,cAElB9nF,GAAQA,EAAKolB,MAAQplB,EAAK4kF,OAAS5kF,EAAK8kF,OAC1C,KAAM,IAAInjE,aAAY,iGAMxB,IAFAn2C,KAAKgxC,WAAWxc,GAAQA,EAAKxmB,SAEzBwmB,GAAQA,EAAKolB,IAAK,CACpBt0B,QAAQuuC,IAAI,4PAEZ,IAAI0oD,GAAUzD,EAAUG,WAAWzkF,EAAKolB,IAExC,YADA55C,MAAKw1C,QAAQ+mE,GAER,GAAI/nF,GAAQA,EAAKgoF,MAAO,CAE7Bl3F,QAAQuuC,IAAI,oQACZ,IAAI4oD,GAAY1D,EAAYI,WAAW3kF,EAAKgoF,MAE5C,YADAx8G,MAAKw1C,QAAQinE,GAGbz8G,KAAKw7G,aAAahmE,QAAQhhB,GAAQA,EAAK4kF,OAAO,GAC9Cp5G,KAAK07G,aAAalmE,QAAQhhB,GAAQA,EAAK8kF,OAAO,GAIhDt5G,KAAK2Q,KAAK49D,QAAQrhB,KAAK,gBAGvBltD,KAAK2Q,KAAK49D,QAAQrhB,KAAK,eAGvBltD,KAAK2Q,KAAK49D,QAAQrhB,KAAK,gBASzByrD,EAAQtmG,UAAU++B,QAAU,WAC1BpxC,KAAK2Q,KAAK49D,QAAQrhB,KAAK,WAEvBltD,KAAK2Q,KAAK49D,QAAQ/8B,MAClBxxC,KAAKwxC,YAGExxC,MAAKutE,aACLvtE,MAAKk+C,aACLl+C,MAAK06G,uBACL16G,MAAK46G,yBACL56G,MAAKq6G,WACLr6G,MAAK+6G,eACL/6G,MAAKm8F,cACLn8F,MAAKk7G,mBACLl7G,MAAKo7G,iBACLp7G,MAAKs7G,mBACLt7G,MAAKw7G,mBACLx7G,MAAK07G,mBACL17G,MAAK28E,mBACL38E,MAAKu6G,MAEZ,KAAK,GAAI4B,KAAUn8G,MAAK2Q,KAAKyoG,YACpBp5G,MAAK2Q,KAAKyoG,MAAM+C,EAEzB,KAAK,GAAIC,KAAUp8G,MAAK2Q,KAAK2oG,YACpBt5G,MAAK2Q,KAAK2oG,MAAM8C,EAIzBz7G,GAAKmB,mBAAmB9B,KAAK2Q,KAAKulC,YAWpCyiE,EAAQtmG,UAAUgqG,kBAAoB,SAAUv7G,GAC9C,GAAIT,GAGAo6C,MAAW52C,GACX62C,MAAW72C,GACX64G,EAAa,CACjB,KAAKr8G,IAAMS,GACT,GAAIA,EAAIwC,eAAejD,GAAK,CAC1B,GAAIkC,GAAQzB,EAAIT,GAAIuxD,eACN/tD,KAAVtB,IACFk4C,MAAwB52C,KAAb42C,EAAyBl4C,EAAQE,KAAKL,IAAIG,EAAOk4C,GAC5DC,MAAwB72C,KAAb62C,EAAyBn4C,EAAQE,KAAKJ,IAAIE,EAAOm4C,GAC5DgiE,GAAcn6G,GAMpB,OAAiBsB,KAAb42C,OAAuC52C,KAAb62C,EAC5B,IAAKr6C,IAAMS,GACLA,EAAIwC,eAAejD,IACrBS,EAAIT,GAAIs8G,cAAcliE,EAAUC,EAAUgiE,IAUlD/D,EAAQtmG,UAAUmoE,SAAW,WAC3B,OAAQx6E,KAAKw8E,WAAax8E,KAAKw8E,UAAUO,QAG3C47B,EAAQtmG,UAAUo9C,QAAU,WAC1B,MAAOzvD,MAAKk+C,OAAOuR,QAAQn5C,MAAMtW,KAAKk+C,OAAQv6C,YAEhDg1G,EAAQtmG,UAAUuqG,YAAc,WAC9B,MAAO58G,MAAKk+C,OAAO0+D,YAAYtmG,MAAMtW,KAAKk+C,OAAQv6C,YAEpDg1G,EAAQtmG,UAAUwqG,YAAc,WAC9B,MAAO78G,MAAKk+C,OAAO2+D,YAAYvmG,MAAMtW,KAAKk+C,OAAQv6C,YAEpDg1G,EAAQtmG,UAAUyqG,SAAW,WAC3B,MAAO98G,MAAKo7G,WAAW0B,SAASxmG,MAAMtW,KAAKo7G,WAAYz3G,YAEzDg1G,EAAQtmG,UAAU0qG,UAAY,WAC5B,MAAO/8G,MAAKo7G,WAAW2B,UAAUzmG,MAAMtW,KAAKo7G,WAAYz3G,YAE1Dg1G,EAAQtmG,UAAU2qG,YAAc,WAC9B,MAAOh9G,MAAKo7G,WAAW4B,YAAY1mG,MAAMtW,KAAKo7G,WAAYz3G,YAE5Dg1G,EAAQtmG,UAAU4qG,QAAU,WAC1B,MAAOj9G,MAAKo7G,WAAW6B,QAAQ3mG,MAAMtW,KAAKo7G,WAAYz3G,YAExDg1G,EAAQtmG,UAAU6qG,kBAAoB,WACpC,MAAOl9G,MAAKo7G,WAAW8B,kBAAkB5mG,MAAMtW,KAAKo7G,WAAYz3G,YAElEg1G,EAAQtmG,UAAU8qG,oBAAsB,WACtC,MAAOn9G,MAAKo7G,WAAW+B,oBAAoB7mG,MAAMtW,KAAKo7G,WAAYz3G,YAEpEg1G,EAAQtmG,UAAU+qG,iBAAmB,WACnC,MAAOp9G,MAAKo7G,WAAWgC,iBAAiB9mG,MAAMtW,KAAKo7G,WAAYz3G,YAEjEg1G,EAAQtmG,UAAUgrG,gBAAkB,WAClC,MAAOr9G,MAAKo7G,WAAWiC,gBAAgB/mG,MAAMtW,KAAKo7G,WAAYz3G,YAEhEg1G,EAAQtmG,UAAUirG,QAAU,WAC1B,MAAOt9G,MAAKk7G,aAAaoC,QAAQhnG,MAAMtW,KAAKk7G,aAAcv3G,YAE5Dg1G,EAAQtmG,UAAUkrG,eAAiB,WACjC,MAAOv9G,MAAKs7G,aAAaiC,eAAejnG,MAAMtW,KAAKs7G,aAAc33G,YAEnEg1G,EAAQtmG,UAAUmrG,gBAAkB,WAClC,MAAOx9G,MAAKs7G,aAAakC,gBAAgBlnG,MAAMtW,KAAKs7G,aAAc33G,YAEpEg1G,EAAQtmG,UAAUorG,YAAc,WAC9B,MAAOz9G,MAAKs7G,aAAamC,YAAYnnG,MAAMtW,KAAKs7G,aAAc33G,YAEhEg1G,EAAQtmG,UAAUqrG,SAAW,WAC3B,MAAO19G,MAAKs7G,aAAaoC,SAASpnG,MAAMtW,KAAKs7G,aAAc33G,YAE7Dg1G,EAAQtmG,UAAUsrG,aAAe,WACyC,MAAxEr4F,SAAQuuC,IAAI,4DAAmE7zD,KAAKs7G,aAAaoC,SAASpnG,MAAMtW,KAAKs7G,aAAc33G,YAErIg1G,EAAQtmG,UAAUurG,YAAc,WAC9B,MAAO59G,MAAKs7G,aAAasC,YAAYtnG,MAAMtW,KAAKs7G,aAAc33G,YAEhEg1G,EAAQtmG,UAAUwrG,aAAe,WAC/B,MAAO79G,MAAKs7G,aAAauC,aAAavnG,MAAMtW,KAAKs7G,aAAc33G,YAEjEg1G,EAAQtmG,UAAUyrG,eAAiB,WACjC,MAAO99G,MAAKs7G,aAAawC,eAAexnG,MAAMtW,KAAKs7G,aAAc33G,YAEnEg1G,EAAQtmG,UAAU0rG,aAAe,WAC/B,MAAO/9G,MAAKw7G,aAAauC,aAAaznG,MAAMtW,KAAKw7G,aAAc73G,YAEjEg1G,EAAQtmG,UAAU2rG,eAAiB,WACjC,MAAOh+G,MAAKw7G,aAAawC,eAAe1nG,MAAMtW,KAAKw7G,aAAc73G,YAEnEg1G,EAAQtmG,UAAU4rG,SAAW,WAC3B,MAAOj+G,MAAKw7G,aAAayC,SAAS3nG,MAAMtW,KAAKw7G,aAAc73G,YAE7Dg1G,EAAQtmG,UAAU6rG,eAAiB,WACjC,MAAOl+G,MAAKw7G,aAAa0C,eAAe5nG,MAAMtW,KAAKw7G,aAAc73G,YAEnEg1G,EAAQtmG,UAAU8rG,kBAAoB,SAAUC,GAC9C,WAAkCv6G,KAA9B7D,KAAK2Q,KAAKyoG,MAAMgF,GACXp+G,KAAKw7G,aAAa2C,kBAAkB7nG,MAAMtW,KAAKw7G,aAAc73G,WAE7D3D,KAAK07G,aAAayC,kBAAkB7nG,MAAMtW,KAAK07G,aAAc/3G,YAGxEg1G,EAAQtmG,UAAUgsG,kBAAoB,WACpC,MAAOr+G,MAAKw7G,aAAa6C,kBAAkB/nG,MAAMtW,KAAKw7G,aAAc73G,YAEtEg1G,EAAQtmG,UAAUisG,gBAAkB,WAClC,MAAOt+G,MAAKm8F,QAAQmiB,gBAAgBhoG,MAAMtW,KAAKm8F,QAASx4F,YAE1Dg1G,EAAQtmG,UAAUksG,eAAiB,WACjC,MAAOv+G,MAAKm8F,QAAQoiB,eAAejoG,MAAMtW,KAAKm8F,QAASx4F,YAEzDg1G,EAAQtmG,UAAUmsG,UAAY,WAC5B,MAAOx+G,MAAKm8F,QAAQqiB,UAAUloG,MAAMtW,KAAKm8F,QAASx4F,YAEpDg1G,EAAQtmG,UAAU2+D,aAAe,WAC/B,MAAOhxE,MAAK06G,iBAAiB1pC,aAAa16D,MAAMtW,KAAK06G,iBAAkB/2G,YAEzEg1G,EAAQtmG,UAAU4+D,aAAe,WAC/B,MAAOjxE,MAAK06G,iBAAiBzpC,aAAa36D,MAAMtW,KAAK06G,iBAAkB/2G,YAEzEg1G,EAAQtmG,UAAUosG,iBAAmB,WACnC,MAAOz+G,MAAK06G,iBAAiB+D,iBAAiBnoG,MAAMtW,KAAK06G,iBAAkB/2G,YAE7Eg1G,EAAQtmG,UAAUqsG,iBAAmB,WACnC,MAAO1+G,MAAK06G,iBAAiBgE,iBAAiBpoG,MAAMtW,KAAK06G,iBAAkB/2G,YAE7Eg1G,EAAQtmG,UAAUssG,UAAY,WAC5B,GAAIpxE,GAAOvtC,KAAK06G,iBAAiBiE,UAAUroG,MAAMtW,KAAK06G,iBAAkB/2G,UACxE,YAAaE,KAAT0pC,OAAkC1pC,KAAZ0pC,EAAKltC,GACtBktC,EAAKltC,GAEPktC,GAETorE,EAAQtmG,UAAUusG,UAAY,WAC5B,GAAIC,GAAO7+G,KAAK06G,iBAAiBkE,UAAUtoG,MAAMtW,KAAK06G,iBAAkB/2G,UACxE,YAAaE,KAATg7G,OAAkCh7G,KAAZg7G,EAAKx+G,GACtBw+G,EAAKx+G,GAEPw+G,GAETlG,EAAQtmG,UAAUysG,YAAc,WAC9B,MAAO9+G,MAAK06G,iBAAiBoE,YAAYxoG,MAAMtW,KAAK06G,iBAAkB/2G,YAExEg1G,EAAQtmG,UAAU0sG,YAAc,WAC9B,MAAO/+G,MAAK06G,iBAAiBqE,YAAYzoG,MAAMtW,KAAK06G,iBAAkB/2G,YAExEg1G,EAAQtmG,UAAUiqG,YAAc,WAC9Bt8G,KAAK06G,iBAAiB4B,YAAYhmG,MAAMtW,KAAK06G,iBAAkB/2G,WAC/D3D,KAAKkhD,UAEPy3D,EAAQtmG,UAAU6uC,OAAS,WACzB,MAAOlhD,MAAK+6G,SAAS75D,OAAO5qC,MAAMtW,KAAK+6G,SAAUp3G,YAEnDg1G,EAAQtmG,UAAUsrD,SAAW,WAC3B,MAAO39D,MAAKq6G,KAAK18C,SAASrnD,MAAMtW,KAAKq6G,KAAM12G,YAE7Cg1G,EAAQtmG,UAAU2sG,gBAAkB,WAClC,MAAOh/G,MAAKq6G,KAAK2E,gBAAgB1oG,MAAMtW,KAAKq6G,KAAM12G,YAEpDg1G,EAAQtmG,UAAU69D,IAAM,WACtB,MAAOlwE,MAAKq6G,KAAKnqC,IAAI55D,MAAMtW,KAAKq6G,KAAM12G,YAExCg1G,EAAQtmG,UAAU0zC,OAAS,WACzB,MAAO/lD,MAAKq6G,KAAKt0D,OAAOzvC,MAAMtW,KAAKq6G,KAAM12G,YAE3Cg1G,EAAQtmG,UAAU++D,MAAQ,WACxB,MAAOpxE,MAAKq6G,KAAKjpC,MAAM96D,MAAMtW,KAAKq6G,KAAM12G,YAE1Cg1G,EAAQtmG,UAAU4sG,YAAc,WAC9B,MAAOj/G,MAAKq6G,KAAK4E,YAAY3oG,MAAMtW,KAAKq6G,KAAM12G,YAEhDg1G,EAAQtmG,UAAU6sG,2BAA6B,WAC7C,GAAIlxG,KAIJ,OAHIhO,MAAK28E,eACP3uE,EAAUhO,KAAK28E,aAAamgB,WAAWxmF,MAAMtW,KAAK28E,eAE7C3uE,GAGTnO,EAAOD,QAAU+4G,GAIb,SAAU94G,EAAQD,GAOkB,mBAA7Bu/G,4BAKTA,yBAAyB9sG,UAAUq1F,OAAS,SAAU3yE,EAAGpG,EAAG9kB,GAC1D7J,KAAK8lD,YACL9lD,KAAK+pD,IAAIh1B,EAAGpG,EAAG9kB,EAAG,EAAG,EAAIpH,KAAKunD,IAAI,GAClChqD,KAAKomD,aASP+4D,yBAAyB9sG,UAAU+sG,OAAS,SAAUrqF,EAAGpG,EAAG9kB,GAC1D7J,KAAK8lD,YACL9lD,KAAK0wC,KAAK3b,EAAIlrB,EAAG8kB,EAAI9kB,EAAO,EAAJA,EAAW,EAAJA,GAC/B7J,KAAKomD,aASP+4D,yBAAyB9sG,UAAUk8C,SAAW,SAAUx5B,EAAGpG,EAAG9kB,GAE5D7J,KAAK8lD,YAGLj8C,GAAK,KACL8kB,GAAK,KAAQ9kB,CAEb,IAAIuB,GAAQ,EAAJvB,EACJw1G,EAAKj0G,EAAI,EACTk0G,EAAK78G,KAAKusD,KAAK,GAAK,EAAI5jD,EACxBD,EAAI1I,KAAKusD,KAAK5jD,EAAIA,EAAIi0G,EAAKA,EAG/Br/G,MAAK+lD,OAAOhxB,EAAGpG,GAAKxjB,EAAIm0G,IACxBt/G,KAAKgmD,OAAOjxB,EAAIsqF,EAAI1wF,EAAI2wF,GACxBt/G,KAAKgmD,OAAOjxB,EAAIsqF,EAAI1wF,EAAI2wF,GACxBt/G,KAAKgmD,OAAOjxB,EAAGpG,GAAKxjB,EAAIm0G,IACxBt/G,KAAKomD,aASP+4D,yBAAyB9sG,UAAUktG,aAAe,SAAUxqF,EAAGpG,EAAG9kB,GAEhE7J,KAAK8lD,YAGLj8C,GAAK,KACL8kB,GAAK,KAAQ9kB,CAEb,IAAIuB,GAAQ,EAAJvB,EACJw1G,EAAKj0G,EAAI,EACTk0G,EAAK78G,KAAKusD,KAAK,GAAK,EAAI5jD,EACxBD,EAAI1I,KAAKusD,KAAK5jD,EAAIA,EAAIi0G,EAAKA,EAE/Br/G,MAAK+lD,OAAOhxB,EAAGpG,GAAKxjB,EAAIm0G,IACxBt/G,KAAKgmD,OAAOjxB,EAAIsqF,EAAI1wF,EAAI2wF,GACxBt/G,KAAKgmD,OAAOjxB,EAAIsqF,EAAI1wF,EAAI2wF,GACxBt/G,KAAKgmD,OAAOjxB,EAAGpG,GAAKxjB,EAAIm0G,IACxBt/G,KAAKomD,aASP+4D,yBAAyB9sG,UAAUmtG,KAAO,SAAUzqF,EAAGpG,EAAG9kB,GAExD7J,KAAK8lD,YAGLj8C,GAAK,IACL8kB,GAAK,GAAM9kB,CAEX,KAAK,GAAI4jC,GAAI,EAAGA,EAAI,GAAIA,IAAK,CAC3B,GAAIoc,GAASpc,EAAI,GAAM,EAAQ,IAAJ5jC,EAAc,GAAJA,CACrC7J,MAAKgmD,OAAOjxB,EAAI80B,EAASpnD,KAAKs6C,IAAQ,EAAJtP,EAAQhrC,KAAKunD,GAAK,IAAKr7B,EAAIk7B,EAASpnD,KAAKw6C,IAAQ,EAAJxP,EAAQhrC,KAAKunD,GAAK,KAGnGhqD,KAAKomD,aASP+4D,yBAAyB9sG,UAAUotG,QAAU,SAAU1qF,EAAGpG,EAAG9kB,GAE3D7J,KAAK8lD,YAEL9lD,KAAKgmD,OAAOjxB,EAAGpG,EAAI9kB,GACnB7J,KAAKgmD,OAAOjxB,EAAIlrB,EAAG8kB,GACnB3uB,KAAKgmD,OAAOjxB,EAAGpG,EAAI9kB,GACnB7J,KAAKgmD,OAAOjxB,EAAIlrB,EAAG8kB,GAEnB3uB,KAAKomD,aAMP+4D,yBAAyB9sG,UAAUqtG,UAAY,SAAU3qF,EAAGpG,EAAG3O,EAAG7U,EAAGtB,GACnE,GAAI81G,GAAMl9G,KAAKunD,GAAK,GAChBhqC,GAAI,EAAInW,EAAI,IACdA,EAAImW,EAAI,GAEN7U,EAAI,EAAItB,EAAI,IACdA,EAAIsB,EAAI,GAEVnL,KAAK8lD,YACL9lD,KAAK+lD,OAAOhxB,EAAIlrB,EAAG8kB,GACnB3uB,KAAKgmD,OAAOjxB,EAAI/U,EAAInW,EAAG8kB,GACvB3uB,KAAK+pD,IAAIh1B,EAAI/U,EAAInW,EAAG8kB,EAAI9kB,EAAGA,EAAS,IAAN81G,EAAiB,IAANA,GAAW,GACpD3/G,KAAKgmD,OAAOjxB,EAAI/U,EAAG2O,EAAIxjB,EAAItB,GAC3B7J,KAAK+pD,IAAIh1B,EAAI/U,EAAInW,EAAG8kB,EAAIxjB,EAAItB,EAAGA,EAAG,EAAS,GAAN81G,GAAU,GAC/C3/G,KAAKgmD,OAAOjxB,EAAIlrB,EAAG8kB,EAAIxjB,GACvBnL,KAAK+pD,IAAIh1B,EAAIlrB,EAAG8kB,EAAIxjB,EAAItB,EAAGA,EAAS,GAAN81G,EAAgB,IAANA,GAAW,GACnD3/G,KAAKgmD,OAAOjxB,EAAGpG,EAAI9kB,GACnB7J,KAAK+pD,IAAIh1B,EAAIlrB,EAAG8kB,EAAI9kB,EAAGA,EAAS,IAAN81G,EAAiB,IAANA,GAAW,GAChD3/G,KAAKomD,aAQP+4D,yBAAyB9sG,UAAUutG,YAAc,SAAU7qF,EAAGpG,EAAG3O,EAAG7U,GAClE,GACI00G,GAAK7/F,EAAI,EADD,SAGZ8/F,EAAK30G,EAAI,EAHG,SAKZ40G,EAAKhrF,EAAI/U,EAETggG,EAAKrxF,EAAIxjB,EAET80G,EAAKlrF,EAAI/U,EAAI,EAEbkgG,EAAKvxF,EAAIxjB,EAAI,CAEbnL,MAAK8lD,YACL9lD,KAAK+lD,OAAOhxB,EAAGmrF,GACflgH,KAAKmgH,cAAcprF,EAAGmrF,EAAKJ,EAAIG,EAAKJ,EAAIlxF,EAAGsxF,EAAItxF,GAC/C3uB,KAAKmgH,cAAcF,EAAKJ,EAAIlxF,EAAGoxF,EAAIG,EAAKJ,EAAIC,EAAIG,GAChDlgH,KAAKmgH,cAAcJ,EAAIG,EAAKJ,EAAIG,EAAKJ,EAAIG,EAAIC,EAAID,GACjDhgH,KAAKmgH,cAAcF,EAAKJ,EAAIG,EAAIjrF,EAAGmrF,EAAKJ,EAAI/qF,EAAGmrF,GAC/ClgH,KAAKomD,aAMP+4D,yBAAyB9sG,UAAU+tG,SAAW,SAAUrrF,EAAGpG,EAAG3O,EAAG7U,GAC/D,GACIk1G,GAAWrgG,EACXsgG,EAAWn1G,GAFP,EAAI,GAKR00G,EAAKQ,EAAW,EADR,SAGZP,EAAKQ,EAAW,EAHJ,SAKZP,EAAKhrF,EAAIsrF,EAETL,EAAKrxF,EAAI2xF,EAETL,EAAKlrF,EAAIsrF,EAAW,EAEpBH,EAAKvxF,EAAI2xF,EAAW,EAEpBC,EAAM5xF,GAAKxjB,EAAIm1G,EAAW,GAE1BE,EAAM7xF,EAAIxjB,CAEVnL,MAAK8lD,YACL9lD,KAAK+lD,OAAOg6D,EAAIG,GAEhBlgH,KAAKmgH,cAAcJ,EAAIG,EAAKJ,EAAIG,EAAKJ,EAAIG,EAAIC,EAAID,GACjDhgH,KAAKmgH,cAAcF,EAAKJ,EAAIG,EAAIjrF,EAAGmrF,EAAKJ,EAAI/qF,EAAGmrF,GAE/ClgH,KAAKmgH,cAAcprF,EAAGmrF,EAAKJ,EAAIG,EAAKJ,EAAIlxF,EAAGsxF,EAAItxF,GAC/C3uB,KAAKmgH,cAAcF,EAAKJ,EAAIlxF,EAAGoxF,EAAIG,EAAKJ,EAAIC,EAAIG,GAEhDlgH,KAAKgmD,OAAO+5D,EAAIQ,GAEhBvgH,KAAKmgH,cAAcJ,EAAIQ,EAAMT,EAAIG,EAAKJ,EAAIW,EAAKP,EAAIO,GACnDxgH,KAAKmgH,cAAcF,EAAKJ,EAAIW,EAAKzrF,EAAGwrF,EAAMT,EAAI/qF,EAAGwrF,GAEjDvgH,KAAKgmD,OAAOjxB,EAAGmrF,IAMjBf,yBAAyB9sG,UAAUouG,cAAgB,SAAU1rF,EAAGpG,EAAGouC,EAAOn5D,GAExE,GAAI88G,GAAK3rF,EAAInxB,EAASnB,KAAKw6C,IAAI8f,GAC3B4jD,EAAKhyF,EAAI/qB,EAASnB,KAAKs6C,IAAIggB,GAG3B6jD,EAAK7rF,EAAa,GAATnxB,EAAenB,KAAKw6C,IAAI8f,GACjC8jD,EAAKlyF,EAAa,GAAT/qB,EAAenB,KAAKs6C,IAAIggB,GAGjC+jD,EAAKJ,EAAK98G,EAAS,EAAInB,KAAKw6C,IAAI8f,EAAQ,GAAMt6D,KAAKunD,IACnD+2D,EAAKJ,EAAK/8G,EAAS,EAAInB,KAAKs6C,IAAIggB,EAAQ,GAAMt6D,KAAKunD,IAGnDg3D,EAAKN,EAAK98G,EAAS,EAAInB,KAAKw6C,IAAI8f,EAAQ,GAAMt6D,KAAKunD,IACnDi3D,EAAKN,EAAK/8G,EAAS,EAAInB,KAAKs6C,IAAIggB,EAAQ,GAAMt6D,KAAKunD,GAEvDhqD,MAAK8lD,YACL9lD,KAAK+lD,OAAOhxB,EAAGpG,GACf3uB,KAAKgmD,OAAO86D,EAAIC,GAChB/gH,KAAKgmD,OAAO46D,EAAIC,GAChB7gH,KAAKgmD,OAAOg7D,EAAIC,GAChBjhH,KAAKomD,aAMP+4D,yBAAyB9sG,UAAU6uG,eAAiB,SAAUnsF,EAAGpG,EAAGouC,EAAOn5D,GACzE,GAAIimD,GAAkB,GAATjmD,EACTu9G,EAAKpsF,EAAI80B,EAASpnD,KAAKw6C,IAAI8f,GAC3BqkD,EAAKzyF,EAAIk7B,EAASpnD,KAAKs6C,IAAIggB,EAC/B/8D,MAAK0nG,OAAOyZ,EAAIC,EAAIv3D,IAStBs1D,yBAAyB9sG,UAAUgvG,WAAa,SAAUtsF,EAAGpG,EAAG2yF,EAAIC,EAAIC,GACtExhH,KAAK8lD,YACL9lD,KAAK+lD,OAAOhxB,EAAGpG,EAYf,KAVA,GAAI8yF,GAAgBD,EAAQ59G,OACxBg6C,EAAK0jE,EAAKvsF,EACV8oB,EAAK0jE,EAAK5yF,EACV+yF,EAAQ7jE,EAAKD,EACb+jE,EAAgBl/G,KAAKusD,KAAKpR,EAAKA,EAAKC,EAAKA,GACzC+jE,EAAe,EACf1lB,GAAO,EACPrhD,EAAQ,EACRgnE,EAAaL,EAAQ,GAElBG,GAAiB,IACtBE,EAAaL,EAAQI,IAAiBH,GAClCI,EAAaF,IACfE,EAAaF,GAGf9mE,EAAQp4C,KAAKusD,KAAK6yD,EAAaA,GAAc,EAAIH,EAAQA,IACzD7mE,EAAQ+C,EAAK,GAAK/C,EAAQA,EAC1B9lB,GAAK8lB,EACLlsB,GAAK+yF,EAAQ7mE,GAEA,IAATqhD,EACFl8F,KAAKgmD,OAAOjxB,EAAGpG,GAEf3uB,KAAK+lD,OAAOhxB,EAAGpG,GAGjBgzF,GAAiBE,EACjB3lB,GAAQA,KAOV,SAAUr8F,EAAQD,EAASM,GAuB/B,QAAS4hH,GAASttF,GAEhB,MADAolB,GAAMplB,EACCutF,IAkDT,QAASnU,KACP76F,EAAQ,EACRtS,EAAIm5C,EAAI3+B,OAAO,GAQjB,QAASxJ,KACPsB,IACAtS,EAAIm5C,EAAI3+B,OAAOlI,GAOjB,QAASivG,KACP,MAAOpoE,GAAI3+B,OAAOlI,EAAQ,GAS5B,QAASkvG,GAAexhH,GACtB,MAAOyhH,GAAkBh1G,KAAKzM,GAShC,QAASokE,GAAMrhE,EAAGC,GAKhB,GAJKD,IACHA,MAGEC,EACF,IAAK,GAAIwR,KAAQxR,GACXA,EAAEH,eAAe2R,KACnBzR,EAAEyR,GAAQxR,EAAEwR,GAIlB,OAAOzR,GAeT,QAAS2+G,GAASrhH,EAAKs1F,EAAM7zF,GAG3B,IAFA,GAAIwR,GAAOqiF,EAAKzvF,MAAM,KAClBsiC,EAAInoC,EACDiT,EAAKnQ,QAAQ,CAClB,GAAI2D,GAAMwM,EAAKswB,OACXtwB,GAAKnQ,QAEFqlC,EAAE1hC,KACL0hC,EAAE1hC,OAEJ0hC,EAAIA,EAAE1hC,IAGN0hC,EAAE1hC,GAAOhF,GAWf,QAAS6/G,GAAQ/wD,EAAO9jB,GAOtB,IANA,GAAIxpC,GAAGgB,EACHs0E,EAAU,KAGVgpC,GAAUhxD,GACV3xD,EAAO2xD,EACJ3xD,EAAKsJ,QACVq5G,EAAOx9G,KAAKnF,EAAKsJ,QACjBtJ,EAAOA,EAAKsJ,MAId,IAAItJ,EAAK05G,MACP,IAAKr1G,EAAI,EAAGgB,EAAMrF,EAAK05G,MAAMx1G,OAAQG,EAAIgB,EAAKhB,IAC5C,GAAIwpC,EAAKltC,KAAOX,EAAK05G,MAAMr1G,GAAG1D,GAAI,CAChCg5E,EAAU35E,EAAK05G,MAAMr1G,EACrB,OAiBN,IAZKs1E,IAEHA,GACEh5E,GAAIktC,EAAKltC,IAEPgxD,EAAM9jB,OAER8rC,EAAQipC,KAAOz9C,EAAMwU,EAAQipC,KAAMjxD,EAAM9jB,QAKxCxpC,EAAIs+G,EAAOz+G,OAAS,EAAGG,GAAK,EAAGA,IAAK,CACvC,GAAI+F,GAAIu4G,EAAOt+G,EAEV+F,GAAEsvG,QACLtvG,EAAEsvG,WAE8B,IAA9BtvG,EAAEsvG,MAAMx0G,QAAQy0E,IAClBvvE,EAAEsvG,MAAMv0G,KAAKw0E,GAKb9rC,EAAK+0E,OACPjpC,EAAQipC,KAAOz9C,EAAMwU,EAAQipC,KAAM/0E,EAAK+0E,OAS5C,QAASC,GAAQlxD,EAAOwtD,GAKtB,GAJKxtD,EAAMioD,QACTjoD,EAAMioD,UAERjoD,EAAMioD,MAAMz0G,KAAKg6G,GACbxtD,EAAMwtD,KAAM,CACd,GAAIyD,GAAOz9C,KAAUxT,EAAMwtD,KAC3BA,GAAKyD,KAAOz9C,EAAMy9C,EAAMzD,EAAKyD,OAajC,QAASlI,GAAW/oD,EAAO5tC,EAAMD,EAAIve,EAAMq9G,GACzC,GAAIzD,IACFp7F,KAAMA,EACND,GAAIA,EACJve,KAAMA,EAQR,OALIosD,GAAMwtD,OACRA,EAAKyD,KAAOz9C,KAAUxT,EAAMwtD,OAE9BA,EAAKyD,KAAOz9C,EAAMg6C,EAAKyD,SAAYA,GAE5BzD,EAOT,QAAS2D,KAKP,IAJAC,EAAYC,EAAUC,KACtBh5F,EAAQ,GAGK,MAANlpB,GAAmB,OAANA,GAAoB,OAANA,GAAoB,OAANA,GAE9CgR,GAGF,GAAG,CACD,GAAImxG,IAAY,CAGhB,IAAU,MAANniH,EAAW,CAGb,IADA,GAAIsD,GAAIgP,EAAQ,EACS,MAAlB6mC,EAAI3+B,OAAOlX,IAAgC,OAAlB61C,EAAI3+B,OAAOlX,IACzCA,GAEF,IAAsB,OAAlB61C,EAAI3+B,OAAOlX,IAAiC,KAAlB61C,EAAI3+B,OAAOlX,GAAW,CAElD,KAAY,IAALtD,GAAgB,MAALA,GAChBgR,GAEFmxG,IAAY,GAGhB,GAAU,MAANniH,GAA+B,MAAlBuhH,IAAuB,CAEtC,KAAY,IAALvhH,GAAgB,MAALA,GAChBgR,GAEFmxG,IAAY,EAEd,GAAU,MAANniH,GAA+B,MAAlBuhH,IAAuB,CAEtC,KAAY,IAALvhH,GAAS,CACd,GAAU,MAANA,GAA+B,MAAlBuhH,IAAuB,CAEtCvwG,IACAA,GACA,OAEAA,IAGJmxG,GAAY,EAId,KAAa,MAANniH,GAAmB,OAANA,GAAoB,OAANA,GAAoB,OAANA,GAE9CgR,UAEKmxG,EAGT,IAAU,KAANniH,EAGF,YADAgiH,EAAYC,EAAUG,UAKxB,IAAIC,GAAKriH,EAAIuhH,GACb,IAAIe,EAAWD,GAKb,MAJAL,GAAYC,EAAUG,UACtBl5F,EAAQm5F,EACRrxG,QACAA,IAKF,IAAIsxG,EAAWtiH,GAIb,MAHAgiH,GAAYC,EAAUG,UACtBl5F,EAAQlpB,MACRgR,IAMF,IAAIwwG,EAAexhH,IAAY,MAANA,EAAW,CAIlC,IAHAkpB,GAASlpB,EACTgR,IAEOwwG,EAAexhH,IACpBkpB,GAASlpB,EACTgR,GAUF,OARc,UAAVkY,EACFA,GAAQ,EACW,SAAVA,EACTA,GAAQ,EACE3mB,MAAMnB,OAAO8nB,MACvBA,EAAQ9nB,OAAO8nB,SAEjB84F,EAAYC,EAAUM,YAKxB,GAAU,MAANviH,EAAW,CAEb,IADAgR,IACY,IAALhR,IAAiB,KAALA,GAAkB,MAANA,GAA+B,MAAlBuhH,MAC1Cr4F,GAASlpB,EACC,MAANA,GAEFgR,IAEFA,GAEF,IAAS,KAALhR,EACF,KAAMwiH,GAAe,2BAIvB,OAFAxxG,UACAgxG,EAAYC,EAAUM,YAMxB,IADAP,EAAYC,EAAUQ,QACV,IAALziH,GACLkpB,GAASlpB,EACTgR,GAEF,MAAM,IAAI0kC,aAAY,yBAA2BgtE,EAAKx5F,EAAO,IAAM;6DAOrE,QAASo4F,KACP,GAAI1wD,KAwBJ,IAtBAu8C,IACA4U,IAGc,WAAV74F,IACF0nC,EAAM/vC,QAAS,EACfkhG,KAIY,UAAV74F,GAA+B,YAAVA,IACvB0nC,EAAMpsD,KAAO0kB,EACb64F,KAIEC,IAAcC,EAAUM,aAC1B3xD,EAAMhxD,GAAKspB,EACX64F,KAIW,KAAT74F,EACF,KAAMs5F,GAAe,2BAQvB,IANAT,IAGAY,EAAgB/xD,GAGH,KAAT1nC,EACF,KAAMs5F,GAAe,2BAKvB,IAHAT,IAGc,KAAV74F,EACF,KAAMs5F,GAAe,uBASvB,OAPAT,WAGOnxD,GAAM9jB,WACN8jB,GAAMwtD,WACNxtD,GAAMA,MAENA,EAOT,QAAS+xD,GAAgB/xD,GACvB,KAAiB,KAAV1nC,GAAyB,KAATA,GACrB05F,EAAehyD,GACD,MAAV1nC,GACF64F,IAWN,QAASa,GAAehyD,GAEtB,GAAIiyD,GAAWC,EAAclyD,EAC7B,IAAIiyD,EAIF,WAFAE,GAAUnyD,EAAOiyD,EAOnB,KADWG,EAAwBpyD,GACnC,CAKA,GAAIoxD,GAAaC,EAAUM,WACzB,KAAMC,GAAe,sBAEvB,IAAI5iH,GAAKspB,CAGT,IAFA64F,IAEc,MAAV74F,EAAe,CAGjB,GADA64F,IACIC,GAAaC,EAAUM,WACzB,KAAMC,GAAe,sBAEvB5xD,GAAMhxD,GAAMspB,EACZ64F,QAGAkB,GAAmBryD,EAAOhxD,IAS9B,QAASkjH,GAAclyD,GACrB,GAAIiyD,GAAW,IAgBf,IAbc,aAAV35F,IACF25F,KACAA,EAASr+G,KAAO,WAChBu9G,IAGIC,IAAcC,EAAUM,aAC1BM,EAASjjH,GAAKspB,EACd64F,MAKU,MAAV74F,EAAe,CAejB,GAdA64F,IAEKc,IACHA,MAEFA,EAASt6G,OAASqoD,EAClBiyD,EAAS/1E,KAAO8jB,EAAM9jB,KACtB+1E,EAASzE,KAAOxtD,EAAMwtD,KACtByE,EAASjyD,MAAQA,EAAMA,MAGvB+xD,EAAgBE,GAGH,KAAT35F,EACF,KAAMs5F,GAAe,2BAEvBT,WAGOc,GAAS/1E,WACT+1E,GAASzE,WACTyE,GAASjyD,YACTiyD,GAASt6G,OAGXqoD,EAAMsyD,YACTtyD,EAAMsyD,cAERtyD,EAAMsyD,UAAU9+G,KAAKy+G,GAGvB,MAAOA,GAYT,QAASG,GAAwBpyD,GAE/B,MAAc,SAAV1nC,GACF64F,IAGAnxD,EAAM9jB,KAAOq2E,IACN,QACY,SAAVj6F,GACT64F,IAGAnxD,EAAMwtD,KAAO+E,IACN,QACY,UAAVj6F,GACT64F,IAGAnxD,EAAMA,MAAQuyD,IACP,SAGF,KAQT,QAASF,GAAmBryD,EAAOhxD,GAEjC,GAAIktC,IACFltC,GAAIA,GAEFiiH,EAAOsB,GACPtB,KACF/0E,EAAK+0E,KAAOA,GAEdF,EAAQ/wD,EAAO9jB,GAGfi2E,EAAUnyD,EAAOhxD,GAQnB,QAASmjH,GAAUnyD,EAAO5tC,GACxB,KAAiB,OAAVkG,GAA4B,OAAVA,GAAgB,CACvC,GAAInG,GACAve,EAAO0kB,CACX64F,IAEA,IAAIc,GAAWC,EAAclyD,EAC7B,IAAIiyD,EACF9/F,EAAK8/F,MACA,CACL,GAAIb,GAAaC,EAAUM,WACzB,KAAMC,GAAe,kCAEvBz/F,GAAKmG,EACLy4F,EAAQ/wD,GACNhxD,GAAImjB,IAENg/F,IAQFD,EAAQlxD,EADG+oD,EAAW/oD,EAAO5tC,EAAMD,EAAIve,EAH5B2+G,MAMXngG,EAAOD,GASX,QAASogG,KAGP,IAFA,GAAItB,GAAO,KAEM,MAAV34F,GAAe,CAGpB,IAFA64F,IACAF,KACiB,KAAV34F,GAAyB,KAATA,GAAc,CACnC,GAAI84F,GAAaC,EAAUM,WACzB,KAAMC,GAAe,0BAEvB,IAAIhuG,GAAO0U,CAGX,IADA64F,IACa,KAAT74F,EACF,KAAMs5F,GAAe,wBAIvB,IAFAT,IAEIC,GAAaC,EAAUM,WACzB,KAAMC,GAAe,2BAGvBd,GAASG,EAAMrtG,EADH0U,GAGZ64F,IACa,KAAT74F,GACF64F,IAIJ,GAAa,KAAT74F,EACF,KAAMs5F,GAAe,qBAEvBT,KAGF,MAAOF,GAQT,QAASW,GAAexqD,GACtB,MAAO,IAAItiB,aAAYsiB,EAAU,UAAY0qD,EAAKx5F,EAAO,IAAM,WAAa5W,EAAQ,KAStF,QAASowG,GAAK17D,EAAMo8D,GAClB,MAAOp8D,GAAK7jD,QAAUigH,EAAYp8D,EAAOA,EAAKp9C,OAAO,EAAG,IAAM,MAShE,QAASy5G,GAASj/F,EAAQC,EAAQrd,GAC5BtD,MAAMC,QAAQygB,GAChBA,EAAO3d,QAAQ,SAAU68G,GACnB5/G,MAAMC,QAAQ0gB,GAChBA,EAAO5d,QAAQ,SAAU88G,GACvBv8G,EAAGs8G,EAAOC,KAGZv8G,EAAGs8G,EAAOj/F,KAIV3gB,MAAMC,QAAQ0gB,GAChBA,EAAO5d,QAAQ,SAAU88G,GACvBv8G,EAAGod,EAAQm/F,KAGbv8G,EAAGod,EAAQC,GAcjB,QAASm/F,GAAQriH,EAAQw0F,EAAM7zF,GAM7B,IAAK,GALD8W,GAAQ+8E,EAAKzvF,MAAM,KACnBtD,EAAOgW,EAAM07E,MAGbj0F,EAAMc,EACDmC,EAAI,EAAGA,EAAIsV,EAAMzV,OAAQG,IAAK,CACrC,GAAIkR,GAAOoE,EAAMtV,EACXkR,KAAQnU,KACZA,EAAImU,OAENnU,EAAMA,EAAImU,GAMZ,MAFAnU,GAAIuC,GAAQd,EAELX,EAST,QAASsiH,GAAY5B,EAAM6B,GACzB,GAAI1vE,KAEJ,KAAK,GAAIpxC,KAAQi/G,GACf,GAAIA,EAAKh/G,eAAeD,GAAO,CAC7B,GAAI+gH,GAAUD,EAAQ9gH,EAClBc,OAAMC,QAAQggH,GAChBA,EAAQl9G,QAAQ,SAAUm9G,GACxBJ,EAAQxvE,EAAW4vE,EAAU/B,EAAKj/G,MAER,gBAAZ+gH,GAChBH,EAAQxvE,EAAW2vE,EAAS9B,EAAKj/G,IAEjC4gH,EAAQxvE,EAAWpxC,EAAMi/G,EAAKj/G,IAKpC,MAAOoxC,GAST,QAASwkE,GAAWzkF,GAElB,GAAI+nF,GAAUuF,EAASttF,GACnB8vF,GACFlL,SACAE,SACAtrG,WAmBF,IAfIuuG,EAAQnD,OACVmD,EAAQnD,MAAMlyG,QAAQ,SAAUq9G,GAC9B,GAAIC,IACFnkH,GAAIkkH,EAAQlkH,GACZ+vC,MAAOztC,OAAO4hH,EAAQn0E,OAASm0E,EAAQlkH,IAEzCwkE,GAAM2/C,EAAWN,EAAYK,EAAQjC,KAAMmC,IACvCD,EAAUE,QACZF,EAAUG,MAAQ,SAEpBL,EAAUlL,MAAMv0G,KAAK2/G,KAKrBjI,EAAQjD,MAAO,CAMjB,GAAIsL,GAAc,SAAqBC,GACrC,GAAIC,IACFrhG,KAAMohG,EAAQphG,KACdD,GAAIqhG,EAAQrhG,GAKd,OAHAqhD,GAAMigD,EAAWZ,EAAYW,EAAQvC,KAAMyC,IAC3CD,EAAUE,OAA0B,OAAjBH,EAAQ5/G,KAAgB,SAAOpB,GAE3CihH,EAGTvI,GAAQjD,MAAMpyG,QAAQ,SAAU29G,GAC9B,GAAIphG,GAAMD,CAERC,GADEohG,EAAQphG,eAAgBhf,QACnBogH,EAAQphG,KAAK21F,OAGlB/4G,GAAIwkH,EAAQphG,MAQdD,EADEqhG,EAAQrhG,aAAc/e,QACnBogH,EAAQrhG,GAAG41F,OAGd/4G,GAAIwkH,EAAQrhG,IAIZqhG,EAAQphG,eAAgBhf,SAAUogH,EAAQphG,KAAK61F,OACjDuL,EAAQphG,KAAK61F,MAAMpyG,QAAQ,SAAU+9G,GACnC,GAAIH,GAAYF,EAAYK,EAC5BX,GAAUhL,MAAMz0G,KAAKigH,KAIzBhB,EAASrgG,EAAMD,EAAI,SAAUC,EAAMD,GACjC,GAAIyhG,GAAU7K,EAAWkK,EAAW7gG,EAAKpjB,GAAImjB,EAAGnjB,GAAIwkH,EAAQ5/G,KAAM4/G,EAAQvC,MACtEwC,EAAYF,EAAYK,EAC5BX,GAAUhL,MAAMz0G,KAAKigH,KAGnBD,EAAQrhG,aAAc/e,SAAUogH,EAAQrhG,GAAG81F,OAC7CuL,EAAQrhG,GAAG81F,MAAMpyG,QAAQ,SAAU+9G,GACjC,GAAIH,GAAYF,EAAYK,EAC5BX,GAAUhL,MAAMz0G,KAAKigH,OAW7B,MAJIvI,GAAQ+F,OACVgC,EAAUt2G,QAAUuuG,EAAQ+F,MAGvBgC,EA33BT,GAAInjH,GAAUjB,EAAoB,IAE9BkB,EAEJ,SAAgCN,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,IAFnDK,GAuBlCsjH,GACFS,SAAY,YACZC,UAAa,aACbC,eAAkB,aAClBC,SAAY,YACZn7G,OAAU,eAAgB,oBAC1Bo7G,UAAa,mBACbjsE,QAAW,QACXksE,aAAgB,SAEdR,GAAoB,EAAI3jH,EAAkB,SAAGqjH,EACjDM,GAAkB76G,MAAQ,aAG1B,IAAIw4G,IACFC,KAAM,EACNE,UAAW,EACXG,WAAY,EACZE,QAAS,GAIPH,GACFyC,KAAK,EACLC,KAAK,EACLC,KAAK,EACLC,KAAK,EACLC,KAAK,EACLC,KAAK,EACLC,KAAK,EAELC,MAAM,EACNC,MAAM,GAGJpsE,EAAM,GACN7mC,EAAQ,EACRtS,EAAI,GACJkpB,EAAQ,GACR84F,EAAYC,EAAUC,KAmCtBT,EAAoB,iBA4xBxBtiH,GAAQkiH,SAAWA,EACnBliH,EAAQq5G,WAAaA,GAIjB,SAAUp5G,EAAQD,GAItB,QAASu5G,GAAW8M,EAAWppB,GAC7B,GAAIyc,MACAF,KACAprG,GACFsrG,OACE4M,cAAc,GAEhB9M,OACE+M,OAAO,EACPv7G,YAAY,QAIG/G,KAAfg5F,QACuBh5F,KAArBg5F,EAAWspB,QACbn4G,EAAQorG,MAAM+M,MAAQtpB,EAAWspB,WAELtiH,KAA1Bg5F,EAAWjyF,aACboD,EAAQorG,MAAMxuG,WAAaiyF,EAAWjyF,gBAER/G,KAA5Bg5F,EAAWqpB,eACbl4G,EAAQsrG,MAAM4M,aAAerpB,EAAWqpB,cAM5C,KAAK,GAFDE,GAASH,EAAU3M,MACnB+M,EAASJ,EAAU7M,MACdr1G,EAAI,EAAGA,EAAIqiH,EAAOxiH,OAAQG,IAAK,CACtC,GAAI86G,MACAyH,EAAQF,EAAOriH,EACnB86G,GAAS,GAAIyH,EAAMjmH,GACnBw+G,EAAW,KAAIyH,EAAM/wG,OACrBspG,EAAS,GAAIyH,EAAM39G,OACnBk2G,EAAiB,WAAIyH,EAAMp1B,WAC3B2tB,EAAY,MAAIyH,EAAMl2E,MACtByuE,EAAY,UAAyBh7G,KAArByiH,EAAMp1B,WAA2Bo1B,EAAMp1B,WAAW9T,UAAQv5E,GACpD,aAAlByiH,EAAY,OACdzH,EAAa,OAAI,MAIfyH,EAAMp8G,QAAkC,IAAzB8D,EAAQk4G,eACzBrH,EAAY,MAAIyH,EAAMp8G,OAExBovG,EAAMz0G,KAAKg6G,GAGb,IAAK,GAAI96G,GAAI,EAAGA,EAAIsiH,EAAOziH,OAAQG,IAAK,CACtC,GAAIwpC,MACAg5E,EAAQF,EAAOtiH,EACnBwpC,GAAS,GAAIg5E,EAAMlmH,GACnBktC,EAAiB,WAAIg5E,EAAMr1B,WAC3B3jD,EAAQ,EAAIg5E,EAAMxxF,EAClBwY,EAAQ,EAAIg5E,EAAM53F,EAClB4e,EAAY,MAAIg5E,EAAMn2E,MACtB7C,EAAY,UAAyB1pC,KAArB0iH,EAAMr1B,WAA2Bq1B,EAAMr1B,WAAW9T,MAAQmpC,EAAMnpC,OAC/C,IAA7BpvE,EAAQorG,MAAMxuG,WAChB2iC,EAAY,MAAIg5E,EAAMr8G,MAEtBqjC,EAAY,UAAoB1pC,KAAhB0iH,EAAMr8G,OAAwBwB,WAAY66G,EAAMr8G,MAAOyB,OAAQ46G,EAAMr8G,MAAO0B,WAAaF,WAAY66G,EAAMr8G,MAAOyB,OAAQ46G,EAAMr8G,OAAS2B,OAASH,WAAY66G,EAAMr8G,MAAOyB,OAAQ46G,EAAMr8G,YAAYrG,GAEvN0pC,EAAW,KAAIg5E,EAAMp2E,KACrB5C,EAAY,MAAIv/B,EAAQorG,MAAM+M,WAAqBtiH,KAAZ0iH,EAAMxxF,OAA+BlxB,KAAZ0iH,EAAM53F,EACtEyqF,EAAMv0G,KAAK0oC,GAGb,OAAS6rE,MAAOA,EAAOE,MAAOA,GAGhC15G,EAAQu5G,WAAaA,GAIjB,SAAUt5G,EAAQD,GAKtBA,EAAY,IACV4mH,KAAM,OACNC,IAAK,kBACLC,KAAM,OACNtE,QAAS,WACTG,QAAS,WACT7E,SAAU,YACViJ,SAAU,YACVC,eAAgB,+CAChBC,gBAAiB,qEACjBC,oBAAqB,wEACrBC,gBAAiB,kCACjBC,mBAAoB,8BACpBC,iBAAkB,8BAEpBrnH,EAAe,MAAIA,EAAY,GAC/BA,EAAe,MAAIA,EAAY,GAG/BA,EAAY,IACV4mH,KAAM,YACNC,IAAK,iBACLC,KAAM,SACNtE,QAAS,oBACTG,QAAS,mBACT7E,SAAU,mBACViJ,SAAU,kBACVC,eAAgB,oEAChBC,gBAAiB,8FACjBC,oBAAqB,0FACrBC,gBAAiB,0DACjBC,mBAAoB,wCACpBC,iBAAkB,yCAEpBrnH,EAAe,MAAIA,EAAY,GAG/BA,EAAY,IACV4mH,KAAM,SACNC,IAAK,qBACLC,KAAM,QACNtE,QAAS,cACTG,QAAS,gBACT7E,SAAU,cACViJ,SAAU,gBACVC,eAAgB,0DAChBC,gBAAiB,8EACjBC,oBAAqB,2EACrBC,gBAAiB,8CACjBC,mBAAoB,iCACpBC,iBAAkB,gCAEpBrnH,EAAe,MAAIA,EAAY,GAG/BA,EAAY,IACV4mH,KAAM,WACNC,IAAK,wBACLC,KAAM,WACNtE,QAAS,mBACTG,QAAS,sBACT7E,SAAU,mBACViJ,SAAU,sBACVC,eAAgB,sCAChBC,gBAAiB,mEACjBC,oBAAqB,yEACrBC,gBAAiB,iDACjBC,mBAAoB,0CACpBC,iBAAkB,6CAEpBrnH,EAAe,MAAIA,EAAY,GAG/BA,EAAY,IACV4mH,KAAM,WACNC,IAAK,uBACLC,KAAM,QACNtE,QAAS,iBACTG,QAAS,iBACT7E,SAAU,gBACViJ,SAAU,gBACVC,eAAgB,uDAChBC,gBAAiB,6EACjBC,oBAAqB,kFACrBC,gBAAiB,wCACjBC,mBAAoB,0CACpBC,iBAAkB,0CAEpBrnH,EAAe,MAAIA,EAAY,GAC/BA,EAAe,MAAIA,EAAY,GAG/BA,EAAQ,UACN4mH,KAAM,SACNC,IAAK,sBACLC,KAAM,SACNtE,QAAS,eACTG,QAAS,mBACT7E,SAAU,YACViJ,SAAU,gBACVC,eAAgB,0DAChBC,gBAAiB,mEACjBC,oBAAqB,yEACrBC,gBAAiB,gDACjBC,mBAAoB,sCACpBC,iBAAkB,sCAEpBrnH,EAAQ,SAAWA,EAAQ,SAC3BA,EAAe,MAAIA,EAAQ,SAC3BA,EAAe,MAAIA,EAAQ,SAG3BA,EAAY,IACV4mH,KAAM,gBACNC,IAAK,oBACLC,KAAM,QACNtE,QAAS,gBACTG,QAAS,iBACT7E,SAAU,qBACViJ,SAAU,sBACVC,eAAgB,yDAChBC,gBAAiB,yEACjBC,oBAAqB,mFACrBC,gBAAiB,wCACjBC,mBAAoB,iCACpBC,iBAAkB,2CAEpBrnH,EAAe,MAAIA,EAAY,IAI3B,SAAUC,EAAQD,EAASM,GAoB/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAhBzF2D,OAAO6S,eAAe1X,EAAS,cAC3B2C,OAAO,GAGX,IAAIsvF,GAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAEvCm1B,EAAehnH,EAAoB,KAEnCinH,EAAgBtmH,EAAuBqmH,GAQvCrO,EAAS,WACT,QAASA,GAAO1xG,IACZ,EAAI2qF,EAA0B,SAAG9xF,KAAM64G,GAEvC74G,KAAKu6G,UACLv6G,KAAKonH,eACLpnH,KAAKmH,SAAWA,EAyGpB,OA/FA,EAAI6qF,EAAuB,SAAG6mB,IAC1BtxG,IAAK,oBACLhF,MAAO,SAA2B8kH,EAAKC,EAAWC,GAE9C,OAAY1jH,KAARwjH,OAAgDxjH,KAA3B0jH,EAAzB,CACA,OAAkB1jH,KAAdyjH,EAEA,WADAhiG,SAAQH,KAAK,8BAKjBoiG,GAAuBC,QAAU,WAC7BliG,QAAQk3E,MAAM,8BAA+B8qB,IAKjDC,EAAuB7C,MAAMhsG,IAAM4uG,MAQvC//G,IAAK,mBACLhF,MAAO,SAA0BklH,GACzBznH,KAAKmH,UACLnH,KAAKmH,SAASsgH,MAWtBlgH,IAAK,OACLhF,MAAO,SAAc8kH,EAAKC,EAAWjnH,GACjC,GAAI+4F,GAAQp5F,KAGR0nH,EAAc1nH,KAAKu6G,OAAO8M,EAC9B,IAAIK,EAAa,MAAOA,EAGxB,IAAIC,GAAM,GAAIR,GAAuB,OAyBrC,OArBAnnH,MAAKu6G,OAAO8M,GAAOM,EAGnBA,EAAIjD,MAAMkD,OAAS,WAEfxuB,EAAMyuB,qBAAqBF,EAAIjD,OAC/BiD,EAAI3sD,OACJo+B,EAAM0uB,iBAAiBH,IAI3BA,EAAIjD,MAAM8C,QAAU,WAChBliG,QAAQk3E,MAAM,wBAAyB6qB,GAEvCjuB,EAAM2uB,kBAAkBV,EAAKC,EAAWK,IAI5CA,EAAIjD,MAAMhsG,IAAM2uG,EAGTM,KAYXpgH,IAAK,uBACLhF,MAAO,SAA8BylH,GACN,IAAvBA,EAAa53G,QACbF,SAASS,KAAKD,YAAYs3G,GAC1BA,EAAa53G,MAAQ43G,EAAan3G,YAClCm3G,EAAa33G,OAAS23G,EAAa54D,aACnCl/C,SAASS,KAAKzO,YAAY8lH,QAI/BnP,IAGXj5G,GAAiB,QAAIi5G,GAIjB,SAAUh5G,EAAQD,EAASM,GAgB/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAZzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAIsvF,GAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAavCk2B,EAAc,WAChB,QAASA,GAAYvD,IACnB,EAAI5yB,EAA0B,SAAG9xF,KAAMioH,GAEvCjoH,KAAKkoH,eAAiB,EAEtBloH,KAAK0kH,MAAQ,GAAIyD,OACjBnoH,KAAKk+C,OAAShuC,SAASC,cAAc,UA8IvC,OAtIA,EAAI6hF,EAAuB,SAAGi2B,IAC5B1gH,IAAK,OACLhF,MAAO,WACL,IAAIvC,KAAKy4F,cAAT,CAEA,GAAIz4E,GAAIhgB,KAAK0kH,MAAMt0G,MACfjF,EAAInL,KAAK0kH,MAAMr0G,MAGnBrQ,MAAKoQ,MAAQ4P,EACbhgB,KAAKqQ,OAASlF,EAGdnL,KAAKk+C,OAAO9tC,MAAQ,EAAI4P,EAAI,EAC5BhgB,KAAKk+C,OAAO7tC,OAASlF,EAAI,EAIzBnL,KAAKooH,cAAgB,EAAG,EAAGpoG,EAAI,EAAG7U,EAAI,IAAK6U,EAAI,EAAG,EAAGA,EAAI,EAAG7U,EAAI,IAAK6U,EAAI,EAAG7U,EAAI,EAAG6U,EAAI,EAAG7U,EAAI,IAAK,EAAI6U,EAAI,EAAG7U,EAAI,EAAG6U,EAAI,GAAI7U,EAAI,KAEjInL,KAAKqoH,kBAQP9gH,IAAK,cACLhF,MAAO,WACL,WAA4BsB,KAArB7D,KAAKooH,eAkBd7gH,IAAK,cACLhF,MAAO,WACL,GAAI+S,GAAMtV,KAAKk+C,OAAO6G,WAAW,MAG7BvhC,EAAKxjB,KAAKooH,YAAY,EAC1B9yG,GAAIgzG,UAAUtoH,KAAK0kH,MAAOlhG,EAAG,GAAIA,EAAG,GAAIA,EAAG,GAAIA,EAAG,GAGlD,KAAK,GAAI+kG,GAAa,EAAGA,EAAavoH,KAAKkoH,eAAgBK,IAAc,CACvE,GAAI9kG,GAAOzjB,KAAKooH,YAAYG,EAAa,GACrCC,EAAMxoH,KAAKooH,YAAYG,EAE3BjzG,GAAIgzG,UAAUtoH,KAAKk+C,OAAQz6B,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAI+kG,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAIA,EAAI,QAiB/FjhH,IAAK,sBACLhF,MAAO,SAA6B+S,EAAKs8D,EAAQ1rE,EAAMI,EAAK8J,EAAOC,GACjE,GAAIuhE,EAAS,GAAK5xE,KAAKy4F,cAAe,CAEpC7mB,GAAU,EAEV,KADA,GAAI22C,GAAa,EACV32C,EAAS,GAAK22C,EAAavoH,KAAKkoH,gBACrCt2C,GAAU,GACV22C,GAAc,CAGZA,IAAcvoH,KAAKkoH,iBACrBK,EAAavoH,KAAKkoH,eAAiB,EAIrC,IAAIzkG,GAAOzjB,KAAKooH,YAAYG,EAC5BjzG,GAAIgzG,UAAUtoH,KAAKk+C,OAAQz6B,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIvd,EAAMI,EAAK8J,EAAOC,OACxErQ,MAAKyoH,cAEdnzG,EAAIgzG,UAAUtoH,KAAK0kH,MAAOx+G,EAAMI,EAAK8J,EAAOC,MAahD9I,IAAK,aACLhF,MAAO,SAAoBolH,GACzB,GAAIA,GAAM3nH,KAAK0kH,KAKf,SAAKiD,EAAIe,eAQuB,KAArBf,EAAIgB,cAAqD,IAArBhB,EAAIgB,kBAQhDV,IAGTroH,GAAiB,QAAIqoH,GAIjB,SAAUpoH,EAAQD,EAASM,GAgB/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAZzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAIsvF,GAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAIvCpxF,EAAOT,EAAoB,GAO3Bs6G,EAAS,WACX,QAASA,MACP,EAAI1oB,EAA0B,SAAG9xF,KAAMw6G,GAEvCx6G,KAAK+zC,QACL/zC,KAAK4oH,aAAe,EACpB5oH,KAAK6oH,eACL7oH,KAAKymF,WAAa,EAElBzmF,KAAK8oH,gBAAmBn9G,OAAQ,UAAWD,WAAY,UAAWE,WAAaD,OAAQ,UAAWD,WAAY,WAAaG,OAASF,OAAQ,UAAWD,WAAY,aACjKC,OAAQ,UAAWD,WAAY,UAAWE,WAAaD,OAAQ,UAAWD,WAAY,WAAaG,OAASF,OAAQ,UAAWD,WAAY,aAC3IC,OAAQ,UAAWD,WAAY,UAAWE,WAAaD,OAAQ,UAAWD,WAAY,WAAaG,OAASF,OAAQ,UAAWD,WAAY,aAC3IC,OAAQ,UAAWD,WAAY,UAAWE,WAAaD,OAAQ,UAAWD,WAAY,WAAaG,OAASF,OAAQ,UAAWD,WAAY,aAC3IC,OAAQ,UAAWD,WAAY,UAAWE,WAAaD,OAAQ,UAAWD,WAAY,WAAaG,OAASF,OAAQ,UAAWD,WAAY,aAC3IC,OAAQ,UAAWD,WAAY,UAAWE,WAAaD,OAAQ,UAAWD,WAAY,WAAaG,OAASF,OAAQ,UAAWD,WAAY,aAC3IC,OAAQ,UAAWD,WAAY,UAAWE,WAAaD,OAAQ,UAAWD,WAAY,WAAaG,OAASF,OAAQ,UAAWD,WAAY,aAC3IC,OAAQ,UAAWD,WAAY,UAAWE,WAAaD,OAAQ,UAAWD,WAAY,WAAaG,OAASF,OAAQ,UAAWD,WAAY,aAC3IC,OAAQ,UAAWD,WAAY,UAAWE,WAAaD,OAAQ,UAAWD,WAAY,WAAaG,OAASF,OAAQ,UAAWD,WAAY,aAC3IC,OAAQ,UAAWD,WAAY,UAAWE,WAAaD,OAAQ,UAAWD,WAAY,WAAaG,OAASF,OAAQ,UAAWD,WAAY,aAE3IC,OAAQ,UAAWD,WAAY,UAAWE,WAAaD,OAAQ,UAAWD,WAAY,WAAaG,OAASF,OAAQ,UAAWD,WAAY,aAE3IC,OAAQ,UAAWD,WAAY,UAAWE,WAAaD,OAAQ,UAAWD,WAAY,WAAaG,OAASF,OAAQ,UAAWD,WAAY,aAC3IC,OAAQ,UAAWD,WAAY,UAAWE,WAAaD,OAAQ,UAAWD,WAAY,WAAaG,OAASF,OAAQ,UAAWD,WAAY,aAC3IC,OAAQ,UAAWD,WAAY,UAAWE,WAAaD,OAAQ,UAAWD,WAAY,WAAaG,OAASF,OAAQ,UAAWD,WAAY,aAC3IC,OAAQ,UAAWD,WAAY,UAAWE,WAAaD,OAAQ,UAAWD,WAAY,WAAaG,OAASF,OAAQ,UAAWD,WAAY,aAC3IC,OAAQ,UAAWD,WAAY,UAAWE,WAAaD,OAAQ,UAAWD,WAAY,WAAaG,OAASF,OAAQ,UAAWD,WAAY,aAC3IC,OAAQ,UAAWD,WAAY,UAAWE,WAAaD,OAAQ,UAAWD,WAAY,WAAaG,OAASF,OAAQ,UAAWD,WAAY,aAC3IC,OAAQ,UAAWD,WAAY,UAAWE,WAAaD,OAAQ,UAAWD,WAAY,WAAaG,OAASF,OAAQ,UAAWD,WAAY,aAC3IC,OAAQ,UAAWD,WAAY,UAAWE,WAAaD,OAAQ,UAAWD,WAAY,WAAaG,OAASF,OAAQ,UAAWD,WAAY,aAE3IC,OAAQ,UAAWD,WAAY,UAAWE,WAAaD,OAAQ,UAAWD,WAAY,WAAaG,OAASF,OAAQ,UAAWD,WAAY,aAG7I1L,KAAKgO,WACLhO,KAAK0tE,gBACHq7C,kBAAkB,GAEpBpoH,EAAKC,OAAOZ,KAAKgO,QAAShO,KAAK0tE,gBA+EjC,OA5EA,EAAIskB,EAAuB,SAAGwoB,IAC5BjzG,IAAK,aACLhF,MAAO,SAAoByL,GACzB,GAAIg7G,IAAgB,mBAEpB,QAAgBnlH,KAAZmK,EACF,IAAK,GAAIi7G,KAAaj7G,GACpB,GAAIA,EAAQ1K,eAAe2lH,KACgB,IAArCD,EAAapkH,QAAQqkH,GAAmB,CAC1C,GAAI93C,GAAQnjE,EAAQi7G,EACpBjpH,MAAKywB,IAAIw4F,EAAW93C,OAY9B5pE,IAAK,QACLhF,MAAO,WACLvC,KAAKutE,UACLvtE,KAAK6oH,kBAWPthH,IAAK,MACLhF,MAAO,SAAa2mH,GAClB,GAAI/3C,GAAQnxE,KAAKutE,OAAO27C,EACxB,QAAcrlH,KAAVstE,EACF,IAAsC,IAAlCnxE,KAAKgO,QAAQ+6G,kBAA8B/oH,KAAK6oH,YAAYjlH,OAAS,EAAG,CAE1E,GAAImP,GAAQ/S,KAAKymF,WAAazmF,KAAK6oH,YAAYjlH,MAC/C5D,MAAKymF,aACLtV,KACAA,EAAMjnE,MAAQlK,KAAKutE,OAAOvtE,KAAK6oH,YAAY91G,IAC3C/S,KAAKutE,OAAO27C,GAAa/3C,MACpB,CAEL,GAAIg4C,GAASnpH,KAAK4oH,aAAe5oH,KAAK8oH,cAAcllH,MACpD5D,MAAK4oH,eACLz3C,KACAA,EAAMjnE,MAAQlK,KAAK8oH,cAAcK,GACjCnpH,KAAKutE,OAAO27C,GAAa/3C,EAI7B,MAAOA,MAYT5pE,IAAK,MACLhF,MAAO,SAAa0mH,EAAW58G,GAG7B,MAFArM,MAAKutE,OAAO07C,GAAa58G,EACzBrM,KAAK6oH,YAAYhkH,KAAKokH,GACf58G,MAGJmuG,IAGT56G,GAAiB,QAAI46G,GAIjB,SAAU36G,EAAQD,EAASM,GAgB/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAZzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAIsvF,GAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAIvCpxF,EAAOT,EAAoB,GAC3BmuC,EAAUnuC,EAAoB,IAC9BouC,EAAWpuC,EAAoB,IAE/BkpH,EAAOlpH,EAAoB,KAAc,QACzCmpH,EAAQnpH,EAAoB,KAAc,QAE1Cu7G,EAAe,WACjB,QAASA,GAAa9qG,EAAM4pG,EAAQhtC,EAAQ2tC,GAC1C,GAAI9hB,GAAQp5F,MAEZ,EAAI8xF,EAA0B,SAAG9xF,KAAMy7G,GAEvCz7G,KAAK2Q,KAAOA,EACZ3Q,KAAKu6G,OAASA,EACdv6G,KAAKutE,OAASA,EACdvtE,KAAKk7G,aAAeA,EAGpBl7G,KAAK2Q,KAAKupG,UAAUC,WAAan6G,KAAKgY,OAAOs/C,KAAKt3D,MAElDA,KAAKspH,gBACH74F,IAAK,SAAaloB,EAAOopC,GACvBynD,EAAM3oE,IAAIkhB,EAAOM,QAEnBC,OAAQ,SAAgB3pC,EAAOopC,GAC7BynD,EAAMlnD,OAAOP,EAAOM,MAAON,EAAOnd,OAEpCkf,OAAQ,SAAgBnrC,EAAOopC,GAC7BynD,EAAM1lD,OAAO/B,EAAOM,SAIxBjyC,KAAKgO,WACLhO,KAAK0tE,gBACH1X,YAAa,EACbuzD,oBAAqB,EACrBC,gBAAa3lH,GACbqG,OACEyB,OAAQ,UACRD,WAAY,UACZE,WACED,OAAQ,UACRD,WAAY,WAEdG,OACEF,OAAQ,UACRD,WAAY,YAGhBy6G,OACEpxF,GAAG,EACHpG,GAAG,GAEL82B,MACEv7C,MAAO,UACPimC,KAAM,GACNs5E,KAAM,QACN/9G,WAAY,OACZwuC,YAAa,EACbwvE,YAAa,UACbnqC,MAAO,SACPoqC,QAAS,EACTC,OAAO,EACPC,MACEC,IAAK,QAEPC,UACED,IAAK,eAEPE,MACEF,IAAK,UAEPG,MACEH,IAAK,GACL35E,KAAM,GACNs5E,KAAM,YACNE,QAAS,IAGbx4C,UAAOttE,GACPg1E,QAAQ,EACRi8B,MACE2U,KAAM,cACNn1F,SAAMzwB,GACNssC,KAAM,GACNjmC,MAAO,WAETw6G,UAAO7gH,GACPusC,UAAOvsC,GACPqmH,oBAAoB,EACpBC,UAAOtmH,GACP0hD,QACEj/C,IAAK,EACLF,MAAO,EACPq4C,OAAQ,EACRv4C,KAAM,GAERkkH,KAAM,EACNjuB,SAAS,EACTkuB,SACEjoH,IAAK,GACLC,IAAK,GACL+tC,OACEliC,SAAS,EACT9L,IAAK,GACLC,IAAK,GACLioH,WAAY,GACZC,cAAe,GAEjBC,sBAAuB,SAA+BpoH,EAAKC,EAAKC,EAAOC,GACrE,GAAIF,IAAQD,EACV,MAAO,EAEP,IAAII,GAAQ,GAAKH,EAAMD,EACvB,OAAOK,MAAKJ,IAAI,GAAIE,EAAQH,GAAOI,KAIzCioH,QACEv8G,SAAS,EACThE,MAAO,kBACPimC,KAAM,GACNpb,EAAG,EACHpG,EAAG,GAELg2F,MAAO,UACP+F,iBACEC,cAAc,EACdnxE,aAAc,EACd+wD,eAAe,EACfqgB,cAAc,EACdC,oBAAoB,GAEtB16E,KAAM,GACNitC,UAAOv5E,GACPtB,UAAOsB,GACPkxB,MAAGlxB,GACH8qB,MAAG9qB,IAELlD,EAAKC,OAAOZ,KAAKgO,QAAShO,KAAK0tE,gBAE/B1tE,KAAKs6G,qBAwXP,OArXA,EAAItoB,EAAuB,SAAGypB,IAC5Bl0G,IAAK,qBACLhF,MAAO,WACL,GAAIk4F,GAASz6F,IAGbA,MAAK2Q,KAAK49D,QAAQl9B,GAAG,eAAgBrxC,KAAKy1C,QAAQ6hB,KAAKt3D,OACvDA,KAAK2Q,KAAK49D,QAAQl9B,GAAG,UAAWrxC,KAAKy1C,QAAQ6hB,KAAKt3D,OAClDA,KAAK2Q,KAAK49D,QAAQl9B,GAAG,UAAW,WAC9B1wC,EAAKuG,QAAQuzF,EAAO6uB,eAAgB,SAAUniH,EAAUoB,GAClDkyF,EAAO9pF,KAAK6jB,KAAK4kF,OAAO3e,EAAO9pF,KAAK6jB,KAAK4kF,MAAM5nE,IAAIjpC,EAAOpB,WAEzDszF,GAAO9pF,KAAKupG,UAAUC,iBACtB1f,GAAO6uB,eAAe74F,UACtBgqE,GAAO6uB,eAAep3E,aACtBuoD,GAAO6uB,eAAe51E,aACtB+mD,GAAO6uB,oBAIlB/hH,IAAK,aACLhF,MAAO,SAAoByL,GAEzB,GADAhO,KAAK8qH,YAAc98G,MACHnK,KAAZmK,EAAuB,CAIzB,GAHAo7G,EAAK2B,aAAa/qH,KAAKgO,QAASA,OAGVnK,KAAlBmK,EAAQ22G,MACV,IAAK,GAAIxI,KAAUn8G,MAAK2Q,KAAKyoG,MACvBp5G,KAAK2Q,KAAKyoG,MAAM91G,eAAe64G,IACjCn8G,KAAK2Q,KAAKyoG,MAAM+C,GAAQ6O,aAM9B,QAAqBnnH,KAAjBmK,EAAQy3C,KAAoB,CAC9B4jE,EAAM0B,aAAa/qH,KAAKgO,QAAQy3C,KAAMz3C,EACtC,KAAK,GAAIw/B,KAAWxtC,MAAK2Q,KAAKyoG,MACxBp5G,KAAK2Q,KAAKyoG,MAAM91G,eAAekqC,KACjCxtC,KAAK2Q,KAAKyoG,MAAM5rE,GAASy9E,oBACzBjrH,KAAK2Q,KAAKyoG,MAAM5rE,GAAS09E,gBAM/B,OAAqBrnH,KAAjBmK,EAAQmiC,KACV,IAAK,GAAIg7E,KAAYnrH,MAAK2Q,KAAKyoG,MACzBp5G,KAAK2Q,KAAKyoG,MAAM91G,eAAe6nH,IACjCnrH,KAAK2Q,KAAKyoG,MAAM+R,GAAUD,mBAMTrnH,KAAnBmK,EAAQ6qE,YAA4Ch1E,KAApBmK,EAAQmuF,SAC1Cn8F,KAAK2Q,KAAK49D,QAAQrhB,KAAK,oBAY7B3lD,IAAK,UACLhF,MAAO,SAAiB62G,GACtB,GAAIgS,GAAYznH,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,IAAmBA,UAAU,GAE3E0nH,EAAerrH,KAAK2Q,KAAK6jB,KAAK4kF,KAElC,IAAIA,YAAiB/qE,IAAW+qE,YAAiB9qE,GAC/CtuC,KAAK2Q,KAAK6jB,KAAK4kF,MAAQA,MAClB,IAAIj1G,MAAMC,QAAQg1G,GACvBp5G,KAAK2Q,KAAK6jB,KAAK4kF,MAAQ,GAAI/qE,GAC3BruC,KAAK2Q,KAAK6jB,KAAK4kF,MAAM3oF,IAAI2oF,OACpB,CAAA,GAAKA,EAGV,KAAM,IAAI70G,WAAU,4BAFpBvE,MAAK2Q,KAAK6jB,KAAK4kF,MAAQ,GAAI/qE,GAe7B,GAVIg9E,GAEF1qH,EAAKuG,QAAQlH,KAAKspH,eAAgB,SAAUniH,EAAUoB,GACpD8iH,EAAa75E,IAAIjpC,EAAOpB,KAK5BnH,KAAK2Q,KAAKyoG,SAENp5G,KAAK2Q,KAAK6jB,KAAK4kF,MAAO,CAExB,GAAIrnE,GAAK/xC,IACTW,GAAKuG,QAAQlH,KAAKspH,eAAgB,SAAUniH,EAAUoB,GACpDwpC,EAAGphC,KAAK6jB,KAAK4kF,MAAM/nE,GAAG9oC,EAAOpB,IAI/B,IAAIsrC,GAAMzyC,KAAK2Q,KAAK6jB,KAAK4kF,MAAMjmE,QAC/BnzC,MAAKywB,IAAIgiB,GAAK,IAGE,IAAd24E,GACFprH,KAAK2Q,KAAK49D,QAAQrhB,KAAK,mBAW3B3lD,IAAK,MACLhF,MAAO,SAAakwC,GAKlB,IAAK,GAJD24E,GAAYznH,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,IAAmBA,UAAU,GAE3EtD,MAAK,GACLirH,KACKvnH,EAAI,EAAGA,EAAI0uC,EAAI7uC,OAAQG,IAAK,CACnC1D,EAAKoyC,EAAI1uC,EACT,IAAI80D,GAAa74D,KAAK2Q,KAAK6jB,KAAK4kF,MAAM3hG,IAAIpX,GACtCktC,EAAOvtC,KAAKgY,OAAO6gD,EACvByyD,GAASzmH,KAAK0oC,GACdvtC,KAAK2Q,KAAKyoG,MAAM/4G,GAAMktC,EAGxBvtC,KAAKk7G,aAAaqQ,kBAAkBD,IAElB,IAAdF,GACFprH,KAAK2Q,KAAK49D,QAAQrhB,KAAK,mBAW3B3lD,IAAK,SACLhF,MAAO,SAAgBkwC,EAAK+4E,GAG1B,IAAK,GAFDpS,GAAQp5G,KAAK2Q,KAAKyoG,MAClBqS,GAAc,EACT1nH,EAAI,EAAGA,EAAI0uC,EAAI7uC,OAAQG,IAAK,CACnC,GAAI1D,GAAKoyC,EAAI1uC,GACTwpC,EAAO6rE,EAAM/4G,GACbm0B,EAAOg3F,EAAYznH,OACVF,KAAT0pC,EAEFk+E,EAAcl+E,EAAKyD,WAAWxc,IAE9Bi3F,GAAc,EAEdl+E,EAAOvtC,KAAKgY,OAAOwc,GACnB4kF,EAAM/4G,GAAMktC,IAGI,IAAhBk+E,EACFzrH,KAAK2Q,KAAK49D,QAAQrhB,KAAK,gBAEvBltD,KAAK2Q,KAAK49D,QAAQrhB,KAAK,mBAW3B3lD,IAAK,SACLhF,MAAO,SAAgBkwC,GAGrB,IAAK,GAFD2mE,GAAQp5G,KAAK2Q,KAAKyoG,MAEbr1G,EAAI,EAAGA,EAAI0uC,EAAI7uC,OAAQG,IAAK,OAE5Bq1G,GADE3mE,EAAI1uC,IAIf/D,KAAK2Q,KAAK49D,QAAQrhB,KAAK,mBAUzB3lD,IAAK,SACLhF,MAAO,SAAgBs2D,GAGrB,MAAO,KAFgBl1D,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,GAAKylH,GAE/DvwD,EAAY74D,KAAK2Q,KAAM3Q,KAAKu6G,OAAQv6G,KAAKutE,OAAQvtE,KAAKgO,QAAShO,KAAK0tE,eAAgB1tE,KAAK8qH,gBAGvHvjH,IAAK,UACLhF,MAAO,WACL,GAAImpH,GAAiB/nH,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,IAAmBA,UAAU,GAEhFy1G,EAAQp5G,KAAK2Q,KAAKyoG,KACtB,KAAK,GAAI+C,KAAU/C,GAAO,CACxB,GAAI7rE,OAAO1pC,EACPu1G,GAAM91G,eAAe64G,KACvB5uE,EAAO6rE,EAAM+C,GAEf,IAAI3nF,GAAOx0B,KAAK2Q,KAAK6jB,KAAK4kF,MAAM3hG,IAAI0kG,OACvBt4G,KAAT0pC,OAA+B1pC,KAAT2wB,KACD,IAAnBk3F,GACFn+E,EAAKyD,YAAajc,EAAG,KAAMpG,EAAG,OAEhC4e,EAAKyD,YAAam1E,OAAO,IACzB54E,EAAKyD,WAAWxc,QAYtBjtB,IAAK,eACLhF,MAAO,SAAsBkwC,GAC3B,GAAIk5E,KACJ,QAAY9nH,KAAR4uC,GACF,IAA2B,IAAvBtuC,MAAMC,QAAQquC,IAChB,IAAK,GAAI1uC,GAAI,EAAGA,EAAI0uC,EAAI7uC,OAAQG,IAC9B,OAAgCF,KAA5B7D,KAAK2Q,KAAKyoG,MAAM3mE,EAAI1uC,IAAmB,CACzC,GAAIwpC,GAAOvtC,KAAK2Q,KAAKyoG,MAAM3mE,EAAI1uC,GAC/B4nH,GAAUl5E,EAAI1uC,KAAQgxB,EAAGtyB,KAAKi6B,MAAM6Q,EAAKxY,GAAIpG,EAAGlsB,KAAKi6B,MAAM6Q,EAAK5e,SAIpE,QAA6B9qB,KAAzB7D,KAAK2Q,KAAKyoG,MAAM3mE,GAAoB,CACtC,GAAIm5E,GAAQ5rH,KAAK2Q,KAAKyoG,MAAM3mE,EAC5Bk5E,GAAUl5E,IAAS1d,EAAGtyB,KAAKi6B,MAAMkvF,EAAM72F,GAAIpG,EAAGlsB,KAAKi6B,MAAMkvF,EAAMj9F,SAInE,KAAK,GAAI/b,GAAK,EAAGA,EAAK5S,KAAK2Q,KAAK0oG,YAAYz1G,OAAQgP,IAAM,CACxD,GAAIi5G,GAAS7rH,KAAK2Q,KAAKyoG,MAAMp5G,KAAK2Q,KAAK0oG,YAAYzmG,GACnD+4G,GAAU3rH,KAAK2Q,KAAK0oG,YAAYzmG,KAASmiB,EAAGtyB,KAAKi6B,MAAMmvF,EAAO92F,GAAIpG,EAAGlsB,KAAKi6B,MAAMmvF,EAAOl9F,IAG3F,MAAOg9F,MAQTpkH,IAAK,iBACLhF,MAAO,WAEL,GAAIopH,MACAr6C,EAAUtxE,KAAK2Q,KAAK6jB,KAAK4kF,MAAMhmE,YAEnC,KAAK,GAAI+oE,KAAU7qC,GAAQh1C,MACzB,GAAIg1C,EAAQh1C,MAAMh5B,eAAe64G,GAAS,CACxC,GAAI5uE,GAAOvtC,KAAK2Q,KAAKyoG,MAAM+C,EACvB7qC,GAAQh1C,MAAM6/E,GAAQpnF,GAAKtyB,KAAKi6B,MAAM6Q,EAAKxY,IAAMu8C,EAAQh1C,MAAM6/E,GAAQxtF,GAAKlsB,KAAKi6B,MAAM6Q,EAAK5e,IAC9Fg9F,EAAU9mH,MAAOxE,GAAIktC,EAAKltC,GAAI00B,EAAGtyB,KAAKi6B,MAAM6Q,EAAKxY,GAAIpG,EAAGlsB,KAAKi6B,MAAM6Q,EAAK5e,KAI9E2iD,EAAQp/B,OAAOy5E,MAUjBpkH,IAAK,iBACLhF,MAAO,SAAwB45G,GAC7B,OAAgCt4G,KAA5B7D,KAAK2Q,KAAKyoG,MAAM+C,GAClB,MAAOn8G,MAAK2Q,KAAKyoG,MAAM+C,GAAQwI,MAAMmH,eAWzCvkH,IAAK,oBACLhF,MAAO,SAA2B45G,GAChC,GAAI4P,KACJ,QAAgCloH,KAA5B7D,KAAK2Q,KAAKyoG,MAAM+C,GAGlB,IAAK,GAFD5uE,GAAOvtC,KAAK2Q,KAAKyoG,MAAM+C,GACvB6P,KACKjoH,EAAI,EAAGA,EAAIwpC,EAAK+rE,MAAM11G,OAAQG,IAAK,CAC1C,GAAI86G,GAAOtxE,EAAK+rE,MAAMv1G,EAClB86G,GAAKoN,MAAQ1+E,EAAKltC,OAESwD,KAAzBmoH,EAAQnN,EAAKqN,UACfH,EAASlnH,KAAKg6G,EAAKqN,QACnBF,EAAQnN,EAAKqN,SAAU,GAEhBrN,EAAKqN,QAAU3+E,EAAKltC,QAEFwD,KAAvBmoH,EAAQnN,EAAKoN,QACfF,EAASlnH,KAAKg6G,EAAKoN,MACnBD,EAAQnN,EAAKoN,OAAQ,GAK7B,MAAOF,MAUTxkH,IAAK,oBACLhF,MAAO,SAA2B45G,GAChC,GAAIgQ,KACJ,QAAgCtoH,KAA5B7D,KAAK2Q,KAAKyoG,MAAM+C,GAElB,IAAK,GADD5uE,GAAOvtC,KAAK2Q,KAAKyoG,MAAM+C,GAClBp4G,EAAI,EAAGA,EAAIwpC,EAAK+rE,MAAM11G,OAAQG,IACrCooH,EAAStnH,KAAK0oC,EAAK+rE,MAAMv1G,GAAG1D,QAG9BilB,SAAQuuC,IAAI,mEAAoEsoD,EAElF,OAAOgQ,MAWT5kH,IAAK,WACLhF,MAAO,SAAkB45G,EAAQpnF,EAAGpG,GAClC,GAAIksE,GAAS76F,SAEmB6D,KAA5B7D,KAAK2Q,KAAKyoG,MAAM+C,IAClBn8G,KAAK2Q,KAAKyoG,MAAM+C,GAAQpnF,EAAIlzB,OAAOkzB,GACnC/0B,KAAK2Q,KAAKyoG,MAAM+C,GAAQxtF,EAAI9sB,OAAO8sB,GACnC0mB,WAAW,WACTwlD,EAAOlqF,KAAK49D,QAAQrhB,KAAK,oBACxB,IAEH5nC,QAAQuuC,IAAI,0DAA2DsoD,OAItEV,IAGT77G,GAAiB,QAAI67G,GAIjB,SAAU57G,EAAQD,EAASM,GAoB/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAhBzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAIhB,GAAWrB,EAAoB,IAE/BsB,EAAWX,EAAuBU,GAElCswF,EAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAIvCpxF,EAAOT,EAAoB,GAE3BmpH,EAAQnpH,EAAoB,KAAc,QAE1CksH,EAAMlsH,EAAoB,KAAc,QACxCmsH,EAASnsH,EAAoB,KAAc,QAC3CosH,EAAgBpsH,EAAoB,KAAc,QAClDqsH,EAAWrsH,EAAoB,KAAc,QAC7CssH,EAAUtsH,EAAoB,KAAc,QAC5CusH,EAAMvsH,EAAoB,KAAc,QACxCwsH,EAAUxsH,EAAoB,KAAc,QAC5CysH,EAAOzsH,EAAoB,KAAc,QACzCioH,EAAQjoH,EAAoB,KAAc,QAC1C0sH,EAAS1sH,EAAoB,KAAc,QAC3C2sH,EAAO3sH,EAAoB,KAAc,QACzC4sH,EAAO5sH,EAAoB,KAAc,QACzC6sH,EAAW7sH,EAAoB,KAAc,QAC7C8sH,EAAe9sH,EAAoB,KAAc,QAGjD27G,GAFY37G,EAAoB,KAAc,QAEnCA,EAAoB,MA8B/BkpH,GA7BavN,EAASvrC,WA6Bf,WACT,QAAS84C,GAAKp7G,EAAS2C,EAAMs8G,EAAW3gB,EAAWr+F,EAAey/D,EAAgBo9C,IAChF,EAAIh5B,EAA0B,SAAG9xF,KAAMopH,GAEvCppH,KAAKgO,QAAUrN,EAAK8M,aAAaQ,GACjCjO,KAAKiO,cAAgBA,EACrBjO,KAAK0tE,eAAiBA,EACtB1tE,KAAK8qH,YAAcA,EACnB9qH,KAAK2Q,KAAOA,EAEZ3Q,KAAKs5G,SAGLt5G,KAAKK,OAAKwD,GACV7D,KAAKitH,UAAYA,EACjBjtH,KAAKssG,UAAYA,EAGjBtsG,KAAK+0B,MAAIlxB,GACT7D,KAAK2uB,MAAI9qB,GACT7D,KAAKktH,SAAWltH,KAAKgO,QAAQmiC,KAC7BnwC,KAAKmtH,aAAentH,KAAKgO,QAAQy3C,KAAKtV,KACtCnwC,KAAKotH,oBAAqB,EAC1BptH,KAAKmlF,UAAW,EAChBnlF,KAAK6L,OAAQ,EAEb7L,KAAKqtH,YAAc,GAAIhE,GAAMrpH,KAAK2Q,KAAM3Q,KAAKgO,SAAS,GACtDhO,KAAKgxC,WAAWhjC,GAwflB,OA/eA,EAAIgkF,EAAuB,SAAGo3B,IAC5B7hH,IAAK,aACLhF,MAAO,SAAoBs8G,IACS,IAA9B7+G,KAAKs5G,MAAM10G,QAAQi6G,IACrB7+G,KAAKs5G,MAAMz0G,KAAKg6G,MAUpBt3G,IAAK,aACLhF,MAAO,SAAoBs8G,GACzB,GAAI9rG,GAAQ/S,KAAKs5G,MAAM10G,QAAQi6G,IACjB,GAAV9rG,GACF/S,KAAKs5G,MAAMzhF,OAAO9kB,EAAO,MAW7BxL,IAAK,aACLhF,MAAO,SAAoByL,GACzB,GAAIs/G,GAAettH,KAAKgO,QAAQ22G,KAChC,IAAK32G,EAAL,CASA,OAJmBnK,KAAfmK,EAAQ3N,KACVL,KAAKK,GAAK2N,EAAQ3N,QAGJwD,KAAZ7D,KAAKK,GACP,KAAM,sBA2BR,QAtBkBwD,KAAdmK,EAAQ+mB,IACQ,OAAd/mB,EAAQ+mB,GACV/0B,KAAK+0B,MAAIlxB,GAAU7D,KAAKotH,oBAAqB,IAE7CptH,KAAK+0B,EAAI/qB,SAASgE,EAAQ+mB,GAAG/0B,KAAKotH,oBAAqB,QAGzCvpH,KAAdmK,EAAQ2gB,IACQ,OAAd3gB,EAAQ2gB,GACV3uB,KAAK2uB,MAAI9qB,GAAU7D,KAAKotH,oBAAqB,IAE7CptH,KAAK2uB,EAAI3kB,SAASgE,EAAQ2gB,GAAG3uB,KAAKotH,oBAAqB,QAGtCvpH,KAAjBmK,EAAQmiC,OACVnwC,KAAKktH,SAAWl/G,EAAQmiC,UAEJtsC,KAAlBmK,EAAQzL,QACVyL,EAAQzL,MAAQg5B,WAAWvtB,EAAQzL,QAIR,gBAAlByL,GAAQmjE,OAA+C,gBAAlBnjE,GAAQmjE,OAAuC,IAAjBnjE,EAAQmjE,MAAa,CACjG,GAAIo8C,GAAWvtH,KAAKssG,UAAU70F,IAAIzJ,EAAQmjE,MAC1CxwE,GAAK+D,WAAW1E,KAAKgO,QAASu/G,GAE9BvtH,KAAKgO,QAAQ9D,MAAQvJ,EAAKiK,WAAW5K,KAAKgO,QAAQ9D,OAapD,MATAk/G,GAAK2B,aAAa/qH,KAAKgO,QAASA,GAAS,EAAMhO,KAAKiO,eAEpDjO,KAAKwtH,SAASx/G,GAEdhO,KAAKytH,eACLztH,KAAKirH,kBAAkBj9G,GACvBhO,KAAKgrH,YAAYsC,GACjBttH,KAAKqtH,YAAYK,eAAe1tH,KAAK8qH,YAAa98G,EAAShO,KAAK0tE,oBAEzC7pE,KAAnBmK,EAAQ6qE,YAA4Ch1E,KAApBmK,EAAQmuF,YAgB9C50F,IAAK,eACLhF,MAAO,WAEL,GAA2B,kBAAvBvC,KAAKgO,QAAQ22G,OAAoD,UAAvB3kH,KAAKgO,QAAQ22G,MAA3D,CAIA,OAA2B9gH,KAAvB7D,KAAKgO,QAAQ02G,MACf,KAAM,+CAAiD1kH,KAAKgO,QAAQ22G,MAAQ,GAG9E,QAAuB9gH,KAAnB7D,KAAKitH,UACP,KAAM,oCAGR,IAAkC,gBAAvBjtH,MAAKgO,QAAQ02G,MACtB1kH,KAAK2tH,SAAW3tH,KAAKitH,UAAUW,KAAK5tH,KAAKgO,QAAQ02G,MAAO1kH,KAAKgO,QAAQw7G,YAAaxpH,KAAKK,QAClF,CACL,OAAsCwD,KAAlC7D,KAAKgO,QAAQ02G,MAAMmJ,WACrB,KAAM,8BAGR7tH,MAAK2tH,SAAW3tH,KAAKitH,UAAUW,KAAK5tH,KAAKgO,QAAQ02G,MAAMmJ,WAAY7tH,KAAKgO,QAAQw7G,YAAaxpH,KAAKK,QAE9DwD,KAAhC7D,KAAKgO,QAAQ02G,MAAMv/B,SACrBnlF,KAAK8tH,YAAc9tH,KAAKitH,UAAUW,KAAK5tH,KAAKgO,QAAQ02G,MAAMv/B,SAAUnlF,KAAKgO,QAAQw7G,YAAaxpH,KAAKK,IAEnGL,KAAK8tH,gBAAcjqH,QAezB0D,IAAK,WACLhF,MAAO,SAAkByL,GACvBhO,KAAK+tH,SAAU,CAEf,IAAI98G,IAAQjD,EAAShO,KAAKgO,QAAShO,KAAK0tE,gBAEpCsgD,EAASrtH,EAAKqQ,QAAQC,EAAM,SAChC,IAAsB,iBAAX+8G,GACThuH,KAAK+tH,QAAUC,MACV,IAAyF,gBAAlE,KAAXA,EAAyB,aAAc,EAAIxsH,EAAkB,SAAGwsH,IAAuB,CACxG,GAAIC,GAAattH,EAAKqQ,QAAQC,GAAO,SAAU,QACrB,kBAAfg9G,IAAkD,kBAAfA,KAC5CjuH,KAAK+tH,QAAUE,OAKrB1mH,IAAK,sBACLhF,MAAO,WACL,GAAI2S,IACFhL,MAAOlK,KAAKgO,QAAQ9D,MAAMwB,WAC1BsqD,YAAah2D,KAAKgO,QAAQgoD,YAC1B3M,YAAarpD,KAAKgO,QAAQ9D,MAAMyB,OAChCwkC,KAAMnwC,KAAKgO,QAAQmiC,KACnBw6E,aAAc3qH,KAAKgO,QAAQ08G,gBAAgBC,aAC3CnxE,aAAcx5C,KAAKgO,QAAQ08G,gBAAgBlxE,aAC3CixE,OAAQzqH,KAAKgO,QAAQy8G,OAAOv8G,QAC5BggH,YAAaluH,KAAKgO,QAAQy8G,OAAOvgH,MACjCikH,WAAYnuH,KAAKgO,QAAQy8G,OAAOt6E,KAChCi+E,QAASpuH,KAAKgO,QAAQy8G,OAAO11F,EAC7Bs5F,QAASruH,KAAKgO,QAAQy8G,OAAO97F,EAyB/B,OAvBI3uB,MAAKmlF,UAAYnlF,KAAK6L,OACH,IAAjB7L,KAAK+tH,QACH/tH,KAAKmlF,UACPjwE,EAAO8gD,aAAe,EACtB9gD,EAAOhL,MAAQlK,KAAKgO,QAAQ9D,MAAM0B,UAAUF,WAC5CwJ,EAAOm0C,YAAcrpD,KAAKgO,QAAQ9D,MAAM0B,UAAUD,OAClDuJ,EAAOu1G,OAASzqH,KAAKgO,QAAQy8G,OAAOv8G,SAC3BlO,KAAK6L,QACdqJ,EAAOhL,MAAQlK,KAAKgO,QAAQ9D,MAAM2B,MAAMH,WACxCwJ,EAAOm0C,YAAcrpD,KAAKgO,QAAQ9D,MAAM2B,MAAMF,OAC9CuJ,EAAOu1G,OAASzqH,KAAKgO,QAAQy8G,OAAOv8G,SAEL,kBAAjBlO,MAAK+tH,UACrB/tH,KAAK+tH,QAAQ74G,EAAQlV,KAAKgO,QAAQ3N,GAAIL,KAAKmlF,SAAUnlF,KAAK6L,QACpC,IAAlBqJ,EAAOu1G,SACLv1G,EAAOg5G,cAAgBluH,KAAKgO,QAAQy8G,OAAOvgH,OAASgL,EAAOi5G,aAAenuH,KAAKgO,QAAQy8G,OAAOt6E,MAAQj7B,EAAOk5G,UAAYpuH,KAAKgO,QAAQy8G,OAAO11F,GAAK7f,EAAOm5G,UAAYruH,KAAKgO,QAAQy8G,OAAO97F,IAC3LzZ,EAAOu1G,QAAS,KAKtBv1G,EAAOu1G,OAASzqH,KAAKgO,QAAQy8G,OAAOv8G,QAE/BgH,KAGT3N,IAAK,oBACLhF,MAAO,SAA2ByL,OACLnK,KAAvB7D,KAAKgO,QAAQoiC,OAA8C,OAAvBpwC,KAAKgO,QAAQoiC,QACnDpwC,KAAKgO,QAAQoiC,MAAQ,IAEvBpwC,KAAKqtH,YAAYr8E,WAAWhxC,KAAKgO,SAAS,OACRnK,KAA9B7D,KAAKqtH,YAAYH,WACnBltH,KAAKmtH,aAAentH,KAAKqtH,YAAYH,UAEvCltH,KAAKqtH,YAAYiB,UAAUtuH,KAAK8qH,YAAa98G,EAAShO,KAAK0tE,gBAC3D1tE,KAAKqtH,YAAYG,SAASxtH,KAAK8qH,YAAa98G,EAAShO,KAAK0tE,mBAG5DnmE,IAAK,cACLhF,MAAO,SAAqB+qH,GAC1B,GAAIA,IAAiBttH,KAAKgO,QAAQ22G,OAAS3kH,KAAK2kH,MAC9C3kH,KAAK2kH,MAAM3zE,WAAWhxC,KAAKgO,QAAShO,KAAK2tH,SAAU3tH,KAAK8tH,iBAGxD,QAAQ9tH,KAAKgO,QAAQ22G,OACnB,IAAK,MACH3kH,KAAK2kH,MAAQ,GAAIyH,GAAIpsH,KAAKgO,QAAShO,KAAK2Q,KAAM3Q,KAAKqtH,YACnD,MACF,KAAK,SACHrtH,KAAK2kH,MAAQ,GAAI0H,GAAOrsH,KAAKgO,QAAShO,KAAK2Q,KAAM3Q,KAAKqtH,YACtD,MACF,KAAK,gBACHrtH,KAAK2kH,MAAQ,GAAI2H,GAActsH,KAAKgO,QAAShO,KAAK2Q,KAAM3Q,KAAKqtH,YAAartH,KAAK2tH,SAAU3tH,KAAK8tH,YAC9F,MACF,KAAK,WACH9tH,KAAK2kH,MAAQ,GAAI4H,GAASvsH,KAAKgO,QAAShO,KAAK2Q,KAAM3Q,KAAKqtH,YACxD,MACF,KAAK,UACHrtH,KAAK2kH,MAAQ,GAAI6H,GAAQxsH,KAAKgO,QAAShO,KAAK2Q,KAAM3Q,KAAKqtH,YACvD,MACF,KAAK,MACHrtH,KAAK2kH,MAAQ,GAAI8H,GAAIzsH,KAAKgO,QAAShO,KAAK2Q,KAAM3Q,KAAKqtH,YACnD,MACF,KAAK,UACHrtH,KAAK2kH,MAAQ,GAAI+H,GAAQ1sH,KAAKgO,QAAShO,KAAK2Q,KAAM3Q,KAAKqtH,YACvD,MACF,KAAK,OACHrtH,KAAK2kH,MAAQ,GAAIgI,GAAK3sH,KAAKgO,QAAShO,KAAK2Q,KAAM3Q,KAAKqtH,YACpD,MACF,KAAK,QACHrtH,KAAK2kH,MAAQ,GAAIwD,GAAMnoH,KAAKgO,QAAShO,KAAK2Q,KAAM3Q,KAAKqtH,YAAartH,KAAK2tH,SAAU3tH,KAAK8tH,YACtF,MACF,KAAK,SACH9tH,KAAK2kH,MAAQ,GAAIiI,GAAO5sH,KAAKgO,QAAShO,KAAK2Q,KAAM3Q,KAAKqtH,YACtD,MACF,KAAK,OACHrtH,KAAK2kH,MAAQ,GAAIkI,GAAK7sH,KAAKgO,QAAShO,KAAK2Q,KAAM3Q,KAAKqtH,YACpD,MACF,KAAK,OACHrtH,KAAK2kH,MAAQ,GAAImI,GAAK9sH,KAAKgO,QAAShO,KAAK2Q,KAAM3Q,KAAKqtH,YACpD,MACF,KAAK,WACHrtH,KAAK2kH,MAAQ,GAAIoI,GAAS/sH,KAAKgO,QAAShO,KAAK2Q,KAAM3Q,KAAKqtH,YACxD,MACF,KAAK,eACHrtH,KAAK2kH,MAAQ,GAAIqI,GAAahtH,KAAKgO,QAAShO,KAAK2Q,KAAM3Q,KAAKqtH,YAC5D,MACF,SACErtH,KAAK2kH,MAAQ,GAAI+H,GAAQ1sH,KAAKgO,QAAShO,KAAK2Q,KAAM3Q,KAAKqtH,aAI7DrtH,KAAKkrH,kBAQP3jH,IAAK,SACLhF,MAAO,WACLvC,KAAKmlF,UAAW,EAChBnlF,KAAKkrH,kBAQP3jH,IAAK,WACLhF,MAAO,WACLvC,KAAKmlF,UAAW,EAChBnlF,KAAKkrH,kBAQP3jH,IAAK,eACLhF,MAAO,WACLvC,KAAK2kH,MAAM4J,eAAgB,KAU7BhnH,IAAK,WACLhF,MAAO,WACL,MAAOvC,MAAKgO,QAAQovE,SAWtB71E,IAAK,mBACLhF,MAAO,SAA0B+S,EAAKynD,GACpC,MAAO/8D,MAAK2kH,MAAM6J,iBAAiBl5G,EAAKynD,MAS1Cx1D,IAAK,UACLhF,MAAO,WACL,MAAOvC,MAAKgO,QAAQm4G,MAAMpxF,GAAK/0B,KAAKgO,QAAQm4G,MAAMx3F,KASpDpnB,IAAK,aACLhF,MAAO,WACL,MAAOvC,MAAKmlF,YASd59E,IAAK,WACLhF,MAAO,WACL,MAAOvC,MAAKgO,QAAQzL,SAWtBgF,IAAK,gBACLhF,MAAO,SAAuBH,EAAKC,EAAKC,GACtC,OAA2BuB,KAAvB7D,KAAKgO,QAAQzL,MAAqB,CACpC,GAAIC,GAAQxC,KAAKgO,QAAQq8G,QAAQG,sBAAsBpoH,EAAKC,EAAKC,EAAOtC,KAAKgO,QAAQzL,OACjFksH,EAAWzuH,KAAKgO,QAAQq8G,QAAQhoH,IAAMrC,KAAKgO,QAAQq8G,QAAQjoH,GAC/D,KAA2C,IAAvCpC,KAAKgO,QAAQq8G,QAAQj6E,MAAMliC,QAAkB,CAC/C,GAAIwgH,GAAW1uH,KAAKgO,QAAQq8G,QAAQj6E,MAAM/tC,IAAMrC,KAAKgO,QAAQq8G,QAAQj6E,MAAMhuC,GAC3EpC,MAAKgO,QAAQy3C,KAAKtV,KAAOnwC,KAAKgO,QAAQq8G,QAAQj6E,MAAMhuC,IAAMI,EAAQksH,EAEpE1uH,KAAKgO,QAAQmiC,KAAOnwC,KAAKgO,QAAQq8G,QAAQjoH,IAAMI,EAAQisH,MAEvDzuH,MAAKgO,QAAQmiC,KAAOnwC,KAAKktH,SACzBltH,KAAKgO,QAAQy3C,KAAKtV,KAAOnwC,KAAKmtH,YAGhCntH,MAAKirH,uBAUP1jH,IAAK,OACLhF,MAAO,SAAc+S,GACnB,GAAIJ,GAASlV,KAAK2uH,qBAClB3uH,MAAK2kH,MAAMzoB,KAAK5mF,EAAKtV,KAAK+0B,EAAG/0B,KAAK2uB,EAAG3uB,KAAKmlF,SAAUnlF,KAAK6L,MAAOqJ,MAQlE3N,IAAK,oBACLhF,MAAO,SAA2B+S,GAChCtV,KAAK2kH,MAAMiK,kBAAkB5uH,KAAK+0B,EAAG/0B,KAAK2uB,EAAGrZ,MAU/C/N,IAAK,SACLhF,MAAO,SAAgB+S,GACrB,GAAIJ,GAASlV,KAAK2uH,qBAClB3uH,MAAK2kH,MAAMkK,OAAOv5G,EAAKtV,KAAKmlF,SAAUnlF,KAAK6L,MAAOqJ,MAUpD3N,IAAK,oBACLhF,MAAO,SAA2BzB,GAChC,MAAOd,MAAK2kH,MAAMz+G,KAAOpF,EAAIsF,OAASpG,KAAK2kH,MAAMz+G,KAAOlG,KAAK2kH,MAAMv0G,MAAQtP,EAAIoF,MAAQlG,KAAK2kH,MAAMr+G,IAAMxF,EAAI29C,QAAUz+C,KAAK2kH,MAAMr+G,IAAMtG,KAAK2kH,MAAMt0G,OAASvP,EAAIwF,OAUjKiB,IAAK,+BACLhF,MAAO,SAAsCzB,GAC3C,MAAOd,MAAK2kH,MAAMmH,YAAY5lH,KAAOpF,EAAIsF,OAASpG,KAAK2kH,MAAMmH,YAAY1lH,MAAQtF,EAAIoF,MAAQlG,KAAK2kH,MAAMmH,YAAYxlH,IAAMxF,EAAI29C,QAAUz+C,KAAK2kH,MAAMmH,YAAYrtE,OAAS39C,EAAIwF,SAG9KiB,IAAK,eACLhF,MAAO,SAAsBusH,EAAeC,GAC1C,GAAIrrH,GAAgBC,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,IAAmBA,UAAU,GAC/EsK,EAAgBtK,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,MAE/E2J,GAAU,QAAS,OAAQ,QAAS,SAOxC,IANA3M,EAAKgE,uBAAuB2I,EAAQwhH,EAAeC,EAAYrrH,GAG/D/C,EAAKmN,aAAaghH,EAAeC,EAAY,SAAUrrH,EAAeuK,OAG7CpK,KAArBkrH,EAAW7kH,OAA4C,OAArB6kH,EAAW7kH,MAAgB,CAC/D,GAAI8kH,GAAcruH,EAAKiK,WAAWmkH,EAAW7kH,MAC7CvJ,GAAK4C,cAAcurH,EAAc5kH,MAAO8kH,QACb,IAAlBtrH,GAA+C,OAArBqrH,EAAW7kH,QAC9C4kH,EAAc5kH,MAAQvJ,EAAK8M,aAAaQ,EAAc/D,YAI/BrG,KAArBkrH,EAAW5I,OAA4C,OAArB4I,EAAW5I,QACf,iBAArB4I,GAAW5I,OACpB2I,EAAc3I,MAAMpxF,EAAIg6F,EAAW5I,MACnC2I,EAAc3I,MAAMx3F,EAAIogG,EAAW5I,YAERtiH,KAAvBkrH,EAAW5I,MAAMpxF,GAAiD,iBAAvBg6F,GAAW5I,MAAMpxF,IAC9D+5F,EAAc3I,MAAMpxF,EAAIg6F,EAAW5I,MAAMpxF,OAEhBlxB,KAAvBkrH,EAAW5I,MAAMx3F,GAAiD,iBAAvBogG,GAAW5I,MAAMx3F,IAC9DmgG,EAAc3I,MAAMx3F,EAAIogG,EAAW5I,MAAMx3F,SAMvB9qB,KAApBkrH,EAAWtpE,MAA0C,OAApBspE,EAAWtpE,KAC9C4jE,EAAM0B,aAAa+D,EAAcrpE,KAAMspE,IACZ,IAAlBrrH,GAA8C,OAApBqrH,EAAWtpE,OAC9CqpE,EAAcrpE,KAAO9kD,EAAK8M,aAAaQ,EAAcw3C,WAI5B5hD,KAAvBkrH,EAAW1E,SACb1pH,EAAKmN,aAAaghH,EAAczE,QAAS0E,EAAW1E,QAAS,QAAS3mH,EAAeuK,EAAco8G,aAIlGjB,KAGTxpH,GAAiB,QAAIwpH,GAIjB,SAAUvpH,EAAQD,EAASM,GA4B/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAxBzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAI0sH,GAAkB/uH,EAAoB,KAEtCgvH,EAAkBruH,EAAuBouH,GAEzChuH,EAAgBf,EAAoB,GAEpCgB,EAAgBL,EAAuBI,GAEvCM,EAAWrB,EAAoB,IAE/BsB,EAAWX,EAAuBU,GAElCswF,EAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAIvCpxF,EAAOT,EAAoB,GAE3BmpH,EAAQ,WACV,QAASA,GAAM14G,EAAM3C,GACnB,GAAImhH,GAAYxrH,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,IAAmBA,UAAU,IAC/E,EAAImuF,EAA0B,SAAG9xF,KAAMqpH,GAEvCrpH,KAAK2Q,KAAOA,EAEZ3Q,KAAKovH,aAAc,EACnBpvH,KAAKktH,aAAWrpH,GAChB7D,KAAKqvH,eACLrvH,KAAKgxC,WAAWhjC,GAChBhO,KAAKmwC,MAAS7pC,IAAK,EAAGJ,KAAM,EAAGkK,MAAO,EAAGC,OAAQ,EAAGi/G,MAAO,GAC3DtvH,KAAKuvH,YAAcJ,EAg+BrB,OA79BA,EAAIn9B,EAAuB,SAAGq3B,IAC5B9hH,IAAK,aACLhF,MAAO,SAAoByL,GACzB,GAAItK,GAAgBC,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,IAAmBA,UAAU,EAEnF3D,MAAKwvH,eAAiBxhH,EAItBhO,KAAKqvH,YAAc1uH,EAAK+D,cAAesJ,EAAQy3C,MAAM,OAE/B5hD,KAAlBmK,EAAQoiC,QACVpwC,KAAKyvH,YAAa,OAGC5rH,KAAjBmK,EAAQy3C,OACV4jE,EAAM0B,aAAa/qH,KAAKqvH,YAAarhH,EAAStK,GAClB,gBAAjBsK,GAAQy3C,KACjBzlD,KAAKktH,SAAWltH,KAAKqvH,YAAYl/E,KACmB,YAA3C,EAAI3uC,EAAkB,SAAGwM,EAAQy3C,WAChB5hD,KAAtBmK,EAAQy3C,KAAKtV,OACfnwC,KAAKktH,SAAWl/G,EAAQy3C,KAAKtV,UAMrC5oC,IAAK,YAILhF,MAAO,SAAmBitH,EAAgBxhH,EAAS0/D,GACjD1tE,KAAKqvH,YAAYK,gBAAiB,EAClC1vH,KAAKqvH,YAAYM,QAAU,EAC3B3vH,KAAKqvH,YAAYO,QAAU,CAE3B,IAAI3+G,IAAQjD,EAASwhH,EAAgB9hD,GAEjCmiD,EAAkBlvH,EAAKqQ,QAAQC,EAAM,kBACzC,IAA+B,gBAApB4+G,GACT7vH,KAAKqvH,YAAYM,OAAS9tH,OAAOguH,GACjC7vH,KAAKqvH,YAAYO,OAAS/tH,OAAOguH,OAC5B,IAA2G,gBAA3E,KAApBA,EAAkC,aAAc,EAAIruH,EAAkB,SAAGquH,IAAgC,CAC1H,GAAIC,GAAyBnvH,EAAKqQ,QAAQC,GAAO,kBAAmB,WAC9B,iBAA3B6+G,KACT9vH,KAAKqvH,YAAYM,OAAS9tH,OAAOiuH,GAEnC,IAAIC,GAAyBpvH,EAAKqQ,QAAQC,GAAO,kBAAmB,WAC9B,iBAA3B8+G,KACT/vH,KAAKqvH,YAAYO,OAAS/tH,OAAOkuH,IAIrC/vH,KAAKqvH,YAAYW,iBAAkB;oCACnChwH,KAAKqvH,YAAYY,QAAU,EAC3BjwH,KAAKqvH,YAAYa,OAAS,QAE1B,IAAIC,GAAmBxvH,EAAKqQ,QAAQC,EAAM,mBAC1C,IAAgC,gBAArBk/G,GACTnwH,KAAKqvH,YAAYY,OAASpuH,OAAOsuH,OAC5B,IAA6G,gBAA5E,KAArBA,EAAmC,aAAc,EAAI3uH,EAAkB,SAAG2uH,IAAiC,CAC5H,GAAIC,GAA0BzvH,EAAKqQ,QAAQC,GAAO,mBAAoB,WAC/B,iBAA5Bm/G,KACTpwH,KAAKqvH,YAAYY,OAASpuH,OAAOuuH,GAEnC,IAAIC,GAAyB1vH,EAAKqQ,QAAQC,GAAO,mBAAoB,UAC/B,iBAA3Bo/G,KACsB,QAA3BA,GAA+D,WAA3BA,IACtCrwH,KAAKqvH,YAAYa,OAASG,QASlC9oH,IAAK,WACLhF,MAAO,SAAkBitH,EAAgBxhH,EAAS0/D,GAChD1tE,KAAKqvH,YAAYtB,SAAU,CAE3B,IAAI98G,IAAQjD,EAASwhH,EAAgB9hD,GAEjCsgD,EAASrtH,EAAKqQ,QAAQC,EAAM,SAChC,IAAsB,iBAAX+8G,GACThuH,KAAKqvH,YAAYtB,QAAUC,MACtB,IAAyF,gBAAlE,KAAXA,EAAyB,aAAc,EAAIxsH,EAAkB,SAAGwsH,IAAuB,CACxG,GAAIsC,GAAc3vH,EAAKqQ,QAAQC,GAAO,SAAU,SACrB,kBAAhBq/G,IAAoD,kBAAhBA,KAC7CtwH,KAAKqvH,YAAYtB,QAAUuC,OASjC/oH,IAAK,cACLhF,MAAO,SAAqBguH,GAC1B,GAAIC,GAAYD,EAAUA,EAAQnqH,MAAQmqH,EAAQrqH,KAAO,CACrDlG,MAAKqvH,YAAYK,iBACnB1vH,KAAKqvH,YAAYM,QAAUa,EAC3BxwH,KAAKqvH,YAAYO,QAAUY,EAE7B,IAAIC,GAAaF,EAAUA,EAAQjqH,IAAMiqH,EAAQ9xE,OAAS,CACtDz+C,MAAKqvH,YAAYW,kBACnBhwH,KAAKqvH,YAAYY,QAAUQ,MAgB/BlpH,IAAK,iBACLhF,MAAO,SAAwByL,EAASs3E,EAAc5X,GACpD,GAAK1tE,KAAKqvH,YAAYzF,MAAtB,CAYA,GAAI8G,GAAQ,SAAe1iH,EAAS87G,GAClC,IAAK97G,IAAYA,EAAQy3C,KAAM,MAAO,KAEtC,IAAIkrE,GAAM3iH,EAAQy3C,IAElB,IAAIqkE,EAAK,CACP,IAAK6G,EAAI7G,GAAM,MAAO,KACtB6G,GAAMA,EAAI7G,GAGZ,MAAO6G,IASLC,EAAO,SAAc5iH,EAAS87G,EAAK9vD,GACrC,GAAI22D,GAAMD,EAAM1iH,EAAS87G,EAEzB,OAAI6G,IAAOA,EAAIrtH,eAAe02D,GACrB22D,EAAI32D,GAGN,MAGL62D,GAAQ,OAAQ,OAAQ,WAAY,QACpCz/G,GAA4B,EAC5BC,GAAoB,EACpBC,MAAiBzN,EAErB,KACE,IAAK,GAAqD0N,GAAjDC,GAAY,EAAItQ,EAAuB,SAAG2vH,KAAgBz/G,GAA6BG,EAAQC,EAAUC,QAAQC,MAAON,GAA4B,EAAM,CACjK,GAAI04G,GAAMv4G,EAAMhP,MAEZuuH,EAAa9wH,KAAKqvH,YAAYvF,GAC9BiH,EAAcrjD,EAAejoB,KAAKqkE,EAEtC,IAAIT,EAAM2H,gBAAgBF,EAAYJ,EAAM1iH,EAAS87G,IACnDgH,EAAWnH,QAAU3pH,KAAKqvH,YAAY1F,QACtCmH,EAAWhH,IAAMiH,EAAYjH,QACxB,CAQLgH,EAAWrH,KAAOmH,EAAK5iH,EAAS87G,EAAK,SAAW8G,EAAKtrC,EAAcwkC,EAAK,UAAoB,SAARA,EAAiBiH,EAAYtH,KAAO,OAASmH,EAAKtrC,EAAc,KAAM,SAAWtlF,KAAKqvH,YAAY5F,KAGtLqH,EAAW5mH,MAAQ0mH,EAAK5iH,EAAS87G,EAAK,UAAY8G,EAAKtrC,EAAcwkC,EAAK,UAAY8G,EAAKtrC,EAAc,KAAM,UAAYtlF,KAAKqvH,YAAYnlH,MAG5I4mH,EAAWhH,IAAM8G,EAAK5iH,EAAS87G,EAAK,QAAU8G,EAAKtrC,EAAcwkC,EAAK,QAAU8G,EAAKtrC,EAAc,KAAM,QAAUyrC,EAAYjH,GAK/H,IAAImH,OAAQ,EASRH,GAAWrH,OAASsH,EAAYtH,MAAQzpH,KAAKqvH,YAAY5F,OAAS/7C,EAAejoB,KAAKgkE,OAExFwH,EAAQjxH,KAAKqvH,YAAYl/E,KAAOtuC,OAAO6rE,EAAejoB,KAAKtV,OAG7D2gF,EAAW3gF,KAAOygF,EAAK5iH,EAAS87G,EAAK,SAAW8G,EAAKtrC,EAAcwkC,EAAK,UAAYmH,EAAQF,EAAY5gF,KAAO8gF,EAAQ,OACvHL,EAAKtrC,EAAc,KAAM,SAAWtlF,KAAKqvH,YAAYl/E,KAErD2gF,EAAWnH,QAAUiH,EAAK5iH,EAAS87G,EAAK,YAAc8G,EAAKtrC,EAAcwkC,EAAK,aAAemH,EAAQF,EAAYpH,QAAUlnH,KAAKi6B,MAAMu0F,GAAS,OAC/IjxH,KAAKqvH,YAAY1F,QAGnBmH,EAAW3gF,KAAOtuC,OAAOivH,EAAW3gF,MACpC2gF,EAAWnH,QAAU9nH,OAAOivH,EAAWnH,UAEzC,MAAO/3G,GACPP,GAAoB,EACpBC,EAAiBM,EACjB,QACA,KACOR,GAA6BI,EAAkB,QAClDA,EAAkB,SAEpB,QACA,GAAIH,EACF,KAAMC,SAgBd/J,IAAK,OACLhF,MAAO,SAAc+S,EAAKyf,EAAGpG,EAAGw2D,EAAUt5E,GACxC,GAAIqlH,GAAWvtH,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,GAAK,QAGnF,QAAkCE,KAA9B7D,KAAKwvH,eAAep/E,MAAxB,CAGA,GAAI+gF,GAAenxH,KAAKqvH,YAAYl/E,KAAOnwC,KAAK2Q,KAAK0pG,KAAK73G,KACtDxC,MAAKwvH,eAAep/E,OAAS+gF,EAAenxH,KAAKwvH,eAAenF,QAAQj6E,MAAMm6E,cAAgB,IAGlGvqH,KAAKoxH,mBAAmB97G,EAAK6vE,EAAUt5E,EAAOkpB,EAAGpG,EAAGuiG,GAGpDlxH,KAAKqxH,gBAAgB/7G,GAErBtV,KAAKsxH,UAAUh8G,EAAK6vE,EAAUt5E,EAAOkpB,EAAGpG,EAAGuiG,QAU7C3pH,IAAK,kBACLhF,MAAO,SAAyB+S,GAC9B,OAAoCzR,KAAhC7D,KAAKqvH,YAAY3jH,YAA4D,SAAhC1L,KAAKqvH,YAAY3jH,WAAuB,CACvF4J,EAAI6wC,UAAYnmD,KAAKqvH,YAAY3jH,UAIjC,IAAI1L,KAAKuvH,YACP,OAAQvvH,KAAKqvH,YAAY9vC,OACvB,IAAK,SACHjqE,EAAI4zF,SAA4B,IAAlBlpG,KAAKmwC,KAAK//B,MAAiC,IAAnBpQ,KAAKmwC,KAAK9/B,OAAcrQ,KAAKmwC,KAAK//B,MAAOpQ,KAAKmwC,KAAK9/B,OACzF,MACF,KAAK,MACHiF,EAAI4zF,SAA4B,IAAlBlpG,KAAKmwC,KAAK//B,QAAepQ,KAAKmwC,KAAK9/B,OARtC,GAQ4DrQ,KAAKmwC,KAAK//B,MAAOpQ,KAAKmwC,KAAK9/B,OAClG,MACF,KAAK,SACHiF,EAAI4zF,SAA4B,IAAlBlpG,KAAKmwC,KAAK//B,MAXb,EAWsCpQ,KAAKmwC,KAAK//B,MAAOpQ,KAAKmwC,KAAK9/B,OAC5E,MACF,SACEiF,EAAI4zF,SAASlpG,KAAKmwC,KAAKjqC,KAAMlG,KAAKmwC,KAAK7pC,IAAM,EAAkBtG,KAAKmwC,KAAK//B,MAAOpQ,KAAKmwC,KAAK9/B,YAI9FiF,GAAI4zF,SAASlpG,KAAKmwC,KAAKjqC,KAAMlG,KAAKmwC,KAAK7pC,IAAM,EAAkBtG,KAAKmwC,KAAK//B,MAAOpQ,KAAKmwC,KAAK9/B,YAchG9I,IAAK,YACLhF,MAAO,SAAmB+S,EAAK6vE,EAAUt5E,EAAOkpB,EAAGpG,GACjD,GAAIuiG,GAAWvtH,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,GAAK,SAE/E4tH,EAAWvxH,KAAKqvH,YAAYl/E,KAC5BghF,EAAeI,EAAWvxH,KAAK2Q,KAAK0pG,KAAK73G,KAEzC2uH,IAAgBnxH,KAAKwvH,eAAenF,QAAQj6E,MAAMk6E,aACpDiH,EAAW1vH,OAAO7B,KAAKwvH,eAAenF,QAAQj6E,MAAMk6E,YAActqH,KAAK2Q,KAAK0pG,KAAK73G,MAGnF,IAAI8sH,GAAQtvH,KAAKmwC,KAAKm/E,MAElBkC,EAAiBxxH,KAAKyxH,cAAcn8G,EAAKyf,EAAGu6F,EAAO4B,GAEnDQ,GAAiB,EAAIxC,EAAyB,SAAGsC,EAAgB,EAErEz8F,GAAI28F,EAAe,GACnBpC,EAAQoC,EAAe,GAGvBp8G,EAAIqxC,UAAY,OAChB5xB,GAAQ/0B,KAAKmwC,KAAK//B,MAAQ,EACtBpQ,KAAKqvH,YAAYa,QAAUlwH,KAAKmwC,KAAK9/B,OAASrQ,KAAKmwC,KAAKwhF,cAC1B,QAA5B3xH,KAAKqvH,YAAYa,SACnBZ,IAAUtvH,KAAKmwC,KAAK9/B,OAASrQ,KAAKmwC,KAAKwhF,aAAe,GAExB,WAA5B3xH,KAAKqvH,YAAYa,SACnBZ,IAAUtvH,KAAKmwC,KAAK9/B,OAASrQ,KAAKmwC,KAAKwhF,aAAe,GAK1D,KAAK,GAAI5tH,GAAI,EAAGA,EAAI/D,KAAK4xH,UAAW7tH,IAClC,GAAI/D,KAAK0yF,MAAM3uF,IAAM/D,KAAK0yF,MAAM3uF,GAAG8tH,OAAQ,CACzC,GAAIzhH,GAAQ,CACRpQ,MAAKuvH,aAA0C,WAA3BvvH,KAAKqvH,YAAY9vC,MACvCnvE,IAAUpQ,KAAKmwC,KAAK//B,MAAQpQ,KAAK0yF,MAAM3uF,GAAGqM,OAAS,EACf,UAA3BpQ,KAAKqvH,YAAY9vC,QAC1BnvE,GAASpQ,KAAKmwC,KAAK//B,MAAQpQ,KAAK0yF,MAAM3uF,GAAGqM,MAE3C,KAAK,GAAIvC,GAAI,EAAGA,EAAI7N,KAAK0yF,MAAM3uF,GAAG8tH,OAAOjuH,OAAQiK,IAAK,CACpD,GAAIikH,GAAQ9xH,KAAK0yF,MAAM3uF,GAAG8tH,OAAOhkH,EACjCyH,GAAImwC,KAAOqsE,EAAMrsE,IAEjB,IAAIssE,GAAa/xH,KAAKgyH,UAAUF,EAAM5nH,MAAOinH,EAAcW,EAAMpI,aAC7DuI,GAAa,EAAI/C,EAAyB,SAAG6C,EAAY,GACzDG,EAAYD,EAAW,GACvBvI,EAAcuI,EAAW,EAEzBH,GAAM53E,YAAc,IACtB5kC,EAAIkwC,UAAYssE,EAAM53E,YACtB5kC,EAAIuwC,YAAc6jE,EAClBp0G,EAAI0vC,SAAW,SAEjB1vC,EAAI6wC,UAAY+rE,EAEZJ,EAAM53E,YAAc,GACtB5kC,EAAI68G,WAAWL,EAAMrqE,KAAM1yB,EAAI3kB,EAAOk/G,EAAQwC,EAAMnI,SAEtDr0G,EAAIuxC,SAASirE,EAAMrqE,KAAM1yB,EAAI3kB,EAAOk/G,EAAQwC,EAAMnI,SAClDv5G,GAAS0hH,EAAM1hH,MAEjBk/G,GAAStvH,KAAK0yF,MAAM3uF,GAAGsM,WAK7B9I,IAAK,gBACLhF,MAAO,SAAuB+S,EAAKyf,EAAGu6F,EAAO4B,GAG3C,GAAIlxH,KAAKuvH,aAA0C,eAA3BvvH,KAAKqvH,YAAY9vC,QAA+C,IAArBv/E,KAAKovH,YAAuB,CAC7Fr6F,EAAI,EACJu6F,EAAQ,CAGuB,SAA3BtvH,KAAKqvH,YAAY9vC,OACnBjqE,EAAIsxC,aAAe,aACnB0oE,GAAS,GAC2B,WAA3BtvH,KAAKqvH,YAAY9vC,OAC1BjqE,EAAIsxC,aAAe,UACnB0oE,GAAS,GAETh6G,EAAIsxC,aAAe,aAGrBtxC,GAAIsxC,aAAesqE,CAErB,QAAQn8F,EAAGu6F,MAab/nH,IAAK,YACLhF,MAAO,SAAmB2H,EAAOinH,EAAciB,GAC7C,GAAIF,GAAYhoH,GAAS,UACrBw/G,EAAc0I,GAAsB,SACxC,IAAIjB,GAAgBnxH,KAAKwvH,eAAenF,QAAQj6E,MAAMm6E,cAAe,CACnE,GAAIpgH,GAAU1H,KAAKJ,IAAI,EAAGI,KAAKL,IAAI,EAAG,GAAKpC,KAAKwvH,eAAenF,QAAQj6E,MAAMm6E,cAAgB4G,IAC7Fe,GAAYvxH,EAAKsJ,gBAAgBioH,EAAW/nH,GAC5Cu/G,EAAc/oH,EAAKsJ,gBAAgBy/G,EAAav/G,GAElD,OAAQ+nH,EAAWxI,MAWrBniH,IAAK,cACLhF,MAAO,SAAqB+S,GAC1B,GAAI6vE,GAAWxhF,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,IAAmBA,UAAU,GAC1EkI,EAAQlI,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,IAAmBA,UAAU,EAG3E,OADA3D,MAAKqyH,cAAc/8G,EAAK6vE,EAAUt5E,IAEhCuE,MAAOpQ,KAAKmwC,KAAK//B,MACjBC,OAAQrQ,KAAKmwC,KAAK9/B,OAClBuhH,UAAW5xH,KAAK4xH,cAcpBrqH,IAAK,qBACLhF,MAAO,SAA4B+S,EAAK6vE,EAAUt5E,GAChD,GAAIkpB,GAAIpxB,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,GAAK,EACxEgrB,EAAIhrB,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,GAAK,EACxEutH,EAAWvtH,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,GAAK,UAE3D,IAApB3D,KAAKyvH,YACPzvH,KAAKqyH,cAAc/8G,EAAK6vE,EAAUt5E,GAEpC7L,KAAKmwC,KAAKjqC,KAAO6uB,EAAsB,GAAlB/0B,KAAKmwC,KAAK//B,MAC/BpQ,KAAKmwC,KAAK7pC,IAAMqoB,EAAuB,GAAnB3uB,KAAKmwC,KAAK9/B,OAC9BrQ,KAAKmwC,KAAKm/E,MAAQ3gG,EAA2B,IAAtB,EAAI3uB,KAAK4xH,WAAmB5xH,KAAKqvH,YAAYl/E,KACnD,YAAb+gF,IACFlxH,KAAKmwC,KAAK7pC,KAAO,GAAMtG,KAAKqvH,YAAYl/E,KACxCnwC,KAAKmwC,KAAK7pC,KAAO,EACjBtG,KAAKmwC,KAAKm/E,OAAS,GAErBtvH,KAAKyvH,YAAa,KAQpBloH,IAAK,qBACLhF,MAAO,SAA4B+vH,GACjC,GAAIC,GAAS,MAMb,OALqB,aAAjBD,GAAgD,OAAjBA,EACjCC,EAAS,YACiB,IAAjBD,GAA0C,SAAjBA,IAClCC,EAAS,QAEJA,KAWThrH,IAAK,cACLhF,MAAO,SAAqBklD,EAAM6qE,GAChC,GAAIC,GAASvyH,KAAKwyH,mBAAmBF,EACrC,OAAe,SAAXC,IAEA9qE,KAAMA,EACNqiE,IAAK,WAEa,aAAXyI,EACFvyH,KAAKyyH,oBAAoBhrE,GACZ,SAAX8qE,EACFvyH,KAAK0yH,gBAAgBjrE,OADvB,MAKTlgD,IAAK,sBACLhF,MAAO,SAA6BklD,GAClC,GAAIoqE,MACAzmH,GACFy+G,MAAM,EACNG,MAAM,EACNC,MAAM,EACN0I,WAAW,EACXC,SAAS,EACTriH,SAAU,EACVsiH,OAAQ,GACRC,YAwCF,KAtCA1nH,EAAE0+G,IAAM,WACN,MAAgC,KAAzB9pH,KAAK8yH,SAASlvH,OAAe,SAAW5D,KAAK8yH,SAAS,IAE/D1nH,EAAE2nH,QAAU,WACV,MAA6B,KAAzB/yH,KAAK8yH,SAASlvH,OAAqB,SAAuC,SAArB5D,KAAK8yH,SAAS,GAAsB,OACvF1nH,EAAEy+G,MAAQz+G,EAAE4+G,KACP,WACE5+G,EAAEy+G,KACJ,OACEz+G,EAAE4+G,KACJ,WADF,IAKX5+G,EAAE4nH,UAAY,WACGrvH,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,IAAmBA,UAAU,EAE1E3D,MAAK4yH,UACP5yH,KAAKywB,IAAI,KACTzwB,KAAK4yH,SAAU,GAEb5yH,KAAK6yH,OAAOjvH,OAAS,IACvBiuH,EAAOhtH,MAAO4iD,KAAMznD,KAAK6yH,OAAQ/I,IAAK9pH,KAAK+yH,YAC3C/yH,KAAK6yH,OAAS,KAGlBznH,EAAEqlB,IAAM,SAAUg3B,GACH,MAATA,IACFr8C,EAAEwnH,SAAU,GAEVxnH,EAAEwnH,UACJ5yH,KAAK6yH,QAAU,IACf7yH,KAAK4yH,SAAU,GAEL,KAARnrE,IACFznD,KAAK6yH,QAAUprE,IAGZr8C,EAAEmF,SAAWk3C,EAAK7jD,QAAQ,CAC/B,GAAIqvH,GAAKxrE,EAAKxsC,OAAO7P,EAAEmF,SACnB,SAAQrD,KAAK+lH,IACV7nH,EAAE6+G,KAGL7+G,EAAEqlB,IAAIwiG,GAFN7nH,EAAEwnH,SAAU,EAIdxnH,EAAEunH,WAAY,GACL,KAAKzlH,KAAK+lH,GACf7nH,EAAEmF,SAAWk3C,EAAK7jD,OAAS,IAC7BwH,EAAEmF,WACF0iH,EAAKxrE,EAAKxsC,OAAO7P,EAAEmF,UACf,MAAMrD,KAAK+lH,GACb7nH,EAAEwnH,SAAU,GAEZxnH,EAAEqlB,IAAIwiG,GACN7nH,EAAEunH,WAAY,IAGRvnH,EAAE6+G,MAAS7+G,EAAEy+G,OAASz+G,EAAEunH,YAAavnH,EAAEwnH,UAAY,KAAK1lH,KAAK+lH,GAI7D7nH,EAAE6+G,MAAS7+G,EAAE4+G,OAAS5+G,EAAEunH,YAAavnH,EAAEwnH,UAAY,KAAK1lH,KAAK+lH,IAI7D7nH,EAAE6+G,OAAS7+G,EAAEunH,WAAavnH,EAAEwnH,UAAY,IAAI1lH,KAAK+lH,IAC3D7nH,EAAE4nH,YACF5nH,EAAE6+G,MAAO,EACT7+G,EAAE0nH,SAASI,QAAQ,UACT9nH,EAAE6+G,MAAoB,SAAZ7+G,EAAE0+G,OAAoB,KAAK58G,KAAK+lH,GAChD7nH,EAAEmF,WAAak3C,EAAK7jD,OAAS,GAAK,cAAcsJ,KAAKu6C,EAAKxsC,OAAO7P,EAAEmF,SAAW,KAChFnF,EAAE4nH,YACF5nH,EAAEy+G,MAAO,EACTz+G,EAAE0nH,SAASzuF,SAEXj5B,EAAEqlB,IAAIwiG,IAEE7nH,EAAE6+G,MAAoB,SAAZ7+G,EAAE0+G,OAAoB,KAAK58G,KAAK+lH,GAChD7nH,EAAEmF,WAAak3C,EAAK7jD,OAAS,GAAK,cAAcsJ,KAAKu6C,EAAKxsC,OAAO7P,EAAEmF,SAAW,KAChFnF,EAAE4nH,YACF5nH,EAAE4+G,MAAO,EACT5+G,EAAE0nH,SAASzuF,SAEXj5B,EAAEqlB,IAAIwiG,GAEC7nH,EAAE6+G,MAAoB,SAAZ7+G,EAAE0+G,OAAoB,IAAI58G,KAAK+lH,GAC9C7nH,EAAEmF,WAAak3C,EAAK7jD,OAAS,GAAK,cAAcsJ,KAAKu6C,EAAKxsC,OAAO7P,EAAEmF,SAAW,KAChFnF,EAAE4nH,YACF5nH,EAAE6+G,MAAO,EACT7+G,EAAE0nH,SAASzuF,SAEXj5B,EAAEqlB,IAAIwiG,IAGR7nH,EAAEqlB,IAAIwiG,GACN7nH,EAAEunH,WAAY,IAjCdvnH,EAAE4nH,YACF5nH,EAAE4+G,MAAO,EACT5+G,EAAE0nH,SAASI,QAAQ,UANnB9nH,EAAE4nH,YACF5nH,EAAEy+G,MAAO,EACTz+G,EAAE0nH,SAASI,QAAQ,SAqCrB9nH,EAAEmF,WAGJ,MADAnF,GAAE4nH,YACKnB,KAGTtqH,IAAK,kBACLhF,MAAO,SAAyBklD,GAC9B,GAAIoqE,MACAzmH,GACFy+G,MAAM,EACNG,MAAM,EACNC,MAAM,EACN2I,SAAS,EACTriH,SAAU,EACVsiH,OAAQ,GACRC,YAwCF,KAtCA1nH,EAAE0+G,IAAM,WACN,MAAgC,KAAzB9pH,KAAK8yH,SAASlvH,OAAe,SAAW5D,KAAK8yH,SAAS,IAE/D1nH,EAAE2nH,QAAU,WACV,MAA6B,KAAzB/yH,KAAK8yH,SAASlvH,OAAqB,SAAuC,SAArB5D,KAAK8yH,SAAS,GAAsB,OACvF1nH,EAAEy+G,MAAQz+G,EAAE4+G,KACP,WACE5+G,EAAEy+G,KACJ,OACEz+G,EAAE4+G,KACJ,WADF,IAKX5+G,EAAE4nH,UAAY,WACGrvH,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,IAAmBA,UAAU,EAE1E3D,MAAK4yH,UACP5yH,KAAKywB,IAAI,KACTzwB,KAAK4yH,SAAU,GAEb5yH,KAAK6yH,OAAOjvH,OAAS,IACvBiuH,EAAOhtH,MAAO4iD,KAAMznD,KAAK6yH,OAAQ/I,IAAK9pH,KAAK+yH,YAC3C/yH,KAAK6yH,OAAS,KAGlBznH,EAAEqlB,IAAM,SAAUg3B,GACH,MAATA,IACFr8C,EAAEwnH,SAAU,GAEVxnH,EAAEwnH,UACJ5yH,KAAK6yH,QAAU,IACf7yH,KAAK4yH,SAAU,GAEL,KAARnrE,IACFznD,KAAK6yH,QAAUprE,IAGZr8C,EAAEmF,SAAWk3C,EAAK7jD,QAAQ,CAC/B,GAAIqvH,GAAKxrE,EAAKxsC,OAAO7P,EAAEmF,SACnB,SAAQrD,KAAK+lH,GACV7nH,EAAE6+G,KAGL7+G,EAAEqlB,IAAIwiG,GAFN7nH,EAAEwnH,SAAU,EAIL,IAAI1lH,KAAK+lH,GACb7nH,EAAE6+G,MAAS7+G,EAAEy+G,OAAQ,MAAM38G,KAAKu6C,EAAKp9C,OAAOe,EAAEmF,SAAU,IAKjDnF,EAAE6+G,MAAS7+G,EAAE4+G,OAAQ,MAAM98G,KAAKu6C,EAAKp9C,OAAOe,EAAEmF,SAAU,KAKxDnF,EAAE6+G,MAAQ,SAAS/8G,KAAKu6C,EAAKp9C,OAAOe,EAAEmF,SAAU,KAC1DnF,EAAE4nH,YACF5nH,EAAE6+G,MAAO,EACT7+G,EAAE0nH,SAASI,QAAQ,QACnB9nH,EAAEmF,UAAY,IACJnF,EAAE6+G,MAAoB,SAAZ7+G,EAAE0+G,OAAoB,QAAQ58G,KAAKu6C,EAAKp9C,OAAOe,EAAEmF,SAAU,KAC/EnF,EAAE4nH,YACF5nH,EAAEy+G,MAAO,EACTz+G,EAAE0nH,SAASzuF,QACXj5B,EAAEmF,UAAY,IACJnF,EAAE6+G,MAAoB,SAAZ7+G,EAAE0+G,OAAoB,QAAQ58G,KAAKu6C,EAAKp9C,OAAOe,EAAEmF,SAAU,KAC/EnF,EAAE4nH,YACF5nH,EAAE4+G,MAAO,EACT5+G,EAAE0nH,SAASzuF,QACXj5B,EAAEmF,UAAY,GACO,SAAZnF,EAAE0+G,OAAoB,WAAW58G,KAAKu6C,EAAKp9C,OAAOe,EAAEmF,SAAU,KACvEnF,EAAE4nH,YACF5nH,EAAE6+G,MAAO,EACT7+G,EAAE0nH,SAASzuF,QACXj5B,EAAEmF,UAAY,GAEdnF,EAAEqlB,IAAIwiG,IAzBN7nH,EAAE4nH,YACF5nH,EAAE4+G,MAAO,EACT5+G,EAAE0nH,SAASI,QAAQ,QACnB9nH,EAAEmF,UAAY,IARdnF,EAAE4nH,YACF5nH,EAAEy+G,MAAO,EACTz+G,EAAE0nH,SAASI,QAAQ,QACnB9nH,EAAEmF,UAAY,GA6BP,IAAIrD,KAAK+lH,GACd,OAAO/lH,KAAKu6C,EAAKp9C,OAAOe,EAAEmF,SAAU,KACtCnF,EAAEqlB,IAAI,KACNrlB,EAAEmF,UAAY,GACL,QAAQrD,KAAKu6C,EAAKp9C,OAAOe,EAAEmF,SAAU,KAC9CnF,EAAEqlB,IAAI,KACNrlB,EAAEmF,UAAY,GAEdnF,EAAEqlB,IAAI,KAGRrlB,EAAEqlB,IAAIwiG,GAER7nH,EAAEmF,WAGJ,MADAnF,GAAE4nH,YACKnB,KAGTtqH,IAAK,sBACLhF,MAAO,SAA6B+S,EAAK6vE,EAAUt5E,EAAOi+G,GACxD,GAAIl4D,GAAW,SAAkBy9D,EAAavF,EAAK5gH,GACjD,MAAY,WAAR4gH,EACa,QAAX5gH,EAAyB,GACtBmmH,EAAYnmH,GAGjBmmH,EAAYvF,GAAK5gH,GACZmmH,EAAYvF,GAAK5gH,GAGjBmmH,EAAYnmH,IAInBgM,GACFhL,MAAO0nD,EAAS5xD,KAAKqvH,YAAavF,EAAK,SACvC35E,KAAMyhB,EAAS5xD,KAAKqvH,YAAavF,EAAK,QACtCL,KAAM73D,EAAS5xD,KAAKqvH,YAAavF,EAAK,QACtCA,IAAKl4D,EAAS5xD,KAAKqvH,YAAavF,EAAK,OACrCH,QAAS/3D,EAAS5xD,KAAKqvH,YAAavF,EAAK,WACzC5vE,YAAal6C,KAAKqvH,YAAYn1E,YAC9BwvE,YAAa1pH,KAAKqvH,YAAY3F,YAkBhC,OAhBY,WAARI,GACE3kC,GAAYt5E,MACmB,IAA7B7L,KAAKqvH,YAAYtB,SAAoB/tH,KAAKwvH,eAAetF,mBAC3Dh1G,EAAO40G,IAAM,OACgC,kBAA7B9pH,MAAKqvH,YAAYtB,SACjC/tH,KAAKqvH,YAAYtB,QAAQz4G,EAAKJ,EAAQlV,KAAKwvH,eAAenvH,GAAI8kF,EAAUt5E,KAIvEs5E,GAAYt5E,IAA8C,kBAA7B7L,MAAKqvH,YAAYtB,SACjD/tH,KAAKqvH,YAAYtB,QAAQz4G,EAAKJ,EAAQlV,KAAKwvH,eAAenvH,GAAI8kF,EAAUt5E,GAG5EyJ,EAAImwC,MAAQvwC,EAAO40G,IAAM,IAAM50G,EAAOi7B,KAAO,MAAQj7B,EAAOu0G,MAAM7/G,QAAQ,KAAM,IAChFsL,EAAOuwC,KAAOnwC,EAAImwC,KAClBvwC,EAAO7E,OAAS6E,EAAOi7B,KAChBj7B,KAGT3N,IAAK,iBACLhF,MAAO,SAAwB4iF,EAAUt5E,GACvC,MAAOs5E,KAAanlF,KAAKqvH,YAAY8D,eAAiBtnH,IAAU7L,KAAKqvH,YAAY+D,cAWnF7rH,IAAK,gBACLhF,MAAO,SAAuB+S,EAAK6vE,EAAUt5E,GAC3C,GAAIuE,GAAQ,EACRC,EAAS,EAETqiF,KACA9kF,EAAI,CAeR,IAdA8kF,EAAMjiE,IAAM,SAAU1V,EAAG0sC,EAAMhC,EAAMv7C,EAAOkG,EAAOC,EAAQs5G,EAASG,EAAK5vE,EAAawvE,GAChF1pH,KAAK4D,QAAUmX,IACjB/a,KAAK+a,IAAO3K,MAAO,EAAGC,OAAQ,EAAGwhH,YAEnC7xH,KAAK+a,GAAG82G,OAAOhtH,MAAO4iD,KAAMA,EAAMhC,KAAMA,EAAMv7C,MAAOA,EAAOkG,MAAOA,EAAOC,OAAQA,EAAQs5G,QAASA,EAASG,IAAKA,EAAK5vE,YAAaA,EAAawvE,YAAaA,KAE/Jh3B,EAAM2gC,WAAa,SAAUt4G,EAAG3K,EAAOC,GACrCrQ,KAAK+a,GAAG3K,OAASA,EACjBpQ,KAAK+a,GAAG1K,OAASA,EAASrQ,KAAK+a,GAAG1K,OAASA,EAASrQ,KAAK+a,GAAG1K,QAE9DqiF,EAAM4gC,iBAAmB,SAAUv4G,EAAG0sC,EAAMhC,EAAMv7C,EAAOkG,EAAOC,EAAQs5G,EAASG,EAAK5vE,EAAawvE,GACjG1pH,KAAKywB,IAAI1V,EAAG0sC,EAAMhC,EAAMv7C,EAAOkG,EAAOC,EAAQs5G,EAASG,EAAK5vE,EAAawvE,GACzE1pH,KAAKqzH,WAAWt4G,EAAG3K,EAAOC,QAEMxM,KAA9B7D,KAAKwvH,eAAep/E,MAAqB,CAC3C,GAAImjF,GAAW5wH,OAAO3C,KAAKwvH,eAAep/E,OAAOzpC,MAAM,MACnDirH,EAAY2B,EAAS3vH,MACzB,IAAI5D,KAAKwvH,eAAe/pE,KAAKmkE,MAC3B,IAAK,GAAI7lH,GAAI,EAAGA,EAAI6tH,EAAW7tH,IAAK,CAClC,GAAI8tH,GAAS7xH,KAAKwzH,YAAYD,EAASxvH,GAAI/D,KAAKwvH,eAAe/pE,KAAKmkE,OAChEpkE,EAAY,EACZ6J,EAAa,CACjB,IAAIwiE,EAAQ,CACV,GAAqB,GAAjBA,EAAOjuH,OAAa,CACtB,GAAIsR,GAASlV,KAAK2uH,oBAAoBr5G,EAAK6vE,EAAUt5E,EAAO,SAC5D6mF,GAAM4gC,iBAAiB1lH,EAAG,GAAIsH,EAAOuwC,KAAMvwC,EAAOhL,MAAO,EAAGgL,EAAOi7B,KAAMj7B,EAAOy0G,QAAS,SAAUz0G,EAAOglC,YAAahlC,EAAOw0G,aAC9Hr5G,GAAUqiF,EAAM9kF,GAAGyC,OACnBzC,GACA,UAEF,IAAK,GAAIC,GAAI,EAAGA,EAAIgkH,EAAOjuH,OAAQiK,IACjC,GAAI7N,KAAKqvH,YAAYM,OAAS,EAQ5B,IAPA,GAAI8D,GAAUzzH,KAAK2uH,oBAAoBr5G,EAAK6vE,EAAUt5E,EAAOgmH,EAAOhkH,GAAGi8G,KACnE4J,EAAQ7B,EAAOhkH,GAAG45C,KAAK9gD,MAAM,KAC7BgtH,GAAU,EACVlsE,EAAO,GACPmsE,GAAYxjH,MAAO,GACnByjH,MAAc,GACd7zG,EAAI,EACDA,EAAI0zG,EAAM9vH,QAAQ,CACvB,GAAIkwH,GAAMH,EAAU,GAAK,GACzBE,GAAcD,EACdA,EAAUt+G,EAAIy+G,YAAYtsE,EAAOqsE,EAAMJ,EAAM1zG,IACzCwlC,EAAYouE,EAAQxjH,MAAQpQ,KAAKqvH,YAAYM,QAA+B,GAArBkE,EAAYzjH,OACrEi/C,EAAaokE,EAAQpjH,OAASg/C,EAAaokE,EAAQpjH,OAASg/C,EAC5DqjC,EAAMjiE,IAAI7iB,EAAG65C,EAAMgsE,EAAQhuE,KAAMguE,EAAQvpH,MAAO2pH,EAAYzjH,MAAOqjH,EAAQpjH,OAAQojH,EAAQ9J,QAASkI,EAAOhkH,GAAGi8G,IAAK2J,EAAQv5E,YAAau5E,EAAQ/J,aAChJh3B,EAAM2gC,WAAWzlH,EAAGimH,EAAYzjH,MAAOi/C,GACvC5H,EAAO,GACPksE,GAAU,EACVnuE,EAAY,EACZp1C,EAAQsiF,EAAM9kF,GAAGwC,MAAQA,EAAQsiF,EAAM9kF,GAAGwC,MAAQA,EAClDC,GAAUqiF,EAAM9kF,GAAGyC,OACnBzC,MAEA65C,EAAOA,EAAOqsE,EAAMJ,EAAM1zG,GACtBA,IAAM0zG,EAAM9vH,OAAS,IACvByrD,EAAaokE,EAAQpjH,OAASg/C,EAAaokE,EAAQpjH,OAASg/C,EAC5D7J,GAAaouE,EAAQxjH,MACrBsiF,EAAMjiE,IAAI7iB,EAAG65C,EAAMgsE,EAAQhuE,KAAMguE,EAAQvpH,MAAO0pH,EAAQxjH,MAAOqjH,EAAQpjH,OAAQojH,EAAQ9J,QAASkI,EAAOhkH,GAAGi8G,IAAK2J,EAAQv5E,YAAau5E,EAAQ/J,aAC5Ih3B,EAAM2gC,WAAWzlH,EAAGgmH,EAAQxjH,MAAOi/C,GAC/BxhD,IAAMgkH,EAAOjuH,OAAS,IACxBwM,EAAQsiF,EAAM9kF,GAAGwC,MAAQA,EAAQsiF,EAAM9kF,GAAGwC,MAAQA,EAClDC,GAAUqiF,EAAM9kF,GAAGyC,OACnBzC,MAGJoS,IACA2zG,GAAU,OAGT,CACL,GAAIK,GAAWh0H,KAAK2uH,oBAAoBr5G,EAAK6vE,EAAUt5E,EAAOgmH,EAAOhkH,GAAGi8G,KACpEmK,EAAW3+G,EAAIy+G,YAAYlC,EAAOhkH,GAAG45C,KACzCirC,GAAM4gC,iBAAiB1lH,EAAGikH,EAAOhkH,GAAG45C,KAAMusE,EAASvuE,KAAMuuE,EAAS9pH,MAAO+pH,EAAS7jH,MAAO4jH,EAAS3jH,OAAQ2jH,EAASrK,QAASkI,EAAOhkH,GAAGi8G,IAAKkK,EAAS95E,YAAa85E,EAAStK,aAC1Kt5G,EAAQsiF,EAAM9kF,GAAGwC,MAAQA,EAAQsiF,EAAM9kF,GAAGwC,MAAQA,EAC9CyhH,EAAOjuH,OAAS,IAAMiK,IACxBwC,GAAUqiF,EAAM9kF,GAAGyC,OACnBzC,WAOV,KAAK,GAAIgF,GAAK,EAAGA,EAAKg/G,EAAWh/G,IAAM,CACrC,GAAIshH,GAAWl0H,KAAK2uH,oBAAoBr5G,EAAK6vE,EAAUt5E,EAAO,SAC9D,IAAI7L,KAAKqvH,YAAYM,OAAS,EAM5B,IALA,GAAIwE,GAASZ,EAAS3gH,GAAIjM,MAAM,KAC5BytH,EAAQ,GACRC,GAAcjkH,MAAO,GACrBkkH,MAAe,GACf7oG,EAAK,EACFA,EAAK0oG,EAAOvwH,QAAQ,CACzB,GAAI2wH,GAAiB,KAAVH,EAAe,GAAK,GAC/BE,GAAeD,EACfA,EAAY/+G,EAAIy+G,YAAYK,EAAQG,EAAOJ,EAAO1oG,IAC9C4oG,EAAUjkH,MAAQpQ,KAAKqvH,YAAYM,QAAgC,GAAtB2E,EAAalkH,OAC5DsiF,EAAM4gC,iBAAiB1lH,EAAGwmH,EAAOF,EAASzuE,KAAMyuE,EAAShqH,MAAOoqH,EAAalkH,MAAO8jH,EAAS/jF,KAAM+jF,EAASvK,QAAS,SAAUuK,EAASh6E,YAAag6E,EAASxK,aAC9Jt5G,EAAQsiF,EAAM9kF,GAAGwC,MAAQA,EAAQsiF,EAAM9kF,GAAGwC,MAAQA,EAClDC,GAAUqiF,EAAM9kF,GAAGyC,OACnB+jH,EAAQ,GACRxmH,MAEAwmH,EAAQA,EAAQG,EAAOJ,EAAO1oG,GAC1BA,IAAO0oG,EAAOvwH,OAAS,IACzB8uF,EAAM4gC,iBAAiB1lH,EAAGwmH,EAAOF,EAASzuE,KAAMyuE,EAAShqH,MAAOmqH,EAAUjkH,MAAO8jH,EAAS/jF,KAAM+jF,EAASvK,QAAS,SAAUuK,EAASh6E,YAAag6E,EAASxK,aAC3Jt5G,EAAQsiF,EAAM9kF,GAAGwC,MAAQA,EAAQsiF,EAAM9kF,GAAGwC,MAAQA,EAClDC,GAAUqiF,EAAM9kF,GAAGyC,OACnBzC,KAEF6d,SAGC,CACL,GAAI+oG,GAASjB,EAAS3gH,GAClB6hH,EAAYn/G,EAAIy+G,YAAYS,EAChC9hC,GAAM4gC,iBAAiB1lH,EAAG4mH,EAAQN,EAASzuE,KAAMyuE,EAAShqH,MAAOuqH,EAAUrkH,MAAO8jH,EAAS/jF,KAAM+jF,EAASvK,QAAS,SAAUuK,EAASh6E,YAAag6E,EAASxK,aAC5Jt5G,EAAQsiF,EAAM9kF,GAAGwC,MAAQA,EAAQsiF,EAAM9kF,GAAGwC,MAAQA,EAClDC,GAAUqiF,EAAM9kF,GAAGyC,OACnBzC,MAKJ5N,KAAKqvH,YAAYO,OAAS,GAAKx/G,EAAQpQ,KAAKqvH,YAAYO,SAC1Dx/G,EAAQpQ,KAAKqvH,YAAYO,QAE3B5vH,KAAKmwC,KAAKwhF,YAActhH,EACpBrQ,KAAKqvH,YAAYY,OAAS,GAAK5/G,EAASrQ,KAAKqvH,YAAYY,SAC3D5/G,EAASrQ,KAAKqvH,YAAYY,QAE5BjwH,KAAK0yF,MAAQA,EACb1yF,KAAK4xH,UAAYl/B,EAAM9uF,OACvB5D,KAAKmwC,KAAK//B,MAAQA,EAClBpQ,KAAKmwC,KAAK9/B,OAASA,EACnBrQ,KAAKmzH,cAAgBhuC,EACrBnlF,KAAKozH,WAAavnH,OAGpBtE,IAAK,eACLhF,MAAO,SAAsBusH,EAAeC,GAC1C,GAAIrrH,GAAgBC,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,IAAmBA,UAAU,EAE/E0lH,GAAM2H,gBAAgBlC,EAAeC,EAAWtpE,MAClDqpE,EAAcnF,QAAU,EAC+B,YAA9C,EAAInoH,EAAkB,SAAGutH,EAAWtpE,OAC7C9kD,EAAK4C,cAAcurH,EAAeC,EAAWtpE,KAAM/hD,GAErDorH,EAAc3+E,KAAOtuC,OAAOitH,EAAc3+E,MAC1C2+E,EAAcnF,QAAU9nH,OAAOitH,EAAcnF,YAiB/CpiH,IAAK,kBACLhF,MAAO,SAAyBmyH,EAAYC,GAC1C,IAAKA,GAAkC,gBAAdA,GAAwB,OAAO,CAExD,IAAIC,GAAkBD,EAAUhuH,MAAM,IAMtC,OAJA+tH,GAAWvkF,KAAOykF,EAAgB,GAAGhrH,QAAQ,KAAM,IACnD8qH,EAAWjL,KAAOmL,EAAgB,GAClCF,EAAWxqH,MAAQ0qH,EAAgB,IAE5B,MAGJvL,IAGTzpH,GAAiB,QAAIypH,GAIjB,SAAUxpH,EAAQD,EAASM,GAc/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAASF,GAVvFlB,EAAQmB,YAAa,CAErB,IAAI8zH,GAAe30H,EAAoB,KAEnC40H,EAAej0H,EAAuBg0H,GAEtC5zH,EAAgBf,EAAoB,GAEpCgB,EAAgBL,EAAuBI,EAI3CrB,GAAQoB,QAAU,WAChB,QAAS+zH,GAAcpvH,EAAK5B,GAC1B,GAAIixH,MACAC,GAAK,EACLlyG,GAAK,EACLmyG,MAAKrxH,EAET,KACE,IAAK,GAA0CsxH,GAAtCviH,GAAK,EAAI1R,EAAcF,SAAS2E,KAAYsvH,GAAME,EAAKviH,EAAGnB,QAAQC,QACzEsjH,EAAKnwH,KAAKswH,EAAG5yH,QAETwB,GAAKixH,EAAKpxH,SAAWG,GAHuDkxH,GAAK,IAKvF,MAAOrjH,GACPmR,GAAK,EACLmyG,EAAKtjH,EACL,QACA,KACOqjH,GAAMriH,EAAW,QAAGA,EAAW,SACpC,QACA,GAAImQ,EAAI,KAAMmyG,IAIlB,MAAOF,GAGT,MAAO,UAAUrvH,EAAK5B,GACpB,GAAII,MAAMC,QAAQuB,GAChB,MAAOA,EACF,KAAI,EAAImvH,EAAa9zH,SAASyD,OAAOkB,IAC1C,MAAOovH,GAAcpvH,EAAK5B,EAE1B,MAAM,IAAIQ,WAAU,6DAOtB,SAAU1E,EAAQD,EAASM,GAE/BL,EAAOD,SAAYoB,QAAWd,EAAoB,KAAMa,YAAY,IAIhE,SAAUlB,EAAQD,EAASM,GAE/BA,EAAoB,GACpBA,EAAoB,IACpBL,EAAOD,QAAUM,EAAoB,MAIjC,SAAUL,EAAQD,EAASM,GAE/B,GAAIkb,GAAYlb,EAAoB,IAChC2T,EAAY3T,EAAoB,IAAI,YACpC6R,EAAY7R,EAAoB,EACpCL,GAAOD,QAAUM,EAAoB,IAAIk1H,WAAa,SAASjiH,GAC7D,GAAIL,GAAIrO,OAAO0O,EACf,YAAuBtP,KAAhBiP,EAAEe,IACJ,cAAgBf,IAChBf,EAAUzO,eAAe8X,EAAQtI,MAKpC,SAAUjT,EAAQD,EAASM,GAgC/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GA5BzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAI8yH,GAAkBn1H,EAAoB,KAEtCo1H,EAAmBz0H,EAAuBw0H,GAE1CxjC,EAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAEvCwjC,EAA8Br1H,EAAoB,KAElDs1H,EAA8B30H,EAAuB00H,GAErDE,EAAav1H,EAAoB,KAEjCw1H,EAAa70H,EAAuB40H,GAEpCE,EAAaz1H,EAAoB,KAEjC01H,EAAa/0H,EAAuB80H,GAIpCvJ,EAAM,SAAUyJ,GAGlB,QAASzJ,GAAIp+G,EAAS2C,EAAM08G,IAC1B,EAAIv7B,EAA0B,SAAG9xF,KAAMosH,EAEvC,IAAIhzB,IAAQ,EAAIo8B,EAAqC,SAAGx1H,MAAOosH,EAAI0J,YAAa,EAAIR,EAA0B,SAAGlJ,IAAM7rH,KAAKP,KAAMgO,EAAS2C,EAAM08G,GAGjJ,OADAj0B,GAAM28B,YAAY1I,GACXj0B,EA4ET,OApFA,EAAIs8B,EAAoB,SAAGtJ,EAAKyJ,IAWhC,EAAI7jC,EAAuB,SAAGo6B,IAC5B7kH,IAAK,SACLhF,MAAO,SAAgB+S,GACrB,GAAI6vE,GAAWxhF,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,GAAK3D,KAAKmlF,SACpFt5E,EAAQlI,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,GAAK3D,KAAK6L,KAEjF7L,MAAKkrH,aAAa/lC,EAAUt5E,KAC9B7L,KAAKg2H,SAAWh2H,KAAKqtH,YAAY4I,YAAY3gH,EAAK6vE,EAAUt5E,GAC5D7L,KAAKoQ,MAAQpQ,KAAKg2H,SAAS5lH,MAAQpQ,KAAKulD,OAAOn/C,MAAQpG,KAAKulD,OAAOr/C,KACnElG,KAAKqQ,OAASrQ,KAAKg2H,SAAS3lH,OAASrQ,KAAKulD,OAAOj/C,IAAMtG,KAAKulD,OAAO9G,OACnEz+C,KAAK6pD,OAAS7pD,KAAKoQ,MAAQ,MAI/B7I,IAAK,OACLhF,MAAO,SAAc+S,EAAKyf,EAAGpG,EAAGw2D,EAAUt5E,EAAOqJ,GAC/ClV,KAAK6uH,OAAOv5G,EAAK6vE,EAAUt5E,GAC3B7L,KAAKkG,KAAO6uB,EAAI/0B,KAAKoQ,MAAQ,EAC7BpQ,KAAKsG,IAAMqoB,EAAI3uB,KAAKqQ,OAAS,EAE7BiF,EAAIuwC,YAAc3wC,EAAOm0C,YACzB/zC,EAAIkwC,UAAYtwC,EAAO8gD,YACvB1gD,EAAIkwC,WAAaxlD,KAAK2Q,KAAK0pG,KAAK73G,MAChC8S,EAAIkwC,UAAY/iD,KAAKL,IAAIpC,KAAKoQ,MAAOkF,EAAIkwC,WAEzClwC,EAAI6wC,UAAYjxC,EAAOhL,MAEvBoL,EAAIoqG,UAAU1/G,KAAKkG,KAAMlG,KAAKsG,IAAKtG,KAAKoQ,MAAOpQ,KAAKqQ,OAAQ6E,EAAOskC,cAGnEx5C,KAAKk2H,aAAa5gH,EAAKJ,GAEvBI,EAAI0kC,OAEJh6C,KAAKm2H,cAAc7gH,EAAKJ,GAGxBI,EAAI8gH,OAEAlhH,EAAO8gD,YAAc,IACvBh2D,KAAKq2H,mBAAmB/gH,EAAKJ,GAE7BI,EAAI2kC,SAEJj6C,KAAKs2H,oBAAoBhhH,EAAKJ,IAEhCI,EAAIihH,UAEJv2H,KAAK4uH,kBAAkB75F,EAAGpG,EAAGrZ,EAAK6vE,EAAUt5E,GAC5C7L,KAAKqtH,YAAYnxB,KAAK5mF,EAAKtV,KAAKkG,KAAOlG,KAAKg2H,SAAS5lH,MAAQ,EAAIpQ,KAAKulD,OAAOr/C,KAAMlG,KAAKsG,IAAMtG,KAAKg2H,SAAS3lH,OAAS,EAAIrQ,KAAKulD,OAAOj/C,IAAK6+E,EAAUt5E,MAGtJtE,IAAK,oBACLhF,MAAO,SAA2BwyB,EAAGpG,EAAGrZ,EAAK6vE,EAAUt5E,GACrD7L,KAAK6uH,OAAOv5G,EAAK6vE,EAAUt5E,GAC3B7L,KAAKkG,KAAO6uB,EAAI/0B,KAAKoQ,MAAQ,EAC7BpQ,KAAKsG,IAAMqoB,EAAI3uB,KAAKqQ,OAAS,CAE7B,IAAImpC,GAAex5C,KAAKgO,QAAQ08G,gBAAgBlxE,YAChDx5C,MAAK8rH,YAAY5lH,KAAOlG,KAAKkG,KAAOszC,EACpCx5C,KAAK8rH,YAAYxlH,IAAMtG,KAAKsG,IAAMkzC,EAClCx5C,KAAK8rH,YAAYrtE,OAASz+C,KAAKsG,IAAMtG,KAAKqQ,OAASmpC,EACnDx5C,KAAK8rH,YAAY1lH,MAAQpG,KAAKkG,KAAOlG,KAAKoQ,MAAQopC,KAGpDjyC,IAAK,mBACLhF,MAAO,SAA0B+S,EAAKynD,GACpC/8D,KAAK6uH,OAAOv5G,EACZ,IAAI0gD,GAAch2D,KAAKgO,QAAQgoD,WAE/B,OAAOvzD,MAAKL,IAAIK,KAAKwiB,IAAIjlB,KAAKoQ,MAAQ,EAAI3N,KAAKw6C,IAAI8f,IAASt6D,KAAKwiB,IAAIjlB,KAAKqQ,OAAS,EAAI5N,KAAKs6C,IAAIggB,KAAW/G,MAGxGo2D,GACPwJ,EAAoB,QAEtBh2H,GAAiB,QAAIwsH,GAIjB,SAAUvsH,EAAQD,EAASM,GAE/BL,EAAOD,SAAYoB,QAAWd,EAAoB,KAAMa,YAAY,IAIhE,SAAUlB,EAAQD,EAASM,GAE/BA,EAAoB,KACpBL,EAAOD,QAAUM,EAAoB,IAAIuE,OAAOmP,gBAI5C,SAAU/T,EAAQD,EAASM,GAG/B,GAAIua,GAAkBva,EAAoB,IACtCs2H,EAAkBt2H,EAAoB,GAE1CA,GAAoB,IAAI,iBAAkB,WACxC,MAAO,UAAwBiT,GAC7B,MAAOqjH,GAAgB/7G,EAAStH,QAMhC,SAAUtT,EAAQD,EAASM,GAI/BN,EAAQmB,YAAa,CAErB,IAAIQ,GAAWrB,EAAoB,IAE/BsB,EAEJ,SAAgCV,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAASF,IAFjDS,EAItC3B,GAAQoB,QAAU,SAAU2V,EAAMpW,GAChC,IAAKoW,EACH,KAAM,IAAI8/G,gBAAe,4DAG3B,QAAOl2H,GAAuF,gBAA7D,KAATA,EAAuB,aAAc,EAAIiB,EAASR,SAAST,KAAuC,kBAATA,GAA8BoW,EAAPpW,IAKtI,SAAUV,EAAQD,EAASM,GAkB/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAASF,GAdvFlB,EAAQmB,YAAa,CAErB,IAAI21H,GAAkBx2H,EAAoB,KAEtCy2H,EAAmB91H,EAAuB61H,GAE1Cv1H,EAAUjB,EAAoB,IAE9BkB,EAAWP,EAAuBM,GAElCI,EAAWrB,EAAoB,IAE/BsB,EAAWX,EAAuBU,EAItC3B,GAAQoB,QAAU,SAAU41H,EAAUC,GACpC,GAA0B,kBAAfA,IAA4C,OAAfA,EACtC,KAAM,IAAItyH,WAAU,gEAAoF,KAAfsyH,EAA6B,aAAc,EAAIr1H,EAASR,SAAS61H,IAG5JD,GAASvkH,WAAY,EAAIjR,EAASJ,SAAS61H,GAAcA,EAAWxkH,WAClE7N,aACEjC,MAAOq0H,EACP/+G,YAAY,EACZE,UAAU,EACVD,cAAc,KAGd++G,IAAYF,EAAiB31H,SAAU,EAAI21H,EAAiB31H,SAAS41H,EAAUC,GAAcD,EAASd,UAAYe,KAKpH,SAAUh3H,EAAQD,EAASM,GAE/BL,EAAOD,SAAYoB,QAAWd,EAAoB,KAAMa,YAAY,IAIhE,SAAUlB,EAAQD,EAASM,GAE/BA,EAAoB,KACpBL,EAAOD,QAAUM,EAAoB,IAAIuE,OAAOqyH,gBAI5C,SAAUj3H,EAAQD,EAASM,GAG/B,GAAIqT,GAAUrT,EAAoB,GAClCqT,GAAQA,EAAQuC,EAAG,UAAWghH,eAAgB52H,EAAoB,KAAK6e,OAInE,SAAUlf,EAAQD,EAASM,GAI/B,GAAIsX,GAAWtX,EAAoB,IAC/BiX,EAAWjX,EAAoB,IAC/Bm2F,EAAQ,SAASvjF,EAAGV,GAEtB,GADA+E,EAASrE,IACL0E,EAASpF,IAAoB,OAAVA,EAAe,KAAM7N,WAAU6N,EAAQ,6BAEhEvS,GAAOD,SACLmf,IAAKta,OAAOqyH,iBAAmB,gBAC7B,SAAS5pH,EAAM6pH,EAAOh4G,GACpB,IACEA,EAAM7e,EAAoB,IAAIqW,SAAShW,KAAML,EAAoB,IAAI6M,EAAEtI,OAAO4N,UAAW,aAAa0M,IAAK,GAC3GA,EAAI7R,MACJ6pH,IAAU7pH,YAAgB/I,QAC1B,MAAM8E,GAAI8tH,GAAQ,EACpB,MAAO,UAAwBjkH,EAAGV,GAIhC,MAHAikF,GAAMvjF,EAAGV,GACN2kH,EAAMjkH,EAAEgjH,UAAY1jH,EAClB2M,EAAIjM,EAAGV,GACLU,QAEL,OAASjP,IACjBwyF,MAAOA,IAKL,SAAUx2F,EAAQD,EAASM,GAoB/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAhBzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAIhB,GAAWrB,EAAoB,IAE/BsB,EAAWX,EAAuBU,GAElCswF,EAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAIvCilC,EAAW,WACb,QAASA,GAAShpH,EAAS2C,EAAM08G,IAC/B,EAAIv7B,EAA0B,SAAG9xF,KAAMg3H,GAEvCh3H,KAAK2Q,KAAOA,EACZ3Q,KAAKqtH,YAAcA,EACnBrtH,KAAKgxC,WAAWhjC,GAChBhO,KAAKsG,QAAMzC,GACX7D,KAAKkG,SAAOrC,GACZ7D,KAAKqQ,WAASxM,GACd7D,KAAKoQ,UAAQvM,GACb7D,KAAK6pD,WAAShmD,GACd7D,KAAKulD,WAAS1hD,GACd7D,KAAKuuH,eAAgB,EACrBvuH,KAAK8rH,aAAgBxlH,IAAK,EAAGJ,KAAM,EAAGE,MAAO,EAAGq4C,OAAQ,GAwG1D,OArGA,EAAIuzC,EAAuB,SAAGglC,IAC5BzvH,IAAK,aACLhF,MAAO,SAAoByL,GACzBhO,KAAKgO,QAAUA,KAGjBzG,IAAK,cACLhF,MAAO,SAAqB8qH,GAC1BrtH,KAAKulD,UACDvlD,KAAKgO,QAAQu3C,SACsC,WAAjD,EAAI/jD,EAAkB,SAAGxB,KAAKgO,QAAQu3C,SACxCvlD,KAAKulD,OAAOj/C,IAAMtG,KAAKgO,QAAQu3C,OAAOj/C,IACtCtG,KAAKulD,OAAOn/C,MAAQpG,KAAKgO,QAAQu3C,OAAOn/C,MACxCpG,KAAKulD,OAAO9G,OAASz+C,KAAKgO,QAAQu3C,OAAO9G,OACzCz+C,KAAKulD,OAAOr/C,KAAOlG,KAAKgO,QAAQu3C,OAAOr/C,OAEvClG,KAAKulD,OAAOj/C,IAAMtG,KAAKgO,QAAQu3C,OAC/BvlD,KAAKulD,OAAOn/C,MAAQpG,KAAKgO,QAAQu3C,OACjCvlD,KAAKulD,OAAO9G,OAASz+C,KAAKgO,QAAQu3C,OAClCvlD,KAAKulD,OAAOr/C,KAAOlG,KAAKgO,QAAQu3C,SAGpC8nE,EAAY4J,YAAYj3H,KAAKulD,WAG/Bh+C,IAAK,oBACLhF,MAAO,SAA2B+S,EAAKynD,GACrC,GAAI/G,GAAch2D,KAAKgO,QAAQgoD,WAE/B,OADAh2D,MAAK6uH,OAAOv5G,GACL7S,KAAKL,IAAIK,KAAKwiB,IAAIjlB,KAAKoQ,MAAQ,EAAI3N,KAAKw6C,IAAI8f,IAASt6D,KAAKwiB,IAAIjlB,KAAKqQ,OAAS,EAAI5N,KAAKs6C,IAAIggB,KAAW/G,KAG7GzuD,IAAK,eACLhF,MAAO,SAAsB+S,EAAKJ,GAC5BA,EAAOu1G,SACTn1G,EAAI44G,YAAch5G,EAAOg5G,YACzB54G,EAAI4hH,WAAahiH,EAAOi5G,WACxB74G,EAAI6hH,cAAgBjiH,EAAOk5G,QAC3B94G,EAAI8hH,cAAgBliH,EAAOm5G,YAI/B9mH,IAAK,gBACLhF,MAAO,SAAuB+S,EAAKJ,GAC7BA,EAAOu1G,SACTn1G,EAAI44G,YAAc,gBAClB54G,EAAI4hH,WAAa,EACjB5hH,EAAI6hH,cAAgB,EACpB7hH,EAAI8hH,cAAgB,MAIxB7vH,IAAK,qBACLhF,MAAO,SAA4B+S,EAAKJ,GACtC,IAA4B,IAAxBA,EAAOy1G,aACT,OAAwB9mH,KAApByR,EAAI+hH,YAA2B,CACjC,GAAIC,GAASpiH,EAAOy1G,cACL,IAAX2M,IACFA,GAAU,EAAG,KAEfhiH,EAAI+hH,YAAYC,OAEhBhyG,SAAQH,KAAK,oFACbnlB,KAAKgO,QAAQ08G,gBAAgBC,cAAe,EAC5Cz1G,EAAOy1G,cAAe,KAK5BpjH,IAAK,sBACLhF,MAAO,SAA6B+S,EAAKJ,IACX,IAAxBA,EAAOy1G,mBACe9mH,KAApByR,EAAI+hH,YACN/hH,EAAI+hH,aAAa,KAEjB/xG,QAAQH,KAAK,oFACbnlB,KAAKgO,QAAQ08G,gBAAgBC,cAAe,EAC5Cz1G,EAAOy1G,cAAe,OAY5BpjH,IAAK,eACLhF,MAAO,SAAsB4iF,EAAUt5E,GACrC,OAA2B,IAAvB7L,KAAKuuH,eAGPvuH,KAAKuuH,eAAgB,GACd,OAGa1qH,KAAf7D,KAAKoQ,OAAuBpQ,KAAKqtH,YAAYkK,eAAepyC,EAAUt5E,OAG1EmrH,IAGTp3H,GAAiB,QAAIo3H,GAIjB,SAAUn3H,EAAQD,EAASM,GAgC/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GA5BzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAI8yH,GAAkBn1H,EAAoB,KAEtCo1H,EAAmBz0H,EAAuBw0H,GAE1CxjC,EAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAEvCwjC,EAA8Br1H,EAAoB,KAElDs1H,EAA8B30H,EAAuB00H,GAErDE,EAAav1H,EAAoB,KAEjCw1H,EAAa70H,EAAuB40H,GAEpC+B,EAAoBt3H,EAAoB,KAExCu3H,EAAoB52H,EAAuB22H,GAI3CnL,EAAS,SAAUqL,GAGrB,QAASrL,GAAOr+G,EAAS2C,EAAM08G,IAC7B,EAAIv7B,EAA0B,SAAG9xF,KAAMqsH,EAEvC,IAAIjzB,IAAQ,EAAIo8B,EAAqC,SAAGx1H,MAAOqsH,EAAOyJ,YAAa,EAAIR,EAA0B,SAAGjJ,IAAS9rH,KAAKP,KAAMgO,EAAS2C,EAAM08G,GAGvJ,OADAj0B,GAAM28B,YAAY1I,GACXj0B,EAoDT,OA5DA,EAAIs8B,EAAoB,SAAGrJ,EAAQqL,IAWnC,EAAI1lC,EAAuB,SAAGq6B,IAC5B9kH,IAAK,SACLhF,MAAO,SAAgB+S,GACrB,GAAI6vE,GAAWxhF,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,GAAK3D,KAAKmlF,SACpFt5E,EAAQlI,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,GAAK3D,KAAK6L,KAErF,IAAI7L,KAAKkrH,aAAa/lC,EAAUt5E,GAAQ,CACtC7L,KAAKg2H,SAAWh2H,KAAKqtH,YAAY4I,YAAY3gH,EAAK6vE,EAAUt5E,EAC5D,IAAI8rH,GAAWl1H,KAAKJ,IAAIrC,KAAKg2H,SAAS5lH,MAAQpQ,KAAKulD,OAAOn/C,MAAQpG,KAAKulD,OAAOr/C,KAAMlG,KAAKg2H,SAAS3lH,OAASrQ,KAAKulD,OAAOj/C,IAAMtG,KAAKulD,OAAO9G,OACzIz+C,MAAKgO,QAAQmiC,KAAOwnF,EAAW,EAE/B33H,KAAKoQ,MAAQunH,EACb33H,KAAKqQ,OAASsnH,EACd33H,KAAK6pD,OAAS7pD,KAAKoQ,MAAQ,MAI/B7I,IAAK,OACLhF,MAAO,SAAc+S,EAAKyf,EAAGpG,EAAGw2D,EAAUt5E,EAAOqJ,GAC/ClV,KAAK6uH,OAAOv5G,EAAK6vE,EAAUt5E,GAC3B7L,KAAKkG,KAAO6uB,EAAI/0B,KAAKoQ,MAAQ,EAC7BpQ,KAAKsG,IAAMqoB,EAAI3uB,KAAKqQ,OAAS,EAE7BrQ,KAAK43H,eAAetiH,EAAKyf,EAAGpG,EAAGzZ,GAG/BlV,KAAK8rH,YAAYxlH,IAAMqoB,EAAIzZ,EAAOi7B,KAClCnwC,KAAK8rH,YAAY5lH,KAAO6uB,EAAI7f,EAAOi7B,KACnCnwC,KAAK8rH,YAAY1lH,MAAQ2uB,EAAI7f,EAAOi7B,KACpCnwC,KAAK8rH,YAAYrtE,OAAS9vB,EAAIzZ,EAAOi7B,KAErCnwC,KAAK4uH,kBAAkB75F,EAAGpG,GAC1B3uB,KAAKqtH,YAAYnxB,KAAK5mF,EAAKtV,KAAKkG,KAAOlG,KAAKg2H,SAAS5lH,MAAQ,EAAIpQ,KAAKulD,OAAOr/C,KAAMyoB,EAAGw2D,EAAUt5E,MAGlGtE,IAAK,oBACLhF,MAAO,SAA2BwyB,EAAGpG,GACnC3uB,KAAK8rH,YAAYxlH,IAAMqoB,EAAI3uB,KAAKgO,QAAQmiC,KACxCnwC,KAAK8rH,YAAY5lH,KAAO6uB,EAAI/0B,KAAKgO,QAAQmiC,KACzCnwC,KAAK8rH,YAAY1lH,MAAQ2uB,EAAI/0B,KAAKgO,QAAQmiC,KAC1CnwC,KAAK8rH,YAAYrtE,OAAS9vB,EAAI3uB,KAAKgO,QAAQmiC,QAG7C5oC,IAAK,mBACLhF,MAAO,SAA0B+S,EAAKynD,GAEpC,MADA/8D,MAAK6uH,OAAOv5G,GACQ,GAAbtV,KAAKoQ,UAGTi8G,GACPoL,EAA2B,QAE7B73H,GAAiB,QAAIysH,GAIjB,SAAUxsH,EAAQD,EAASM,GAoC/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAhCzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAI8yH,GAAkBn1H,EAAoB,KAEtCo1H,EAAmBz0H,EAAuBw0H,GAE1CxjC,EAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAEvCwjC,EAA8Br1H,EAAoB,KAElDs1H,EAA8B30H,EAAuB00H,GAErDE,EAAav1H,EAAoB,KAEjCw1H,EAAa70H,EAAuB40H,GAEpCE,EAAaz1H,EAAoB,KAEjC01H,EAAa/0H,EAAuB80H,GAEpCzO,EAAehnH,EAAoB,KAmBnC23H,GAjBgBh3H,EAAuBqmH,GAiBrB,SAAU2O,GAG9B,QAASgC,GAAgB7pH,EAAS2C,EAAM08G,IACtC,EAAIv7B,EAA0B,SAAG9xF,KAAM63H,EAEvC,IAAIz+B,IAAQ,EAAIo8B,EAAqC,SAAGx1H,MAAO63H,EAAgB/B,YAAa,EAAIR,EAA0B,SAAGuC,IAAkBt3H,KAAKP,KAAMgO,EAAS2C,EAAM08G,GAIzK,OAFAj0B,GAAM0+B,YAAc,EACpB1+B,EAAMjU,UAAW,EACViU,EAwKT,OAjLA,EAAIs8B,EAAoB,SAAGmC,EAAiBhC,IAY5C,EAAI7jC,EAAuB,SAAG6lC,IAC5BtwH,IAAK,aACLhF,MAAO,SAAoByL,EAAS2/G,EAAUG,GAC5C9tH,KAAKgO,QAAUA,MAEInK,KAAb8pH,OAA0C9pH,KAAhBiqH,GAC9B9tH,KAAK+3H,UAAUpK,EAAUG,MAkB7BvmH,IAAK,YACLhF,MAAO,SAAmBorH,EAAUG,GAC9BA,GAAe9tH,KAAKmlF,UACtBnlF,KAAK2tH,SAAWG,EAChB9tH,KAAK8tH,YAAcH,IAEnB3tH,KAAK2tH,SAAWA,EAChB3tH,KAAK8tH,YAAcA,MAavBvmH,IAAK,eACLhF,MAAO,SAAsB4iF,GAC3B,GAAI6yC,GAAoB7yC,IAAanlF,KAAKmlF,WAAaA,GAAYnlF,KAAKmlF,QAGxE,IAFAnlF,KAAKmlF,SAAWA,MAESthF,KAArB7D,KAAK8tH,aAA6BkK,EAAmB,CACvD,GAAIC,GAAWj4H,KAAK2tH,QACpB3tH,MAAK2tH,SAAW3tH,KAAK8tH,YACrB9tH,KAAK8tH,YAAcmK,MAWvB1wH,IAAK,eACLhF,MAAO,WACL,GAAI6N,GAAOC,CAEX,KAAkD,IAA9CrQ,KAAKgO,QAAQ08G,gBAAgBE,aAAwB,CAEvD,GAAIsN,GAAc,EACdC,EAAe,CAGfn4H,MAAK2tH,SAASv9G,OAASpQ,KAAK2tH,SAASt9G,SACnCrQ,KAAK2tH,SAASv9G,MAAQpQ,KAAK2tH,SAASt9G,OACtC6nH,EAAcl4H,KAAK2tH,SAASv9G,MAAQpQ,KAAK2tH,SAASt9G,OAElD8nH,EAAen4H,KAAK2tH,SAASt9G,OAASrQ,KAAK2tH,SAASv9G,OAIxDA,EAA4B,EAApBpQ,KAAKgO,QAAQmiC,KAAW+nF,EAChC7nH,EAA6B,EAApBrQ,KAAKgO,QAAQmiC,KAAWgoF,MAGjC/nH,GAAQpQ,KAAK2tH,SAASv9G,MACtBC,EAASrQ,KAAK2tH,SAASt9G,MAGzBrQ,MAAKoQ,MAAQA,EACbpQ,KAAKqQ,OAASA,EACdrQ,KAAK6pD,OAAS,GAAM7pD,KAAKoQ,SAG3B7I,IAAK,iBACLhF,MAAO,SAAwB+S,EAAKyf,EAAGpG,EAAGzZ,GACxC,GAAI8gD,GAAc9gD,EAAO8gD,YAAch2D,KAAK2Q,KAAK0pG,KAAK73G,KACtD8S,GAAIkwC,UAAY/iD,KAAKL,IAAIpC,KAAKoQ,MAAO4lD,GAErC1gD,EAAIuwC,YAAc3wC,EAAOm0C,YACzB/zC,EAAI6wC,UAAYjxC,EAAOhL,MACvBoL,EAAIoyF,OAAO3yE,EAAGpG,EAAGzZ,EAAOi7B,MAGxBnwC,KAAKk2H,aAAa5gH,EAAKJ,GAEvBI,EAAI0kC,OAEJh6C,KAAKm2H,cAAc7gH,EAAKJ,GAGxBI,EAAI8gH,OAEApgE,EAAc,IAChBh2D,KAAKq2H,mBAAmB/gH,EAAKJ,GAE7BI,EAAI2kC,SAEJj6C,KAAKs2H,oBAAoBhhH,EAAKJ,IAEhCI,EAAIihH,aAGNhvH,IAAK,uBACLhF,MAAO,SAA8B+S,EAAKJ,GACxC,GAA2B,GAAvBlV,KAAK2tH,SAASv9G,MAAY,CAE5BkF,EAAI8iH,YAAc,EAGlBp4H,KAAKk2H,aAAa5gH,EAAKJ,EAEvB,IAAI08D,GAAS,GACsC,IAA/C5xE,KAAKgO,QAAQ08G,gBAAgBngB,gBAC/B34B,EAAS5xE,KAAK2tH,SAASv9G,MAAQpQ,KAAKoQ,MAAQpQ,KAAK2Q,KAAK0pG,KAAK73G,OAG7DxC,KAAK2tH,SAAS0K,oBAAoB/iH,EAAKs8D,EAAQ5xE,KAAKkG,KAAMlG,KAAKsG,IAAKtG,KAAKoQ,MAAOpQ,KAAKqQ,QAGrFrQ,KAAKm2H,cAAc7gH,EAAKJ,OAI5B3N,IAAK,kBACLhF,MAAO,SAAyB+S,EAAKyf,EAAGpG,EAAGw2D,EAAUt5E,GACnD,GAAI+rC,GACAjb,EAAS,CAEb,QAAoB94B,KAAhB7D,KAAKqQ,OAAsB,CAC7BssB,EAAuB,GAAd38B,KAAKqQ,MACd,IAAIioH,GAAkBt4H,KAAKqtH,YAAY4I,YAAY3gH,EAAK6vE,EAAUt5E,EAC9DysH,GAAgB1G,WAAa,IAC/Bj1F,GAAU27F,EAAgBjoH,OAAS,GAIvCunC,EAASjpB,EAAIgO,EAET38B,KAAKgO,QAAQoiC,QACfpwC,KAAK83H,YAAcn7F,GAErB38B,KAAKqtH,YAAYnxB,KAAK5mF,EAAKyf,EAAG6iB,EAAQutC,EAAUt5E,EAAO,eAGpDgsH,GACPjC,EAAoB,SAEtBh2H,GAAiB,QAAIi4H,GAIjB,SAAUh4H,EAAQD,EAASM,GAgC/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GA5BzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAI8yH,GAAkBn1H,EAAoB,KAEtCo1H,EAAmBz0H,EAAuBw0H,GAE1CxjC,EAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAEvCwjC,EAA8Br1H,EAAoB,KAElDs1H,EAA8B30H,EAAuB00H,GAErDE,EAAav1H,EAAoB,KAEjCw1H,EAAa70H,EAAuB40H,GAEpC+B,EAAoBt3H,EAAoB,KAExCu3H,EAAoB52H,EAAuB22H,GAI3ClL,EAAgB,SAAUoL,GAG5B,QAASpL,GAAct+G,EAAS2C,EAAM08G,EAAaM,EAAUG,IAC3D,EAAIh8B,EAA0B,SAAG9xF,KAAMssH,EAEvC,IAAIlzB,IAAQ,EAAIo8B,EAAqC,SAAGx1H,MAAOssH,EAAcwJ,YAAa,EAAIR,EAA0B,SAAGhJ,IAAgB/rH,KAAKP,KAAMgO,EAAS2C,EAAM08G,GAGrK,OADAj0B,GAAM2+B,UAAUpK,EAAUG,GACnB10B,EAuET,OA/EA,EAAIs8B,EAAoB,SAAGpJ,EAAeoL,IAW1C,EAAI1lC,EAAuB,SAAGs6B,IAC5B/kH,IAAK,SACLhF,MAAO,SAAgB+S,GACrB,GAAI6vE,GAAWxhF,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,GAAK3D,KAAKmlF,SACpFt5E,EAAQlI,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,GAAK3D,KAAK6L,KAIrF,QAFwChI,KAAtB7D,KAAK2tH,SAASj1G,SAA6C7U,KAAxB7D,KAAK2tH,SAASv9G,WAAgDvM,KAAzB7D,KAAK2tH,SAASt9G,OAEvF,CACf,GAAIsnH,GAA+B,EAApB33H,KAAKgO,QAAQmiC,IAI5B,OAHAnwC,MAAKoQ,MAAQunH,EACb33H,KAAKqQ,OAASsnH,OACd33H,KAAK6pD,OAAS,GAAM7pD,KAAKoQ,OAKvBpQ,KAAKkrH,aAAa/lC,EAAUt5E,IAC9B7L,KAAKu4H,kBAIThxH,IAAK,OACLhF,MAAO,SAAc+S,EAAKyf,EAAGpG,EAAGw2D,EAAUt5E,EAAOqJ,GAC/ClV,KAAKw4H,aAAarzC,GAClBnlF,KAAK6uH,SACL7uH,KAAKkG,KAAO6uB,EAAI/0B,KAAKoQ,MAAQ,EAC7BpQ,KAAKsG,IAAMqoB,EAAI3uB,KAAKqQ,OAAS,EAG7BrQ,KAAK43H,eAAetiH,EAAKyf,EAAGpG,EAAGzZ,GAG/BI,EAAI8gH,OAEJ9gH,EAAImjH,OAEJz4H,KAAK04H,qBAAqBpjH,EAAKJ,GAE/BI,EAAIihH,UAEJv2H,KAAK24H,gBAAgBrjH,EAAKyf,EAAGpG,EAAGw2D,EAAUt5E,GAE1C7L,KAAK4uH,kBAAkB75F,EAAGpG,MAM5BpnB,IAAK,oBACLhF,MAAO,SAA2BwyB,EAAGpG,GACnC3uB,KAAK8rH,YAAYxlH,IAAMqoB,EAAI3uB,KAAKgO,QAAQmiC,KACxCnwC,KAAK8rH,YAAY5lH,KAAO6uB,EAAI/0B,KAAKgO,QAAQmiC,KACzCnwC,KAAK8rH,YAAY1lH,MAAQ2uB,EAAI/0B,KAAKgO,QAAQmiC,KAC1CnwC,KAAK8rH,YAAYrtE,OAAS9vB,EAAI3uB,KAAKgO,QAAQmiC,KAG3CnwC,KAAK8rH,YAAY5lH,KAAOzD,KAAKL,IAAIpC,KAAK8rH,YAAY5lH,KAAMlG,KAAKqtH,YAAYl9E,KAAKjqC,MAC9ElG,KAAK8rH,YAAY1lH,MAAQ3D,KAAKJ,IAAIrC,KAAK8rH,YAAY1lH,MAAOpG,KAAKqtH,YAAYl9E,KAAKjqC,KAAOlG,KAAKqtH,YAAYl9E,KAAK//B,OAC7GpQ,KAAK8rH,YAAYrtE,OAASh8C,KAAKJ,IAAIrC,KAAK8rH,YAAYrtE,OAAQz+C,KAAK8rH,YAAYrtE,OAASz+C,KAAK83H,gBAG7FvwH,IAAK,mBACLhF,MAAO,SAA0B+S,EAAKynD,GAEpC,MADA/8D,MAAK6uH,OAAOv5G,GACQ,GAAbtV,KAAKoQ,UAGTk8G,GACPmL,EAA2B,QAE7B73H,GAAiB,QAAI0sH,GAIjB,SAAUzsH,EAAQD,EAASM,GAgC/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GA5BzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAI8yH,GAAkBn1H,EAAoB,KAEtCo1H,EAAmBz0H,EAAuBw0H,GAE1CxjC,EAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAEvCwjC,EAA8Br1H,EAAoB,KAElDs1H,EAA8B30H,EAAuB00H,GAErDE,EAAav1H,EAAoB,KAEjCw1H,EAAa70H,EAAuB40H,GAEpCE,EAAaz1H,EAAoB,KAEjC01H,EAAa/0H,EAAuB80H,GAIpCpJ,EAAW,SAAUsJ,GAGvB,QAAStJ,GAASv+G,EAAS2C,EAAM08G,IAC/B,EAAIv7B,EAA0B,SAAG9xF,KAAMusH,EAEvC,IAAInzB,IAAQ,EAAIo8B,EAAqC,SAAGx1H,MAAOusH,EAASuJ,YAAa,EAAIR,EAA0B,SAAG/I,IAAWhsH,KAAKP,KAAMgO,EAAS2C,EAAM08G,GAG3J,OADAj0B,GAAM28B,YAAY1I,GACXj0B,EAsET,OA9EA,EAAIs8B,EAAoB,SAAGnJ,EAAUsJ,IAWrC,EAAI7jC,EAAuB,SAAGu6B,IAC5BhlH,IAAK,SACLhF,MAAO,SAAgB+S,EAAK6vE,EAAUt5E,GACpC,GAAI7L,KAAKkrH,aAAa/lC,EAAUt5E,GAAQ,CACtC7L,KAAKg2H,SAAWh2H,KAAKqtH,YAAY4I,YAAY3gH,EAAK6vE,EAAUt5E,EAC5D,IAAIskC,GAAOnwC,KAAKg2H,SAAS5lH,MAAQpQ,KAAKulD,OAAOn/C,MAAQpG,KAAKulD,OAAOr/C,IACjElG,MAAKoQ,MAAQ+/B,EACbnwC,KAAKqQ,OAAS8/B,EACdnwC,KAAK6pD,OAAS7pD,KAAKoQ,MAAQ,MAI/B7I,IAAK,OACLhF,MAAO,SAAc+S,EAAKyf,EAAGpG,EAAGw2D,EAAUt5E,EAAOqJ,GAC/ClV,KAAK6uH,OAAOv5G,EAAK6vE,EAAUt5E,GAC3B7L,KAAKkG,KAAO6uB,EAAI/0B,KAAKoQ,MAAQ,EAC7BpQ,KAAKsG,IAAMqoB,EAAI3uB,KAAKqQ,OAAS,CAE7B,IAAI2lD,GAAc9gD,EAAO8gD,YAAch2D,KAAK2Q,KAAK0pG,KAAK73G,KACtD8S,GAAIkwC,UAAY/iD,KAAKL,IAAIpC,KAAKoQ,MAAO4lD,GAErC1gD,EAAIuwC,YAAc3wC,EAAOm0C,YAEzB/zC,EAAI6wC,UAAYjxC,EAAOhL,MACvBoL,EAAI8qG,SAASrrF,EAAI/0B,KAAKoQ,MAAQ,EAAGue,EAAI3uB,KAAKqQ,OAAS,EAAGrQ,KAAKoQ,MAAOpQ,KAAKqQ,QAGvErQ,KAAKk2H,aAAa5gH,EAAKJ,GAEvBI,EAAI0kC,OAEJh6C,KAAKm2H,cAAc7gH,EAAKJ,GAGxBI,EAAI8gH,OAEApgE,EAAc,IAChBh2D,KAAKq2H,mBAAmB/gH,EAAKJ,GAE7BI,EAAI2kC,SAEJj6C,KAAKs2H,oBAAoBhhH,EAAKJ,IAEhCI,EAAIihH,UAEJv2H,KAAK4uH,kBAAkB75F,EAAGpG,EAAGrZ,EAAK6vE,EAAUt5E,GAC5C7L,KAAKqtH,YAAYnxB,KAAK5mF,EAAKtV,KAAKkG,KAAOlG,KAAKg2H,SAAS5lH,MAAQ,EAAIpQ,KAAKulD,OAAOr/C,KAAMlG,KAAKsG,IAAMtG,KAAKg2H,SAAS3lH,OAAS,EAAIrQ,KAAKulD,OAAOj/C,IAAK6+E,EAAUt5E,MAGtJtE,IAAK,oBACLhF,MAAO,SAA2BwyB,EAAGpG,EAAGrZ,EAAK6vE,EAAUt5E,GACrD7L,KAAK6uH,OAAOv5G,EAAK6vE,EAAUt5E,GAE3B7L,KAAKkG,KAAO6uB,EAAiB,GAAb/0B,KAAKoQ,MACrBpQ,KAAKsG,IAAMqoB,EAAkB,GAAd3uB,KAAKqQ,OAEpBrQ,KAAK8rH,YAAY5lH,KAAOlG,KAAKkG,KAC7BlG,KAAK8rH,YAAYxlH,IAAMtG,KAAKsG,IAC5BtG,KAAK8rH,YAAYrtE,OAASz+C,KAAKsG,IAAMtG,KAAKqQ,OAC1CrQ,KAAK8rH,YAAY1lH,MAAQpG,KAAKkG,KAAOlG,KAAKoQ,SAG5C7I,IAAK,mBACLhF,MAAO,SAA0B+S,EAAKynD,GACpC,MAAO/8D,MAAK44H,kBAAkBtjH,EAAKynD,OAGhCwvD,GACPqJ,EAAoB,QAEtBh2H,GAAiB,QAAI2sH,GAIjB,SAAU1sH,EAAQD,EAASM,GAgC/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GA5BzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAI8yH,GAAkBn1H,EAAoB,KAEtCo1H,EAAmBz0H,EAAuBw0H,GAE1CxjC,EAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAEvCwjC,EAA8Br1H,EAAoB,KAElDs1H,EAA8B30H,EAAuB00H,GAErDE,EAAav1H,EAAoB,KAEjCw1H,EAAa70H,EAAuB40H,GAEpCoD,EAAc34H,EAAoB,KAElC44H,EAAcj4H,EAAuBg4H,GAIrCrM,EAAU,SAAUuM,GAGtB,QAASvM,GAAQx+G,EAAS2C,EAAM08G,GAE9B,OADA,EAAIv7B,EAA0B,SAAG9xF,KAAMwsH,IAChC,EAAIgJ,EAAqC,SAAGx1H,MAAOwsH,EAAQsJ,YAAa,EAAIR,EAA0B,SAAG9I,IAAUjsH,KAAKP,KAAMgO,EAAS2C,EAAM08G,IActJ,OAlBA,EAAIqI,EAAoB,SAAGlJ,EAASuM,IAOpC,EAAI/mC,EAAuB,SAAGw6B,IAC5BjlH,IAAK,OACLhF,MAAO,SAAc+S,EAAKyf,EAAGpG,EAAGw2D,EAAUt5E,EAAOqJ,GAC/ClV,KAAKg5H,WAAW1jH,EAAK,UAAW,EAAGyf,EAAGpG,EAAGw2D,EAAUt5E,EAAOqJ,MAG5D3N,IAAK,mBACLhF,MAAO,SAA0B+S,EAAKynD,GACpC,MAAO/8D,MAAK44H,kBAAkBtjH,EAAKynD,OAGhCyvD,GACPsM,EAAqB,QAEvBl5H,GAAiB,QAAI4sH,GAIjB,SAAU3sH,EAAQD,EAASM,GAgC/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GA5BzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAI8yH,GAAkBn1H,EAAoB,KAEtCo1H,EAAmBz0H,EAAuBw0H,GAE1CxjC,EAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAEvCwjC,EAA8Br1H,EAAoB,KAElDs1H,EAA8B30H,EAAuB00H,GAErDE,EAAav1H,EAAoB,KAEjCw1H,EAAa70H,EAAuB40H,GAEpCE,EAAaz1H,EAAoB,KAEjC01H,EAAa/0H,EAAuB80H,GAIpCsD,EAAY,SAAUpD,GAGxB,QAASoD,GAAUjrH,EAAS2C,EAAM08G,GAEhC,OADA,EAAIv7B,EAA0B,SAAG9xF,KAAMi5H,IAChC,EAAIzD,EAAqC,SAAGx1H,MAAOi5H,EAAUnD,YAAa,EAAIR,EAA0B,SAAG2D,IAAY14H,KAAKP,KAAMgO,EAAS2C,EAAM08G,IA4E1J,OAhFA,EAAIqI,EAAoB,SAAGuD,EAAWpD,IAOtC,EAAI7jC,EAAuB,SAAGinC,IAC5B1xH,IAAK,SACLhF,MAAO,SAAgB+S,GACrB,GAAI6vE,GAAWxhF,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,GAAK3D,KAAKmlF,SACpFt5E,EAAQlI,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,GAAK3D,KAAK6L,MACjFqJ,EAASvR,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,IAAOwsC,KAAMnwC,KAAKgO,QAAQmiC,KAEtG,IAAInwC,KAAKkrH,aAAa/lC,EAAUt5E,GAAQ,CACtC7L,KAAKqtH,YAAY4I,YAAY3gH,EAAK6vE,EAAUt5E,EAC5C,IAAIskC,GAAO,EAAIj7B,EAAOi7B,IACtBnwC,MAAKoQ,MAAQ+/B,EACbnwC,KAAKqQ,OAAS8/B,EACdnwC,KAAK6pD,OAAS,GAAM7pD,KAAKoQ,UAI7B7I,IAAK,aACLhF,MAAO,SAAoB+S,EAAKqvG,EAAOuU,EAAgBnkG,EAAGpG,EAAGw2D,EAAUt5E,EAAOqJ,GAC5ElV,KAAK6uH,OAAOv5G,EAAK6vE,EAAUt5E,EAAOqJ,GAElClV,KAAKkG,KAAO6uB,EAAI/0B,KAAKoQ,MAAQ,EAC7BpQ,KAAKsG,IAAMqoB,EAAI3uB,KAAKqQ,OAAS,CAE7B,IAAI2lD,GAAc9gD,EAAO8gD,YAAch2D,KAAK2Q,KAAK0pG,KAAK73G,KA0BtD,IAzBA8S,EAAIkwC,UAAY/iD,KAAKL,IAAIpC,KAAKoQ,MAAO4lD,GAErC1gD,EAAIuwC,YAAc3wC,EAAOm0C,YACzB/zC,EAAI6wC,UAAYjxC,EAAOhL,MACvBoL,EAAIqvG,GAAO5vF,EAAGpG,EAAGzZ,EAAOi7B,MAGxBnwC,KAAKk2H,aAAa5gH,EAAKJ,GAEvBI,EAAI0kC,OAEJh6C,KAAKm2H,cAAc7gH,EAAKJ,GAGxBI,EAAI8gH,OAEApgE,EAAc,IAChBh2D,KAAKq2H,mBAAmB/gH,EAAKJ,GAE7BI,EAAI2kC,SAEJj6C,KAAKs2H,oBAAoBhhH,EAAKJ,IAEhCI,EAAIihH,cAEuB1yH,KAAvB7D,KAAKgO,QAAQoiC,MAAqB,CAEpCpwC,KAAKqtH,YAAY+D,mBAAmB97G,EAAK6vE,EAAUt5E,EAAOkpB,EAAGpG,EAAG,UAChE,IAAIipB,GAASjpB,EAAI,GAAM3uB,KAAKqQ,OAAS,GAAMrQ,KAAKqtH,YAAYl9E,KAAK9/B,MACjErQ,MAAKqtH,YAAYnxB,KAAK5mF,EAAKyf,EAAG6iB,EAAQutC,EAAUt5E,EAAO,WAGzD7L,KAAK4uH,kBAAkB75F,EAAGpG,MAG5BpnB,IAAK,oBACLhF,MAAO,SAA2BwyB,EAAGpG,GACnC3uB,KAAK8rH,YAAYxlH,IAAMqoB,EAAI3uB,KAAKgO,QAAQmiC,KACxCnwC,KAAK8rH,YAAY5lH,KAAO6uB,EAAI/0B,KAAKgO,QAAQmiC,KACzCnwC,KAAK8rH,YAAY1lH,MAAQ2uB,EAAI/0B,KAAKgO,QAAQmiC,KAC1CnwC,KAAK8rH,YAAYrtE,OAAS9vB,EAAI3uB,KAAKgO,QAAQmiC,SAEhBtsC,KAAvB7D,KAAKgO,QAAQoiC,OAAuBpwC,KAAKqtH,YAAYl9E,KAAK//B,MAAQ,IACpEpQ,KAAK8rH,YAAY5lH,KAAOzD,KAAKL,IAAIpC,KAAK8rH,YAAY5lH,KAAMlG,KAAKqtH,YAAYl9E,KAAKjqC,MAC9ElG,KAAK8rH,YAAY1lH,MAAQ3D,KAAKJ,IAAIrC,KAAK8rH,YAAY1lH,MAAOpG,KAAKqtH,YAAYl9E,KAAKjqC,KAAOlG,KAAKqtH,YAAYl9E,KAAK//B,OAC7GpQ,KAAK8rH,YAAYrtE,OAASh8C,KAAKJ,IAAIrC,KAAK8rH,YAAYrtE,OAAQz+C,KAAK8rH,YAAYrtE,OAASz+C,KAAKqtH,YAAYl9E,KAAK9/B,aAI3G4oH,GACPrD,EAAoB,QAEtBh2H,GAAiB,QAAIq5H,GAIjB,SAAUp5H,EAAQD,EAASM,GAgC/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GA5BzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAI8yH,GAAkBn1H,EAAoB,KAEtCo1H,EAAmBz0H,EAAuBw0H,GAE1CxjC,EAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAEvCwjC,EAA8Br1H,EAAoB,KAElDs1H,EAA8B30H,EAAuB00H,GAErDE,EAAav1H,EAAoB,KAEjCw1H,EAAa70H,EAAuB40H,GAEpCoD,EAAc34H,EAAoB,KAElC44H,EAAcj4H,EAAuBg4H,GAIrCpM,EAAM,SAAUsM,GAGlB,QAAStM,GAAIz+G,EAAS2C,EAAM08G,GAE1B,OADA,EAAIv7B,EAA0B,SAAG9xF,KAAMysH,IAChC,EAAI+I,EAAqC,SAAGx1H,MAAOysH,EAAIqJ,YAAa,EAAIR,EAA0B,SAAG7I,IAAMlsH,KAAKP,KAAMgO,EAAS2C,EAAM08G,IAe9I,OAnBA,EAAIqI,EAAoB,SAAGjJ,EAAKsM,IAOhC,EAAI/mC,EAAuB,SAAGy6B,IAC5BllH,IAAK,OACLhF,MAAO,SAAc+S,EAAKyf,EAAGpG,EAAGw2D,EAAUt5E,EAAOqJ,GAC/ClV,KAAKg5H,WAAW1jH,EAAK,SAAU,EAAGyf,EAAGpG,EAAGw2D,EAAUt5E,EAAOqJ,MAG3D3N,IAAK,mBACLhF,MAAO,SAA0B+S,EAAKynD,GAEpC,MADA/8D,MAAK6uH,OAAOv5G,GACLtV,KAAKgO,QAAQmiC,SAGjBs8E,GACPqM,EAAqB,QAEvBl5H,GAAiB,QAAI6sH,GAIjB,SAAU5sH,EAAQD,EAASM,GAgC/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GA5BzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAI8yH,GAAkBn1H,EAAoB,KAEtCo1H,EAAmBz0H,EAAuBw0H,GAE1CxjC,EAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAEvCwjC,EAA8Br1H,EAAoB,KAElDs1H,EAA8B30H,EAAuB00H,GAErDE,EAAav1H,EAAoB,KAEjCw1H,EAAa70H,EAAuB40H,GAEpCE,EAAaz1H,EAAoB,KAEjC01H,EAAa/0H,EAAuB80H,GAIpCjJ,EAAU,SAAUmJ,GAGtB,QAASnJ,GAAQ1+G,EAAS2C,EAAM08G,GAE9B,OADA,EAAIv7B,EAA0B,SAAG9xF,KAAM0sH,IAChC,EAAI8I,EAAqC,SAAGx1H,MAAO0sH,EAAQoJ,YAAa,EAAIR,EAA0B,SAAG5I,IAAUnsH,KAAKP,KAAMgO,EAAS2C,EAAM08G,IAgFtJ,OApFA,EAAIqI,EAAoB,SAAGhJ,EAASmJ,IAOpC,EAAI7jC,EAAuB,SAAG06B,IAC5BnlH,IAAK,SACLhF,MAAO,SAAgB+S,GACrB,GAAI6vE,GAAWxhF,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,GAAK3D,KAAKmlF,SACpFt5E,EAAQlI,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,GAAK3D,KAAK6L,KAErF,IAAI7L,KAAKkrH,aAAa/lC,EAAUt5E,GAAQ,CACtC,GAAImqH,GAAWh2H,KAAKqtH,YAAY4I,YAAY3gH,EAAK6vE,EAAUt5E,EAE3D7L,MAAKqQ,OAA2B,EAAlB2lH,EAAS3lH,OACvBrQ,KAAKoQ,MAAQ4lH,EAAS5lH,MAAQpQ,KAAKqQ,OACnCrQ,KAAK6pD,OAAS,GAAM7pD,KAAKoQ,UAI7B7I,IAAK,OACLhF,MAAO,SAAc+S,EAAKyf,EAAGpG,EAAGw2D,EAAUt5E,EAAOqJ,GAC/ClV,KAAK6uH,OAAOv5G,EAAK6vE,EAAUt5E;mBAC3B7L,KAAKkG,KAAO6uB,EAAiB,GAAb/0B,KAAKoQ,MACrBpQ,KAAKsG,IAAMqoB,EAAkB,GAAd3uB,KAAKqQ,MAEpB,IAAI2lD,GAAc9gD,EAAO8gD,YAAch2D,KAAK2Q,KAAK0pG,KAAK73G,KACtD8S,GAAIkwC,UAAY/iD,KAAKL,IAAIpC,KAAKoQ,MAAO4lD,GAErC1gD,EAAIuwC,YAAc3wC,EAAOm0C,YAEzB/zC,EAAI6wC,UAAYjxC,EAAOhL,MACvBoL,EAAIsqG,YAAY5/G,KAAKkG,KAAMlG,KAAKsG,IAAKtG,KAAKoQ,MAAOpQ,KAAKqQ,QAGtDrQ,KAAKk2H,aAAa5gH,EAAKJ,GAEvBI,EAAI0kC,OAEJh6C,KAAKm2H,cAAc7gH,EAAKJ,GAGxBI,EAAI8gH,OAGApgE,EAAc,IAChBh2D,KAAKq2H,mBAAmB/gH,EAAKJ,GAE7BI,EAAI2kC,SAEJj6C,KAAKs2H,oBAAoBhhH,EAAKJ,IAGhCI,EAAIihH,UAEJv2H,KAAK4uH,kBAAkB75F,EAAGpG,EAAGrZ,EAAK6vE,EAAUt5E,GAC5C7L,KAAKqtH,YAAYnxB,KAAK5mF,EAAKyf,EAAGpG,EAAGw2D,EAAUt5E,MAG7CtE,IAAK,oBACLhF,MAAO,SAA2BwyB,EAAGpG,EAAGrZ,EAAK6vE,EAAUt5E,GACrD7L,KAAK6uH,OAAOv5G,EAAK6vE,EAAUt5E,GAE3B7L,KAAKkG,KAAO6uB,EAAiB,GAAb/0B,KAAKoQ,MACrBpQ,KAAKsG,IAAMqoB,EAAkB,GAAd3uB,KAAKqQ,OAEpBrQ,KAAK8rH,YAAY5lH,KAAOlG,KAAKkG,KAC7BlG,KAAK8rH,YAAYxlH,IAAMtG,KAAKsG,IAC5BtG,KAAK8rH,YAAYrtE,OAASz+C,KAAKsG,IAAMtG,KAAKqQ,OAC1CrQ,KAAK8rH,YAAY1lH,MAAQpG,KAAKkG,KAAOlG,KAAKoQ,SAG5C7I,IAAK,mBACLhF,MAAO,SAA0B+S,EAAKynD,GACpC/8D,KAAK6uH,OAAOv5G,EACZ,IAAI9R,GAAiB,GAAbxD,KAAKoQ,MACT3M,EAAkB,GAAdzD,KAAKqQ,OACT2P,EAAIvd,KAAKs6C,IAAIggB,GAASv5D,EACtB2H,EAAI1I,KAAKw6C,IAAI8f,GAASt5D,CAC1B,OAAOD,GAAIC,EAAIhB,KAAKusD,KAAKhvC,EAAIA,EAAI7U,EAAIA,OAGlCuhH,GACPkJ,EAAoB,QAEtBh2H,GAAiB,QAAI8sH,GAIjB,SAAU7sH,EAAQD,EAASM,GAgC/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GA5BzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAI8yH,GAAkBn1H,EAAoB,KAEtCo1H,EAAmBz0H,EAAuBw0H,GAE1CxjC,EAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAEvCwjC,EAA8Br1H,EAAoB,KAElDs1H,EAA8B30H,EAAuB00H,GAErDE,EAAav1H,EAAoB,KAEjCw1H,EAAa70H,EAAuB40H,GAEpCE,EAAaz1H,EAAoB,KAEjC01H,EAAa/0H,EAAuB80H,GAIpChJ,EAAO,SAAUkJ,GAGnB,QAASlJ,GAAK3+G,EAAS2C,EAAM08G,IAC3B,EAAIv7B,EAA0B,SAAG9xF,KAAM2sH,EAEvC,IAAIvzB,IAAQ,EAAIo8B,EAAqC,SAAGx1H,MAAO2sH,EAAKmJ,YAAa,EAAIR,EAA0B,SAAG3I,IAAOpsH,KAAKP,KAAMgO,EAAS2C,EAAM08G,GAGnJ,OADAj0B,GAAM28B,YAAY1I,GACXj0B,EA6ET,OArFA,EAAIs8B,EAAoB,SAAG/I,EAAMkJ,IAWjC,EAAI7jC,EAAuB,SAAG26B,IAC5BplH,IAAK,SACLhF,MAAO,SAAgB+S,EAAK6vE,EAAUt5E,GAChC7L,KAAKkrH,aAAa/lC,EAAUt5E,KAC9B7L,KAAKo4G,UACHhoG,MAAOvO,OAAO7B,KAAKgO,QAAQ8mG,KAAK3kE,MAChC9/B,OAAQxO,OAAO7B,KAAKgO,QAAQ8mG,KAAK3kE,OAEnCnwC,KAAKoQ,MAAQpQ,KAAKo4G,SAAShoG,MAAQpQ,KAAKulD,OAAOn/C,MAAQpG,KAAKulD,OAAOr/C,KACnElG,KAAKqQ,OAASrQ,KAAKo4G,SAAS/nG,OAASrQ,KAAKulD,OAAOj/C,IAAMtG,KAAKulD,OAAO9G,OACnEz+C,KAAK6pD,OAAS,GAAM7pD,KAAKoQ,UAI7B7I,IAAK,OACLhF,MAAO,SAAc+S,EAAKyf,EAAGpG,EAAGw2D,EAAUt5E,EAAOqJ,GAQ/C,GAPAlV,KAAK6uH,OAAOv5G,EAAK6vE,EAAUt5E,GAC3B7L,KAAKgO,QAAQ8mG,KAAK3kE,KAAOnwC,KAAKgO,QAAQ8mG,KAAK3kE,MAAQ,GAEnDnwC,KAAKkG,KAAO6uB,EAAI/0B,KAAKoQ,MAAQ,EAC7BpQ,KAAKsG,IAAMqoB,EAAI3uB,KAAKqQ,OAAS,EAC7BrQ,KAAKm5H,MAAM7jH,EAAKyf,EAAGpG,EAAGw2D,EAAUt5E,EAAOqJ,OAEZrR,KAAvB7D,KAAKgO,QAAQoiC,MAAqB,CAEpCpwC,KAAKqtH,YAAYnxB,KAAK5mF,EAAKtV,KAAKkG,KAAOlG,KAAKo4G,SAAShoG,MAAQ,EAAIpQ,KAAKulD,OAAOr/C,KAAMyoB,EAAI3uB,KAAKqQ,OAAS,EAD/E,EACoG80E,GAG5HnlF,KAAK4uH,kBAAkB75F,EAAGpG,MAG5BpnB,IAAK,oBACLhF,MAAO,SAA2BwyB,EAAGpG,GAMnC,GALA3uB,KAAK8rH,YAAYxlH,IAAMqoB,EAA6B,GAAzB3uB,KAAKgO,QAAQ8mG,KAAK3kE,KAC7CnwC,KAAK8rH,YAAY5lH,KAAO6uB,EAA6B,GAAzB/0B,KAAKgO,QAAQ8mG,KAAK3kE,KAC9CnwC,KAAK8rH,YAAY1lH,MAAQ2uB,EAA6B,GAAzB/0B,KAAKgO,QAAQ8mG,KAAK3kE,KAC/CnwC,KAAK8rH,YAAYrtE,OAAS9vB,EAA6B,GAAzB3uB,KAAKgO,QAAQ8mG,KAAK3kE,SAErBtsC,KAAvB7D,KAAKgO,QAAQoiC,OAAuBpwC,KAAKqtH,YAAYl9E,KAAK//B,MAAQ,EAAG,CAEvEpQ,KAAK8rH,YAAY5lH,KAAOzD,KAAKL,IAAIpC,KAAK8rH,YAAY5lH,KAAMlG,KAAKqtH,YAAYl9E,KAAKjqC,MAC9ElG,KAAK8rH,YAAY1lH,MAAQ3D,KAAKJ,IAAIrC,KAAK8rH,YAAY1lH,MAAOpG,KAAKqtH,YAAYl9E,KAAKjqC,KAAOlG,KAAKqtH,YAAYl9E,KAAK//B,OAC7GpQ,KAAK8rH,YAAYrtE,OAASh8C,KAAKJ,IAAIrC,KAAK8rH,YAAYrtE,OAAQz+C,KAAK8rH,YAAYrtE,OAASz+C,KAAKqtH,YAAYl9E,KAAK9/B,OAHtF,OAO1B9I,IAAK,QACLhF,MAAO,SAAe+S,EAAKyf,EAAGpG,EAAGw2D,EAAUt5E,EAAOqJ,GAChD,GAAIkjG,GAAWv2G,OAAO7B,KAAKgO,QAAQ8mG,KAAK3kE,UAETtsC,KAA3B7D,KAAKgO,QAAQ8mG,KAAKxgF,MACpBhf,EAAImwC,MAAQ0/B,EAAW,QAAU,IAAMizB,EAAW,MAAQp4G,KAAKgO,QAAQ8mG,KAAK2U,KAG5En0G,EAAI6wC,UAAYnmD,KAAKgO,QAAQ8mG,KAAK5qG,OAAS,QAC3CoL,EAAIqxC,UAAY,SAChBrxC,EAAIsxC,aAAe,SAGnB5mD,KAAKk2H,aAAa5gH,EAAKJ,GACvBI,EAAIuxC,SAAS7mD,KAAKgO,QAAQ8mG,KAAKxgF,KAAMS,EAAGpG,GAGxC3uB,KAAKm2H,cAAc7gH,EAAKJ,IAExBoQ,QAAQk3E,MAAM,gIAIlBj1F,IAAK,mBACLhF,MAAO,SAA0B+S,EAAKynD,GACpC,MAAO/8D,MAAK44H,kBAAkBtjH,EAAKynD,OAGhC4vD,GACPiJ,EAAoB,QAEtBh2H,GAAiB,QAAI+sH,GAIjB,SAAU9sH,EAAQD,EAASM,GAgC/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GA5BzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAI8yH,GAAkBn1H,EAAoB,KAEtCo1H,EAAmBz0H,EAAuBw0H,GAE1CxjC,EAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAEvCwjC,EAA8Br1H,EAAoB,KAElDs1H,EAA8B30H,EAAuB00H,GAErDE,EAAav1H,EAAoB,KAEjCw1H,EAAa70H,EAAuB40H,GAEpC+B,EAAoBt3H,EAAoB,KAExCu3H,EAAoB52H,EAAuB22H,GAI3CrP,EAAQ,SAAUuP,GAGpB,QAASvP,GAAMn6G,EAAS2C,EAAM08G,EAAaM,EAAUG,IACnD,EAAIh8B,EAA0B,SAAG9xF,KAAMmoH,EAEvC,IAAI/uB,IAAQ,EAAIo8B,EAAqC,SAAGx1H,MAAOmoH,EAAM2N,YAAa,EAAIR,EAA0B,SAAGnN,IAAQ5nH,KAAKP,KAAMgO,EAAS2C,EAAM08G,GAGrJ,OADAj0B,GAAM2+B,UAAUpK,EAAUG,GACnB10B,EAoFT,OA5FA,EAAIs8B,EAAoB,SAAGvN,EAAOuP,IAWlC,EAAI1lC,EAAuB,SAAGm2B,IAC5B5gH,IAAK,SACLhF,MAAO,SAAgB+S,GACrB,GAAI6vE,GAAWxhF,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,GAAK3D,KAAKmlF,SACpFt5E,EAAQlI,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,GAAK3D,KAAK6L,KAEjF7L,MAAKkrH,aAAa/lC,EAAUt5E,IAC9B7L,KAAKu4H,kBAIThxH,IAAK,OACLhF,MAAO,SAAc+S,EAAKyf,EAAGpG,EAAGw2D,EAAUt5E,EAAOqJ,GAM/C,GALAlV,KAAKw4H,aAAarzC,GAClBnlF,KAAK6uH,SACL7uH,KAAKkG,KAAO6uB,EAAI/0B,KAAKoQ,MAAQ,EAC7BpQ,KAAKsG,IAAMqoB,EAAI3uB,KAAKqQ,OAAS,GAE2B,IAApDrQ,KAAKgO,QAAQ08G,gBAAgBG,mBAA6B,CAC5D,GAAIuO,GAAqBp5H,KAAKgO,QAAQgoD,YAClCqjE,EAAqBr5H,KAAKgO,QAAQu7G,qBAAuB,EAAIvpH,KAAKgO,QAAQgoD,YAC1EA,GAAemvB,EAAWk0C,EAAqBD,GAAsBp5H,KAAK2Q,KAAK0pG,KAAK73G,KACxF8S,GAAIkwC,UAAY/iD,KAAKL,IAAIpC,KAAKoQ,MAAO4lD,GAErC1gD,EAAIwwC,YAGJxwC,EAAIuwC,YAAcs/B,EAAWnlF,KAAKgO,QAAQ9D,MAAM0B,UAAUD,OAASE,EAAQ7L,KAAKgO,QAAQ9D,MAAM2B,MAAMF,OAAS3L,KAAKgO,QAAQ9D,MAAMyB,OAGhI2J,EAAI6wC,UAAYg/B,EAAWnlF,KAAKgO,QAAQ9D,MAAM0B,UAAUF,WAAaG,EAAQ7L,KAAKgO,QAAQ9D,MAAM2B,MAAMH,WAAa1L,KAAKgO,QAAQ9D,MAAMwB,WAGtI4J,EAAIo7B,KAAK1wC,KAAKkG,KAAO,GAAMoP,EAAIkwC,UAAWxlD,KAAKsG,IAAM,GAAMgP,EAAIkwC,UAAWxlD,KAAKoQ,MAAQkF,EAAIkwC,UAAWxlD,KAAKqQ,OAASiF,EAAIkwC,WACxHlwC,EAAI0kC,OAGJ1kC,EAAI8gH,OAEApgE,EAAc,IAChBh2D,KAAKq2H,mBAAmB/gH,EAAKJ,GAE7BI,EAAI2kC,SAEJj6C,KAAKs2H,oBAAoBhhH,EAAKJ,IAEhCI,EAAIihH,UAEJjhH,EAAI8wC,YAGNpmD,KAAK04H,qBAAqBpjH,EAAKJ,GAE/BlV,KAAK24H,gBAAgBrjH,EAAKyf,EAAGpG,EAAGw2D,EAAUt5E,GAE1C7L,KAAK4uH,kBAAkB75F,EAAGpG,MAG5BpnB,IAAK,oBACLhF,MAAO,SAA2BwyB,EAAGpG,GACnC3uB,KAAK6uH,SACL7uH,KAAKkG,KAAO6uB,EAAI/0B,KAAKoQ,MAAQ,EAC7BpQ,KAAKsG,IAAMqoB,EAAI3uB,KAAKqQ,OAAS,EAE7BrQ,KAAK8rH,YAAYxlH,IAAMtG,KAAKsG,IAC5BtG,KAAK8rH,YAAY5lH,KAAOlG,KAAKkG,KAC7BlG,KAAK8rH,YAAY1lH,MAAQpG,KAAKkG,KAAOlG,KAAKoQ,MAC1CpQ,KAAK8rH,YAAYrtE,OAASz+C,KAAKsG,IAAMtG,KAAKqQ,WAEfxM,KAAvB7D,KAAKgO,QAAQoiC,OAAuBpwC,KAAKqtH,YAAYl9E,KAAK//B,MAAQ,IACpEpQ,KAAK8rH,YAAY5lH,KAAOzD,KAAKL,IAAIpC,KAAK8rH,YAAY5lH,KAAMlG,KAAKqtH,YAAYl9E,KAAKjqC,MAC9ElG,KAAK8rH,YAAY1lH,MAAQ3D,KAAKJ,IAAIrC,KAAK8rH,YAAY1lH,MAAOpG,KAAKqtH,YAAYl9E,KAAKjqC,KAAOlG,KAAKqtH,YAAYl9E,KAAK//B,OAC7GpQ,KAAK8rH,YAAYrtE,OAASh8C,KAAKJ,IAAIrC,KAAK8rH,YAAYrtE,OAAQz+C,KAAK8rH,YAAYrtE,OAASz+C,KAAK83H,iBAI/FvwH,IAAK,mBACLhF,MAAO,SAA0B+S,EAAKynD,GACpC,MAAO/8D,MAAK44H,kBAAkBtjH,EAAKynD,OAGhCorD,GACPsP,EAA2B,QAE7B73H,GAAiB,QAAIuoH,GAIjB,SAAUtoH,EAAQD,EAASM,GAgC/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GA5BzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAI8yH,GAAkBn1H,EAAoB,KAEtCo1H,EAAmBz0H,EAAuBw0H,GAE1CxjC,EAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAEvCwjC,EAA8Br1H,EAAoB,KAElDs1H,EAA8B30H,EAAuB00H,GAErDE,EAAav1H,EAAoB,KAEjCw1H,EAAa70H,EAAuB40H,GAEpCoD,EAAc34H,EAAoB,KAElC44H,EAAcj4H,EAAuBg4H,GAIrCjM,EAAS,SAAUmM,GAGrB,QAASnM,GAAO5+G,EAAS2C,EAAM08G,GAE7B,OADA,EAAIv7B,EAA0B,SAAG9xF,KAAM4sH,IAChC,EAAI4I,EAAqC,SAAGx1H,MAAO4sH,EAAOkJ,YAAa,EAAIR,EAA0B,SAAG1I,IAASrsH,KAAKP,KAAMgO,EAAS2C,EAAM08G,IAcpJ,OAlBA,EAAIqI,EAAoB,SAAG9I,EAAQmM,IAOnC,EAAI/mC,EAAuB,SAAG46B,IAC5BrlH,IAAK,OACLhF,MAAO,SAAc+S,EAAKyf,EAAGpG,EAAGw2D,EAAUt5E,EAAOqJ,GAC/ClV,KAAKg5H,WAAW1jH,EAAK,SAAU,EAAGyf,EAAGpG,EAAGw2D,EAAUt5E,EAAOqJ,MAG3D3N,IAAK,mBACLhF,MAAO,SAA0B+S,EAAKynD,GACpC,MAAO/8D,MAAK44H,kBAAkBtjH,EAAKynD,OAGhC6vD,GACPkM,EAAqB,QAEvBl5H,GAAiB,QAAIgtH,GAIjB,SAAU/sH,EAAQD,EAASM,GAgC/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GA5BzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAI8yH,GAAkBn1H,EAAoB,KAEtCo1H,EAAmBz0H,EAAuBw0H,GAE1CxjC,EAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAEvCwjC,EAA8Br1H,EAAoB,KAElDs1H,EAA8B30H,EAAuB00H,GAErDE,EAAav1H,EAAoB,KAEjCw1H,EAAa70H,EAAuB40H,GAEpCoD,EAAc34H,EAAoB,KAElC44H,EAAcj4H,EAAuBg4H,GAIrChM,EAAO,SAAUkM,GAGnB,QAASlM,GAAK7+G,EAAS2C,EAAM08G,GAE3B,OADA,EAAIv7B,EAA0B,SAAG9xF,KAAM6sH,IAChC,EAAI2I,EAAqC,SAAGx1H,MAAO6sH,EAAKiJ,YAAa,EAAIR,EAA0B,SAAGzI,IAAOtsH,KAAKP,KAAMgO,EAAS2C,EAAM08G,IAchJ,OAlBA,EAAIqI,EAAoB,SAAG7I,EAAMkM,IAOjC,EAAI/mC,EAAuB,SAAG66B,IAC5BtlH,IAAK,OACLhF,MAAO,SAAc+S,EAAKyf,EAAGpG,EAAGw2D,EAAUt5E,EAAOqJ,GAC/ClV,KAAKg5H,WAAW1jH,EAAK,OAAQ,EAAGyf,EAAGpG,EAAGw2D,EAAUt5E,EAAOqJ,MAGzD3N,IAAK,mBACLhF,MAAO,SAA0B+S,EAAKynD,GACpC,MAAO/8D,MAAK44H,kBAAkBtjH,EAAKynD,OAGhC8vD,GACPiM,EAAqB,QAEvBl5H,GAAiB,QAAIitH,GAIjB,SAAUhtH,EAAQD,EAASM,GAgC/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GA5BzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAI8yH,GAAkBn1H,EAAoB,KAEtCo1H,EAAmBz0H,EAAuBw0H,GAE1CxjC,EAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAEvCwjC,EAA8Br1H,EAAoB,KAElDs1H,EAA8B30H,EAAuB00H,GAErDE,EAAav1H,EAAoB,KAEjCw1H,EAAa70H,EAAuB40H,GAEpCE,EAAaz1H,EAAoB,KAEjC01H,EAAa/0H,EAAuB80H,GAIpC7I,EAAO,SAAU+I,GAGnB,QAAS/I,GAAK9+G,EAAS2C,EAAM08G,IAC3B,EAAIv7B,EAA0B,SAAG9xF,KAAM8sH,EAEvC,IAAI1zB,IAAQ,EAAIo8B,EAAqC,SAAGx1H,MAAO8sH,EAAKgJ,YAAa,EAAIR,EAA0B,SAAGxI,IAAOvsH,KAAKP,KAAMgO,EAAS2C,EAAM08G,GAGnJ,OADAj0B,GAAM28B,YAAY1I,GACXj0B,EAgDT,OAxDA,EAAIs8B,EAAoB,SAAG5I,EAAM+I,IAWjC,EAAI7jC,EAAuB,SAAG86B,IAC5BvlH,IAAK,SACLhF,MAAO,SAAgB+S,EAAK6vE,EAAUt5E,GAChC7L,KAAKkrH,aAAa/lC,EAAUt5E,KAC9B7L,KAAKg2H,SAAWh2H,KAAKqtH,YAAY4I,YAAY3gH,EAAK6vE,EAAUt5E,GAC5D7L,KAAKoQ,MAAQpQ,KAAKg2H,SAAS5lH,MAAQpQ,KAAKulD,OAAOn/C,MAAQpG,KAAKulD,OAAOr/C,KACnElG,KAAKqQ,OAASrQ,KAAKg2H,SAAS3lH,OAASrQ,KAAKulD,OAAOj/C,IAAMtG,KAAKulD,OAAO9G,OACnEz+C,KAAK6pD,OAAS,GAAM7pD,KAAKoQ,UAI7B7I,IAAK,OACLhF,MAAO,SAAc+S,EAAKyf,EAAGpG,EAAGw2D,EAAUt5E,EAAOqJ,GAC/ClV,KAAK6uH,OAAOv5G,EAAK6vE,EAAUt5E,GAC3B7L,KAAKkG,KAAO6uB,EAAI/0B,KAAKoQ,MAAQ,EAC7BpQ,KAAKsG,IAAMqoB,EAAI3uB,KAAKqQ,OAAS,EAG7BrQ,KAAKk2H,aAAa5gH,EAAKJ,GACvBlV,KAAKqtH,YAAYnxB,KAAK5mF,EAAKtV,KAAKkG,KAAOlG,KAAKg2H,SAAS5lH,MAAQ,EAAIpQ,KAAKulD,OAAOr/C,KAAMlG,KAAKsG,IAAMtG,KAAKg2H,SAAS3lH,OAAS,EAAIrQ,KAAKulD,OAAOj/C,IAAK6+E,EAAUt5E,GAGpJ7L,KAAKm2H,cAAc7gH,EAAKJ,GAExBlV,KAAK4uH,kBAAkB75F,EAAGpG,EAAGrZ,EAAK6vE,EAAUt5E,MAG9CtE,IAAK,oBACLhF,MAAO,SAA2BwyB,EAAGpG,EAAGrZ,EAAK6vE,EAAUt5E,GACrD7L,KAAK6uH,OAAOv5G,EAAK6vE,EAAUt5E,GAE3B7L,KAAKkG,KAAO6uB,EAAI/0B,KAAKoQ,MAAQ,EAC7BpQ,KAAKsG,IAAMqoB,EAAI3uB,KAAKqQ,OAAS,EAE7BrQ,KAAK8rH,YAAYxlH,IAAMtG,KAAKsG,IAC5BtG,KAAK8rH,YAAY5lH,KAAOlG,KAAKkG,KAC7BlG,KAAK8rH,YAAY1lH,MAAQpG,KAAKkG,KAAOlG,KAAKoQ,MAC1CpQ,KAAK8rH,YAAYrtE,OAASz+C,KAAKsG,IAAMtG,KAAKqQ,UAG5C9I,IAAK,mBACLhF,MAAO,SAA0B+S,EAAKynD,GACpC,MAAO/8D,MAAK44H,kBAAkBtjH,EAAKynD,OAGhC+vD,GACP8I,EAAoB,QAEtBh2H,GAAiB,QAAIktH,GAIjB,SAAUjtH,EAAQD,EAASM,GAgC/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GA5BzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAI8yH,GAAkBn1H,EAAoB,KAEtCo1H,EAAmBz0H,EAAuBw0H,GAE1CxjC,EAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAEvCwjC,EAA8Br1H,EAAoB,KAElDs1H,EAA8B30H,EAAuB00H,GAErDE,EAAav1H,EAAoB,KAEjCw1H,EAAa70H,EAAuB40H,GAEpCoD,EAAc34H,EAAoB,KAElC44H,EAAcj4H,EAAuBg4H,GAIrC9L,EAAW,SAAUgM,GAGvB,QAAShM,GAAS/+G,EAAS2C,EAAM08G,GAE/B,OADA,EAAIv7B,EAA0B,SAAG9xF,KAAM+sH,IAChC,EAAIyI,EAAqC,SAAGx1H,MAAO+sH,EAAS+I,YAAa,EAAIR,EAA0B,SAAGvI,IAAWxsH,KAAKP,KAAMgO,EAAS2C,EAAM08G,IAcxJ,OAlBA,EAAIqI,EAAoB,SAAG3I,EAAUgM,IAOrC,EAAI/mC,EAAuB,SAAG+6B,IAC5BxlH,IAAK,OACLhF,MAAO,SAAc+S,EAAKyf,EAAGpG,EAAGw2D,EAAUt5E,EAAOqJ,GAC/ClV,KAAKg5H,WAAW1jH,EAAK,WAAY,EAAGyf,EAAGpG,EAAGw2D,EAAUt5E,EAAOqJ,MAG7D3N,IAAK,mBACLhF,MAAO,SAA0B+S,EAAKynD,GACpC,MAAO/8D,MAAK44H,kBAAkBtjH,EAAKynD,OAGhCgwD,GACP+L,EAAqB,QAEvBl5H,GAAiB,QAAImtH,GAIjB,SAAUltH,EAAQD,EAASM,GAgC/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GA5BzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAI8yH,GAAkBn1H,EAAoB,KAEtCo1H,EAAmBz0H,EAAuBw0H,GAE1CxjC,EAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAEvCwjC,EAA8Br1H,EAAoB,KAElDs1H,EAA8B30H,EAAuB00H,GAErDE,EAAav1H,EAAoB,KAEjCw1H,EAAa70H,EAAuB40H,GAEpCoD,EAAc34H,EAAoB,KAElC44H,EAAcj4H,EAAuBg4H,GAIrC7L,EAAe,SAAU+L,GAG3B,QAAS/L,GAAah/G,EAAS2C,EAAM08G,GAEnC,OADA,EAAIv7B,EAA0B,SAAG9xF,KAAMgtH,IAChC,EAAIwI,EAAqC,SAAGx1H,MAAOgtH,EAAa8I,YAAa,EAAIR,EAA0B,SAAGtI,IAAezsH,KAAKP,KAAMgO,EAAS2C,EAAM08G,IAchK,OAlBA,EAAIqI,EAAoB,SAAG1I,EAAc+L,IAOzC,EAAI/mC,EAAuB,SAAGg7B,IAC5BzlH,IAAK,OACLhF,MAAO,SAAc+S,EAAKyf,EAAGpG,EAAGw2D,EAAUt5E,EAAOqJ,GAC/ClV,KAAKg5H,WAAW1jH,EAAK,eAAgB,EAAGyf,EAAGpG,EAAGw2D,EAAUt5E,EAAOqJ,MAGjE3N,IAAK,mBACLhF,MAAO,SAA0B+S,EAAKynD,GACpC,MAAO/8D,MAAK44H,kBAAkBtjH,EAAKynD,OAGhCiwD,GACP8L,EAAqB,QAEvBl5H,GAAiB,QAAIotH,GAIjB,SAAUntH,EAAQD,EAASM,GAgB/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAZzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAIsvF,GAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAIvCpxF,EAAOT,EAAoB,GAC3BmuC,EAAUnuC,EAAoB,IAC9BouC,EAAWpuC,EAAoB,IAE/Bo5H,EAAOp5H,EAAoB,KAAc,QACzCmpH,EAAQnpH,EAAoB,KAAc,QAE1Cy7G,EAAe,WACjB,QAASA,GAAahrG,EAAM4pG,EAAQhtC,GAClC,GAAI6rB,GAAQp5F,MAEZ,EAAI8xF,EAA0B,SAAG9xF,KAAM27G,GAEvC37G,KAAK2Q,KAAOA,EACZ3Q,KAAKu6G,OAASA,EACdv6G,KAAKutE,OAASA,EAGdvtE,KAAK2Q,KAAKupG,UAAUE,WAAap6G,KAAKgY,OAAOs/C,KAAKt3D,MAElDA,KAAKu5H,gBACH9oG,IAAK,SAAaloB,EAAOopC,GACvBynD,EAAM3oE,IAAIkhB,EAAOM,QAEnBC,OAAQ,SAAgB3pC,EAAOopC,GAC7BynD,EAAMlnD,OAAOP,EAAOM,QAEtByB,OAAQ,SAAgBnrC,EAAOopC,GAC7BynD,EAAM1lD,OAAO/B,EAAOM,SAIxBjyC,KAAKgO,WACLhO,KAAK0tE,gBACHs3C,QACExhG,IAAMtV,SAAS,EAAOsrH,YAAa,EAAGv0H,KAAM,SAC5C0J,QAAUT,SAAS,EAAOsrH,YAAa,EAAGv0H,KAAM,SAChDwe,MAAQvV,SAAS,EAAOsrH,YAAa,EAAGv0H,KAAM,UAEhDw0H,oBAAoB,EACpBvvH,OACEA,MAAO,UACP0B,UAAW,UACXC,MAAO,UACP8sD,QAAS,OACTxuD,QAAS,GAEXmtH,QAAQ,EACR7xE,MACEv7C,MAAO,UACPimC,KAAM,GACNs5E,KAAM,QACN/9G,WAAY,OACZwuC,YAAa,EACbwvE,YAAa,UACbnqC,MAAO,aACPqqC,OAAO,EACPD,QAAS,EACTE,MACEC,IAAK,QAEPC,UACED,IAAK,eAEPE,MACEF,IAAK,UAEPG,MACEH,IAAK,GACL35E,KAAM,GACNs5E,KAAM,cACNE,QAAS,IAGb9wC,QAAQ,EACR6gD,WAAY,IACZtpF,UAAOvsC,GACPqmH,oBAAoB,EACpBtmH,WAAQC,GACRs4F,SAAS,EACTkuB,SACEjoH,IAAK,EACLC,IAAK,GACL+tC,OACEliC,SAAS,EACT9L,IAAK,GACLC,IAAK,GACLioH,WAAY,GACZC,cAAe,GAEjBC,sBAAuB,SAA+BpoH,EAAKC,EAAKC,EAAOC,GACrE,GAAIF,IAAQD,EACV,MAAO,EAEP,IAAII,GAAQ,GAAKH,EAAMD,EACvB,OAAOK,MAAKJ,IAAI,GAAIE,EAAQH,GAAOI,KAIzCm3H,eAAgB,IAChBC,kBAAmB,GACnBnP,QACEv8G,SAAS,EACThE,MAAO,kBACPimC,KAAM,GACNpb,EAAG,EACHpG,EAAG,GAELkrG,QACE3rH,SAAS,EACTjJ,KAAM,UACN60H,eAAgB,OAChBC,UAAW,IAEb38C,UAAOv5E,GACPuM,MAAO,EACP7N,UAAOsB,IAGTlD,EAAKC,OAAOZ,KAAKgO,QAAShO,KAAK0tE,gBAE/B1tE,KAAKs6G,qBA+SP,OA5SA,EAAItoB,EAAuB,SAAG2pB,IAC5Bp0G,IAAK,qBACLhF,MAAO,WACL,GAAIk4F,GAASz6F,IAGbA,MAAK2Q,KAAK49D,QAAQl9B,GAAG,6BAA8B,SAAUpsC,GAC9C,YAATA,IACFA,EAAO,aAET,IAAI+0H,IAAa,CACjB,KAAK,GAAI5d,KAAU3hB,GAAO9pF,KAAK2oG,MAC7B,GAAI7e,EAAO9pF,KAAK2oG,MAAMh2G,eAAe84G,GAAS,CAC5C,GAAIyC,GAAOpkB,EAAO9pF,KAAK2oG,MAAM8C,GACzB6d,EAAWx/B,EAAO9pF,KAAK6jB,KAAK8kF,MAAMh9E,MAAM8/E,EAI5C,QAAiBv4G,KAAbo2H,EAAwB,CAC1B,GAAIC,GAAcD,EAASJ,WACPh2H,KAAhBq2H,IAC0B,IAAxBA,EAAYhsH,SAAyC,YAArBgsH,EAAYj1H,WACjCpB,KAAToB,EACF45G,EAAK7tE,YAAa6oF,QAAQ,IAE1Bhb,EAAK7tE,YAAa6oF,QAAU50H,KAAMA,KAEpC+0H,GAAa,KAMJ,IAAfA,GACFv/B,EAAO9pF,KAAK49D,QAAQrhB,KAAK,kBAK7BltD,KAAK2Q,KAAK49D,QAAQl9B,GAAG,eAAgB,WACnCopD,EAAO0/B,mBAITn6H,KAAK2Q,KAAK49D,QAAQl9B,GAAG,eAAgBrxC,KAAKy1C,QAAQ6hB,KAAKt3D,OACvDA,KAAK2Q,KAAK49D,QAAQl9B,GAAG,UAAWrxC,KAAKy1C,QAAQ6hB,KAAKt3D,OAClDA,KAAK2Q,KAAK49D,QAAQl9B,GAAG,UAAW,WAC9B1wC,EAAKuG,QAAQuzF,EAAO8+B,eAAgB,SAAUpyH,EAAUoB,GAClDkyF,EAAO9pF,KAAK6jB,KAAK8kF,OAAO7e,EAAO9pF,KAAK6jB,KAAK8kF,MAAM9nE,IAAIjpC,EAAOpB,WAEzDszF,GAAO9pF,KAAKupG,UAAUE,iBACtB3f,GAAO8+B,eAAe9oG,UACtBgqE,GAAO8+B,eAAernF,aACtBuoD,GAAO8+B,eAAe7lF,aACtB+mD,GAAO8+B,oBAIlBhyH,IAAK,aACLhF,MAAO,SAAoByL,GAEzB,GADAhO,KAAKk6H,YAAclsH,MACHnK,KAAZmK,EAAuB,CAEzBsrH,EAAKvO,aAAa/qH,KAAKgO,QAASA,EAGhC,IAAIy9G,IAAc,CAClB,QAAuB5nH,KAAnBmK,EAAQ6rH,OACV,IAAK,GAAIzd,KAAUp8G,MAAK2Q,KAAK2oG,MACvBt5G,KAAK2Q,KAAK2oG,MAAMh2G,eAAe84G,KACjCqP,EAAczrH,KAAK2Q,KAAK2oG,MAAM8C,GAAQge,kBAAoB3O,EAMhE,QAAqB5nH,KAAjBmK,EAAQy3C,KAAoB,CAE9B4jE,EAAM0B,aAAa/qH,KAAKgO,QAAQy3C,KAAMz3C,EACtC,KAAK,GAAIqsH,KAAWr6H,MAAK2Q,KAAK2oG,MACxBt5G,KAAK2Q,KAAK2oG,MAAMh2G,eAAe+2H,IACjCr6H,KAAK2Q,KAAK2oG,MAAM+gB,GAASpP,wBAMRpnH,KAAnBmK,EAAQ6qE,YAA4Ch1E,KAApBmK,EAAQmuF,UAAyC,IAAhBsvB,GACnEzrH,KAAK2Q,KAAK49D,QAAQrhB,KAAK,oBAa7B3lD,IAAK,UACLhF,MAAO,SAAiB+2G,GACtB,GAAIze,GAAS76F,KAETorH,EAAYznH,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,IAAmBA,UAAU,GAE3E22H,EAAet6H,KAAK2Q,KAAK6jB,KAAK8kF,KAElC,IAAIA,YAAiBjrE,IAAWirE,YAAiBhrE,GAC/CtuC,KAAK2Q,KAAK6jB,KAAK8kF,MAAQA,MAClB,IAAIn1G,MAAMC,QAAQk1G,GACvBt5G,KAAK2Q,KAAK6jB,KAAK8kF,MAAQ,GAAIjrE,GAC3BruC,KAAK2Q,KAAK6jB,KAAK8kF,MAAM7oF,IAAI6oF,OACpB,CAAA,GAAKA,EAGV,KAAM,IAAI/0G,WAAU,4BAFpBvE,MAAK2Q,KAAK6jB,KAAK8kF,MAAQ,GAAIjrE,GAiB7B,GAXIisF,GAEF35H,EAAKuG,QAAQlH,KAAKu5H,eAAgB,SAAUpyH,EAAUoB,GACpD+xH,EAAa9oF,IAAIjpC,EAAOpB,KAK5BnH,KAAK2Q,KAAK2oG,SAGNt5G,KAAK2Q,KAAK6jB,KAAK8kF,MAAO,CAExB34G,EAAKuG,QAAQlH,KAAKu5H,eAAgB,SAAUpyH,EAAUoB,GACpDsyF,EAAOlqF,KAAK6jB,KAAK8kF,MAAMjoE,GAAG9oC,EAAOpB,IAInC,IAAIsrC,GAAMzyC,KAAK2Q,KAAK6jB,KAAK8kF,MAAMnmE,QAC/BnzC,MAAKywB,IAAIgiB,GAAK,IAGE,IAAd24E,GACFprH,KAAK2Q,KAAK49D,QAAQrhB,KAAK,mBAW3B3lD,IAAK,MACLhF,MAAO,SAAakwC,GAMlB,IAAK,GALD24E,GAAYznH,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,IAAmBA,UAAU,GAE3E21G,EAAQt5G,KAAK2Q,KAAK2oG,MAClBihB,EAAYv6H,KAAK2Q,KAAK6jB,KAAK8kF,MAEtBv1G,EAAI,EAAGA,EAAI0uC,EAAI7uC,OAAQG,IAAK,CACnC,GAAI1D,GAAKoyC,EAAI1uC,GAETy2H,EAAUlhB,EAAMj5G,EAChBm6H,IACFA,EAAQC,YAGV,IAAIjmG,GAAO+lG,EAAU9iH,IAAIpX,GAAMq6H,iBAAmB,GAClDphB,GAAMj5G,GAAML,KAAKgY,OAAOwc,IAGR,IAAd42F,GACFprH,KAAK2Q,KAAK49D,QAAQrhB,KAAK,mBAW3B3lD,IAAK,SACLhF,MAAO,SAAgBkwC,GAIrB,IAAK,GAHD6mE,GAAQt5G,KAAK2Q,KAAK2oG,MAClBihB,EAAYv6H,KAAK2Q,KAAK6jB,KAAK8kF,MAC3BmS,GAAc,EACT1nH,EAAI,EAAGA,EAAI0uC,EAAI7uC,OAAQG,IAAK,CACnC,GAAI1D,GAAKoyC,EAAI1uC,GACTywB,EAAO+lG,EAAU9iH,IAAIpX,GACrBw+G,EAAOvF,EAAMj5G,OACJwD,KAATg7G,GAEFA,EAAK4b,aACLhP,EAAc5M,EAAK7tE,WAAWxc,IAASi3F,EACvC5M,EAAK8b,YAGL36H,KAAK2Q,KAAK2oG,MAAMj5G,GAAML,KAAKgY,OAAOwc,GAClCi3F,GAAc,IAIE,IAAhBA,EACFzrH,KAAK2Q,KAAK49D,QAAQrhB,KAAK,gBAEvBltD,KAAK2Q,KAAK49D,QAAQrhB,KAAK,mBAW3B3lD,IAAK,SACLhF,MAAO,SAAgBkwC,GAErB,IAAK,GADD6mE,GAAQt5G,KAAK2Q,KAAK2oG,MACbv1G,EAAI,EAAGA,EAAI0uC,EAAI7uC,OAAQG,IAAK,CACnC,GAAI1D,GAAKoyC,EAAI1uC,GACT86G,EAAOvF,EAAMj5G,OACJwD,KAATg7G,IACFA,EAAK+b,UACL/b,EAAK4b,mBACEnhB,GAAMj5G,IAIjBL,KAAK2Q,KAAK49D,QAAQrhB,KAAK,mBAGzB3lD,IAAK,UACLhF,MAAO,WACL,GAAI+2G,GAAQt5G,KAAK2Q,KAAK2oG,KACtB,KAAK,GAAI8C,KAAU9C,GAAO,CACxB,GAAIuF,OAAOh7G,EACPy1G,GAAMh2G,eAAe84G,KACvByC,EAAOvF,EAAM8C,GAEf,IAAI5nF,GAAOx0B,KAAK2Q,KAAK6jB,KAAK8kF,MAAMh9E,MAAM8/E,OACzBv4G,KAATg7G,OAA+Bh7G,KAAT2wB,GACxBqqF,EAAK7tE,WAAWxc,OAKtBjtB,IAAK,SACLhF,MAAO,SAAgBs2D,GACrB,MAAO,IAAIygE,GAAKzgE,EAAY74D,KAAK2Q,KAAM3Q,KAAKgO,QAAShO,KAAK0tE,eAAgB1tE,KAAKk6H,gBASjF3yH,IAAK,iBACLhF,MAAO,WACL,GAAIlC,GACA+4G,EAAQp5G,KAAK2Q,KAAKyoG,MAClBE,EAAQt5G,KAAK2Q,KAAK2oG,KAEtB,KAAKj5G,IAAM+4G,GACLA,EAAM91G,eAAejD,KACvB+4G,EAAM/4G,GAAIi5G,SAId,KAAKj5G,IAAMi5G,GACT,GAAIA,EAAMh2G,eAAejD,GAAK,CAC5B,GAAIw+G,GAAOvF,EAAMj5G,EACjBw+G,GAAKp7F,KAAO,KACZo7F,EAAKr7F,GAAK,KACVq7F,EAAK8b,cAKXpzH,IAAK,oBACLhF,MAAO,SAA2B65G,GAChC,GAAI2P,KACJ,QAAgCloH,KAA5B7D,KAAK2Q,KAAK2oG,MAAM8C,GAAuB,CACzC,GAAIyC,GAAO7+G,KAAK2Q,KAAK2oG,MAAM8C,OACPv4G,KAAhBg7G,EAAKqN,QACPH,EAASlnH,KAAKg6G,EAAKqN,YAEHroH,KAAdg7G,EAAKoN,MACPF,EAASlnH,KAAKg6G,EAAKoN,MAGvB,MAAOF,OAGJpQ,IAGT/7G,GAAiB,QAAI+7G,GAIjB,SAAU97G,EAAQD,EAASM,GA4B/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAxBzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAI4a,GAAajd,EAAoB,IAEjC+wC,EAAcpwC,EAAuBsc,GAErChc,EAAUjB,EAAoB,IAE9BkB,EAAWP,EAAuBM,GAElCI,EAAWrB,EAAoB,IAE/BsB,EAAWX,EAAuBU,GAElCswF,EAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAIvCpxF,EAAOT,EAAoB,GAE3BmpH,EAAQnpH,EAAoB,KAAc,QAC1C26H,EAAkB36H,EAAoB,KAAc,QACpD46H,EAAoB56H,EAAoB,KAAc,QACtD66H,EAAmB76H,EAAoB,KAAc,QACrD86H,EAAe96H,EAAoB,KAAc,QAkBjDo5H,EAAO,WACT,QAASA,GAAKtrH,EAAS2C,EAAM1C,EAAey/D,EAAgBwsD,GAG1D,IAFA,EAAIpoC,EAA0B,SAAG9xF,KAAMs5H,OAE1Bz1H,KAAT8M,EACF,KAAM,kBAER3Q,MAAKgO,QAAUrN,EAAK8M,aAAaQ,GACjCjO,KAAKiO,cAAgBA,EACrBjO,KAAK0tE,eAAiBA,EACtB1tE,KAAKk6H,YAAcA,EACnBl6H,KAAK2Q,KAAOA,EAGZ3Q,KAAKK,OAAKwD,GACV7D,KAAKksH,WAASroH,GACd7D,KAAKisH,SAAOpoH,GACZ7D,KAAKmlF,UAAW,EAChBnlF,KAAK6L,OAAQ,EACb7L,KAAKyvH,YAAa,EAElBzvH,KAAKi7H,UAAYj7H,KAAKgO,QAAQoC,MAC9BpQ,KAAKmtH,aAAentH,KAAKgO,QAAQy3C,KAAKtV,KAEtCnwC,KAAKyjB,SAAO5f,GACZ7D,KAAKwjB,OAAK3f,GAEV7D,KAAKk7H,aAAWr3H,GAEhB7D,KAAKm7H,WAAY,EAEjBn7H,KAAKqtH,YAAc,GAAIhE,GAAMrpH,KAAK2Q,KAAM3Q,KAAKgO,SAAS,GACtDhO,KAAKgxC,WAAWhjC,GAulBlB,OA7kBA,EAAIgkF,EAAuB,SAAGsnC,IAC5B/xH,IAAK,aACLhF,MAAO,SAAoByL,GACzB,GAAKA,EAAL,CAIAsrH,EAAKvO,aAAa/qH,KAAKgO,QAASA,GAAS,EAAMhO,KAAKiO,mBAEjCpK,KAAfmK,EAAQ3N,KACVL,KAAKK,GAAK2N,EAAQ3N,QAECwD,KAAjBmK,EAAQyV,OACVzjB,KAAKksH,OAASl+G,EAAQyV,UAEL5f,KAAfmK,EAAQwV,KACVxjB,KAAKisH,KAAOj+G,EAAQwV,QAEA3f,KAAlBmK,EAAQovE,QACVp9E,KAAKo9E,MAAQpvE,EAAQovE,WAEDv5E,KAAlBmK,EAAQzL,QACVyL,EAAQzL,MAAQg5B,WAAWvtB,EAAQzL,QAGrCvC,KAAKwtH,SAASx/G,GAGdhO,KAAKirH,kBAAkBj9G,GACvBhO,KAAKqtH,YAAYK,eAAe1tH,KAAKk6H,YAAalsH,EAAShO,KAAK0tE,eAEhE,IAAI+9C,GAAczrH,KAAKo6H,gBAYvB,OATAp6H,MAAKo7H,wBAGLp7H,KAAK26H,cAEkB92H,KAAnBmK,EAAQ6qE,YAA4Ch1E,KAApBmK,EAAQmuF,UAC1CsvB,GAAc,GAGTA,MAGTlkH,IAAK,WACLhF,MAAO,SAAkByL,GACvBhO,KAAK+tH,SAAU,CAEf,IAAI98G,IAAQjD,EAAShO,KAAKgO,QAAShO,KAAKk6H,YAAal6H,KAAK0tE,gBAEtDsgD,EAASrtH,EAAKqQ,QAAQC,EAAM,SAChC,IAAsB,iBAAX+8G,GACThuH,KAAK+tH,QAAUC,MACV,IAAyF,gBAAlE,KAAXA,EAAyB,aAAc,EAAIxsH,EAAkB,SAAGwsH,IAAuB,CACxG,GAAIqN,GAAa16H,EAAKqQ,QAAQC,GAAO,SAAU,QACrB,kBAAfoqH,IAAkD,kBAAfA,KAC5Cr7H,KAAK+tH,QAAUsN,OAKrB9zH,IAAK,sBACLhF,MAAO,WACL,GAAI+4H,IAAqC,IAA3Bt7H,KAAKgO,QAAQg3G,OAAOxhG,KAAkD,IAAnCxjB,KAAKgO,QAAQg3G,OAAOxhG,GAAGtV,QACpEqtH,GAAyC,IAA7Bv7H,KAAKgO,QAAQg3G,OAAOvhG,OAAsD,IAArCzjB,KAAKgO,QAAQg3G,OAAOvhG,KAAKvV,QAC1EstH,GAA6C,IAA/Bx7H,KAAKgO,QAAQg3G,OAAOr2G,SAA0D,IAAvC3O,KAAKgO,QAAQg3G,OAAOr2G,OAAOT,QAChFutH,EAAgBz7H,KAAKgO,QAAQ9D,MAAMyuD,QACnCzjD,GACFomH,QAASA,EACTI,aAAc17H,KAAKgO,QAAQg3G,OAAOxhG,GAAGg2G,YACrCmC,YAAa37H,KAAKgO,QAAQg3G,OAAOxhG,GAAGve,KACpCu2H,YAAaA,EACbI,iBAAkB57H,KAAKgO,QAAQg3G,OAAOr2G,OAAO6qH,YAC7CqC,gBAAiB77H,KAAKgO,QAAQg3G,OAAOr2G,OAAO1J,KAC5Cs2H,UAAWA,EACXO,eAAgB97H,KAAKgO,QAAQg3G,OAAOvhG,KAAK+1G,YACzCuC,cAAe/7H,KAAKgO,QAAQg3G,OAAOvhG,KAAKxe,KACxCw0H,mBAAoBz5H,KAAKgO,QAAQyrH,mBACjCvvH,MAAOuxH,MAAgB53H,GAAY7D,KAAKgO,QAAQ9D,MAAMA,MACtDuxH,cAAeA,EACftxH,QAASnK,KAAKgO,QAAQ9D,MAAMC,QAC5B0uE,OAAQ74E,KAAKgO,QAAQ6qE,OACrBj1E,OAAQ5D,KAAKgO,QAAQpK,OACrB6mH,OAAQzqH,KAAKgO,QAAQy8G,OAAOv8G,QAC5BggH,YAAaluH,KAAKgO,QAAQy8G,OAAOvgH,MACjCikH,WAAYnuH,KAAKgO,QAAQy8G,OAAOt6E,KAChCi+E,QAASpuH,KAAKgO,QAAQy8G,OAAO11F,EAC7Bs5F,QAASruH,KAAKgO,QAAQy8G,OAAO97F,EAC7B2oG,OAAQt3H,KAAKgO,QAAQspH,OACrBlnH,MAAOpQ,KAAKgO,QAAQoC,MAEtB,IAAIpQ,KAAKmlF,UAAYnlF,KAAK6L,MACxB,IAAqB,IAAjB7L,KAAK+tH,SACP,GAAI/tH,KAAKmlF,SAAU,CACjB,GAAI62C,GAAgBh8H,KAAKgO,QAAQ2rH,cACJ,mBAAlBqC,GACT9mH,EAAO9E,MAAQ4rH,EAAc9mH,EAAO9E,OACF,gBAAlB4rH,KAChB9mH,EAAO9E,OAAS4rH,GAElB9mH,EAAO9E,MAAQ3N,KAAKJ,IAAI6S,EAAO9E,MAAO,GAAMpQ,KAAK2Q,KAAK0pG,KAAK73G,OAC3D0S,EAAOhL,MAAQlK,KAAKgO,QAAQ9D,MAAM0B,UAClCsJ,EAAOu1G,OAASzqH,KAAKgO,QAAQy8G,OAAOv8G,YAC/B,IAAIlO,KAAK6L,MAAO,CACrB,GAAI6tH,GAAa15H,KAAKgO,QAAQ0rH,UACJ,mBAAfA,GACTxkH,EAAO9E,MAAQspH,EAAWxkH,EAAO9E,OACF,gBAAfspH,KAChBxkH,EAAO9E,OAASspH,GAElBxkH,EAAO9E,MAAQ3N,KAAKJ,IAAI6S,EAAO9E,MAAO,GAAMpQ,KAAK2Q,KAAK0pG,KAAK73G,OAC3D0S,EAAOhL,MAAQlK,KAAKgO,QAAQ9D,MAAM2B,MAClCqJ,EAAOu1G,OAASzqH,KAAKgO,QAAQy8G,OAAOv8G,aAEL,kBAAjBlO,MAAK+tH,UACrB/tH,KAAK+tH,QAAQ74G,EAAQlV,KAAKgO,QAAQ3N,GAAIL,KAAKmlF,SAAUnlF,KAAK6L,WACrChI,KAAjBqR,EAAOhL,QACTgL,EAAOumH,eAAgB,IAEH,IAAlBvmH,EAAOu1G,SACLv1G,EAAOg5G,cAAgBluH,KAAKgO,QAAQy8G,OAAOvgH,OAASgL,EAAOi5G,aAAenuH,KAAKgO,QAAQy8G,OAAOt6E,MAAQj7B,EAAOk5G,UAAYpuH,KAAKgO,QAAQy8G,OAAO11F,GAAK7f,EAAOm5G,UAAYruH,KAAKgO,QAAQy8G,OAAO97F,IAC3LzZ,EAAOu1G,QAAS,SAKtBv1G,GAAOu1G,OAASzqH,KAAKgO,QAAQy8G,OAAOv8G,QACpCgH,EAAO9E,MAAQ3N,KAAKJ,IAAI6S,EAAO9E,MAAO,GAAMpQ,KAAK2Q,KAAK0pG,KAAK73G,MAE7D,OAAO0S,MAQT3N,IAAK,oBACLhF,MAAO,SAA2ByL,GAChChO,KAAKqtH,YAAYr8E,WAAWhxC,KAAKgO,SAAS,OACRnK,KAA9B7D,KAAKqtH,YAAYH,WACnBltH,KAAKmtH,aAAentH,KAAKqtH,YAAYH,UAEvCltH,KAAKqtH,YAAYiB,UAAUtuH,KAAKk6H,YAAalsH,EAAShO,KAAK0tE,gBAC3D1tE,KAAKqtH,YAAYG,SAASxtH,KAAKk6H,YAAalsH,EAAShO,KAAK0tE,mBAS5DnmE,IAAK,iBACLhF,MAAO,WACL,GAAIs3H,GAAS75H,KAAKgO,QAAQ6rH,OACtBpO,GAAc,EACdwQ,GAAe,CA0BnB,YAzBsBp4H,KAAlB7D,KAAKk7H,YACHl7H,KAAKk7H,mBAAoBJ,KAAwC,IAAnBjB,EAAO3rH,SAAoC,YAAhB2rH,EAAO50H,MAAsBjF,KAAKk7H,mBAAoBL,KAAsC,IAAnBhB,EAAO3rH,SAAoC,gBAAhB2rH,EAAO50H,MAA0BjF,KAAKk7H,mBAAoBH,KAAuC,IAAnBlB,EAAO3rH,SAAoC,YAAhB2rH,EAAO50H,MAAsC,gBAAhB40H,EAAO50H,MAA0BjF,KAAKk7H,mBAAoBF,KAAwC,IAAxBnB,EAAO50H,KAAKiJ,WAC3Y+tH,GAAe,IAEI,IAAjBA,IACFxQ,EAAczrH,KAAK46H,aAGF,IAAjBqB,GACqB,IAAnBpC,EAAO3rH,QACW,YAAhB2rH,EAAO50H,MACTwmH,GAAc,EACdzrH,KAAKk7H,SAAW,GAAIJ,GAAkB96H,KAAKgO,QAAShO,KAAK2Q,KAAM3Q,KAAKqtH,cAC3C,gBAAhBwM,EAAO50H,KAChBjF,KAAKk7H,SAAW,GAAIL,GAAgB76H,KAAKgO,QAAShO,KAAK2Q,KAAM3Q,KAAKqtH,aAElErtH,KAAKk7H,SAAW,GAAIH,GAAiB/6H,KAAKgO,QAAShO,KAAK2Q,KAAM3Q,KAAKqtH,aAGrErtH,KAAKk7H,SAAW,GAAIF,GAAah7H,KAAKgO,QAAShO,KAAK2Q,KAAM3Q,KAAKqtH,aAIjErtH,KAAKk7H,SAASlqF,WAAWhxC,KAAKgO,SAEzBy9G,KAQTlkH,IAAK,UACLhF,MAAO,WACLvC,KAAKy6H,aAELz6H,KAAKyjB,KAAOzjB,KAAK2Q,KAAKyoG,MAAMp5G,KAAKksH,aAAWroH,GAC5C7D,KAAKwjB,GAAKxjB,KAAK2Q,KAAKyoG,MAAMp5G,KAAKisH,WAASpoH,GACxC7D,KAAKm7H,cAA0Bt3H,KAAd7D,KAAKyjB,UAAkC5f,KAAZ7D,KAAKwjB,IAE1B,IAAnBxjB,KAAKm7H,WACPn7H,KAAKyjB,KAAKy4G,WAAWl8H,MACrBA,KAAKwjB,GAAG04G,WAAWl8H,QAEfA,KAAKyjB,MACPzjB,KAAKyjB,KAAK04G,WAAWn8H,MAEnBA,KAAKwjB,IACPxjB,KAAKwjB,GAAG24G,WAAWn8H,OAIvBA,KAAKk7H,SAASP,aAQhBpzH,IAAK,aACLhF,MAAO,WACDvC,KAAKyjB,OACPzjB,KAAKyjB,KAAK04G,WAAWn8H,MACrBA,KAAKyjB,SAAO5f,IAEV7D,KAAKwjB,KACPxjB,KAAKwjB,GAAG24G,WAAWn8H,MACnBA,KAAKwjB,OAAK3f,IAGZ7D,KAAKm7H,WAAY,KAUnB5zH,IAAK,WACLhF,MAAO,WACL,MAAOvC,MAAKo9E,SASd71E,IAAK,aACLhF,MAAO,WACL,MAAOvC,MAAKmlF,YASd59E,IAAK,WACLhF,MAAO,WACL,MAAOvC,MAAKgO,QAAQzL,SAYtBgF,IAAK,gBACLhF,MAAO,SAAuBH,EAAKC,EAAKC,GACtC,OAA2BuB,KAAvB7D,KAAKgO,QAAQzL,MAAqB,CACpC,GAAIC,GAAQxC,KAAKgO,QAAQq8G,QAAQG,sBAAsBpoH,EAAKC,EAAKC,EAAOtC,KAAKgO,QAAQzL,OACjF65H,EAAYp8H,KAAKgO,QAAQq8G,QAAQhoH,IAAMrC,KAAKgO,QAAQq8G,QAAQjoH,GAChE,KAA2C,IAAvCpC,KAAKgO,QAAQq8G,QAAQj6E,MAAMliC,QAAkB,CAC/C,GAAIwgH,GAAW1uH,KAAKgO,QAAQq8G,QAAQj6E,MAAM/tC,IAAMrC,KAAKgO,QAAQq8G,QAAQj6E,MAAMhuC,GAC3EpC,MAAKgO,QAAQy3C,KAAKtV,KAAOnwC,KAAKgO,QAAQq8G,QAAQj6E,MAAMhuC,IAAMI,EAAQksH,EAEpE1uH,KAAKgO,QAAQoC,MAAQpQ,KAAKgO,QAAQq8G,QAAQjoH,IAAMI,EAAQ45H,MAExDp8H,MAAKgO,QAAQoC,MAAQpQ,KAAKi7H,UAC1Bj7H,KAAKgO,QAAQy3C,KAAKtV,KAAOnwC,KAAKmtH,YAGhCntH,MAAKo7H,wBACLp7H,KAAKirH,uBAGP1jH,IAAK,wBACLhF,MAAO,WACkC,kBAA5BvC,MAAKgO,QAAQ0rH,WACtB15H,KAAKk7H,SAASxB,WAAa15H,KAAKgO,QAAQ0rH,WAAW15H,KAAKgO,QAAQoC,OAEhEpQ,KAAKk7H,SAASxB,WAAa15H,KAAKgO,QAAQ0rH,WAAa15H,KAAKgO,QAAQoC,MAEzB,kBAAhCpQ,MAAKgO,QAAQ2rH,eACtB35H,KAAKk7H,SAASvB,eAAiB35H,KAAKgO,QAAQ2rH,eAAe35H,KAAKgO,QAAQoC,OAExEpQ,KAAKk7H,SAASvB,eAAiB35H,KAAKgO,QAAQ2rH,eAAiB35H,KAAKgO,QAAQoC,SAY9E7I,IAAK,OACLhF,MAAO,SAAc+S,GACnB,GAAIJ,GAASlV,KAAK2uH,qBAClB,KAAIz5G,EAAO2jE,OAAX,CAKA,GAAIwjD,GAAUr8H,KAAKk7H,SAASoB,aACxBC,IAGJv8H,MAAKk7H,SAASsB,UAAYx8H,KAAKk7H,SAASz3G,KACxCzjB,KAAKk7H,SAASuB,QAAUz8H,KAAKk7H,SAAS13G,GAGlCtO,EAAOqmH,YACTgB,EAAU94G,KAAOzjB,KAAKk7H,SAASwB,aAAapnH,EAAK,OAAQ+mH,EAASr8H,KAAKmlF,SAAUnlF,KAAK6L,MAAOqJ,IAC3D,IAA9BA,EAAOukH,qBAA8Bz5H,KAAKk7H,SAASsB,UAAYD,EAAU94G,KAAKpO,OAEhFH,EAAOomH,UACTiB,EAAU/4G,GAAKxjB,KAAKk7H,SAASwB,aAAapnH,EAAK,KAAM+mH,EAASr8H,KAAKmlF,SAAUnlF,KAAK6L,MAAOqJ,IACvD,IAA9BA,EAAOukH,qBAA8Bz5H,KAAKk7H,SAASuB,QAAUF,EAAU/4G,GAAGnO,OAI5EH,EAAOsmH,cACTe,EAAU5tH,OAAS3O,KAAKk7H,SAASwB,aAAapnH,EAAK,SAAU+mH,EAASr8H,KAAKmlF,SAAUnlF,KAAK6L,MAAOqJ,IAInGlV,KAAKk7H,SAASyB,SAASrnH,EAAKJ,EAAQlV,KAAKmlF,SAAUnlF,KAAK6L,MAAOwwH,GAC/Dr8H,KAAK48H,WAAWtnH,EAAKinH,EAAWrnH,GAChClV,KAAK68H,UAAUvnH,EAAK+mH,OAGtB90H,IAAK,aACLhF,MAAO,SAAoB+S,EAAKinH,EAAWrnH,GACrCA,EAAOqmH,WACTv7H,KAAKk7H,SAAS4B,cAAcxnH,EAAKJ,EAAQlV,KAAKmlF,SAAUnlF,KAAK6L,MAAO0wH,EAAU94G,MAE5EvO,EAAOsmH,aACTx7H,KAAKk7H,SAAS4B,cAAcxnH,EAAKJ,EAAQlV,KAAKmlF,SAAUnlF,KAAK6L,MAAO0wH,EAAU5tH,QAE5EuG,EAAOomH,SACTt7H,KAAKk7H,SAAS4B,cAAcxnH,EAAKJ,EAAQlV,KAAKmlF,SAAUnlF,KAAK6L,MAAO0wH,EAAU/4G,OAIlFjc,IAAK,YACLhF,MAAO,SAAmB+S,EAAK+mH,GAC7B,OAA2Bx4H,KAAvB7D,KAAKgO,QAAQoiC,MAAqB,CAEpC,GAAI2sF,GAAQ/8H,KAAKyjB,KACbu5G,EAAQh9H,KAAKwjB,GACb2hE,EAAWnlF,KAAKyjB,KAAK0hE,UAAYnlF,KAAKwjB,GAAG2hE,UAAYnlF,KAAKmlF,QAC9D,IAAI43C,EAAM18H,IAAM28H,EAAM38H,GAAI,CACxBL,KAAKqtH,YAAY+B,aAAc,CAC/B,IAAIx0G,GAAQ5a,KAAKk7H,SAAS+B,SAAS,GAAKZ,EACxC/mH,GAAI8gH,OAG4B,eAA5Bp2H,KAAKgO,QAAQy3C,KAAK85B,QACpBv/E,KAAKqtH,YAAY+D,mBAAmB97G,EAAK6vE,EAAUnlF,KAAK6L,MAAO+O,EAAMma,EAAGna,EAAM+T,GAC9ErZ,EAAI4nH,UAAUtiH,EAAMma,EAAG/0B,KAAKqtH,YAAYl9E,KAAKm/E,OAC7CtvH,KAAKm9H,yBAAyB7nH,IAIhCtV,KAAKqtH,YAAYnxB,KAAK5mF,EAAKsF,EAAMma,EAAGna,EAAM+T,EAAGw2D,EAAUnlF,KAAK6L,OAC5DyJ,EAAIihH,cACC,CAELv2H,KAAKqtH,YAAY+B,aAAc,CAC/B,IAAIr6F,GAAGpG,EACHk7B,EAAS7pD,KAAKgO,QAAQ4rH,iBACtBmD,GAAMpY,MAAMv0G,MAAQ2sH,EAAMpY,MAAMt0G,QAClC0kB,EAAIgoG,EAAMhoG,EAAwB,GAApBgoG,EAAMpY,MAAMv0G,MAC1Bue,EAAIouG,EAAMpuG,EAAIk7B,IAEd90B,EAAIgoG,EAAMhoG,EAAI80B,EACdl7B,EAAIouG,EAAMpuG,EAAyB,GAArBouG,EAAMpY,MAAMt0G,QAE5BuK,EAAQ5a,KAAKo9H,eAAeroG,EAAGpG,EAAGk7B,EAAQ,MAC1C7pD,KAAKqtH,YAAYnxB,KAAK5mF,EAAKsF,EAAMma,EAAGna,EAAM+T,EAAGw2D,EAAUnlF,KAAK6L,YAYlEtE,IAAK,oBACLhF,MAAO,SAA2BzB,GAChC,GAAId,KAAKm7H,UAAW,CAClB,GACIkC,GAAQr9H,KAAKyjB,KAAKsR,EAClBuoG,EAAQt9H,KAAKyjB,KAAKkL,EAClB4uG,EAAMv9H,KAAKwjB,GAAGuR,EACdyoG,EAAMx9H,KAAKwjB,GAAGmL,EACd8uG,EAAO38H,EAAIoF,KACXw3H,EAAO58H,EAAIwF,GAIf,OAFWtG,MAAKk7H,SAASyC,kBAAkBN,EAAOC,EAAOC,EAAKC,EAAKC,EAAMC,GAR3D,GAYd,OAAO,KAWXn2H,IAAK,2BACLhF,MAAO,SAAkC+S,GACvC,GAAIuoC,GAAK79C,KAAKyjB,KAAKkL,EAAI3uB,KAAKwjB,GAAGmL,EAC3BivB,EAAK59C,KAAKyjB,KAAKsR,EAAI/0B,KAAKwjB,GAAGuR,EAC3B6oG,EAAiBn7H,KAAKq8D,MAAMjhB,EAAID,IAGhCggF,GAAkB,GAAKhgF,EAAK,GAAKggF,EAAiB,GAAKhgF,EAAK,KAC9DggF,GAAkCn7H,KAAKunD,IAGzC10C,EAAIuoH,OAAOD,MAcbr2H,IAAK,iBACLhF,MAAO,SAAwBwyB,EAAGpG,EAAGk7B,EAAQ+zB,GAC3C,GAAI7gB,GAAqB,EAAb6gB,EAAiBn7E,KAAKunD,EAClC,QACEj1B,EAAGA,EAAI80B,EAASpnD,KAAKw6C,IAAI8f,GACzBpuC,EAAGA,EAAIk7B,EAASpnD,KAAKs6C,IAAIggB,OAI7Bx1D,IAAK,SACLhF,MAAO,WACLvC,KAAKmlF,UAAW,KAGlB59E,IAAK,WACLhF,MAAO,WACLvC,KAAKmlF,UAAW,KASlB59E,IAAK,UACLhF,MAAO,WACL,MAAOvC,MAAKk7H,SAASN,eAGvBrzH,IAAK,eACLhF,MAAO,SAAsBusH,EAAeC,GAC1C,GAAIrrH,GAAgBC,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,IAAmBA,UAAU,GAC/EsK,EAAgBtK,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,MAE/E2J,GAAU,qBAAsB,KAAM,OAAQ,SAAU,aAAc,QAAS,qBAAsB,SAAU,OAAQ,UAAW,UAAW,UAAW,iBAAkB,oBAAqB,KAAM,QAAS,QAAS,QA4B3N,IAzBA3M,EAAK2D,oBAAoBgJ,EAAQwhH,EAAeC,EAAYrrH,GAE5D/C,EAAKmN,aAAaghH,EAAeC,EAAY,SAAUrrH,EAAeuK,GACtEtN,EAAKmN,aAAaghH,EAAeC,EAAY,SAAUrrH,EAAeuK,OAE5CpK,KAAtBkrH,EAAWuI,QAA8C,OAAtBvI,EAAWuI,OAChDxI,EAAcwI,OAASvI,EAAWuI,QACP,IAAlB5zH,GAAgD,OAAtBqrH,EAAWuI,SAC9CxI,EAAcwI,QAAS,EAAIl2H,EAAkB,SAAG6M,EAAcqpH,aAIrCzzH,KAAvBkrH,EAAW1E,SAAgD,OAAvB0E,EAAW1E,aAClBxmH,KAA3BkrH,EAAW1E,QAAQjoH,MACrB0sH,EAAczE,QAAQjoH,IAAM2sH,EAAW1E,QAAQjoH,SAElByB,KAA3BkrH,EAAW1E,QAAQhoH,MACrBysH,EAAczE,QAAQhoH,IAAM0sH,EAAW1E,QAAQhoH,KAEjD1B,EAAKmN,aAAaghH,EAAczE,QAAS0E,EAAW1E,QAAS,QAAS3mH,EAAeuK,EAAco8G,WACxE,IAAlB3mH,GAAiD,OAAvBqrH,EAAW1E,UAC9CyE,EAAczE,SAAU,EAAIjpH,EAAkB,SAAG6M,EAAco8G,cAIvCxmH,KAAtBkrH,EAAW/J,QAA8C,OAAtB+J,EAAW/J,OAChD,GAAiC,gBAAtB+J,GAAW/J,OAAqB,CACzC,GAAIA,GAAS+J,EAAW/J,OAAOj9F,aAC/B+mG,GAAc9J,OAAOxhG,GAAGtV,SAAmC,GAAzB82G,EAAOpgH,QAAQ,MACjDkqH,EAAc9J,OAAOr2G,OAAOT,SAAuC,GAA7B82G,EAAOpgH,QAAQ,UACrDkqH,EAAc9J,OAAOvhG,KAAKvV,SAAqC,GAA3B82G,EAAOpgH,QAAQ,YAC9C,CAAA,GAAoD,YAAhD,EAAIpD,EAAkB,SAAGutH,EAAW/J,QAK7C,KAAM,IAAI3gH,OAAM,iGAAkG,EAAI4sC,EAAqB,SAAG89E,EAAW/J,QAJzJrkH,GAAKmN,aAAaghH,EAAc9J,OAAQ+J,EAAW/J,OAAQ,KAAMthH,EAAeuK,EAAc+2G,QAC9FrkH,EAAKmN,aAAaghH,EAAc9J,OAAQ+J,EAAW/J,OAAQ,SAAUthH,EAAeuK,EAAc+2G,QAClGrkH,EAAKmN,aAAaghH,EAAc9J,OAAQ+J,EAAW/J,OAAQ,OAAQthH,EAAeuK,EAAc+2G,aAIvE,IAAlBthH,GAAgD,OAAtBqrH,EAAW/J,SAC9C8J,EAAc9J,QAAS,EAAI5jH,EAAkB,SAAG6M,EAAc+2G,QAIhE,QAAyBnhH,KAArBkrH,EAAW7kH,OAA4C,OAArB6kH,EAAW7kH,MAG/C,GADA4kH,EAAc5kH,MAAQvJ,EAAK+D,cAAeoqH,EAAc5kH,OAAO,GAC3DvJ,EAAK+B,SAASqsH,EAAW7kH,OAC3B4kH,EAAc5kH,MAAMA,MAAQ6kH,EAAW7kH,MACvC4kH,EAAc5kH,MAAM0B,UAAYmjH,EAAW7kH,MAC3C4kH,EAAc5kH,MAAM2B,MAAQkjH,EAAW7kH,MACvC4kH,EAAc5kH,MAAMyuD,SAAU,MACzB,CACL,GAAImlE,IAAgB,MACWj6H,KAA3BkrH,EAAW7kH,MAAMA,QACnB4kH,EAAc5kH,MAAMA,MAAQ6kH,EAAW7kH,MAAMA,MAAM4zH,GAAgB,OAElCj6H,KAA/BkrH,EAAW7kH,MAAM0B,YACnBkjH,EAAc5kH,MAAM0B,UAAYmjH,EAAW7kH,MAAM0B,UAAUkyH,GAAgB,OAE9Cj6H,KAA3BkrH,EAAW7kH,MAAM2B,QACnBijH,EAAc5kH,MAAM2B,MAAQkjH,EAAW7kH,MAAM2B,MAAMiyH,GAAgB,OAEpCj6H,KAA7BkrH,EAAW7kH,MAAMyuD,UACnBm2D,EAAc5kH,MAAMyuD,QAAUo2D,EAAW7kH,MAAMyuD,aAEhB90D,KAA7BkrH,EAAW7kH,MAAMC,UACnB2kH,EAAc5kH,MAAMC,QAAU1H,KAAKL,IAAI,EAAGK,KAAKJ,IAAI,EAAG0sH,EAAW7kH,MAAMC,eAGxCtG,KAA7BkrH,EAAW7kH,MAAMyuD,UAA2C,IAAlBmlE,IAC5ChP,EAAc5kH,MAAMyuD,SAAU,QAGP,IAAlBj1D,GAA+C,OAArBqrH,EAAW7kH,QAC9C4kH,EAAc5kH,MAAQvJ,EAAK8M,aAAaQ,EAAc/D,YAIhCrG,KAApBkrH,EAAWtpE,MAA0C,OAApBspE,EAAWtpE,KAC9C4jE,EAAM0B,aAAa+D,EAAcrpE,KAAMspE,IACZ,IAAlBrrH,GAA8C,OAApBqrH,EAAWtpE,OAC9CqpE,EAAcrpE,KAAO9kD,EAAK8M,aAAaQ,EAAcw3C,WAIpD6zE,IAGT15H,GAAiB,QAAI05H,GAIjB,SAAUz5H,EAAQD,EAASM,GAoC/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAhCzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAI0sH,GAAkB/uH,EAAoB,KAEtCgvH,EAAkBruH,EAAuBouH,GAEzCoG,EAAkBn1H,EAAoB,KAEtCo1H,EAAmBz0H,EAAuBw0H,GAE1CxjC,EAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAEvCwjC,EAA8Br1H,EAAoB,KAElDs1H,EAA8B30H,EAAuB00H,GAErDE,EAAav1H,EAAoB,KAEjCw1H,EAAa70H,EAAuB40H,GAEpCsI,EAAwB79H,EAAoB,KAE5C89H,EAAwBn9H,EAAuBk9H,GAI/ClD,EAAkB,SAAUoD,GAG9B,QAASpD,GAAgB7sH,EAAS2C,EAAM08G,GAEtC,OADA,EAAIv7B,EAA0B,SAAG9xF,KAAM66H,IAChC,EAAIrF,EAAqC,SAAGx1H,MAAO66H,EAAgB/E,YAAa,EAAIR,EAA0B,SAAGuF,IAAkBt6H,KAAKP,KAAMgO,EAAS2C,EAAM08G,IA6GtK,OAjHA,EAAIqI,EAAoB,SAAGmF,EAAiBoD,IAc5C,EAAIjsC,EAAuB,SAAG6oC,IAC5BtzH,IAAK,QACLhF,MAAO,SAAe+S,EAAKJ,EAAQgpH,GAEjC,GAAIC,GAAOD,EAAS,GAChBE,EAAOF,EAAS,EAGpB5oH,GAAIwwC,YACJxwC,EAAIywC,OAAO/lD,KAAKw8H,UAAUznG,EAAG/0B,KAAKw8H,UAAU7tG,OAG3B9qB,KAAbq6H,OAAqCr6H,KAAXs6H,EAAKppG,EACjCzf,EAAI0wC,OAAOhmD,KAAKy8H,QAAQ1nG,EAAG/0B,KAAKy8H,QAAQ9tG,GAExCrZ,EAAI6qG,cAAcge,EAAKppG,EAAGopG,EAAKxvG,EAAGyvG,EAAKrpG,EAAGqpG,EAAKzvG,EAAG3uB,KAAKy8H,QAAQ1nG,EAAG/0B,KAAKy8H,QAAQ9tG,GAGjF3uB,KAAKk2H,aAAa5gH,EAAKJ,GACvBI,EAAI2kC,SACJj6C,KAAKm2H,cAAc7gH,EAAKJ,MAG1B3N,IAAK,qBACLhF,MAAO,WACL,GAAIq7C,GAAK59C,KAAKyjB,KAAKsR,EAAI/0B,KAAKwjB,GAAGuR,EAC3B8oB,EAAK79C,KAAKyjB,KAAKkL,EAAI3uB,KAAKwjB,GAAGmL,EAE3B0vG,MAAK,GACLC,MAAK,GACLhd,MAAK,GACLC,MAAK,GACLwY,EAAY/5H,KAAKgO,QAAQ6rH,OAAOE,SAepC,QAZKt3H,KAAKwiB,IAAI24B,GAAMn7C,KAAKwiB,IAAI44B,KAA8C,IAAvC79C,KAAKgO,QAAQ6rH,OAAOC,gBAAkE,eAAvC95H,KAAKgO,QAAQ6rH,OAAOC,iBAA2E,aAAvC95H,KAAKgO,QAAQ6rH,OAAOC,gBAC7JwE,EAAKt+H,KAAKyjB,KAAKkL,EACf4yF,EAAKvhH,KAAKwjB,GAAGmL,EACb0vG,EAAKr+H,KAAKyjB,KAAKsR,EAAIglG,EAAYn8E,EAC/B0jE,EAAKthH,KAAKwjB,GAAGuR,EAAIglG,EAAYn8E,IAE7B0gF,EAAKt+H,KAAKyjB,KAAKkL,EAAIorG,EAAYl8E,EAC/B0jE,EAAKvhH,KAAKwjB,GAAGmL,EAAIorG,EAAYl8E,EAC7BwgF,EAAKr+H,KAAKyjB,KAAKsR,EACfusF,EAAKthH,KAAKwjB,GAAGuR,KAGLA,EAAGspG,EAAI1vG,EAAG2vG,IAAQvpG,EAAGusF,EAAI3yF,EAAG4yF,OAGxCh6G,IAAK,aACLhF,MAAO,WACL,MAAOvC,MAAKu+H,wBAGdh3H,IAAK,sBACLhF,MAAO,SAA6Bi8H,EAAUlpH,GAC5C,MAAOtV,MAAKy+H,0BAA0BD,EAAUlpH,MAGlD/N,IAAK,qBACLhF,MAAO,SAA4B87H,EAAIC,EAAIhd,EAAIC,EAAImd,EAAIC,GACrD,GAAIC,GAAOj7H,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,GAAK3D,KAAKu+H,qBAChFM,GAAQ,EAAI3P,EAAyB,SAAG0P,EAAM,GAC9CT,EAAOU,EAAM,GACbT,EAAOS,EAAM,EAGjB,OAAO7+H,MAAK8+H,yBAAyBT,EAAIC,EAAIhd,EAAIC,EAAImd,EAAIC,EAAIR,EAAMC,MAYrE72H,IAAK,WACLhF,MAAO,SAAkBq7E,GACvB,GAAImhD,GAAQp7H,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,GAAK3D,KAAKu+H,qBACjFS,GAAQ,EAAI9P,EAAyB,SAAG6P,EAAO,GAC/CZ,EAAOa,EAAM,GACbZ,EAAOY,EAAM,GAEb/xH,EAAI2wE,EACJqhD,IAQJ,OAPAA,GAAI,GAAKx8H,KAAKgnB,IAAI,EAAIxc,EAAG,GACzBgyH,EAAI,GAAK,EAAIhyH,EAAIxK,KAAKgnB,IAAI,EAAIxc,EAAG,GACjCgyH,EAAI,GAAK,EAAIx8H,KAAKgnB,IAAIxc,EAAG,IAAM,EAAIA,GACnCgyH,EAAI,GAAKx8H,KAAKgnB,IAAIxc,EAAG,IAIZ8nB,EAHDkqG,EAAI,GAAKj/H,KAAKw8H,UAAUznG,EAAIkqG,EAAI,GAAKd,EAAKppG,EAAIkqG,EAAI,GAAKb,EAAKrpG,EAAIkqG,EAAI,GAAKj/H,KAAKy8H,QAAQ1nG,EAG/EpG,EAFPswG,EAAI,GAAKj/H,KAAKw8H,UAAU7tG,EAAIswG,EAAI,GAAKd,EAAKxvG,EAAIswG,EAAI,GAAKb,EAAKzvG,EAAIswG,EAAI,GAAKj/H,KAAKy8H,QAAQ9tG,OAK3FksG,GACPmD,EAA+B,QAEjCp+H,GAAiB,QAAIi7H,GAIjB,SAAUh7H,EAAQD,EAASM,GAgC/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GA5BzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAI8yH,GAAkBn1H,EAAoB,KAEtCo1H,EAAmBz0H,EAAuBw0H,GAE1CxjC,EAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAEvCwjC,EAA8Br1H,EAAoB,KAElDs1H,EAA8B30H,EAAuB00H,GAErDE,EAAav1H,EAAoB,KAEjCw1H,EAAa70H,EAAuB40H,GAEpCyJ,EAAmBh/H,EAAoB,KAEvCi/H,EAAmBt+H,EAAuBq+H,GAI1CE,EAAsB,SAAUC,GAGlC,QAASD,GAAoBpxH,EAAS2C,EAAM08G,GAE1C,OADA,EAAIv7B,EAA0B,SAAG9xF,KAAMo/H,IAChC,EAAI5J,EAAqC,SAAGx1H,MAAOo/H,EAAoBtJ,YAAa,EAAIR,EAA0B,SAAG8J,IAAsB7+H,KAAKP,KAAMgO,EAAS2C,EAAM08G,IAkD9K,OAtDA,EAAIqI,EAAoB,SAAG0J,EAAqBC,IAsBhD,EAAIrtC,EAAuB,SAAGotC,IAC5B73H,IAAK,2BACLhF,MAAO,SAAkC87H,EAAIC,EAAIhd,EAAIC,EAAImd,EAAIC,EAAIR,EAAMC,GAErE,GAAIkB,GAAc,IACdhlF,MAAW,GACXv2C,MAAI,GACJkJ,MAAI,GACJ8nB,MAAI,GACJpG,MAAI,GACJ4wG,EAAQlB,EACRmB,EAAQlB,EACRW,GAAO,EAAG,EAAG,EAAG,EACpB,KAAKl7H,EAAI,EAAGA,EAAI,GAAIA,IAClBkJ,EAAI,GAAMlJ,EACVk7H,EAAI,GAAKx8H,KAAKgnB,IAAI,EAAIxc,EAAG,GACzBgyH,EAAI,GAAK,EAAIhyH,EAAIxK,KAAKgnB,IAAI,EAAIxc,EAAG,GACjCgyH,EAAI,GAAK,EAAIx8H,KAAKgnB,IAAIxc,EAAG,IAAM,EAAIA,GACnCgyH,EAAI,GAAKx8H,KAAKgnB,IAAIxc,EAAG,GACrB8nB,EAAIkqG,EAAI,GAAKZ,EAAKY,EAAI,GAAKd,EAAKppG,EAAIkqG,EAAI,GAAKb,EAAKrpG,EAAIkqG,EAAI,GAAK3d,EAC/D3yF,EAAIswG,EAAI,GAAKX,EAAKW,EAAI,GAAKd,EAAKxvG,EAAIswG,EAAI,GAAKb,EAAKzvG,EAAIswG,EAAI,GAAK1d,EAC3Dx9G,EAAI,IACNu2C,EAAWt6C,KAAKy/H,mBAAmBF,EAAOC,EAAOzqG,EAAGpG,EAAG+vG,EAAIC,GAC3DW,EAAchlF,EAAWglF,EAAchlF,EAAWglF,GAEpDC,EAAQxqG,EACRyqG,EAAQ7wG,CAGV,OAAO2wG,OAGJF,GACPD,EAA0B,QAE5Bv/H,GAAiB,QAAIw/H,GAIjB,SAAUv/H,EAAQD,EAASM,GAgC/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GA5BzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAI8yH,GAAkBn1H,EAAoB,KAEtCo1H,EAAmBz0H,EAAuBw0H,GAE1CxjC,EAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAEvCwjC,EAA8Br1H,EAAoB,KAElDs1H,EAA8B30H,EAAuB00H,GAErDE,EAAav1H,EAAoB,KAEjCw1H,EAAa70H,EAAuB40H,GAEpCiK,EAAax/H,EAAoB,KAEjCy/H,EAAa9+H,EAAuB6+H,GAIpCE,EAAiB,SAAUC,GAG7B,QAASD,GAAe5xH,EAAS2C,EAAM08G,GAErC,OADA,EAAIv7B,EAA0B,SAAG9xF,KAAM4/H,IAChC,EAAIpK,EAAqC,SAAGx1H,MAAO4/H,EAAe9J,YAAa,EAAIR,EAA0B,SAAGsK,IAAiBr/H,KAAKP,KAAMgO,EAAS2C,EAAM08G,IA4GpK,OAhHA,EAAIqI,EAAoB,SAAGkK,EAAgBC,IAsB3C,EAAI7tC,EAAuB,SAAG4tC,IAC5Br4H,IAAK,4BACLhF,MAAO,SAAmCi8H,EAAUlpH,GAClD,GAMIwF,GAAKiiD,EAAOyxD,EAAkBsR,EAAiBC,EAN/C1D,EAAU14H,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,GAAK3D,KAAKu+H,qBAGnF/vH,EAAY,EACZC,EAAM,EACNC,EAAO,EAGP6+B,EAAOvtC,KAAKwjB,GACZC,GAAO,CAMX,KALI+6G,EAASn+H,KAAOL,KAAKyjB,KAAKpjB,KAC5BktC,EAAOvtC,KAAKyjB,KACZA,GAAO,GAGFhV,GAAOC,GAAQF,EAbF,IAa6B,CAC/C,GAAIG,GAAwB,IAAdF,EAAMC,EAOpB,IALAoM,EAAM9a,KAAKi9H,SAAStuH,EAAQ0tH,GAC5Bt/D,EAAQt6D,KAAKq8D,MAAMvxB,EAAK5e,EAAI7T,EAAI6T,EAAG4e,EAAKxY,EAAIja,EAAIia,GAChDy5F,EAAmBjhF,EAAKihF,iBAAiBl5G,EAAKynD,GAC9C+iE,EAAkBr9H,KAAKusD,KAAKvsD,KAAKgnB,IAAI3O,EAAIia,EAAIwY,EAAKxY,EAAG,GAAKtyB,KAAKgnB,IAAI3O,EAAI6T,EAAI4e,EAAK5e,EAAG,IACnFoxG,EAAavR,EAAmBsR,EAC5Br9H,KAAKwiB,IAAI86G,GAhBC,GAiBZ,KACSA,GAAa,GAET,IAATt8G,EACFhV,EAAME,EAEND,EAAOC,GAGI,IAAT8U,EACF/U,EAAOC,EAEPF,EAAME,EAIVH,IAIF,MAFAsM,GAAI7N,EAAI0B,EAEDmM,KAiBTvT,IAAK,2BACLhF,MAAO,SAAkC87H,EAAIC,EAAIhd,EAAIC,EAAImd,EAAIC,EAAIqB,GAE/D,GAAIV,GAAc,IACdhlF,MAAW,GACXv2C,MAAI,GACJkJ,MAAI,GACJ8nB,MAAI,GACJpG,MAAI,GACJ4wG,EAAQlB,EACRmB,EAAQlB,CACZ,KAAKv6H,EAAI,EAAGA,EAAI,GAAIA,IAClBkJ,EAAI,GAAMlJ,EACVgxB,EAAItyB,KAAKgnB,IAAI,EAAIxc,EAAG,GAAKoxH,EAAK,EAAIpxH,GAAK,EAAIA,GAAK+yH,EAAIjrG,EAAItyB,KAAKgnB,IAAIxc,EAAG,GAAKq0G,EACzE3yF,EAAIlsB,KAAKgnB,IAAI,EAAIxc,EAAG,GAAKqxH,EAAK,EAAIrxH,GAAK,EAAIA,GAAK+yH,EAAIrxG,EAAIlsB,KAAKgnB,IAAIxc,EAAG,GAAKs0G,EACrEx9G,EAAI,IACNu2C,EAAWt6C,KAAKy/H,mBAAmBF,EAAOC,EAAOzqG,EAAGpG,EAAG+vG,EAAIC,GAC3DW,EAAchlF,EAAWglF,EAAchlF,EAAWglF,GAEpDC,EAAQxqG,EACRyqG,EAAQ7wG,CAGV,OAAO2wG,OAGJM,GACPD,EAAoB,QAEtB//H,GAAiB,QAAIggI,GAIjB,SAAU//H,EAAQD,EAASM,GAoB/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAhBzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAI0sH,GAAkB/uH,EAAoB,KAEtCgvH,EAAkBruH,EAAuBouH,GAEzCp9B,EAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAIvCpxF,EAAOT,EAAoB,GAE3B+/H,EAAW,WACb,QAASA,GAASjyH,EAAS2C,EAAM08G,IAC/B,EAAIv7B,EAA0B,SAAG9xF,KAAMigI,GAEvCjgI,KAAK2Q,KAAOA,EACZ3Q,KAAKqtH,YAAcA,EACnBrtH,KAAKgO,WACLhO,KAAKgxC,WAAWhjC,GAChBhO,KAAKkgI,YAAa,EAClBlgI,KAAKkK,SACLlK,KAAK25H,eAAiB,EACtB35H,KAAK05H,WAAa,IAClB15H,KAAKw8H,UAAYx8H,KAAKyjB,KACtBzjB,KAAKy8H,QAAUz8H,KAAKwjB,GAuhBtB,OAphBA,EAAIwuE,EAAuB,SAAGiuC,IAC5B14H,IAAK,UACLhF,MAAO,WACLvC,KAAKyjB,KAAOzjB,KAAK2Q,KAAKyoG,MAAMp5G,KAAKgO,QAAQyV,MACzCzjB,KAAKwjB,GAAKxjB,KAAK2Q,KAAKyoG,MAAMp5G,KAAKgO,QAAQwV,OAGzCjc,IAAK,UACLhF,MAAO,WACL,OAAO,KAGTgF,IAAK,aACLhF,MAAO,SAAoByL,GACzBhO,KAAKgO,QAAUA,EACfhO,KAAKyjB,KAAOzjB,KAAK2Q,KAAKyoG,MAAMp5G,KAAKgO,QAAQyV,MACzCzjB,KAAKwjB,GAAKxjB,KAAK2Q,KAAKyoG,MAAMp5G,KAAKgO,QAAQwV,IACvCxjB,KAAKK,GAAKL,KAAKgO,QAAQ3N,MAYzBkH,IAAK,WACLhF,MAAO,SAAkB+S,EAAKJ,EAAQiwE,EAAUt5E,EAAOwwH,GAErD/mH,EAAIuwC,YAAc7lD,KAAKmgI,SAAS7qH,EAAKJ,EAAQiwE,EAAUt5E,GACvDyJ,EAAIkwC,UAAYtwC,EAAO9E,OAED,IAAlB8E,EAAOoiH,OACTt3H,KAAKogI,gBAAgB9qH,EAAKJ,EAAQmnH,GAElCr8H,KAAKqgI,UAAU/qH,EAAKJ,EAAQmnH,MAIhC90H,IAAK,YACLhF,MAAO,SAAmB+S,EAAKJ,EAAQmnH,EAASG,EAAWC,GACzD,GAAIz8H,KAAKyjB,MAAQzjB,KAAKwjB,GAEpBxjB,KAAK0mD,MAAMpxC,EAAKJ,EAAQmnH,EAASG,EAAWC,OACvC,CACL,GAAI6D,GAAkBtgI,KAAKugI,eAAejrH,GACtCkrH,GAAkB,EAAItR,EAAyB,SAAGoR,EAAiB,GACnEvrG,EAAIyrG,EAAgB,GACpB7xG,EAAI6xG,EAAgB,GACpB32E,EAAS22E,EAAgB,EAE7BxgI,MAAKygI,QAAQnrH,EAAKJ,EAAQ6f,EAAGpG,EAAGk7B,OAIpCtiD,IAAK,kBACLhF,MAAO,SAAyB+S,EAAKJ,EAAQmnH,EAASG,EAAWC,GAC/DnnH,EAAI2vC,QAAU,OACd,IAAIu8D,IAAW,EAAG,EAMlB,KALqC,IAAjCr9G,MAAMC,QAAQ8Q,EAAOoiH,UACvB9V,EAAUtsG,EAAOoiH,YAIKzzH,KAApByR,EAAI+hH,YAA2B,CAQjC,GAPA/hH,EAAI8gH,OAGJ9gH,EAAI+hH,YAAY7V,GAChBlsG,EAAIorH,eAAiB,EAGjB1gI,KAAKyjB,MAAQzjB,KAAKwjB,GAEpBxjB,KAAK0mD,MAAMpxC,EAAKJ,EAAQmnH,OACnB,CACL,GAAIsE,GAAkB3gI,KAAKugI,eAAejrH,GACtCsrH,GAAkB,EAAI1R,EAAyB,SAAGyR,EAAiB,GACnE5rG,EAAI6rG,EAAgB,GACpBjyG,EAAIiyG,EAAgB,GACpB/2E,EAAS+2E,EAAgB,EAE7B5gI,MAAKygI,QAAQnrH,EAAKJ,EAAQ6f,EAAGpG,EAAGk7B,GAIlCv0C,EAAI+hH,aAAa,IACjB/hH,EAAIorH,eAAiB,EACrBprH,EAAIihH,cACC,CAEL,GAAIv2H,KAAKyjB,MAAQzjB,KAAKwjB,GAEpBlO,EAAI+rG,WAAWrhH,KAAKyjB,KAAKsR,EAAG/0B,KAAKyjB,KAAKkL,EAAG3uB,KAAKwjB,GAAGuR,EAAG/0B,KAAKwjB,GAAGmL,EAAG6yF,OAC1D,CACL,GAAIqf,GAAkB7gI,KAAKugI,eAAejrH,GACtCwrH,GAAkB,EAAI5R,EAAyB,SAAG2R,EAAiB,GACnEE,EAAKD,EAAgB,GACrBE,EAAKF,EAAgB,GACrBG,EAAUH,EAAgB,EAE9B9gI,MAAKygI,QAAQnrH,EAAKJ,EAAQ6rH,EAAIC,EAAIC,GAGpCjhI,KAAKk2H,aAAa5gH,EAAKJ,GAEvBI,EAAI2kC,SAGJj6C,KAAKm2H,cAAc7gH,EAAKJ,OAI5B3N,IAAK,qBACLhF,MAAO,SAA4Bi8H,EAAUlpH,EAAKtH,GAChD,MAAIhO,MAAKyjB,MAAQzjB,KAAKwjB,GACbxjB,KAAKkhI,oBAAoB1C,EAAUlpH,EAAKtH,GAExChO,KAAKmhI,0BAA0B3C,EAAUlpH,EAAKtH,MAIzDzG,IAAK,sBACLhF,MAAO,SAA6B+S,GAClC,GAAImO,MACAD,IACJ,IAAIxjB,KAAKyjB,MAAQzjB,KAAKwjB,GACpBC,EAAOzjB,KAAKkhI,oBAAoBlhI,KAAKyjB,KAAMnO,GAC3CkO,EAAKxjB,KAAKkhI,oBAAoBlhI,KAAKwjB,GAAIlO,OAClC,CACL,GAAI8rH,GAAkBphI,KAAKugI,eAAejrH,GACtC+rH,GAAkB,EAAInS,EAAyB,SAAGkS,EAAiB,GACnErsG,EAAIssG,EAAgB,GACpB1yG,EAAI0yG,EAAgB,EACXA,GAAgB,EAE7B59G,GAAOzjB,KAAKmhI,0BAA0BnhI,KAAKyjB,KAAMnO,GAAOyf,EAAGA,EAAGpG,EAAGA,EAAGlgB,IAAK,IAAMC,KAAM,GAAKkxB,WAAY,IACtGpc,EAAKxjB,KAAKmhI,0BAA0BnhI,KAAKyjB,KAAMnO,GAAOyf,EAAGA,EAAGpG,EAAGA,EAAGlgB,IAAK,GAAKC,KAAM,GAAKkxB,UAAW,IAEpG,OAASnc,KAAMA,EAAMD,GAAIA,MAG3Bjc,IAAK,iBACLhF,MAAO,SAAwB+S,GAC7B,GAAIyf,OAAI,GACJpG,MAAI,GACJ4e,EAAOvtC,KAAKyjB,KACZomC,EAAS7pD,KAAKgO,QAAQ4rH,iBAgB1B,YAdY/1H,KAARyR,OACuBzR,KAArB0pC,EAAKo3E,MAAMv0G,OACbm9B,EAAKo3E,MAAMkK,OAAOv5G,GAKlBi4B,EAAKo3E,MAAMv0G,MAAQm9B,EAAKo3E,MAAMt0G,QAChC0kB,EAAIwY,EAAKxY,EAAuB,GAAnBwY,EAAKo3E,MAAMv0G;qDACxBue,EAAI4e,EAAK5e,EAAIk7B,IAEb90B,EAAIwY,EAAKxY,EAAI80B,EACbl7B,EAAI4e,EAAK5e,EAAwB,GAApB4e,EAAKo3E,MAAMt0G,SAElB0kB,EAAGpG,EAAGk7B,MAchBtiD,IAAK,iBACLhF,MAAO,SAAwBwyB,EAAGpG,EAAGk7B,EAAQ+zB,GAC3C,GAAI7gB,GAAqB,EAAb6gB,EAAiBn7E,KAAKunD,EAClC,QACEj1B,EAAGA,EAAI80B,EAASpnD,KAAKw6C,IAAI8f,GACzBpuC,EAAGA,EAAIk7B,EAASpnD,KAAKs6C,IAAIggB,OAc7Bx1D,IAAK,4BACLhF,MAAO,SAAmCgrC,EAAMj4B,EAAKtH,GAkBnD,IAjBA,GAAI+mB,GAAI/mB,EAAQ+mB,EACZpG,EAAI3gB,EAAQ2gB,EACZlgB,EAAMT,EAAQS,IACdC,EAAOV,EAAQU,KACfkxB,EAAY5xB,EAAQ4xB,UAGpBpxB,EAAY,EACZq7C,EAAS7pD,KAAKgO,QAAQ4rH,kBACtB9+G,MAAM,GACNiiD,MAAQ,GACRyxD,MAAmB,GACnBsR,MAAkB,GAClBC,MAAa,GAEbpxH,EAAwB,IAAdF,EAAMC,GAEbD,GAAOC,GAAQF,EAXF,KAYlBG,EAAwB,IAAdF,EAAMC,GAEhBoM,EAAM9a,KAAKo9H,eAAeroG,EAAGpG,EAAGk7B,EAAQl7C,GACxCouD,EAAQt6D,KAAKq8D,MAAMvxB,EAAK5e,EAAI7T,EAAI6T,EAAG4e,EAAKxY,EAAIja,EAAIia,GAChDy5F,EAAmBjhF,EAAKihF,iBAAiBl5G,EAAKynD,GAC9C+iE,EAAkBr9H,KAAKusD,KAAKvsD,KAAKgnB,IAAI3O,EAAIia,EAAIwY,EAAKxY,EAAG,GAAKtyB,KAAKgnB,IAAI3O,EAAI6T,EAAI4e,EAAK5e,EAAG,IACnFoxG,EAAavR,EAAmBsR,IAC5Br9H,KAAKwiB,IAAI86G,GAXC,OAaHA,EAAa,EAElBngG,EAAY,EACdnxB,EAAME,EAEND,EAAOC,EAGLixB,EAAY,EACdlxB,EAAOC,EAEPF,EAAME,EAGVH,GAIF,OAFAsM,GAAI7N,EAAI0B,EAEDmM,KAWTvT,IAAK,eACLhF,MAAO,SAAsB4iF,EAAUt5E,GACrC,OAAiB,IAAbs5E,EACK1iF,KAAKJ,IAAIrC,KAAK25H,eAAgB,GAAM35H,KAAK2Q,KAAK0pG,KAAK73G,QAE5C,IAAVqJ,EACKpJ,KAAKJ,IAAIrC,KAAK05H,WAAY,GAAM15H,KAAK2Q,KAAK0pG,KAAK73G,OAE/CC,KAAKJ,IAAIrC,KAAKgO,QAAQoC,MAAO,GAAMpQ,KAAK2Q,KAAK0pG,KAAK73G,UAK/D+E,IAAK,WACLhF,MAAO,SAAkB+S,EAAKJ,EAAQiwE,EAAUt5E,GAC9C,IAA6B,IAAzBqJ,EAAOumH,cAAyB,CAElC,GAA6B,SAAzBvmH,EAAOumH,eAA4Bz7H,KAAKyjB,KAAKpjB,KAAOL,KAAKwjB,GAAGnjB,GAAI,CAClE,GAAIihI,GAAMhsH,EAAIisH,qBAAqBvhI,KAAKyjB,KAAKsR,EAAG/0B,KAAKyjB,KAAKkL,EAAG3uB,KAAKwjB,GAAGuR,EAAG/0B,KAAKwjB,GAAGmL,GAC5E6yG,MAAY,GACZC,MAAU,EAgBd,OAfAD,GAAYxhI,KAAKyjB,KAAKzV,QAAQ9D,MAAM0B,UAAUD,OAC9C81H,EAAUzhI,KAAKwjB,GAAGxV,QAAQ9D,MAAM0B,UAAUD,QAEf,IAAvB3L,KAAKyjB,KAAK0hE,WAA2C,IAArBnlF,KAAKwjB,GAAG2hE,UAC1Cq8C,EAAY7gI,EAAKsJ,gBAAgBjK,KAAKyjB,KAAKzV,QAAQ9D,MAAMyB,OAAQuJ,EAAO/K,SACxEs3H,EAAU9gI,EAAKsJ,gBAAgBjK,KAAKwjB,GAAGxV,QAAQ9D,MAAMyB,OAAQuJ,EAAO/K,WACpC,IAAvBnK,KAAKyjB,KAAK0hE,WAA0C,IAArBnlF,KAAKwjB,GAAG2hE,SAChDs8C,EAAUzhI,KAAKwjB,GAAGxV,QAAQ9D,MAAMyB,QACA,IAAvB3L,KAAKyjB,KAAK0hE,WAA2C,IAArBnlF,KAAKwjB,GAAG2hE,WACjDq8C,EAAYxhI,KAAKyjB,KAAKzV,QAAQ9D,MAAMyB,QAEtC21H,EAAII,aAAa,EAAGF,GACpBF,EAAII,aAAa,EAAGD,GAGbH,EAGT,MAA6B,OAAzBpsH,EAAOumH,cACF96H,EAAKsJ,gBAAgBjK,KAAKwjB,GAAGxV,QAAQ9D,MAAMyB,OAAQuJ,EAAO/K,SAG1DxJ,EAAKsJ,gBAAgBjK,KAAKyjB,KAAKzV,QAAQ9D,MAAMyB,OAAQuJ,EAAO/K,SAGrE,MAAOxJ,GAAKsJ,gBAAgBiL,EAAOhL,MAAOgL,EAAO/K,YAcrD5C,IAAK,UACLhF,MAAO,SAAiB+S,EAAKJ,EAAQ6f,EAAGpG,EAAGk7B,GAEzC7pD,KAAKk2H,aAAa5gH,EAAKJ,GAGvBI,EAAIwwC,YACJxwC,EAAIy0C,IAAIh1B,EAAGpG,EAAGk7B,EAAQ,EAAG,EAAIpnD,KAAKunD,IAAI,GACtC10C,EAAI2kC,SAGJj6C,KAAKm2H,cAAc7gH,EAAKJ,MAiB1B3N,IAAK,oBACLhF,MAAO,SAA2B87H,EAAIC,EAAIhd,EAAIC,EAAImd,EAAIC,EAAIqB,EAAK9qH,GAE7D,GAAIzM,GAAc,CAClB,IAAIzI,KAAKyjB,MAAQzjB,KAAKwjB,GACpB/a,EAAczI,KAAK2hI,mBAAmBtD,EAAIC,EAAIhd,EAAIC,EAAImd,EAAIC,EAAIqB,OACzD,CACL,GAAI4B,GAAmB5hI,KAAKugI,mBAAe18H,IACvCg+H,GAAmB,EAAI3S,EAAyB,SAAG0S,EAAkB,GACrE7sG,EAAI8sG,EAAiB,GACrBlzG,EAAIkzG,EAAiB,GACrBh4E,EAASg4E,EAAiB,GAE1BjkF,EAAK7oB,EAAI2pG,EACT7gF,EAAKlvB,EAAIgwG,CACbl2H,GAAchG,KAAKwiB,IAAIxiB,KAAKusD,KAAKpR,EAAKA,EAAKC,EAAKA,GAAMgM,GAGxD,MAAI7pD,MAAKqtH,YAAYl9E,KAAKjqC,KAAOw4H,GAAM1+H,KAAKqtH,YAAYl9E,KAAKjqC,KAAOlG,KAAKqtH,YAAYl9E,KAAK//B,MAAQsuH,GAAM1+H,KAAKqtH,YAAYl9E,KAAK7pC,IAAMq4H,GAAM3+H,KAAKqtH,YAAYl9E,KAAK7pC,IAAMtG,KAAKqtH,YAAYl9E,KAAK9/B,OAASsuH,EAC5L,EAEAl2H,KAIXlB,IAAK,qBACLhF,MAAO,SAA4B87H,EAAIC,EAAIhd,EAAIC,EAAImd,EAAIC,GACrD,GAAI1kH,GAAKqnG,EAAK+c,EACVyD,EAAKvgB,EAAK+c,EACVyD,EAAY9nH,EAAKA,EAAK6nH,EAAKA,EAC3Bl5G,IAAM81G,EAAKL,GAAMpkH,GAAM0kH,EAAKL,GAAMwD,GAAMC,CAExCn5G,GAAI,EACNA,EAAI,EACKA,EAAI,IACbA,EAAI,EAGN,IAAImM,GAAIspG,EAAKz1G,EAAI3O,EACb0U,EAAI2vG,EAAK11G,EAAIk5G,EACblkF,EAAK7oB,EAAI2pG,EACT7gF,EAAKlvB,EAAIgwG,CAQb,OAAOl8H,MAAKusD,KAAKpR,EAAKA,EAAKC,EAAKA,MAWlCt2C,IAAK,eACLhF,MAAO,SAAsB+S,EAAK/E,EAAU8rH,EAASl3C,EAAUt5E,EAAOqJ,GAEpE,GAAI6nD,OAAQ,GACRilE,MAAa,GACbjF,MAAQ,GACRC,MAAQ,GACRiF,MAAc,GACdzI,MAAc,GACdv0H,MAAO,GACPugD,EAAYtwC,EAAO9E,KAsBvB,IApBiB,SAAbG,GACFwsH,EAAQ/8H,KAAKyjB,KACbu5G,EAAQh9H,KAAKwjB,GACby+G,EAAc,GACdzI,EAActkH,EAAO4mH,eACrB72H,EAAOiQ,EAAO6mH,eACQ,OAAbxrH,GACTwsH,EAAQ/8H,KAAKwjB,GACbw5G,EAAQh9H,KAAKyjB,KACbw+G,GAAe,GACfzI,EAActkH,EAAOwmH,aACrBz2H,EAAOiQ,EAAOymH,cAEdoB,EAAQ/8H,KAAKwjB,GACbw5G,EAAQh9H,KAAKyjB,KACb+1G,EAActkH,EAAO0mH,iBACrB32H,EAAOiQ,EAAO2mH,iBAIZkB,GAASC,EACX,GAAiB,WAAbzsH,EAEF,IAAoC,IAAhCvQ,KAAKgO,QAAQ6rH,OAAO3rH,QAAkB,CACxC8zH,EAAahiI,KAAKkiI,mBAAmBnF,EAAOznH,GAAO0qH,IAAK3D,GACxD,IAAI8F,GAAWniI,KAAKi9H,SAASx6H,KAAKJ,IAAI,EAAKI,KAAKL,IAAI,EAAK4/H,EAAW/0H,EAAIg1H,IAAe5F,EACvFt/D,GAAQt6D,KAAKq8D,MAAMkjE,EAAWrzG,EAAIwzG,EAASxzG,EAAGqzG,EAAWjtG,EAAIotG,EAASptG,OAEtEgoC,GAAQt6D,KAAKq8D,MAAMi+D,EAAMpuG,EAAIquG,EAAMruG,EAAGouG,EAAMhoG,EAAIioG,EAAMjoG,GACtDitG,EAAahiI,KAAKkiI,mBAAmBnF,EAAOznH,OAG9CynD,GAAQt6D,KAAKq8D,MAAMi+D,EAAMpuG,EAAIquG,EAAMruG,EAAGouG,EAAMhoG,EAAIioG,EAAMjoG,GACtDitG,EAAahiI,KAAKi9H,SAAS,GAAKZ,OAE7B,CAEL,GAAI+F,GAAmBpiI,KAAKugI,eAAejrH,GACvC+sH,GAAmB,EAAInT,EAAyB,SAAGkT,EAAkB,GACrErtG,EAAIstG,EAAiB,GACrB1zG,EAAI0zG,EAAiB,GACrBx4E,EAASw4E,EAAiB,EAEb,UAAb9xH,GACFyxH,EAAahiI,KAAKkiI,mBAAmBliI,KAAKyjB,KAAMnO,GAAOyf,EAAGA,EAAGpG,EAAGA,EAAGlgB,IAAK,IAAMC,KAAM,GAAKkxB,WAAY,IACrGm9B,GAAwB,EAAhBilE,EAAW/0H,EAASxK,KAAKunD,GAAK,IAAMvnD,KAAKunD,GAAK,GAAMvnD,KAAKunD,IAC3C,OAAbz5C,GACTyxH,EAAahiI,KAAKkiI,mBAAmBliI,KAAKyjB,KAAMnO,GAAOyf,EAAGA,EAAGpG,EAAGA,EAAGlgB,IAAK,GAAKC,KAAM,EAAKkxB,UAAW,IACnGm9B,GAAwB,EAAhBilE,EAAW/0H,EAASxK,KAAKunD,GAAK,IAAMvnD,KAAKunD,GAAK,IAAMvnD,KAAKunD,KAEjEg4E,EAAahiI,KAAKo9H,eAAeroG,EAAGpG,EAAGk7B,EAAQ,MAC/CkT,EAAQ,oBAIZ,GAAIn5D,GAAS,GAAK41H,EAAc,EAAIh0E,CAMpC,QAAS5qC,MAAOonH,EAAY3sH,MAFV0f,EAFTitG,EAAWjtG,EAAa,GAATnxB,EAAenB,KAAKw6C,IAAI8f,GAEvBpuC,EADhBqzG,EAAWrzG,EAAa,GAAT/qB,EAAenB,KAAKs6C,IAAIggB,IAGHA,MAAOA,EAAOn5D,OAAQA,EAAQqB,KAAMA,MAYnFsC,IAAK,gBACLhF,MAAO,SAAuB+S,EAAKJ,EAAQiwE,EAAUt5E,EAAO0wH,GAE1DjnH,EAAIuwC,YAAc7lD,KAAKmgI,SAAS7qH,EAAKJ,EAAQiwE,EAAUt5E,GACvDyJ,EAAI6wC,UAAY7wC,EAAIuwC,YACpBvwC,EAAIkwC,UAAYtwC,EAAO9E,MAEnBmsH,EAAUt3H,MAAyC,WAAjCs3H,EAAUt3H,KAAK8iB,cAEnCzS,EAAI4rG,eAAeqb,EAAU3hH,MAAMma,EAAGwnG,EAAU3hH,MAAM+T,EAAG4tG,EAAUx/D,MAAOw/D,EAAU34H,QAGpF0R,EAAImrG,cAAc8b,EAAU3hH,MAAMma,EAAGwnG,EAAU3hH,MAAM+T,EAAG4tG,EAAUx/D,MAAOw/D,EAAU34H,QAIrF5D,KAAKk2H,aAAa5gH,EAAKJ,GACvBI,EAAI0kC,OAEJh6C,KAAKm2H,cAAc7gH,EAAKJ,MAG1B3N,IAAK,eACLhF,MAAO,SAAsB+S,EAAKJ,IACV,IAAlBA,EAAOu1G,SACTn1G,EAAI44G,YAAch5G,EAAOg5G,YACzB54G,EAAI4hH,WAAahiH,EAAOi5G,WACxB74G,EAAI6hH,cAAgBjiH,EAAOk5G,QAC3B94G,EAAI8hH,cAAgBliH,EAAOm5G,YAI/B9mH,IAAK,gBACLhF,MAAO,SAAuB+S,EAAKJ,IACX,IAAlBA,EAAOu1G,SACTn1G,EAAI44G,YAAc,gBAClB54G,EAAI4hH,WAAa,EACjB5hH,EAAI6hH,cAAgB,EACpB7hH,EAAI8hH,cAAgB,OAInB6I,IAGTrgI,GAAiB,QAAIqgI,GAIjB,SAAUpgI,EAAQD,EAASM,GAoC/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAhCzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAI0sH,GAAkB/uH,EAAoB,KAEtCgvH,EAAkBruH,EAAuBouH,GAEzCoG,EAAkBn1H,EAAoB,KAEtCo1H,EAAmBz0H,EAAuBw0H,GAE1CxjC,EAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAEvCwjC,EAA8Br1H,EAAoB,KAElDs1H,EAA8B30H,EAAuB00H,GAErDE,EAAav1H,EAAoB,KAEjCw1H,EAAa70H,EAAuB40H,GAEpCyJ,EAAmBh/H,EAAoB,KAEvCi/H,EAAmBt+H,EAAuBq+H,GAI1CpE,EAAoB,SAAUuE,GAGhC,QAASvE,GAAkB9sH,EAAS2C,EAAM08G,IACxC,EAAIv7B,EAA0B,SAAG9xF,KAAM86H,EAGvC,IAAI1hC,IAAQ,EAAIo8B,EAAqC,SAAGx1H,MAAO86H,EAAkBhF,YAAa,EAAIR,EAA0B,SAAGwF,IAAoBv6H,KAAKP,KAAMgO,EAAS2C,EAAM08G,GAQ7K,OAJAj0B,GAAMkpC,eAAiB,WACrBlpC,EAAMmpC,sBAERnpC,EAAMzoF,KAAK49D,QAAQl9B,GAAG,yBAA0B+nD,EAAMkpC,gBAC/ClpC,EA6KT,OA3LA,EAAIs8B,EAAoB,SAAGoF,EAAmBuE,IAiB9C,EAAIrtC,EAAuB,SAAG8oC,IAC5BvzH,IAAK,aACLhF,MAAO,SAAoByL,GAEzB,GAAIw0H,IAAgB,CAChBxiI,MAAKgO,QAAQmuF,UAAYnuF,EAAQmuF,UACnCqmC,GAAgB,GAIlBxiI,KAAKgO,QAAUA,EACfhO,KAAKK,GAAKL,KAAKgO,QAAQ3N,GACvBL,KAAKyjB,KAAOzjB,KAAK2Q,KAAKyoG,MAAMp5G,KAAKgO,QAAQyV,MACzCzjB,KAAKwjB,GAAKxjB,KAAK2Q,KAAKyoG,MAAMp5G,KAAKgO,QAAQwV,IAGvCxjB,KAAKyiI,mBACLziI,KAAK26H,WAGiB,IAAlB6H,IACFxiI,KAAKggI,IAAIhvF,YAAamrD,QAASn8F,KAAKgO,QAAQmuF,UAC5Cn8F,KAAKuiI,yBAITh7H,IAAK,UACLhF,MAAO,WACLvC,KAAKyjB,KAAOzjB,KAAK2Q,KAAKyoG,MAAMp5G,KAAKgO,QAAQyV,MACzCzjB,KAAKwjB,GAAKxjB,KAAK2Q,KAAKyoG,MAAMp5G,KAAKgO,QAAQwV,QACrB3f,KAAd7D,KAAKyjB,UAAkC5f,KAAZ7D,KAAKwjB,KAA6C,IAAzBxjB,KAAKgO,QAAQmuF,QACnEn8F,KAAKggI,IAAIhvF,YAAamrD,SAAS,IAG3Bn8F,KAAKyjB,KAAKpjB,KAAOL,KAAKwjB,GAAGnjB,GAC3BL,KAAKggI,IAAIhvF,YAAamrD,SAAS,IAE/Bn8F,KAAKggI,IAAIhvF,YAAamrD,SAAS,OAWrC50F,IAAK,UACLhF,MAAO,WAEL,MADAvC,MAAK2Q,KAAK49D,QAAQ/8B,IAAI,yBAA0BxxC,KAAKsiI,oBACpCz+H,KAAb7D,KAAKggI,YACAhgI,MAAK2Q,KAAKyoG,MAAMp5G,KAAKggI,IAAI3/H,IAChCL,KAAKggI,QAAMn8H,IACJ,MAcX0D,IAAK,mBACLhF,MAAO,WACL,OAAiBsB,KAAb7D,KAAKggI,IAAmB,CAC1B,GAAI7jB,GAAS,UAAYn8G,KAAKK,GAC1BktC,EAAOvtC,KAAK2Q,KAAKupG,UAAUC,YAC7B95G,GAAI87G,EACJwI,MAAO,SACPxoB,SAAS,EACTtjB,QAAQ,GAEV74E,MAAK2Q,KAAKyoG,MAAM+C,GAAU5uE,EAC1BvtC,KAAKggI,IAAMzyF,EACXvtC,KAAKggI,IAAI0C,aAAe1iI,KAAKK,GAC7BL,KAAKuiI,yBAITh7H,IAAK,qBACLhF,MAAO,eACYsB,KAAb7D,KAAKggI,SAAmCn8H,KAAd7D,KAAKyjB,UAAkC5f,KAAZ7D,KAAKwjB,IAC5DxjB,KAAKggI,IAAIjrG,EAAI,IAAO/0B,KAAKyjB,KAAKsR,EAAI/0B,KAAKwjB,GAAGuR,GAC1C/0B,KAAKggI,IAAIrxG,EAAI,IAAO3uB,KAAKyjB,KAAKkL,EAAI3uB,KAAKwjB,GAAGmL,QACpB9qB,KAAb7D,KAAKggI,MACdhgI,KAAKggI,IAAIjrG,EAAI,EACb/0B,KAAKggI,IAAIrxG,EAAI,MAWjBpnB,IAAK,QACLhF,MAAO,SAAe+S,EAAKJ,EAAQmnH,GAEjC/mH,EAAIwwC,YACJxwC,EAAIywC,OAAO/lD,KAAKw8H,UAAUznG,EAAG/0B,KAAKw8H,UAAU7tG,OAE1B9qB,KAAdw4H,EAAQtnG,EACVzf,EAAI0wC,OAAOhmD,KAAKy8H,QAAQ1nG,EAAG/0B,KAAKy8H,QAAQ9tG,GAExCrZ,EAAIqtH,iBAAiBtG,EAAQtnG,EAAGsnG,EAAQ1tG,EAAG3uB,KAAKy8H,QAAQ1nG,EAAG/0B,KAAKy8H,QAAQ9tG,GAG1E3uB,KAAKk2H,aAAa5gH,EAAKJ,GACvBI,EAAI2kC,SACJj6C,KAAKm2H,cAAc7gH,EAAKJ,MAG1B3N,IAAK,aACLhF,MAAO,WACL,MAAOvC,MAAKggI,OAYdz4H,IAAK,WACLhF,MAAO,SAAkBq7E,GACvB,GAAIy+C,GAAU14H,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,GAAK3D,KAAKggI,IAEnF/yH,EAAI2wE,EACJ7oD,MAAI,GACJpG,MAAI,EACR,IAAI3uB,KAAKyjB,OAASzjB,KAAKwjB,GAAI,CACzB,GAAI+8G,GAAiBvgI,KAAKugI,eAAevgI,KAAKyjB,MAC1C68G,GAAkB,EAAIpR,EAAyB,SAAGqR,EAAgB,GAClE5jF,EAAK2jF,EAAgB,GACrB1jF,EAAK0jF,EAAgB,GACrBsC,EAAKtC,EAAgB,GAErB98H,EAAI,EAAIf,KAAKunD,IAAM,EAAI/8C,EAC3B8nB,GAAI4nB,EAAKimF,EAAKngI,KAAKs6C,IAAIv5C,GACvBmrB,EAAIiuB,EAAKgmF,EAAKA,GAAM,EAAIngI,KAAKw6C,IAAIz5C,QAEjCuxB,GAAItyB,KAAKgnB,IAAI,EAAIxc,EAAG,GAAKjN,KAAKw8H,UAAUznG,EAAI,EAAI9nB,GAAK,EAAIA,GAAKovH,EAAQtnG,EAAItyB,KAAKgnB,IAAIxc,EAAG,GAAKjN,KAAKy8H,QAAQ1nG,EACxGpG,EAAIlsB,KAAKgnB,IAAI,EAAIxc,EAAG,GAAKjN,KAAKw8H,UAAU7tG,EAAI,EAAI1hB,GAAK,EAAIA,GAAKovH,EAAQ1tG,EAAIlsB,KAAKgnB,IAAIxc,EAAG,GAAKjN,KAAKy8H,QAAQ9tG,CAG1G,QAASoG,EAAGA,EAAGpG,EAAGA,MAGpBpnB,IAAK,sBACLhF,MAAO,SAA6Bi8H,EAAUlpH,GAC5C,MAAOtV,MAAKy+H,0BAA0BD,EAAUlpH,EAAKtV,KAAKggI,QAG5Dz4H,IAAK,qBACLhF,MAAO,SAA4B87H,EAAIC,EAAIhd,EAAIC,EAAImd,EAAIC,GAErD,MAAO3+H,MAAK8+H,yBAAyBT,EAAIC,EAAIhd,EAAIC,EAAImd,EAAIC,EAAI3+H,KAAKggI,SAG/DlF,GACPqE,EAA0B,QAE5Bv/H,GAAiB,QAAIk7H,GAIjB,SAAUj7H,EAAQD,EAASM,GAgC/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GA5BzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAI8yH,GAAkBn1H,EAAoB,KAEtCo1H,EAAmBz0H,EAAuBw0H,GAE1CxjC,EAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAEvCwjC,EAA8Br1H,EAAoB,KAElDs1H,EAA8B30H,EAAuB00H,GAErDE,EAAav1H,EAAoB,KAEjCw1H,EAAa70H,EAAuB40H,GAEpCyJ,EAAmBh/H,EAAoB,KAEvCi/H,EAAmBt+H,EAAuBq+H,GAI1CnE,EAAmB,SAAUsE,GAG/B,QAAStE,GAAiB/sH,EAAS2C,EAAM08G,GAEvC,OADA,EAAIv7B,EAA0B,SAAG9xF,KAAM+6H,IAChC,EAAIvF,EAAqC,SAAGx1H,MAAO+6H,EAAiBjF,YAAa,EAAIR,EAA0B,SAAGyF,IAAmBx6H,KAAKP,KAAMgO,EAAS2C,EAAM08G,IAwOxK,OA5OA,EAAIqI,EAAoB,SAAGqF,EAAkBsE,IAc7C,EAAIrtC,EAAuB,SAAG+oC,IAC5BxzH,IAAK,QACLhF,MAAO,SAAe+S,EAAKJ,EAAQmnH,GAEjC/mH,EAAIwwC,YACJxwC,EAAIywC,OAAO/lD,KAAKw8H,UAAUznG,EAAG/0B,KAAKw8H,UAAU7tG,OAG1B9qB,KAAdw4H,EAAQtnG,EACVzf,EAAI0wC,OAAOhmD,KAAKy8H,QAAQ1nG,EAAG/0B,KAAKy8H,QAAQ9tG,GAExCrZ,EAAIqtH,iBAAiBtG,EAAQtnG,EAAGsnG,EAAQ1tG,EAAG3uB,KAAKy8H,QAAQ1nG,EAAG/0B,KAAKy8H,QAAQ9tG,GAG1E3uB,KAAKk2H,aAAa5gH,EAAKJ,GACvBI,EAAI2kC,SACJj6C,KAAKm2H,cAAc7gH,EAAKJ,MAG1B3N,IAAK,aACLhF,MAAO,WACL,MAAOvC,MAAKu+H,wBAUdh3H,IAAK,qBACLhF,MAAO,WACL,GAAIsgI,OAAOh/H,GACPi/H,MAAOj/H,GACP+tE,EAAS5xE,KAAKgO,QAAQ6rH,OAAOE,UAC7B90H,EAAOjF,KAAKgO,QAAQ6rH,OAAO50H,KAC3B24C,EAAKn7C,KAAKwiB,IAAIjlB,KAAKyjB,KAAKsR,EAAI/0B,KAAKwjB,GAAGuR,GACpC8oB,EAAKp7C,KAAKwiB,IAAIjlB,KAAKyjB,KAAKkL,EAAI3uB,KAAKwjB,GAAGmL,EACxC,IAAa,aAAT1pB,GAAgC,kBAATA,EACrBxC,KAAKwiB,IAAIjlB,KAAKyjB,KAAKsR,EAAI/0B,KAAKwjB,GAAGuR,IAAMtyB,KAAKwiB,IAAIjlB,KAAKyjB,KAAKkL,EAAI3uB,KAAKwjB,GAAGmL,IAClE3uB,KAAKyjB,KAAKkL,GAAK3uB,KAAKwjB,GAAGmL,EACrB3uB,KAAKyjB,KAAKsR,GAAK/0B,KAAKwjB,GAAGuR,GACzB8tG,EAAO7iI,KAAKyjB,KAAKsR,EAAI68C,EAAS/zB,EAC9BilF,EAAO9iI,KAAKyjB,KAAKkL,EAAIijD,EAAS/zB,GACrB79C,KAAKyjB,KAAKsR,EAAI/0B,KAAKwjB,GAAGuR,IAC/B8tG,EAAO7iI,KAAKyjB,KAAKsR,EAAI68C,EAAS/zB,EAC9BilF,EAAO9iI,KAAKyjB,KAAKkL,EAAIijD,EAAS/zB,GAEvB79C,KAAKyjB,KAAKkL,EAAI3uB,KAAKwjB,GAAGmL,IAC3B3uB,KAAKyjB,KAAKsR,GAAK/0B,KAAKwjB,GAAGuR,GACzB8tG,EAAO7iI,KAAKyjB,KAAKsR,EAAI68C,EAAS/zB,EAC9BilF,EAAO9iI,KAAKyjB,KAAKkL,EAAIijD,EAAS/zB,GACrB79C,KAAKyjB,KAAKsR,EAAI/0B,KAAKwjB,GAAGuR,IAC/B8tG,EAAO7iI,KAAKyjB,KAAKsR,EAAI68C,EAAS/zB,EAC9BilF,EAAO9iI,KAAKyjB,KAAKkL,EAAIijD,EAAS/zB,IAGrB,aAAT54C,IACF49H,EAAOjlF,EAAKg0B,EAAS/zB,EAAK79C,KAAKyjB,KAAKsR,EAAI8tG,IAEjCpgI,KAAKwiB,IAAIjlB,KAAKyjB,KAAKsR,EAAI/0B,KAAKwjB,GAAGuR,GAAKtyB,KAAKwiB,IAAIjlB,KAAKyjB,KAAKkL,EAAI3uB,KAAKwjB,GAAGmL,KACxE3uB,KAAKyjB,KAAKkL,GAAK3uB,KAAKwjB,GAAGmL,EACrB3uB,KAAKyjB,KAAKsR,GAAK/0B,KAAKwjB,GAAGuR,GACzB8tG,EAAO7iI,KAAKyjB,KAAKsR,EAAI68C,EAASh0B,EAC9BklF,EAAO9iI,KAAKyjB,KAAKkL,EAAIijD,EAASh0B,GACrB59C,KAAKyjB,KAAKsR,EAAI/0B,KAAKwjB,GAAGuR,IAC/B8tG,EAAO7iI,KAAKyjB,KAAKsR,EAAI68C,EAASh0B,EAC9BklF,EAAO9iI,KAAKyjB,KAAKkL,EAAIijD,EAASh0B,GAEvB59C,KAAKyjB,KAAKkL,EAAI3uB,KAAKwjB,GAAGmL,IAC3B3uB,KAAKyjB,KAAKsR,GAAK/0B,KAAKwjB,GAAGuR,GACzB8tG,EAAO7iI,KAAKyjB,KAAKsR,EAAI68C,EAASh0B,EAC9BklF,EAAO9iI,KAAKyjB,KAAKkL,EAAIijD,EAASh0B,GACrB59C,KAAKyjB,KAAKsR,EAAI/0B,KAAKwjB,GAAGuR,IAC/B8tG,EAAO7iI,KAAKyjB,KAAKsR,EAAI68C,EAASh0B,EAC9BklF,EAAO9iI,KAAKyjB,KAAKkL,EAAIijD,EAASh0B,IAGrB,aAAT34C,IACF69H,EAAOjlF,EAAK+zB,EAASh0B,EAAK59C,KAAKyjB,KAAKkL,EAAIm0G,QAGvC,IAAa,kBAAT79H,EACLxC,KAAKwiB,IAAIjlB,KAAKyjB,KAAKsR,EAAI/0B,KAAKwjB,GAAGuR,IAAMtyB,KAAKwiB,IAAIjlB,KAAKyjB,KAAKkL,EAAI3uB,KAAKwjB,GAAGmL,IAEtEk0G,EAAO7iI,KAAKyjB,KAAKsR,EAEf+tG,EADE9iI,KAAKyjB,KAAKkL,EAAI3uB,KAAKwjB,GAAGmL,EACjB3uB,KAAKwjB,GAAGmL,GAAK,EAAIijD,GAAU/zB,EAE3B79C,KAAKwjB,GAAGmL,GAAK,EAAIijD,GAAU/zB,GAE3Bp7C,KAAKwiB,IAAIjlB,KAAKyjB,KAAKsR,EAAI/0B,KAAKwjB,GAAGuR,GAAKtyB,KAAKwiB,IAAIjlB,KAAKyjB,KAAKkL,EAAI3uB,KAAKwjB,GAAGmL,KAG1Ek0G,EADE7iI,KAAKyjB,KAAKsR,EAAI/0B,KAAKwjB,GAAGuR,EACjB/0B,KAAKwjB,GAAGuR,GAAK,EAAI68C,GAAUh0B,EAE3B59C,KAAKwjB,GAAGuR,GAAK,EAAI68C,GAAUh0B,EAEpCklF,EAAO9iI,KAAKyjB,KAAKkL,OAEd,IAAa,eAAT1pB,EAEP49H,EADE7iI,KAAKyjB,KAAKsR,EAAI/0B,KAAKwjB,GAAGuR,EACjB/0B,KAAKwjB,GAAGuR,GAAK,EAAI68C,GAAUh0B,EAE3B59C,KAAKwjB,GAAGuR,GAAK,EAAI68C,GAAUh0B,EAEpCklF,EAAO9iI,KAAKyjB,KAAKkL,MACZ,IAAa,aAAT1pB,EACT49H,EAAO7iI,KAAKyjB,KAAKsR,EAEf+tG,EADE9iI,KAAKyjB,KAAKkL,EAAI3uB,KAAKwjB,GAAGmL,EACjB3uB,KAAKwjB,GAAGmL,GAAK,EAAIijD,GAAU/zB,EAE3B79C,KAAKwjB,GAAGmL,GAAK,EAAIijD,GAAU/zB,MAE/B,IAAa,aAAT54C,EAAqB,CAC9B24C,EAAK59C,KAAKwjB,GAAGuR,EAAI/0B,KAAKyjB,KAAKsR,EAC3B8oB,EAAK79C,KAAKyjB,KAAKkL,EAAI3uB,KAAKwjB,GAAGmL,CAC3B,IAAIk7B,GAASpnD,KAAKusD,KAAKpR,EAAKA,EAAKC,EAAKA,GAClCklF,EAAKtgI,KAAKunD,GAEVg5E,EAAgBvgI,KAAKq8D,MAAMjhB,EAAID,GAC/BqlF,GAAWD,GAA0B,GAATpxD,EAAe,IAAOmxD,IAAO,EAAIA,EAEjEF,GAAO7iI,KAAKyjB,KAAKsR,GAAc,GAAT68C,EAAe,IAAO/nB,EAASpnD,KAAKs6C,IAAIkmF,GAC9DH,EAAO9iI,KAAKyjB,KAAKkL,GAAc,GAATijD,EAAe,IAAO/nB,EAASpnD,KAAKw6C,IAAIgmF,OACzD,IAAa,cAATh+H,EAAsB,CAC/B24C,EAAK59C,KAAKwjB,GAAGuR,EAAI/0B,KAAKyjB,KAAKsR,EAC3B8oB,EAAK79C,KAAKyjB,KAAKkL,EAAI3uB,KAAKwjB,GAAGmL,CAC3B,IAAIsyG,GAAUx+H,KAAKusD,KAAKpR,EAAKA,EAAKC,EAAKA,GACnCqlF,EAAMzgI,KAAKunD,GAEXm5E,EAAiB1gI,KAAKq8D,MAAMjhB,EAAID,GAChCwlF,GAAYD,GAA4B,IAATvxD,EAAe,IAAOsxD,IAAQ,EAAIA,EAErEL,GAAO7iI,KAAKyjB,KAAKsR,GAAc,GAAT68C,EAAe,IAAOqvD,EAAUx+H,KAAKs6C,IAAIqmF,GAC/DN,EAAO9iI,KAAKyjB,KAAKkL,GAAc,GAATijD,EAAe,IAAOqvD,EAAUx+H,KAAKw6C,IAAImmF,OAG3D3gI,MAAKwiB,IAAIjlB,KAAKyjB,KAAKsR,EAAI/0B,KAAKwjB,GAAGuR,IAAMtyB,KAAKwiB,IAAIjlB,KAAKyjB,KAAKkL,EAAI3uB,KAAKwjB,GAAGmL,GAClE3uB,KAAKyjB,KAAKkL,GAAK3uB,KAAKwjB,GAAGmL,EACrB3uB,KAAKyjB,KAAKsR,GAAK/0B,KAAKwjB,GAAGuR,GACzB8tG,EAAO7iI,KAAKyjB,KAAKsR,EAAI68C,EAAS/zB,EAC9BilF,EAAO9iI,KAAKyjB,KAAKkL,EAAIijD,EAAS/zB,EAC9BglF,EAAO7iI,KAAKwjB,GAAGuR,EAAI8tG,EAAO7iI,KAAKwjB,GAAGuR,EAAI8tG,GAC7B7iI,KAAKyjB,KAAKsR,EAAI/0B,KAAKwjB,GAAGuR,IAC/B8tG,EAAO7iI,KAAKyjB,KAAKsR,EAAI68C,EAAS/zB,EAC9BilF,EAAO9iI,KAAKyjB,KAAKkL,EAAIijD,EAAS/zB,EAC9BglF,EAAO7iI,KAAKwjB,GAAGuR,EAAI8tG,EAAO7iI,KAAKwjB,GAAGuR,EAAI8tG,GAE/B7iI,KAAKyjB,KAAKkL,EAAI3uB,KAAKwjB,GAAGmL,IAC3B3uB,KAAKyjB,KAAKsR,GAAK/0B,KAAKwjB,GAAGuR,GACzB8tG,EAAO7iI,KAAKyjB,KAAKsR,EAAI68C,EAAS/zB,EAC9BilF,EAAO9iI,KAAKyjB,KAAKkL,EAAIijD,EAAS/zB,EAC9BglF,EAAO7iI,KAAKwjB,GAAGuR,EAAI8tG,EAAO7iI,KAAKwjB,GAAGuR,EAAI8tG,GAC7B7iI,KAAKyjB,KAAKsR,EAAI/0B,KAAKwjB,GAAGuR,IAC/B8tG,EAAO7iI,KAAKyjB,KAAKsR,EAAI68C,EAAS/zB,EAC9BilF,EAAO9iI,KAAKyjB,KAAKkL,EAAIijD,EAAS/zB,EAC9BglF,EAAO7iI,KAAKwjB,GAAGuR,EAAI8tG,EAAO7iI,KAAKwjB,GAAGuR,EAAI8tG,IAGjCpgI,KAAKwiB,IAAIjlB,KAAKyjB,KAAKsR,EAAI/0B,KAAKwjB,GAAGuR,GAAKtyB,KAAKwiB,IAAIjlB,KAAKyjB,KAAKkL,EAAI3uB,KAAKwjB,GAAGmL,KACxE3uB,KAAKyjB,KAAKkL,GAAK3uB,KAAKwjB,GAAGmL,EACrB3uB,KAAKyjB,KAAKsR,GAAK/0B,KAAKwjB,GAAGuR,GACzB8tG,EAAO7iI,KAAKyjB,KAAKsR,EAAI68C,EAASh0B,EAC9BklF,EAAO9iI,KAAKyjB,KAAKkL,EAAIijD,EAASh0B,EAC9BklF,EAAO9iI,KAAKwjB,GAAGmL,EAAIm0G,EAAO9iI,KAAKwjB,GAAGmL,EAAIm0G,GAC7B9iI,KAAKyjB,KAAKsR,EAAI/0B,KAAKwjB,GAAGuR,IAC/B8tG,EAAO7iI,KAAKyjB,KAAKsR,EAAI68C,EAASh0B,EAC9BklF,EAAO9iI,KAAKyjB,KAAKkL,EAAIijD,EAASh0B,EAC9BklF,EAAO9iI,KAAKwjB,GAAGmL,EAAIm0G,EAAO9iI,KAAKwjB,GAAGmL,EAAIm0G,GAE/B9iI,KAAKyjB,KAAKkL,EAAI3uB,KAAKwjB,GAAGmL,IAC3B3uB,KAAKyjB,KAAKsR,GAAK/0B,KAAKwjB,GAAGuR,GACzB8tG,EAAO7iI,KAAKyjB,KAAKsR,EAAI68C,EAASh0B,EAC9BklF,EAAO9iI,KAAKyjB,KAAKkL,EAAIijD,EAASh0B,EAC9BklF,EAAO9iI,KAAKwjB,GAAGmL,EAAIm0G,EAAO9iI,KAAKwjB,GAAGmL,EAAIm0G,GAC7B9iI,KAAKyjB,KAAKsR,EAAI/0B,KAAKwjB,GAAGuR,IAC/B8tG,EAAO7iI,KAAKyjB,KAAKsR,EAAI68C,EAASh0B,EAC9BklF,EAAO9iI,KAAKyjB,KAAKkL,EAAIijD,EAASh0B,EAC9BklF,EAAO9iI,KAAKwjB,GAAGmL,EAAIm0G,EAAO9iI,KAAKwjB,GAAGmL,EAAIm0G,IAK9C,QAAS/tG,EAAG8tG,EAAMl0G,EAAGm0G,MAGvBv7H,IAAK,sBACLhF,MAAO,SAA6Bi8H,EAAUlpH,GAC5C,GAAItH,GAAUrK,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,KAE7E,OAAO3D,MAAKy+H,0BAA0BD,EAAUlpH,EAAKtH,EAAQgyH,QAG/Dz4H,IAAK,qBACLhF,MAAO,SAA4B87H,EAAIC,EAAIhd,EAAIC,EAAImd,EAAIC,GACrD,GAAItC,GAAU14H,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,GAAK3D,KAAKu+H,oBAEvF,OAAOv+H,MAAK8+H,yBAAyBT,EAAIC,EAAIhd,EAAIC,EAAImd,EAAIC,EAAItC,MAY/D90H,IAAK,WACLhF,MAAO,SAAkBq7E,GACvB,GAAIy+C,GAAU14H,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,GAAK3D,KAAKu+H,qBAEnFtxH,EAAI2wE,CAIR,QAAS7oD,EAHDtyB,KAAKgnB,IAAI,EAAIxc,EAAG,GAAKjN,KAAKw8H,UAAUznG,EAAI,EAAI9nB,GAAK,EAAIA,GAAKovH,EAAQtnG,EAAItyB,KAAKgnB,IAAIxc,EAAG,GAAKjN,KAAKy8H,QAAQ1nG,EAG7FpG,EAFPlsB,KAAKgnB,IAAI,EAAIxc,EAAG,GAAKjN,KAAKw8H,UAAU7tG,EAAI,EAAI1hB,GAAK,EAAIA,GAAKovH,EAAQ1tG,EAAIlsB,KAAKgnB,IAAIxc,EAAG,GAAKjN,KAAKy8H,QAAQ9tG,OAKzGosG,GACPoE,EAA0B,QAE5Bv/H,GAAiB,QAAIm7H,GAIjB,SAAUl7H,EAAQD,EAASM,GAgC/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GA5BzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAI8yH,GAAkBn1H,EAAoB,KAEtCo1H,EAAmBz0H,EAAuBw0H,GAE1CxjC,EAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAEvCwjC,EAA8Br1H,EAAoB,KAElDs1H,EAA8B30H,EAAuB00H,GAErDE,EAAav1H,EAAoB,KAEjCw1H,EAAa70H,EAAuB40H,GAEpCiK,EAAax/H,EAAoB,KAEjCy/H,EAAa9+H,EAAuB6+H,GAIpC1E,EAAe,SAAU6E,GAG3B,QAAS7E,GAAahtH,EAAS2C,EAAM08G,GAEnC,OADA,EAAIv7B,EAA0B,SAAG9xF,KAAMg7H,IAChC,EAAIxF,EAAqC,SAAGx1H,MAAOg7H,EAAalF,YAAa,EAAIR,EAA0B,SAAG0F,IAAez6H,KAAKP,KAAMgO,EAAS2C,EAAM08G,IA0EhK,OA9EA,EAAIqI,EAAoB,SAAGsF,EAAc6E,IAczC,EAAI7tC,EAAuB,SAAGgpC,IAC5BzzH,IAAK,QACLhF,MAAO,SAAe+S,EAAKJ,GAEzBI,EAAIwwC,YACJxwC,EAAIywC,OAAO/lD,KAAKw8H,UAAUznG,EAAG/0B,KAAKw8H,UAAU7tG,GAC5CrZ,EAAI0wC,OAAOhmD,KAAKy8H,QAAQ1nG,EAAG/0B,KAAKy8H,QAAQ9tG,GAExC3uB,KAAKk2H,aAAa5gH,EAAKJ,GACvBI,EAAI2kC,SACJj6C,KAAKm2H,cAAc7gH,EAAKJ,MAG1B3N,IAAK,aACLhF,MAAO,eAaPgF,IAAK,WACLhF,MAAO,SAAkBq7E,GACvB,OACE7oD,GAAI,EAAI6oD,GAAc59E,KAAKw8H,UAAUznG,EAAI6oD,EAAa59E,KAAKy8H,QAAQ1nG,EACnEpG,GAAI,EAAIivD,GAAc59E,KAAKw8H,UAAU7tG,EAAIivD,EAAa59E,KAAKy8H,QAAQ9tG,MAIvEpnB,IAAK,sBACLhF,MAAO,SAA6Bi8H,EAAUlpH,GAC5C,GAAIynH,GAAQ/8H,KAAKwjB,GACbw5G,EAAQh9H,KAAKyjB,IACb+6G,GAASn+H,KAAOL,KAAKyjB,KAAKpjB,KAC5B08H,EAAQ/8H,KAAKyjB,KACbu5G,EAAQh9H,KAAKwjB,GAGf,IAAIu5C,GAAQt6D,KAAKq8D,MAAMi+D,EAAMpuG,EAAIquG,EAAMruG,EAAGouG,EAAMhoG,EAAIioG,EAAMjoG,GACtD6oB,EAAKm/E,EAAMhoG,EAAIioG,EAAMjoG,EACrB8oB,EAAKk/E,EAAMpuG,EAAIquG,EAAMruG,EACrB00G,EAAoB5gI,KAAKusD,KAAKpR,EAAKA,EAAKC,EAAKA,GAC7CylF,EAAe9E,EAAShQ,iBAAiBl5G,EAAKynD,GAC9CwmE,GAAiBF,EAAoBC,GAAgBD,EAErDG,IAIJ,OAHAA,GAAUzuG,GAAK,EAAIwuG,GAAiBvG,EAAMjoG,EAAIwuG,EAAgBxG,EAAMhoG,EACpEyuG,EAAU70G,GAAK,EAAI40G,GAAiBvG,EAAMruG,EAAI40G,EAAgBxG,EAAMpuG,EAE7D60G,KAGTj8H,IAAK,qBACLhF,MAAO,SAA4B87H,EAAIC,EAAIhd,EAAIC,EAAImd,EAAIC,GAErD,MAAO3+H,MAAKy/H,mBAAmBpB,EAAIC,EAAIhd,EAAIC,EAAImd,EAAIC,OAGhD3D,GACP2E,EAAoB,QAEtB//H,GAAiB,QAAIo7H,GAIjB,SAAUn7H,EAAQD,EAASM,GAoB/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAhBzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAIlB,GAAQnB,EAAoB,IAE5BoB,EAAST,EAAuBQ,GAEhCwwF,EAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAIvC0xC,EAAkBvjI,EAAoB,KAAc,QACpDwjI,EAAYxjI,EAAoB,KAAc,QAC9CyjI,EAAwBzjI,EAAoB,KAAc,QAC1D0jI,EAAe1jI,EAAoB,KAAc,QACjD2jI,EAA2B3jI,EAAoB,KAAc,QAC7D4jI,EAAuB5jI,EAAoB,KAAc,QACzD6jI,EAAkC7jI,EAAoB,KAAc,QACpE8jI,EAAuC9jI,EAAoB,KAAc,QAEzES,EAAOT,EAAoB,GAE3B+6G,EAAgB,WAClB,QAASA,GAActqG,IACrB,EAAImhF,EAA0B,SAAG9xF,KAAMi7G,GAEvCj7G,KAAK2Q,KAAOA,EACZ3Q,KAAKikI,aAAgBC,sBAAwBC,sBAAwBC,UAAYC,eAEjFrkI,KAAKskI,gBAAiB,EACtBtkI,KAAKukI,mBAAqB,IAAO,GACjCvkI,KAAKwkI,iBAAkB,EACvBxkI,KAAKykI,kBACLzkI,KAAK0kI,kBACL1kI,KAAK2kI,eACL3kI,KAAK4kI,gBAAc/gI,GAGnB7D,KAAK6kI,kBAAmB,EACxB7kI,KAAK8kI,yBAA0B,EAC/B9kI,KAAK+kI,gBAAkB,EACvB/kI,KAAKglI,iBAAmB,EAExBhlI,KAAKilI,YAAa,EAClBjlI,KAAKklI,sBAAuB,EAC5BllI,KAAKmlI,wBAA0B,EAC/BnlI,KAAKolI,OAAQ,EAGbplI,KAAKgO,WACLhO,KAAK0tE,gBACHx/D,SAAS,EACTm3H,WACEC,MAAO,GACPC,uBAAwB,IACxBC,eAAgB,GAChBC,aAAc,GACdC,eAAgB,IAChBC,QAAS,IACTC,aAAc,GAEhBC,kBACEP,MAAO,GACPC,uBAAwB,GACxBC,eAAgB,IAChBE,eAAgB,IAChBD,aAAc,IACdE,QAAS,GACTC,aAAc,GAEhBE,WACEN,eAAgB,GAChBC,aAAc,IACdC,eAAgB,IAChBK,aAAc,IACdJ,QAAS,IACTC,aAAc,GAEhBI,uBACER,eAAgB,EAChBC,aAAc,IACdC,eAAgB,IAChBK,aAAc,IACdJ,QAAS,KAEXM,YAAa,GACbC,YAAa,IACb9pC,OAAQ,YACR+pC,eACEj4H,SAAS,EACTq6G,WAAY,IACZ6d,eAAgB,GAChBC,kBAAkB,EAClBn2D,KAAK,GAEPo2D,SAAU,GACVzB,kBAAkB,GAEpBlkI,EAAKC,OAAOZ,KAAKgO,QAAShO,KAAK0tE,gBAC/B1tE,KAAKsmI,SAAW,GAChBtmI,KAAKumI,cAAe,EAEpBvmI,KAAKs6G,qBA6qBP,OA1qBA,EAAItoB,EAAuB,SAAGipB,IAC5B1zG,IAAK,qBACLhF,MAAO,WACL,GAAI62F,GAAQp5F,IAEZA,MAAK2Q,KAAK49D,QAAQl9B,GAAG,cAAe,WAClC+nD,EAAMotC,gBAERxmI,KAAK2Q,KAAK49D,QAAQl9B,GAAG,gBAAiB,WACpC+nD,EAAMmtC,cAAe,IAEvBvmI,KAAK2Q,KAAK49D,QAAQl9B,GAAG,eAAgB,WACnC+nD,EAAMmlB,iBAAiBnlB,EAAMgsC,OAAQ,IAEvCplI,KAAK2Q,KAAK49D,QAAQl9B,GAAG,iBAAkB,WACrC+nD,EAAMkrC,gBAAiB,EAAMlrC,EAAMmlB,mBAErCv+G,KAAK2Q,KAAK49D,QAAQl9B,GAAG,iBAAkB,WACrC+nD,EAAMpoD,WAAWooD,EAAMprF,UACH,IAAhBorF,EAAMgsC,OACRhsC,EAAMklB,oBAGVt+G,KAAK2Q,KAAK49D,QAAQl9B,GAAG,kBAAmB,YAClB,IAAhB+nD,EAAMgsC,OACRhsC,EAAMklB,oBAGVt+G,KAAK2Q,KAAK49D,QAAQl9B,GAAG,iBAAkB,WACrC+nD,EAAMmlB,mBAERv+G,KAAK2Q,KAAK49D,QAAQl9B,GAAG,UAAW,WAC9B+nD,EAAMmlB,gBAAe,GACrBnlB,EAAMzoF,KAAK49D,QAAQ/8B,QAGrBxxC,KAAK2Q,KAAK49D,QAAQl9B,GAAG,eAAgB,WAEnC+nD,EAAMqtC,yBAaVl/H,IAAK,aACLhF,MAAO,SAAoByL,OACTnK,KAAZmK,KACc,IAAZA,GACFhO,KAAKgO,QAAQE,SAAU,EACvBlO,KAAKskI,gBAAiB,EACtBtkI,KAAKu+G,mBAELv+G,KAAKskI,gBAAiB,EACtB3jI,EAAKgE,wBAAwB,iBAAkB3E,KAAKgO,QAASA,GAC7DrN,EAAKmN,aAAa9N,KAAKgO,QAASA,EAAS,qBAEjBnK,KAApBmK,EAAQE,UACVlO,KAAKgO,QAAQE,SAAU,IAGI,IAAzBlO,KAAKgO,QAAQE,UACflO,KAAKskI,gBAAiB,EACtBtkI,KAAKu+G,kBAIPv+G,KAAKsmI,SAAWtmI,KAAKgO,QAAQs4H,WAGjCtmI,KAAKg7D,UAQPzzD,IAAK,OACLhF,MAAO,WACL,GAAIyL,EACwB,sBAAxBhO,KAAKgO,QAAQouF,QACfpuF,EAAUhO,KAAKgO,QAAQ63H,iBACvB7lI,KAAK0mI,YAAc,GAAI3C,GAAgC/jI,KAAK2Q,KAAM3Q,KAAKikI,YAAaj2H,GACpFhO,KAAK2mI,YAAc,GAAI/C,GAAa5jI,KAAK2Q,KAAM3Q,KAAKikI,YAAaj2H,GACjEhO,KAAK4mI,cAAgB,GAAI5C,GAAqChkI,KAAK2Q,KAAM3Q,KAAKikI,YAAaj2H,IAC1D,cAAxBhO,KAAKgO,QAAQouF,QACtBpuF,EAAUhO,KAAKgO,QAAQ83H,UACvB9lI,KAAK0mI,YAAc,GAAIhD,GAAU1jI,KAAK2Q,KAAM3Q,KAAKikI,YAAaj2H,GAC9DhO,KAAK2mI,YAAc,GAAI/C,GAAa5jI,KAAK2Q,KAAM3Q,KAAKikI,YAAaj2H,GACjEhO,KAAK4mI,cAAgB,GAAI9C,GAAqB9jI,KAAK2Q,KAAM3Q,KAAKikI,YAAaj2H,IAC1C,0BAAxBhO,KAAKgO,QAAQouF,QACtBpuF,EAAUhO,KAAKgO,QAAQg4H,sBACvBhmI,KAAK0mI,YAAc,GAAI/C,GAAsB3jI,KAAK2Q,KAAM3Q,KAAKikI,YAAaj2H,GAC1EhO,KAAK2mI,YAAc,GAAI9C,GAAyB7jI,KAAK2Q,KAAM3Q,KAAKikI,YAAaj2H,GAC7EhO,KAAK4mI,cAAgB,GAAI9C,GAAqB9jI,KAAK2Q,KAAM3Q,KAAKikI,YAAaj2H,KAG3EA,EAAUhO,KAAKgO,QAAQq3H,UACvBrlI,KAAK0mI,YAAc,GAAIjD,GAAgBzjI,KAAK2Q,KAAM3Q,KAAKikI,YAAaj2H,GACpEhO,KAAK2mI,YAAc,GAAI/C,GAAa5jI,KAAK2Q,KAAM3Q,KAAKikI,YAAaj2H,GACjEhO,KAAK4mI,cAAgB,GAAI9C,GAAqB9jI,KAAK2Q,KAAM3Q,KAAKikI,YAAaj2H,IAG7EhO,KAAK6mI,aAAe74H,KAQtBzG,IAAK,cACLhF,MAAO,YACuB,IAAxBvC,KAAKskI,iBAAoD,IAAzBtkI,KAAKgO,QAAQE,SACJ,IAAvClO,KAAKgO,QAAQm4H,cAAcj4H,QAC7BlO,KAAKw+G,aAELx+G,KAAKilI,YAAa,EAClBjlI,KAAKolI,OAAQ,EACbplI,KAAK2Q,KAAK49D,QAAQrhB,KAAK,SAAWltD,KAAKumI,cACvCvmI,KAAKs+G,oBAGPt+G,KAAKolI,OAAQ,EACbplI,KAAK2Q,KAAK49D,QAAQrhB,KAAK,WAS3B3lD,IAAK,kBACLhF,MAAO,YACuB,IAAxBvC,KAAKskI,iBAAoD,IAAzBtkI,KAAKgO,QAAQE,SAC/ClO,KAAKilI,YAAa,EAGlBjlI,KAAK6kI,kBAAmB,EAGxB7kI,KAAK2Q,KAAK49D,QAAQrhB,KAAK,oBACGrpD,KAAtB7D,KAAK8mI,eACP9mI,KAAK8mI,aAAe9mI,KAAK+mI,eAAezvE,KAAKt3D,MAC7CA,KAAK2Q,KAAK49D,QAAQl9B,GAAG,aAAcrxC,KAAK8mI,cACxC9mI,KAAK2Q,KAAK49D,QAAQrhB,KAAK,qBAGzBltD,KAAK2Q,KAAK49D,QAAQrhB,KAAK,cAS3B3lD,IAAK,iBACLhF,MAAO,WACL,GAAI2qD,KAAOvpD,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,KAAmBA,UAAU,EAE1E3D,MAAKilI,YAAa,GACL,IAAT/3E,GACFltD,KAAKgnI,sBAEmBnjI,KAAtB7D,KAAK8mI,eACP9mI,KAAK2Q,KAAK49D,QAAQ/8B,IAAI,aAAcxxC,KAAK8mI,cACzC9mI,KAAK8mI,iBAAejjI,IACP,IAATqpD,GACFltD,KAAK2Q,KAAK49D,QAAQrhB,KAAK,sBAW7B3lD,IAAK,iBACLhF,MAAO,WAEL,GAAI0kI,GAAYpkI,KAAK4jB,KACrBzmB,MAAKknI,eACarkI,KAAK4jB,MAAQwgH,EAGZ,GAAMjnI,KAAKukI,qBAA8C,IAAxBvkI,KAAKmnI,kBAAgD,IAApBnnI,KAAKilI,aACxFjlI,KAAKknI,cAGLlnI,KAAKmnI,gBAAiB,IAGA,IAApBnnI,KAAKilI,YACPjlI,KAAKu+G,oBAUTh3G,IAAK,kBACLhF,MAAO,WACL,GAAIk4F,GAASz6F,KAETonI,EAAqBzjI,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,GAAK3D,KAAKmlI,yBAE9FnlI,KAAKmlI,wBAA0B,IAAmC,IAA9BnlI,KAAKklI,uBAC3C7vF,WAAW,WACTolD,EAAO9pF,KAAK49D,QAAQrhB,KAAK,cAAgBq7D,WAAY6e,IACrD3sC,EAAOyqC,sBAAuB,EAC9BzqC,EAAO0qC,wBAA0B,GAChC,MAWP59H,IAAK,cACLhF,MAAO,WAOL,IALkC,IAA9BvC,KAAKklI,uBACPllI,KAAK2Q,KAAK49D,QAAQrhB,KAAK,oBACvBltD,KAAKklI,sBAAuB,IAGN,IAApBllI,KAAKilI,WAAsB,CAE7B,IAA8B,IAA1BjlI,KAAK6kI,mBAA8D,IAAjC7kI,KAAK8kI,wBAAkC,CAKvE9kI,KAAK+kI,gBAAkB/kI,KAAKglI,kBAAqB,GAGnDhlI,KAAKsmI,SAAW,EAAItmI,KAAKsmI,SACzBtmI,KAAKqnI,kBACLrnI,KAAKsnI,YACLtnI,KAAKunI,SAGLvnI,KAAKsmI,SAAW,GAAMtmI,KAAKsmI,SAG3BtmI,KAAKqnI,kBACLrnI,KAAKsnI,YACLtnI,KAAKqnI,kBACLrnI,KAAKsnI,aAG+B,IAAhCtnI,KAAKwnI,uBACPxnI,KAAKsmI,SAtBI,IAsBgBtmI,KAAKsmI,SAK1BtmI,KAAKsmI,SA3BA,IA2BoBtmI,KAAKgO,QAAQs4H,SACxCtmI,KAAKsmI,SAAWtmI,KAAKgO,QAAQs4H,UAI7BtmI,KAAK+kI,iBAAmB,EACxB/kI,KAAKsmI,SAAW7jI,KAAKJ,IAAIrC,KAAKgO,QAAQs4H,SAAUtmI,KAAKsmI,SAjC9C,QAsCXtmI,KAAKqnI,kBACLrnI,KAAKsnI,aAIPtnI,KAAK+kI,iBAAmB,MAGxB/kI,MAAKsmI,SAAWtmI,KAAKgO,QAAQs4H,SAC7BtmI,KAAKqnI,kBACLrnI,KAAKsnI,aAIiB,IAApBtnI,KAAKilI,YACPjlI,KAAKunI,SAGPvnI,KAAKmlI,8BAWT59H,IAAK,oBACLhF,MAAO,WACLvC,KAAKikI,YAAYG,UACjBpkI,KAAKikI,YAAYC,sBACjBlkI,KAAKikI,YAAYE,qBACjB,IAAI/qB,GAAQp5G,KAAK2Q,KAAKyoG,MAClBE,EAAQt5G,KAAK2Q,KAAK2oG,KAGtB,KAAK,GAAI6C,KAAU/C,GACbA,EAAM91G,eAAe64G,KACe,IAAlC/C,EAAM+C,GAAQnuG,QAAQmuF,SACxBn8F,KAAKikI,YAAYC,mBAAmBr/H,KAAKu0G,EAAM+C,GAAQ97G,GAM7D,KAAK,GAAI+7G,KAAU9C,GACbA,EAAMh2G,eAAe84G,KACe,IAAlC9C,EAAM8C,GAAQpuG,QAAQmuF,SACxBn8F,KAAKikI,YAAYE,mBAAmBt/H,KAAKy0G,EAAM8C,GAAQ/7G,GAM7D,KAAK,GAAI0D,GAAI,EAAGA,EAAI/D,KAAKikI,YAAYC,mBAAmBtgI,OAAQG,IAAK,CACnE,GAAIypC,GAAUxtC,KAAKikI,YAAYC,mBAAmBngI,EAClD/D,MAAKikI,YAAYG,OAAO52F,IAAazY,EAAG,EAAGpG,EAAG,OAGD9qB,KAAzC7D,KAAKikI,YAAYI,WAAW72F,KAC9BxtC,KAAKikI,YAAYI,WAAW72F,IAAazY,EAAG,EAAGpG,EAAG,IAKtD,IAAK,GAAIw8F,KAAYnrH,MAAKikI,YAAYI,eACZxgI,KAApBu1G,EAAM+R,UACDnrH,MAAKikI,YAAYI,WAAWlZ,MAUzC5jH,IAAK,SACLhF,MAAO,WACL,GAAIklI,IAAU,EAAInmI,EAAgB,SAAGtB,KAAKykI,gBACtCrrB,EAAQp5G,KAAK2Q,KAAKyoG,MAClBirB,EAAarkI,KAAKikI,YAAYI,UAClCrkI,MAAK0kI,iBAEL,KAAK,GAAI3gI,GAAI,EAAGA,EAAI0jI,EAAQ7jI,OAAQG,IAAK,CACvC,GAAIo4G,GAASsrB,EAAQ1jI,OACCF,KAAlBu1G,EAAM+C,IAC8B,IAAlC/C,EAAM+C,GAAQnuG,QAAQmuF,UACxBn8F,KAAK0kI,eAAevoB,IAClBurB,WAAa3yG,EAAGqkF,EAAM+C,GAAQpnF,EAAGpG,EAAGyqF,EAAM+C,GAAQxtF,IAEpD01G,EAAWloB,GAAQpnF,EAAI/0B,KAAKykI,eAAetoB,GAAQwrB,GACnDtD,EAAWloB,GAAQxtF,EAAI3uB,KAAKykI,eAAetoB,GAAQyrB,GACnDxuB,EAAM+C,GAAQpnF,EAAI/0B,KAAKykI,eAAetoB,GAAQpnF,EAC9CqkF,EAAM+C,GAAQxtF,EAAI3uB,KAAKykI,eAAetoB,GAAQxtF,SAGzC3uB,MAAKykI,eAAetoB,OAUjC50G,IAAK,uBACLhF,MAAO,WACL,GAAIq7C,OAAK,GACLC,MAAK,GAELu7D,EAAQp5G,KAAK2Q,KAAKyoG,MAClByuB,EAAY7nI,KAAK0kI,cAGrB,KAAK,GAAIvoB,KAAUn8G,MAAK0kI,eACtB,GAAI1kI,KAAK0kI,eAAephI,eAAe64G,QAA6Bt4G,KAAlBu1G,EAAM+C,KACtDv+D,EAAKw7D,EAAM+C,GAAQpnF,EAAI8yG,EAAU1rB,GAAQurB,UAAU3yG,EACnD8oB,EAAKu7D,EAAM+C,GAAQxtF,EAAIk5G,EAAU1rB,GAAQurB,UAAU/4G,EAE5ClsB,KAAKusD,KAAKvsD,KAAKgnB,IAAIm0B,EAAI,GAAKn7C,KAAKgnB,IAAIo0B,EAAI,IAPjC,IAUb,OAAO,CAIb,QAAO,KASTt2C,IAAK,YACLhF,MAAO,WASL,IAAK,GARD82G,GAAcr5G,KAAKikI,YAAYC,mBAC/B+B,EAAcjmI,KAAKgO,QAAQi4H,YAAcjmI,KAAKgO,QAAQi4H,YAAc,IACpE6B,EAAkB,EAClBC,EAAsB,EAKjBhkI,EAAI,EAAGA,EAAIs1G,EAAYz1G,OAAQG,IAAK,CAC3C,GAAIo4G,GAAS9C,EAAYt1G,GACrBikI,EAAehoI,KAAKioI,aAAa9rB,EAAQ8pB,EAE7C6B,GAAkBrlI,KAAKJ,IAAIylI,EAAiBE,GAC5CD,GAAuBC,EAIzBhoI,KAAK8kI,wBAA0BiD,EAAsB1uB,EAAYz1G,OAXjC,EAYhC5D,KAAKilI,WAAa6C,EAAkB9nI,KAAKgO,QAAQk4H,eAanD3+H,IAAK,eACLhF,MAAO,SAAsB45G,EAAQ8pB,GACnC,GAAI14F,GAAOvtC,KAAK2Q,KAAKyoG,MAAM+C,GACvBmqB,EAAWtmI,KAAKsmI,SAChBlC,EAASpkI,KAAKikI,YAAYG,OAC1BC,EAAarkI,KAAKikI,YAAYI,UAKlC,IAFArkI,KAAKykI,eAAetoB,IAAYpnF,EAAGwY,EAAKxY,EAAGpG,EAAG4e,EAAK5e,EAAGg5G,GAAItD,EAAWloB,GAAQpnF,EAAG6yG,GAAIvD,EAAWloB,GAAQxtF,IAE1E,IAAzB4e,EAAKv/B,QAAQm4G,MAAMpxF,EAAa,CAClC,GAAI6oB,GAAK59C,KAAK6mI,aAAalB,QAAUtB,EAAWloB,GAAQpnF,EACpDynB,GAAM4nF,EAAOjoB,GAAQpnF,EAAI6oB,GAAMrQ,EAAKv/B,QAAQo8G,IAChDia,GAAWloB,GAAQpnF,GAAKynB,EAAK8pF,EAC7BjC,EAAWloB,GAAQpnF,EAAItyB,KAAKwiB,IAAIo/G,EAAWloB,GAAQpnF,GAAKkxG,EAAc5B,EAAWloB,GAAQpnF,EAAI,EAAIkxG,GAAeA,EAAc5B,EAAWloB,GAAQpnF,EACjJwY,EAAKxY,GAAKsvG,EAAWloB,GAAQpnF,EAAIuxG,MAEjClC,GAAOjoB,GAAQpnF,EAAI,EACnBsvG,EAAWloB,GAAQpnF,EAAI,CAGzB,KAA6B,IAAzBwY,EAAKv/B,QAAQm4G,MAAMx3F,EAAa,CAClC,GAAIkvB,GAAK79C,KAAK6mI,aAAalB,QAAUtB,EAAWloB,GAAQxtF,EACpD8tB,GAAM2nF,EAAOjoB,GAAQxtF,EAAIkvB,GAAMtQ,EAAKv/B,QAAQo8G,IAChDia,GAAWloB,GAAQxtF,GAAK8tB,EAAK6pF,EAC7BjC,EAAWloB,GAAQxtF,EAAIlsB,KAAKwiB,IAAIo/G,EAAWloB,GAAQxtF,GAAKs3G,EAAc5B,EAAWloB,GAAQxtF,EAAI,EAAIs3G,GAAeA,EAAc5B,EAAWloB,GAAQxtF,EACjJ4e,EAAK5e,GAAK01G,EAAWloB,GAAQxtF,EAAI23G,MAEjClC,GAAOjoB,GAAQxtF,EAAI,EACnB01G,EAAWloB,GAAQxtF,EAAI,CAIzB,OADoBlsB,MAAKusD,KAAKvsD,KAAKgnB,IAAI46G,EAAWloB,GAAQpnF,EAAG,GAAKtyB,KAAKgnB,IAAI46G,EAAWloB,GAAQxtF,EAAG,OASnGpnB,IAAK,kBACLhF,MAAO,WACLvC,KAAK4mI,cAAcsB,QACnBloI,KAAK0mI,YAAYwB,QACjBloI,KAAK2mI,YAAYuB,WAWnB3gI,IAAK,eACLhF,MAAO,WACL,GAAI62G,GAAQp5G,KAAK2Q,KAAKyoG,KACtB,KAAK,GAAI/4G,KAAM+4G,GACTA,EAAM91G,eAAejD,IACnB+4G,EAAM/4G,GAAI00B,GAAKqkF,EAAM/4G,GAAIsuB,IAC3B3uB,KAAK2kI,YAAYtkI,IAAQ00B,EAAGqkF,EAAM/4G,GAAI2N,QAAQm4G,MAAMpxF,EAAGpG,EAAGyqF,EAAM/4G,GAAI2N,QAAQm4G,MAAMx3F,GAClFyqF,EAAM/4G,GAAI2N,QAAQm4G,MAAMpxF,GAAI,EAC5BqkF,EAAM/4G,GAAI2N,QAAQm4G,MAAMx3F,GAAI,MAapCpnB,IAAK,sBACLhF,MAAO,WACL,GAAI62G,GAAQp5G,KAAK2Q,KAAKyoG,KACtB,KAAK,GAAI/4G,KAAM+4G,GACTA,EAAM91G,eAAejD,QACMwD,KAAzB7D,KAAK2kI,YAAYtkI,KACnB+4G,EAAM/4G,GAAI2N,QAAQm4G,MAAMpxF,EAAI/0B,KAAK2kI,YAAYtkI,GAAI00B,EACjDqkF,EAAM/4G,GAAI2N,QAAQm4G,MAAMx3F,EAAI3uB,KAAK2kI,YAAYtkI,GAAIsuB,EAIvD3uB,MAAK2kI,kBAQPp9H,IAAK,YACLhF,MAAO,WACL,GAAIs4F,GAAS76F,KAETuoH,EAAa5kH,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,GAAK3D,KAAKgO,QAAQm4H,cAAc5d,UAOhH,IAL0B,gBAAfA,KACTjjG,QAAQuuC,IAAI,oFAAqF7zD,KAAKgO,QAAQm4H,cAAc5d,YAC5HA,EAAavoH,KAAKgO,QAAQm4H,cAAc5d,YAGS,IAA/CvoH,KAAKikI,YAAYC,mBAAmBtgI,OAEtC,YADA5D,KAAKolI,OAAQ,EAKfplI,MAAK6kI,iBAA2B7kI,KAAKgO,QAAQ62H,iBAG7C7kI,KAAK2Q,KAAK49D,QAAQrhB,KAAK,gBAGvBltD,KAAKu+G,iBAGLv+G,KAAKilI,YAAa,EAGlBjlI,KAAK2Q,KAAK49D,QAAQrhB,KAAK,gBACvBltD,KAAKmoI,iBAAmB5f,GAG4B,IAAhDvoH,KAAKgO,QAAQm4H,cAAcE,kBAC7BrmI,KAAKooI,eAEPpoI,KAAKmlI,wBAA0B,EAE/B9vF,WAAW,WACT,MAAOwlD,GAAOwtC,uBACb,MASL9gI,IAAK,sBACLhF,MAAO,YAE6B,IAA9BvC,KAAKklI,uBACPllI,KAAK2Q,KAAK49D,QAAQrhB,KAAK,oBACvBltD,KAAKklI,sBAAuB,EAI9B,KADA,GAAI7wF,GAAQ,GACe,IAApBr0C,KAAKilI,YAAwB5wF,EAAQr0C,KAAKgO,QAAQm4H,cAAcC,gBAAkBpmI,KAAKmlI,wBAA0BnlI,KAAKmoI,kBAC3HnoI,KAAKknI,cACL7yF,KAGsB,IAApBr0C,KAAKilI,YAAwBjlI,KAAKmlI,wBAA0BnlI,KAAKmoI,kBACnEnoI,KAAK2Q,KAAK49D,QAAQrhB,KAAK,yBAA2Bq7D,WAAYvoH,KAAKmlI,wBAAyB7iI,MAAOtC,KAAKmoI,mBACxG9yF,WAAWr1C,KAAKqoI,oBAAoB/wE,KAAKt3D,MAAO,IAEhDA,KAAKsoI,4BAUT/gI,IAAK,yBACLhF,MAAO,WACLvC,KAAK2Q,KAAK49D,QAAQrhB,KAAK,iBACgB,IAAnCltD,KAAKgO,QAAQm4H,cAAcj2D,KAC7BlwE,KAAK2Q,KAAK49D,QAAQrhB,KAAK,QAG2B,IAAhDltD,KAAKgO,QAAQm4H,cAAcE,kBAC7BrmI,KAAKuoI,sBAGPvoI,KAAK2Q,KAAK49D,QAAQrhB,KAAK,+BACvBltD,KAAK2Q,KAAK49D,QAAQrhB,KAAK,mBAEC,IAApBltD,KAAKilI,WACPjlI,KAAKgnI,kBAELhnI,KAAKs+G,kBAGPt+G,KAAKolI,OAAQ,KAGf79H,IAAK,cACLhF,MAAO,SAAqB+S,GAC1B,IAAK,GAAIvR,GAAI,EAAGA,EAAI/D,KAAKikI,YAAYC,mBAAmBtgI,OAAQG,IAAK,CACnE,GAAIwpC,GAAOvtC,KAAK2Q,KAAKyoG,MAAMp5G,KAAKikI,YAAYC,mBAAmBngI,IAC3DumE,EAAQtqE,KAAKikI,YAAYG,OAAOpkI,KAAKikI,YAAYC,mBAAmBngI,IAGpEykI,EAAY/lI,KAAKusD,KAAKvsD,KAAKgnB,IAAI6gD,EAAMv1C,EAAG,GAAKtyB,KAAKgnB,IAAI6gD,EAAMv1C,EAAG,IAE/Dob,EAAO1tC,KAAKL,IAAIK,KAAKJ,IAAI,EAAGmmI,GAAY,IACxCC,EAAY,EAAIt4F,EAEhBjmC,EAAQvJ,EAAK6K,UAAU,IAA0D,IAApD/I,KAAKL,IAAI,EAAGK,KAAKJ,IAAI,EANpC,IAMqDmmI,KAAqB,IAAK,EAAG,EAEpGlzH,GAAIkwC,UAAYrV,EAChB76B,EAAIuwC,YAAc37C,EAClBoL,EAAIwwC,YACJxwC,EAAIywC,OAAOxY,EAAKxY,EAAGwY,EAAK5e,GACxBrZ,EAAI0wC,OAAOzY,EAAKxY,EAbH,GAagBu1C,EAAMv1C,EAAGwY,EAAK5e,EAb9B,GAa2C27C,EAAM37C,GAC9DrZ,EAAI2kC,QAEJ,IAAI8iB,GAAQt6D,KAAKq8D,MAAMwL,EAAM37C,EAAG27C,EAAMv1C,EACtCzf,GAAI6wC,UAAYj8C,EAChBoL,EAAImrG,cAAclzE,EAAKxY,EAlBV,GAkBuBu1C,EAAMv1C,EAAItyB,KAAKw6C,IAAI8f,GAAS0rE,EAAWl7F,EAAK5e,EAlBnE,GAkBgF27C,EAAM37C,EAAIlsB,KAAKs6C,IAAIggB,GAAS0rE,EAAW1rE,EAAO0rE,GAC3InzH,EAAI0kC,YAIHihE,IAGTr7G,GAAiB,QAAIq7G,GAIjB,SAAUp7G,EAAQD,EAASM,GAgB/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAZzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAIsvF,GAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAIvC0xC,EAAkB,WACpB,QAASA,GAAgB9yH,EAAMszH,EAAaj2H,IAC1C,EAAI8jF,EAA0B,SAAG9xF,KAAMyjI,GAEvCzjI,KAAK2Q,KAAOA,EACZ3Q,KAAKikI,YAAcA,EACnBjkI,KAAK0oI,cACL1oI,KAAKgxC,WAAWhjC,GAChBhO,KAAK2oI,WAAa,EAsepB,OAheA,EAAI32C,EAAuB,SAAGyxC,IAC5Bl8H,IAAK,aACLhF,MAAO,SAAoByL,GACzBhO,KAAKgO,QAAUA,EACfhO,KAAK4oI,cAAgB,EAAI5oI,KAAKgO,QAAQs3H,MACtCtlI,KAAK6oI,uBAAyB,EAAIpmI,KAAKJ,IAAI,EAAGI,KAAKL,IAAI,EAAGpC,KAAKgO,QAAQ43H,kBAGzEr+H,IAAK,eACLhF,MAAO,WACL,GAAIwyB,GAAkC,IAA9BtyB,KAAKs6C,IAAI/8C,KAAK2oI,aACtB,OAAO5zG,GAAItyB,KAAKqK,MAAMioB,MAWxBxtB,IAAK,QACLhF,MAAO,WACL,GAA2C,IAAvCvC,KAAKgO,QAAQu3H,uBAA+BvlI,KAAKikI,YAAYC,mBAAmBtgI,OAAS,EAAG,CAC9F,GAAI2pC,OAAO,GACP6rE,EAAQp5G,KAAK2Q,KAAKyoG,MAClBC,EAAcr5G,KAAKikI,YAAYC,mBAC/B4E,EAAYzvB,EAAYz1G,OAGxB8kI,EAAgB1oI,KAAK+oI,mBAAmB3vB,EAAOC,EAGnDr5G,MAAK0oI,cAAgBA,CAGrB,KAAK,GAAI3kI,GAAI,EAAGA,EAAI+kI,EAAW/kI,IAC7BwpC,EAAO6rE,EAAMC,EAAYt1G,IACrBwpC,EAAKv/B,QAAQo8G,KAAO,IAEtBpqH,KAAKgpI,sBAAsBN,EAAchpI,KAAKysC,SAAS88F,GAAI17F,GAC3DvtC,KAAKgpI,sBAAsBN,EAAchpI,KAAKysC,SAAS+8F,GAAI37F,GAC3DvtC,KAAKgpI,sBAAsBN,EAAchpI,KAAKysC,SAASg9F,GAAI57F,GAC3DvtC,KAAKgpI,sBAAsBN,EAAchpI,KAAKysC,SAASi9F,GAAI77F,QAgBnEhmC,IAAK,wBACLhF,MAAO,SAA+B8mI,EAAc97F,GAElD,GAAI87F,EAAaC,cAAgB,EAAG,CAClC,GAAI1rF,OAAK,GACLC,MAAK,GACLvD,MAAW,EAGfsD,GAAKyrF,EAAaE,aAAax0G,EAAIwY,EAAKxY,EACxC8oB,EAAKwrF,EAAaE,aAAa56G,EAAI4e,EAAK5e,EACxC2rB,EAAW73C,KAAKusD,KAAKpR,EAAKA,EAAKC,EAAKA,GAKhCvD,EAAW+uF,EAAaG,SAAWxpI,KAAK4oI,cAC1C5oI,KAAKypI,iBAAiBnvF,EAAUsD,EAAIC,EAAItQ,EAAM87F,GAGX,IAA/BA,EAAaC,eACftpI,KAAKgpI,sBAAsBK,EAAal9F,SAAS88F,GAAI17F,GACrDvtC,KAAKgpI,sBAAsBK,EAAal9F,SAAS+8F,GAAI37F,GACrDvtC,KAAKgpI,sBAAsBK,EAAal9F,SAASg9F,GAAI57F,GACrDvtC,KAAKgpI,sBAAsBK,EAAal9F,SAASi9F,GAAI77F,IAGjD87F,EAAal9F,SAAS3X,KAAKn0B,IAAMktC,EAAKltC,IAExCL,KAAKypI,iBAAiBnvF,EAAUsD,EAAIC,EAAItQ,EAAM87F,OAmBxD9hI,IAAK,mBACLhF,MAAO,SAA0B+3C,EAAUsD,EAAIC,EAAItQ,EAAM87F,GACtC,IAAb/uF,IACFA,EAAW,GACXsD,EAAKtD,GAGHt6C,KAAK6oI,uBAAyB,GAAKt7F,EAAKo3E,MAAM96D,SAChDvP,EAAW73C,KAAKJ,IAAI,GAAMrC,KAAK6oI,uBAAyBt7F,EAAKo3E,MAAM96D,OAAQvP,EAAW/M,EAAKo3E,MAAM96D,QAKnG,IAAI6/E,GAAe1pI,KAAKgO,QAAQu3H,sBAAwB8D,EAAajf,KAAO78E,EAAKv/B,QAAQo8G,KAAO3nH,KAAKgnB,IAAI6wB,EAAU,GAC/GqvF,EAAK/rF,EAAK8rF,EACVE,EAAK/rF,EAAK6rF,CAEd1pI,MAAKikI,YAAYG,OAAO72F,EAAKltC,IAAI00B,GAAK40G,EACtC3pI,KAAKikI,YAAYG,OAAO72F,EAAKltC,IAAIsuB,GAAKi7G,KAYxCriI,IAAK,qBACLhF,MAAO,SAA4B62G,EAAOC,GAUxC,IAAK,GATD9rE,OAAO,GACPu7F,EAAYzvB,EAAYz1G,OAExBimI,EAAOzwB,EAAMC,EAAY,IAAItkF,EAC7B+0G,EAAO1wB,EAAMC,EAAY,IAAI1qF,EAC7Bo7G,EAAO3wB,EAAMC,EAAY,IAAItkF,EAC7Bi1G,EAAO5wB,EAAMC,EAAY,IAAI1qF,EAGxB5qB,EAAI,EAAGA,EAAI+kI,EAAW/kI,IAAK,CAClC,GAAIgxB,GAAIqkF,EAAMC,EAAYt1G,IAAIgxB,EAC1BpG,EAAIyqF,EAAMC,EAAYt1G,IAAI4qB,CAC1ByqF,GAAMC,EAAYt1G,IAAIiK,QAAQo8G,KAAO,IACnCr1F,EAAI80G,IACNA,EAAO90G,GAELA,EAAIg1G,IACNA,EAAOh1G,GAELpG,EAAIm7G,IACNA,EAAOn7G,GAELA,EAAIq7G,IACNA,EAAOr7G,IAKb,GAAI8/F,GAAWhsH,KAAKwiB,IAAI8kH,EAAOF,GAAQpnI,KAAKwiB,IAAI+kH,EAAOF,EACnDrb,GAAW,GACbqb,GAAQ,GAAMrb,EACdub,GAAQ,GAAMvb,IAGZob,GAAQ,GAAMpb,EACdsb,GAAQ,GAAMtb,EAIlB,IACIwb,GAAWxnI,KAAKJ,IADE,KACmBI,KAAKwiB,IAAI8kH,EAAOF,IACrDK,EAAe,GAAMD,EACrB5gC,EAAU,IAAOwgC,EAAOE,GACxB3gC,EAAU,IAAO0gC,EAAOE,GAGxBtB,GACFhpI,MACE6pI,cAAgBx0G,EAAG,EAAGpG,EAAG,GACzBy7F,KAAM,EACN9uE,OACEuuF,KAAMxgC,EAAU6gC,EAAcH,KAAM1gC,EAAU6gC,EAC9CJ,KAAM1gC,EAAU8gC,EAAcF,KAAM5gC,EAAU8gC,GAEhD/5F,KAAM85F,EACNT,SAAU,EAAIS,EACd99F,UAAY3X,KAAM,MAClBi7D,SAAU,EACV06B,MAAO,EACPmf,cAAe,GAGnBtpI,MAAKmqI,aAAazB,EAAchpI,KAGhC,KAAK,GAAIkT,GAAK,EAAGA,EAAKk2H,EAAWl2H,IAC/B26B,EAAO6rE,EAAMC,EAAYzmG,IACrB26B,EAAKv/B,QAAQo8G,KAAO,GACtBpqH,KAAKoqI,aAAa1B,EAAchpI,KAAM6tC,EAK1C,OAAOm7F,MAYTnhI,IAAK,oBACLhF,MAAO,SAA2B8mI,EAAc97F,GAC9C,GAAI88F,GAAYhB,EAAajf,KAAO78E,EAAKv/B,QAAQo8G,KAC7CkgB,EAAe,EAAID,CAEvBhB,GAAaE,aAAax0G,EAAIs0G,EAAaE,aAAax0G,EAAIs0G,EAAajf,KAAO78E,EAAKxY,EAAIwY,EAAKv/B,QAAQo8G,KACtGif,EAAaE,aAAax0G,GAAKu1G,EAE/BjB,EAAaE,aAAa56G,EAAI06G,EAAaE,aAAa56G,EAAI06G,EAAajf,KAAO78E,EAAK5e,EAAI4e,EAAKv/B,QAAQo8G,KACtGif,EAAaE,aAAa56G,GAAK27G,EAE/BjB,EAAajf,KAAOigB,CACpB,IAAIE,GAAc9nI,KAAKJ,IAAII,KAAKJ,IAAIkrC,EAAKl9B,OAAQk9B,EAAKsc,QAAStc,EAAKn9B,MACpEi5H,GAAa55C,SAAW45C,EAAa55C,SAAW86C,EAAcA,EAAclB,EAAa55C,YAa3FloF,IAAK,eACLhF,MAAO,SAAsB8mI,EAAc97F,EAAMi9F,GACzB,GAAlBA,OAA6C3mI,KAAnB2mI,GAE5BxqI,KAAKyqI,kBAAkBpB,EAAc97F,GAGnC87F,EAAal9F,SAAS88F,GAAG3tF,MAAMyuF,KAAOx8F,EAAKxY,EAEzCs0G,EAAal9F,SAAS88F,GAAG3tF,MAAM0uF,KAAOz8F,EAAK5e,EAE7C3uB,KAAK0qI,eAAerB,EAAc97F,EAAM,MAGxCvtC,KAAK0qI,eAAerB,EAAc97F,EAAM,MAItC87F,EAAal9F,SAAS88F,GAAG3tF,MAAM0uF,KAAOz8F,EAAK5e,EAE7C3uB,KAAK0qI,eAAerB,EAAc97F,EAAM,MAGxCvtC,KAAK0qI,eAAerB,EAAc97F,EAAM,SAe9ChmC,IAAK,iBACLhF,MAAO,SAAwB8mI,EAAc97F,EAAMo9F,GACjD,OAAQtB,EAAal9F,SAASw+F,GAAQrB,eACpC,IAAK,GAEHD,EAAal9F,SAASw+F,GAAQx+F,SAAS3X,KAAO+Y,EAC9C87F,EAAal9F,SAASw+F,GAAQrB,cAAgB,EAC9CtpI,KAAKyqI,kBAAkBpB,EAAal9F,SAASw+F,GAASp9F,EACtD,MACF,KAAK,GAIC87F,EAAal9F,SAASw+F,GAAQx+F,SAAS3X,KAAKO,IAAMwY,EAAKxY,GAAKs0G,EAAal9F,SAASw+F,GAAQx+F,SAAS3X,KAAK7F,IAAM4e,EAAK5e,GACrH4e,EAAKxY,GAAK/0B,KAAK4qI,eACfr9F,EAAK5e,GAAK3uB,KAAK4qI,iBAEf5qI,KAAKmqI,aAAad,EAAal9F,SAASw+F,IACxC3qI,KAAKoqI,aAAaf,EAAal9F,SAASw+F,GAASp9F,GAEnD,MACF,KAAK,GAEHvtC,KAAKoqI,aAAaf,EAAal9F,SAASw+F,GAASp9F,OAcvDhmC,IAAK,eACLhF,MAAO,SAAsB8mI,GAE3B,GAAIwB,GAAgB,IACe,KAA/BxB,EAAaC,gBACfuB,EAAgBxB,EAAal9F,SAAS3X,KACtC60G,EAAajf,KAAO,EACpBif,EAAaE,aAAax0G,EAAI,EAC9Bs0G,EAAaE,aAAa56G,EAAI,GAEhC06G,EAAaC,cAAgB,EAC7BD,EAAal9F,SAAS3X,KAAO,KAC7Bx0B,KAAK8qI,cAAczB,EAAc,MACjCrpI,KAAK8qI,cAAczB,EAAc,MACjCrpI,KAAK8qI,cAAczB,EAAc,MACjCrpI,KAAK8qI,cAAczB,EAAc,MAEZ,MAAjBwB,GACF7qI,KAAKoqI,aAAaf,EAAcwB,MAgBpCtjI,IAAK,gBACLhF,MAAO,SAAuB8mI,EAAcsB,GAC1C,GAAId,OAAO,GACPE,MAAO,GACPD,MAAO,GACPE,MAAO,GACPe,EAAY,GAAM1B,EAAal5F,IACnC,QAAQw6F,GACN,IAAK,KACHd,EAAOR,EAAa/tF,MAAMuuF,KAC1BE,EAAOV,EAAa/tF,MAAMuuF,KAAOkB,EACjCjB,EAAOT,EAAa/tF,MAAMwuF,KAC1BE,EAAOX,EAAa/tF,MAAMwuF,KAAOiB,CACjC,MACF,KAAK,KACHlB,EAAOR,EAAa/tF,MAAMuuF,KAAOkB,EACjChB,EAAOV,EAAa/tF,MAAMyuF,KAC1BD,EAAOT,EAAa/tF,MAAMwuF,KAC1BE,EAAOX,EAAa/tF,MAAMwuF,KAAOiB,CACjC,MACF,KAAK,KACHlB,EAAOR,EAAa/tF,MAAMuuF,KAC1BE,EAAOV,EAAa/tF,MAAMuuF,KAAOkB,EACjCjB,EAAOT,EAAa/tF,MAAMwuF,KAAOiB,EACjCf,EAAOX,EAAa/tF,MAAM0uF,IAC1B,MACF,KAAK,KACHH,EAAOR,EAAa/tF,MAAMuuF,KAAOkB,EACjChB,EAAOV,EAAa/tF,MAAMyuF,KAC1BD,EAAOT,EAAa/tF,MAAMwuF,KAAOiB,EACjCf,EAAOX,EAAa/tF,MAAM0uF,KAI9BX,EAAal9F,SAASw+F,IACpBpB,cAAgBx0G,EAAG,EAAGpG,EAAG,GACzBy7F,KAAM,EACN9uE,OAASuuF,KAAMA,EAAME,KAAMA,EAAMD,KAAMA,EAAME,KAAMA,GACnD75F,KAAM,GAAMk5F,EAAal5F,KACzBq5F,SAAU,EAAIH,EAAaG,SAC3Br9F,UAAY3X,KAAM,MAClBi7D,SAAU,EACV06B,MAAOkf,EAAalf,MAAQ,EAC5Bmf,cAAe,MAgBnB/hI,IAAK,SACLhF,MAAO,SAAgB+S,EAAKpL,OACCrG,KAAvB7D,KAAK0oI,gBAEPpzH,EAAIkwC,UAAY,EAEhBxlD,KAAKgrI,YAAYhrI,KAAK0oI,cAAchpI,KAAM4V,EAAKpL,OAcnD3C,IAAK,cACLhF,MAAO,SAAqB0oI,EAAQ31H,EAAKpL,OACzBrG,KAAVqG,IACFA,EAAQ,WAGmB,IAAzB+gI,EAAO3B,gBACTtpI,KAAKgrI,YAAYC,EAAO9+F,SAAS88F,GAAI3zH,GACrCtV,KAAKgrI,YAAYC,EAAO9+F,SAAS+8F,GAAI5zH,GACrCtV,KAAKgrI,YAAYC,EAAO9+F,SAASi9F,GAAI9zH,GACrCtV,KAAKgrI,YAAYC,EAAO9+F,SAASg9F,GAAI7zH,IAEvCA,EAAIuwC,YAAc37C,EAClBoL,EAAIwwC,YACJxwC,EAAIywC,OAAOklF,EAAO3vF,MAAMuuF,KAAMoB,EAAO3vF,MAAMwuF,MAC3Cx0H,EAAI0wC,OAAOilF,EAAO3vF,MAAMyuF,KAAMkB,EAAO3vF,MAAMwuF,MAC3Cx0H,EAAI2kC,SAEJ3kC,EAAIwwC,YACJxwC,EAAIywC,OAAOklF,EAAO3vF,MAAMyuF,KAAMkB,EAAO3vF,MAAMwuF,MAC3Cx0H,EAAI0wC,OAAOilF,EAAO3vF,MAAMyuF,KAAMkB,EAAO3vF,MAAM0uF,MAC3C10H,EAAI2kC,SAEJ3kC,EAAIwwC,YACJxwC,EAAIywC,OAAOklF,EAAO3vF,MAAMyuF,KAAMkB,EAAO3vF,MAAM0uF,MAC3C10H,EAAI0wC,OAAOilF,EAAO3vF,MAAMuuF,KAAMoB,EAAO3vF,MAAM0uF,MAC3C10H,EAAI2kC,SAEJ3kC,EAAIwwC,YACJxwC,EAAIywC,OAAOklF,EAAO3vF,MAAMuuF,KAAMoB,EAAO3vF,MAAM0uF,MAC3C10H,EAAI0wC,OAAOilF,EAAO3vF,MAAMuuF,KAAMoB,EAAO3vF,MAAMwuF,MAC3Cx0H,EAAI2kC,aAUDwpF,IAGT7jI,GAAiB,QAAI6jI,GAIjB,SAAU5jI,EAAQD,EAASM,GAgB/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAZzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAIsvF,GAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAIvCm5C,EAAkB,WACpB,QAASA,GAAgBv6H,EAAMszH,EAAaj2H,IAC1C,EAAI8jF,EAA0B,SAAG9xF,KAAMkrI,GAEvClrI,KAAK2Q,KAAOA,EACZ3Q,KAAKikI,YAAcA,EACnBjkI,KAAKgxC,WAAWhjC,GAoElB,OAjEA,EAAIgkF,EAAuB,SAAGk5C,IAC5B3jI,IAAK,aACLhF,MAAO,SAAoByL,GACzBhO,KAAKgO,QAAUA,KAUjBzG,IAAK,QACLhF,MAAO,WAgBL,IAAK,GAfDq7C,GAAIC,EAAIvD,EAAUqvF,EAAIC,EAAIuB,EAAgBpO,EAAOC,EAEjD5jB,EAAQp5G,KAAK2Q,KAAKyoG,MAClBC,EAAcr5G,KAAKikI,YAAYC,mBAC/BE,EAASpkI,KAAKikI,YAAYG,OAG1B2B,EAAe/lI,KAAKgO,QAAQ+3H,aAG5BviI,GAAK,EAAI,EAAIuiI,EAKRhiI,EAAI,EAAGA,EAAIs1G,EAAYz1G,OAAS,EAAGG,IAAK,CAC/Cg5H,EAAQ3jB,EAAMC,EAAYt1G,GAC1B,KAAK,GAAI8J,GAAI9J,EAAI,EAAG8J,EAAIwrG,EAAYz1G,OAAQiK,IAC1CmvH,EAAQ5jB,EAAMC,EAAYxrG,IAE1B+vC,EAAKo/E,EAAMjoG,EAAIgoG,EAAMhoG,EACrB8oB,EAAKm/E,EAAMruG,EAAIouG,EAAMpuG,EACrB2rB,EAAW73C,KAAKusD,KAAKpR,EAAKA,EAAKC,EAAKA,GAGnB,IAAbvD,IACFA,EAAW,GAAM73C,KAAKyX,SACtB0jC,EAAKtD,GAGHA,EAAW,EAAIyrF,IAEfoF,EADE7wF,EAAW,GAAMyrF,EACF,EAEAviI,EAAI82C,EAvBrB,EAAI,EAyBN6wF,GAAkC7wF,EAElCqvF,EAAK/rF,EAAKutF,EACVvB,EAAK/rF,EAAKstF,EAEV/G,EAAOrH,EAAM18H,IAAI00B,GAAK40G,EACtBvF,EAAOrH,EAAM18H,IAAIsuB,GAAKi7G,EACtBxF,EAAOpH,EAAM38H,IAAI00B,GAAK40G,EACtBvF,EAAOpH,EAAM38H,IAAIsuB,GAAKi7G,QAMzBsB,IAGTtrI,GAAiB,QAAIsrI,GAIjB,SAAUrrI,EAAQD,EAASM,GAgB/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAZzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAIsvF,GAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAIvCq5C,EAA8B,WAChC,QAASA,GAA4Bz6H,EAAMszH,EAAaj2H,IACtD,EAAI8jF,EAA0B,SAAG9xF,KAAMorI,GAEvCprI,KAAK2Q,KAAOA,EACZ3Q,KAAKikI,YAAcA,EACnBjkI,KAAKgxC,WAAWhjC,GAiElB,OA9DA,EAAIgkF,EAAuB,SAAGo5C,IAC5B7jI,IAAK,aACLhF,MAAO,SAAoByL,GACzBhO,KAAKgO,QAAUA,KAWjBzG,IAAK,QACLhF,MAAO,WACL,GAAIq7C,GAAIC,EAAIvD,EAAUqvF,EAAIC,EAAIuB,EAAgBpO,EAAOC,EAAOj5H,EAAG8J,EAE3DurG,EAAQp5G,KAAK2Q,KAAKyoG,MAClBC,EAAcr5G,KAAKikI,YAAYC,mBAC/BE,EAASpkI,KAAKikI,YAAYG,OAG1B2B,EAAe/lI,KAAKgO,QAAQ+3H,YAIhC,KAAKhiI,EAAI,EAAGA,EAAIs1G,EAAYz1G,OAAS,EAAGG,IAEtC,IADAg5H,EAAQ3jB,EAAMC,EAAYt1G,IACrB8J,EAAI9J,EAAI,EAAG8J,EAAIwrG,EAAYz1G,OAAQiK,IAItC,GAHAmvH,EAAQ5jB,EAAMC,EAAYxrG,IAGtBkvH,EAAM5S,QAAU6S,EAAM7S,MAAO,CAC/BvsE,EAAKo/E,EAAMjoG,EAAIgoG,EAAMhoG,EACrB8oB,EAAKm/E,EAAMruG,EAAIouG,EAAMpuG,EACrB2rB,EAAW73C,KAAKusD,KAAKpR,EAAKA,EAAKC,EAAKA,EAIlCstF,GADE7wF,EAAWyrF,GACKtjI,KAAKgnB,IAFT,IAEyB6wB,EAAU,GAAK73C,KAAKgnB,IAF7C,IAE6Ds8G,EAAc,GAExE,EAGF,IAAbzrF,EACFA,EAAW,IAEX6wF,GAAkC7wF,EAEpCqvF,EAAK/rF,EAAKutF,EACVvB,EAAK/rF,EAAKstF,EAEV/G,EAAOrH,EAAM18H,IAAI00B,GAAK40G,EACtBvF,EAAOrH,EAAM18H,IAAIsuB,GAAKi7G,EACtBxF,EAAOpH,EAAM38H,IAAI00B,GAAK40G,EACtBvF,EAAOpH,EAAM38H,IAAIsuB,GAAKi7G,OAMzBwB,IAGTxrI,GAAiB,QAAIwrI,GAIjB,SAAUvrI,EAAQD,EAASM,GAgB/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAZzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAIsvF,GAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAIvC6xC,EAAe,WACjB,QAASA,GAAajzH,EAAMszH,EAAaj2H,IACvC,EAAI8jF,EAA0B,SAAG9xF,KAAM4jI,GAEvC5jI,KAAK2Q,KAAOA,EACZ3Q,KAAKikI,YAAcA,EACnBjkI,KAAKgxC,WAAWhjC,GAqFlB,OAlFA,EAAIgkF,EAAuB,SAAG4xC,IAC5Br8H,IAAK,aACLhF,MAAO,SAAoByL,GACzBhO,KAAKgO,QAAUA,KAUjBzG,IAAK,QACLhF,MAAO,WAUL,IAAK,GATD8oI,OAAa,GACbxsB,MAAO,GACPtF,EAAcv5G,KAAKikI,YAAYE,mBAC/B7qB,EAAQt5G,KAAK2Q,KAAK2oG,MAClByjB,MAAQ,GACRC,MAAQ,GACRsO,MAAQ,GAGHvnI,EAAI,EAAGA,EAAIw1G,EAAY31G,OAAQG,IACtC86G,EAAOvF,EAAMC,EAAYx1G,KACF,IAAnB86G,EAAKsc,WAAsBtc,EAAKoN,OAASpN,EAAKqN,YAEbroH,KAA/B7D,KAAK2Q,KAAKyoG,MAAMyF,EAAKoN,WAAwDpoH,KAAjC7D,KAAK2Q,KAAKyoG,MAAMyF,EAAKqN,cACzCroH,KAAtBg7G,EAAKqc,SAAS8E,KAChBqL,MAAqCxnI,KAAxBg7G,EAAK7wG,QAAQpK,OAAuB5D,KAAKgO,QAAQy3H,aAAe5mB,EAAK7wG,QAAQpK;4MAC1Fm5H,EAAQle,EAAKr7F,GACbw5G,EAAQne,EAAKqc,SAAS8E,IACtBsL,EAAQzsB,EAAKp7F,KAEbzjB,KAAKurI,sBAAsBxO,EAAOC,EAAO,GAAMqO,GAC/CrrI,KAAKurI,sBAAsBvO,EAAOsO,EAAO,GAAMD,KAI/CA,MAAqCxnI,KAAxBg7G,EAAK7wG,QAAQpK,OAAmD,IAA5B5D,KAAKgO,QAAQy3H,aAAqB5mB,EAAK7wG,QAAQpK,OAChG5D,KAAKurI,sBAAsB1sB,EAAKp7F,KAAMo7F,EAAKr7F,GAAI6nH,QAiBzD9jI,IAAK,wBACLhF,MAAO,SAA+Bw6H,EAAOC,EAAOqO,GAClD,GAAIztF,GAAKm/E,EAAMhoG,EAAIioG,EAAMjoG,EACrB8oB,EAAKk/E,EAAMpuG,EAAIquG,EAAMruG,EACrB2rB,EAAW73C,KAAKJ,IAAII,KAAKusD,KAAKpR,EAAKA,EAAKC,EAAKA,GAAK,KAGlD2tF,EAAcxrI,KAAKgO,QAAQ03H,gBAAkB2F,EAAa/wF,GAAYA,EAEtEqvF,EAAK/rF,EAAK4tF,EACV5B,EAAK/rF,EAAK2tF,MAG4B3nI,KAAtC7D,KAAKikI,YAAYG,OAAOrH,EAAM18H,MAChCL,KAAKikI,YAAYG,OAAOrH,EAAM18H,IAAI00B,GAAK40G,EACvC3pI,KAAKikI,YAAYG,OAAOrH,EAAM18H,IAAIsuB,GAAKi7G,OAGC/lI,KAAtC7D,KAAKikI,YAAYG,OAAOpH,EAAM38H,MAChCL,KAAKikI,YAAYG,OAAOpH,EAAM38H,IAAI00B,GAAK40G,EACvC3pI,KAAKikI,YAAYG,OAAOpH,EAAM38H,IAAIsuB,GAAKi7G,OAItChG,IAGThkI,GAAiB,QAAIgkI,GAIjB,SAAU/jI,EAAQD,EAASM,GAgB/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAZzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAIsvF,GAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAIvC8xC,EAA2B,WAC7B,QAASA,GAAyBlzH,EAAMszH,EAAaj2H,IACnD,EAAI8jF,EAA0B,SAAG9xF,KAAM6jI,GAEvC7jI,KAAK2Q,KAAOA,EACZ3Q,KAAKikI,YAAcA,EACnBjkI,KAAKgxC,WAAWhjC,GAuGlB,OApGA,EAAIgkF,EAAuB,SAAG6xC,IAC5Bt8H,IAAK,aACLhF,MAAO,SAAoByL,GACzBhO,KAAKgO,QAAUA,KAUjBzG,IAAK,QACLhF,MAAO,WAWL,IAAK,GAVD8oI,GAAYxsB,EACZjhE,EAAIC,EAAI8rF,EAAIC,EAAI4B,EAAalxF,EAC7Bg/D,EAAQt5G,KAAK2Q,KAAK2oG,MAGlBC,EAAcv5G,KAAKikI,YAAYE,mBAC/B9qB,EAAcr5G,KAAKikI,YAAYC,mBAC/BE,EAASpkI,KAAKikI,YAAYG,OAGrBrgI,EAAI,EAAGA,EAAIs1G,EAAYz1G,OAAQG,IAAK,CAC3C,GAAIo4G,GAAS9C,EAAYt1G,EACzBqgI,GAAOjoB,GAAQsvB,SAAW,EAC1BrH,EAAOjoB,GAAQuvB,SAAW,EAI5B,IAAK,GAAI94H,GAAK,EAAGA,EAAK2mG,EAAY31G,OAAQgP,IACxCisG,EAAOvF,EAAMC,EAAY3mG,KACF,IAAnBisG,EAAKsc,YACPkQ,MAAqCxnI,KAAxBg7G,EAAK7wG,QAAQpK,OAAuB5D,KAAKgO,QAAQy3H,aAAe5mB,EAAK7wG,QAAQpK,OAE1Fg6C,EAAKihE,EAAKp7F,KAAKsR,EAAI8pF,EAAKr7F,GAAGuR,EAC3B8oB,EAAKghE,EAAKp7F,KAAKkL,EAAIkwF,EAAKr7F,GAAGmL,EAC3B2rB,EAAW73C,KAAKusD,KAAKpR,EAAKA,EAAKC,EAAKA,GACpCvD,EAAwB,IAAbA,EAAiB,IAAOA,EAGnCkxF,EAAcxrI,KAAKgO,QAAQ03H,gBAAkB2F,EAAa/wF,GAAYA,EAEtEqvF,EAAK/rF,EAAK4tF,EACV5B,EAAK/rF,EAAK2tF,EAEN3sB,EAAKr7F,GAAG2mG,OAAStL,EAAKp7F,KAAK0mG,WACHtmH,KAAtBugI,EAAOvlB,EAAKoN,QACdmY,EAAOvlB,EAAKoN,MAAMwf,UAAY9B,EAC9BvF,EAAOvlB,EAAKoN,MAAMyf,UAAY9B,OAEJ/lI,KAAxBugI,EAAOvlB,EAAKqN,UACdkY,EAAOvlB,EAAKqN,QAAQuf,UAAY9B,EAChCvF,EAAOvlB,EAAKqN,QAAQwf,UAAY9B,SAGR/lI,KAAtBugI,EAAOvlB,EAAKoN,QACdmY,EAAOvlB,EAAKoN,MAAMl3F,GAzCb,GAyC2B40G,EAChCvF,EAAOvlB,EAAKoN,MAAMt9F,GA1Cb,GA0C2Bi7G,OAEN/lI,KAAxBugI,EAAOvlB,EAAKqN,UACdkY,EAAOvlB,EAAKqN,QAAQn3F,GA7Cf,GA6C6B40G,EAClCvF,EAAOvlB,EAAKqN,QAAQv9F,GA9Cf,GA8C6Bi7G,IAS1C,KAAK,GADD6B,GAAUC,EADVF,EAAc,EAETG,EAAM,EAAGA,EAAMtyB,EAAYz1G,OAAQ+nI,IAAO,CACjD,GAAIn+F,GAAU6rE,EAAYsyB,EAC1BF,GAAWhpI,KAAKL,IAAIopI,EAAa/oI,KAAKJ,KAAKmpI,EAAapH,EAAO52F,GAASi+F,WACxEC,EAAWjpI,KAAKL,IAAIopI,EAAa/oI,KAAKJ,KAAKmpI,EAAapH,EAAO52F,GAASk+F,WAExEtH,EAAO52F,GAASzY,GAAK02G,EACrBrH,EAAO52F,GAAS7e,GAAK+8G,EAMvB,IAAK,GAFDE,GAAU,EACVC,EAAU,EACLC,EAAM,EAAGA,EAAMzyB,EAAYz1G,OAAQkoI,IAAO,CACjD,GAAI3gB,GAAW9R,EAAYyyB,EAC3BF,IAAWxH,EAAOjZ,GAAUp2F,EAC5B82G,GAAWzH,EAAOjZ,GAAUx8F,EAK9B,IAAK,GAHDo9G,GAAeH,EAAUvyB,EAAYz1G,OACrCooI,EAAeH,EAAUxyB,EAAYz1G,OAEhCqoI,EAAM,EAAGA,EAAM5yB,EAAYz1G,OAAQqoI,IAAO,CACjD,GAAIC,GAAW7yB,EAAY4yB,EAC3B7H,GAAO8H,GAAUn3G,GAAKg3G,EACtB3H,EAAO8H,GAAUv9G,GAAKq9G,OAIrBnI,IAGTjkI,GAAiB,QAAIikI,GAIjB,SAAUhkI,EAAQD,EAASM,GAgB/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAZzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAIsvF,GAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAIvC+xC,EAAuB,WACzB,QAASA,GAAqBnzH,EAAMszH,EAAaj2H,IAC/C,EAAI8jF,EAA0B,SAAG9xF,KAAM8jI,GAEvC9jI,KAAK2Q,KAAOA,EACZ3Q,KAAKikI,YAAcA,EACnBjkI,KAAKgxC,WAAWhjC,GA2ClB,OAxCA,EAAIgkF,EAAuB,SAAG8xC,IAC5Bv8H,IAAK,aACLhF,MAAO,SAAoByL,GACzBhO,KAAKgO,QAAUA,KAGjBzG,IAAK,QACLhF,MAAO,WASL,IAAK,GARDq7C,OAAK,GACLC,MAAK,GACLvD,MAAW,GACX/M,MAAO,GACP6rE,EAAQp5G,KAAK2Q,KAAKyoG,MAClBC,EAAcr5G,KAAKikI,YAAYC,mBAC/BE,EAASpkI,KAAKikI,YAAYG,OAErBrgI,EAAI,EAAGA,EAAIs1G,EAAYz1G,OAAQG,IAAK,CAE3CwpC,EAAO6rE,EADMC,EAAYt1G,IAEzB65C,GAAMrQ,EAAKxY,EACX8oB,GAAMtQ,EAAK5e,EACX2rB,EAAW73C,KAAKusD,KAAKpR,EAAKA,EAAKC,EAAKA,GAEpC79C,KAAKypI,iBAAiBnvF,EAAUsD,EAAIC,EAAIumF,EAAQ72F,OAUpDhmC,IAAK,mBACLhF,MAAO,SAA0B+3C,EAAUsD,EAAIC,EAAIumF,EAAQ72F,GACzD,GAAIm8F,GAA4B,IAAbpvF,EAAiB,EAAIt6C,KAAKgO,QAAQw3H,eAAiBlrF,CACtE8pF,GAAO72F,EAAKltC,IAAI00B,EAAI6oB,EAAK8rF,EACzBtF,EAAO72F,EAAKltC,IAAIsuB,EAAIkvB,EAAK6rF,MAGtB5F,IAGTlkI,GAAiB,QAAIkkI,GAIjB,SAAUjkI,EAAQD,EAASM,GAgC/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GA5BzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAI8yH,GAAkBn1H,EAAoB,KAEtCo1H,EAAmBz0H,EAAuBw0H,GAE1CxjC,EAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAEvCwjC,EAA8Br1H,EAAoB,KAElDs1H,EAA8B30H,EAAuB00H,GAErDE,EAAav1H,EAAoB,KAEjCw1H,EAAa70H,EAAuB40H,GAEpC0W,EAAoBjsI,EAAoB,KAExCksI,EAAoBvrI,EAAuBsrI,GAI3CpI,EAAkC,SAAUsI,GAG9C,QAAStI,GAAgCpzH,EAAMszH,EAAaj2H,GAE1D,OADA,EAAI8jF,EAA0B,SAAG9xF,KAAM+jI,IAChC,EAAIvO,EAAqC,SAAGx1H,MAAO+jI,EAAgCjO,YAAa,EAAIR,EAA0B,SAAGyO,IAAkCxjI,KAAKP,KAAM2Q,EAAMszH,EAAaj2H,IAsC1M,OA1CA,EAAI0nH,EAAoB,SAAGqO,EAAiCsI,IAmB5D,EAAIr6C,EAAuB,SAAG+xC,IAC5Bx8H,IAAK,mBACLhF,MAAO,SAA0B+3C,EAAUsD,EAAIC,EAAItQ,EAAM87F,GACtC,IAAb/uF,IACFA,EAAW,GAAM73C,KAAKyX,SACtB0jC,EAAKtD,GAGHt6C,KAAK6oI,uBAAyB,GAAKt7F,EAAKo3E,MAAM96D,SAChDvP,EAAW73C,KAAKJ,IAAI,GAAMrC,KAAK6oI,uBAAyBt7F,EAAKo3E,MAAM96D,OAAQvP,EAAW/M,EAAKo3E,MAAM96D,QAGnG,IAAIyiF,GAAS/+F,EAAK+rE,MAAM11G,OAAS,EAG7B8lI,EAAe1pI,KAAKgO,QAAQu3H,sBAAwB8D,EAAajf,KAAO78E,EAAKv/B,QAAQo8G,KAAOkiB,EAAS7pI,KAAKgnB,IAAI6wB,EAAU,GACxHqvF,EAAK/rF,EAAK8rF,EACVE,EAAK/rF,EAAK6rF,CAEd1pI,MAAKikI,YAAYG,OAAO72F,EAAKltC,IAAI00B,GAAK40G,EACtC3pI,KAAKikI,YAAYG,OAAO72F,EAAKltC,IAAIsuB,GAAKi7G,MAGnC7F,GACPqI,EAA2B,QAE7BxsI,GAAiB,QAAImkI,GAIjB,SAAUlkI,EAAQD,EAASM,GAgC/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GA5BzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAI8yH,GAAkBn1H,EAAoB,KAEtCo1H,EAAmBz0H,EAAuBw0H,GAE1CxjC,EAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAEvCwjC,EAA8Br1H,EAAoB,KAElDs1H,EAA8B30H,EAAuB00H,GAErDE,EAAav1H,EAAoB,KAEjCw1H,EAAa70H,EAAuB40H,GAEpC8W,EAAyBrsI,EAAoB,KAE7CssI,EAAyB3rI,EAAuB0rI,GAIhDvI,EAAuC,SAAUyI,GAGnD,QAASzI,GAAqCrzH,EAAMszH,EAAaj2H,GAE/D,OADA,EAAI8jF,EAA0B,SAAG9xF,KAAMgkI,IAChC,EAAIxO,EAAqC,SAAGx1H,MAAOgkI,EAAqClO,YAAa,EAAIR,EAA0B,SAAG0O,IAAuCzjI,KAAKP,KAAM2Q,EAAMszH,EAAaj2H,IAoBpN,OAxBA,EAAI0nH,EAAoB,SAAGsO,EAAsCyI,IAajE,EAAIz6C,EAAuB,SAAGgyC,IAC5Bz8H,IAAK,mBACLhF,MAAO,SAA0B+3C,EAAUsD,EAAIC,EAAIumF,EAAQ72F,GACzD,GAAI+M,EAAW,EAAG,CAChB,GAAIgyF,GAAS/+F,EAAK+rE,MAAM11G,OAAS,EAC7B8lI,EAAe1pI,KAAKgO,QAAQw3H,eAAiB8G,EAAS/+F,EAAKv/B,QAAQo8G,IACvEga,GAAO72F,EAAKltC,IAAI00B,EAAI6oB,EAAK8rF,EACzBtF,EAAO72F,EAAKltC,IAAIsuB,EAAIkvB,EAAK6rF,OAIxB1F,GACPwI,EAAgC,QAElC5sI,GAAiB,QAAIokI,GAIjB,SAAUnkI,EAAQD,EAASM,GAwB/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GApBzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAIlB,GAAQnB,EAAoB,IAE5BoB,EAAST,EAAuBQ,GAEhCE,EAAWrB,EAAoB,IAE/BsB,EAAWX,EAAuBU,GAElCswF,EAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAIvCpxF,EAAOT,EAAoB,GAC3BwsI,EAAcxsI,EAAoB,KAAc,QAChDysI,EAAUzsI,EAAoB,KAAc,QAE5Cm7G,EAAgB,WAClB,QAASA,GAAc1qG,GACrB,GAAIyoF,GAAQp5F,MAEZ,EAAI8xF,EAA0B,SAAG9xF,KAAMq7G,GAEvCr7G,KAAK2Q,KAAOA,EACZ3Q,KAAK4sI,kBACL5sI,KAAK6sI,kBAEL7sI,KAAKgO,WACLhO,KAAK0tE,kBACL/sE,EAAKC,OAAOZ,KAAKgO,QAAShO,KAAK0tE,gBAE/B1tE,KAAK2Q,KAAK49D,QAAQl9B,GAAG,aAAc,WACjC+nD,EAAMwzC,kBAAoBxzC,EAAMyzC,oBAi6BpC,OAt5BA,EAAI76C,EAAuB,SAAGqpB,IAC5B9zG,IAAK,mBACLhF,MAAO,SAA0BuqI,EAAS9+H,OACxBnK,KAAZipI,EACFA,EAAU9sI,KAAK+sI,cACiF,gBAAnE,KAAZD,EAA0B,aAAc,EAAItrI,EAAkB,SAAGsrI,MAClF9+H,EAAUhO,KAAKgtI,cAAcF,GAC7BA,EAAU9sI,KAAK+sI,cAIjB,KAAK,GADDE,MACKlpI,EAAI,EAAGA,EAAI/D,KAAK2Q,KAAK0oG,YAAYz1G,OAAQG,IAAK,CACrD,GAAIwpC,GAAOvtC,KAAK2Q,KAAKyoG,MAAMp5G,KAAK2Q,KAAK0oG,YAAYt1G,GAC7CwpC,GAAK+rE,MAAM11G,QAAUkpI,GACvBG,EAAepoI,KAAK0oC,EAAKltC,IAI7B,IAAK,GAAIuS,GAAK,EAAGA,EAAKq6H,EAAerpI,OAAQgP,IAC3C5S,KAAKm9G,oBAAoB8vB,EAAer6H,GAAK5E,GAAS,EAGxDhO,MAAK2Q,KAAK49D,QAAQrhB,KAAK,mBAUzB3lD,IAAK,UACLhF,MAAO,WACL,GAAIyL,GAAUrK,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,MACzEupI,IAAcvpI,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,KAAmBA,UAAU,EAEjF,QAA8BE,KAA1BmK,EAAQm/H,cACV,KAAM,IAAI9oI,OAAM,iFAIlB2J,GAAUhO,KAAKgtI,cAAch/H,EAM7B,KAAK,GAJDo/H,MACAC,KAGKtpI,EAAI,EAAGA,EAAI/D,KAAK2Q,KAAK0oG,YAAYz1G,OAAQG,IAAK,CACrD,GAAIo4G,GAASn8G,KAAK2Q,KAAK0oG,YAAYt1G,GAC/BwpC,EAAOvtC,KAAK2Q,KAAKyoG,MAAM+C,GACvBmxB,EAAgBZ,EAAYa,aAAahgG,EAC7C,KAA6C,IAAzCv/B,EAAQm/H,cAAcG,GAAyB,CACjDF,EAAcjxB,GAAUn8G,KAAK2Q,KAAKyoG,MAAM+C,EAGxC,KAAK,GAAIwvB,GAAM,EAAGA,EAAMp+F,EAAK+rE,MAAM11G,OAAQ+nI,IAAO,CAChD,GAAI9sB,GAAOtxE,EAAK+rE,MAAMqyB,OACe9nI,KAAjC7D,KAAK6sI,eAAehuB,EAAKx+G,MAC3BgtI,EAAcxuB,EAAKx+G,IAAMw+G,KAMjC7+G,KAAKwtI,SAASJ,EAAeC,EAAer/H,EAASk/H,MAWvD3lI,IAAK,qBACLhF,MAAO,SAA4BkrI,EAAWz/H,GAC5C,GAAIk/H,KAAcvpI,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,KAAmBA,UAAU,EAEjFqK,GAAUhO,KAAKgtI,cAAch/H,EAS7B,KAAK,GARD0/H,MACAC,KACA9uB,MAAO,GACPvF,MAAQ,GACR/rE,MAAO,GACP4uE,MAAS,GACTyxB,MAAoB,GAEf7pI,EAAI,EAAGA,EAAI/D,KAAK2Q,KAAK0oG,YAAYz1G,OAAQG,IAAK,CACrD,GAAIqpI,MACAC,IAIJ,IAHAlxB,EAASn8G,KAAK2Q,KAAK0oG,YAAYt1G,OAGLF,KAAtB8pI,EAAUxxB,GAAuB,CACnCyxB,EAAoB,EACpBrgG,EAAOvtC,KAAK2Q,KAAKyoG,MAAM+C,GACvB7C,IACA,KAAK,GAAIzrG,GAAI,EAAGA,EAAI0/B,EAAK+rE,MAAM11G,OAAQiK,IACrCgxG,EAAOtxE,EAAK+rE,MAAMzrG,OACmBhK,KAAjC7D,KAAK6sI,eAAehuB,EAAKx+G,MACvBw+G,EAAKoN,OAASpN,EAAKqN,QACrB0hB,IAEFt0B,EAAMz0G,KAAKg6G,GAKf,IAAI+uB,IAAsBH,EAAW,CAEnC,IAAK,GADDI,IAAsB,EACjBn2C,EAAK,EAAGA,EAAK4hB,EAAM11G,OAAQ8zF,IAAM,CACxCmnB,EAAOvF,EAAM5hB,EACb,IAAIo2C,GAAc9tI,KAAK+tI,gBAAgBlvB,EAAM1C,EAE7C,QAA8Bt4G,KAA1BmK,EAAQm/H,cACVE,EAAcxuB,EAAKx+G,IAAMw+G,EACzBuuB,EAAcjxB,GAAUn8G,KAAK2Q,KAAKyoG,MAAM+C,GACxCixB,EAAcU,GAAe9tI,KAAK2Q,KAAKyoG,MAAM00B,GAC7CH,EAAUxxB,IAAU,MACf,CACL,GAAImxB,GAAgBZ,EAAYa,aAAavtI,KAAK2Q,KAAKyoG,MAAM+C,GAC7D,KAA6C,IAAzCnuG,EAAQm/H,cAAcG,GAInB,CAELO,GAAsB,CACtB,OANAR,EAAcxuB,EAAKx+G,IAAMw+G,EACzBuuB,EAAcjxB,GAAUn8G,KAAK2Q,KAAKyoG,MAAM+C,GACxCwxB,EAAUxxB,IAAU,IAUtB,EAAI76G,EAAgB,SAAG8rI,GAAexpI,OAAS,IAAK,EAAItC,EAAgB,SAAG+rI,GAAezpI,OAAS,IAA6B,IAAxBiqI,GAC1GH,EAAS7oI,MAAOu0G,MAAOg0B,EAAe9zB,MAAO+zB,MAMrD,IAAK,GAAIvB,GAAM,EAAGA,EAAM4B,EAAS9pI,OAAQkoI,IACvC9rI,KAAKwtI,SAASE,EAAS5B,GAAK1yB,MAAOs0B,EAAS5B,GAAKxyB,MAAOtrG,GAAS,IAG/C,IAAhBk/H,GACFltI,KAAK2Q,KAAK49D,QAAQrhB,KAAK,mBAW3B3lD,IAAK,kBACLhF,MAAO,SAAyByL,GAC9B,GAAIk/H,KAAcvpI,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,KAAmBA,UAAU,EAEjF3D,MAAKguI,mBAAmB,EAAGhgI,EAASk/H,MAUtC3lI,IAAK,iBACLhF,MAAO,SAAwByL,GAC7B,GAAIk/H,KAAcvpI,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,KAAmBA,UAAU,EAEjF3D,MAAKguI,mBAAmB,EAAGhgI,EAASk/H,MAWtC3lI,IAAK,sBACLhF,MAAO,SAA6B45G,EAAQnuG,GAC1C,GAAIk/H,KAAcvpI,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,KAAmBA,UAAU,EAGjF,QAAeE,KAAXs4G,EACF,KAAM,IAAI93G,OAAM,6CAElB,QAAgCR,KAA5B7D,KAAK2Q,KAAKyoG,MAAM+C,GAClB,KAAM,IAAI93G,OAAM,0DAGlB,IAAIkpC,GAAOvtC,KAAK2Q,KAAKyoG,MAAM+C,EAC3BnuG,GAAUhO,KAAKgtI,cAAch/H,EAASu/B,OACE1pC,KAApCmK,EAAQigI,sBAAsBl5G,IAChC/mB,EAAQigI,sBAAsBl5G,EAAIwY,EAAKxY,OAEDlxB,KAApCmK,EAAQigI,sBAAsBt/G,IAChC3gB,EAAQigI,sBAAsBt/G,EAAI4e,EAAK5e,OAEG9qB,KAAxCmK,EAAQigI,sBAAsB9nB,QAChCn4G,EAAQigI,sBAAsB9nB,SAC9Bn4G,EAAQigI,sBAAsB9nB,MAAMpxF,EAAIwY,EAAKv/B,QAAQm4G,MAAMpxF,EAC3D/mB,EAAQigI,sBAAsB9nB,MAAMx3F,EAAI4e,EAAKv/B,QAAQm4G,MAAMx3F,EAG7D,IAAIy+G,MACAC,KACAa,EAAe3gG,EAAKltC,GACpB8tI,EAAsBzB,EAAYa,aAAahgG,EACnD6/F,GAAcc,GAAgB3gG,CAG9B,KAAK,GAAIxpC,GAAI,EAAGA,EAAIwpC,EAAK+rE,MAAM11G,OAAQG,IAAK,CAC1C,GAAI86G,GAAOtxE,EAAK+rE,MAAMv1G,EACtB,QAAqCF,KAAjC7D,KAAK6sI,eAAehuB,EAAKx+G,IAAmB,CAC9C,GAAIytI,GAAc9tI,KAAK+tI,gBAAgBlvB,EAAMqvB,EAG7C,QAAyCrqI,KAArC7D,KAAK4sI,eAAekB,GACtB,GAAIA,IAAgBI,EAClB,OAA8BrqI,KAA1BmK,EAAQm/H,cACVE,EAAcxuB,EAAKx+G,IAAMw+G,EACzBuuB,EAAcU,GAAe9tI,KAAK2Q,KAAKyoG,MAAM00B,OACxC,CAEL,GAAIM,GAAqB1B,EAAYa,aAAavtI,KAAK2Q,KAAKyoG,MAAM00B,KACK,IAAnE9/H,EAAQm/H,cAAcgB,EAAqBC,KAC7Cf,EAAcxuB,EAAKx+G,IAAMw+G,EACzBuuB,EAAcU,GAAe9tI,KAAK2Q,KAAKyoG,MAAM00B,QAKjDT,GAAcxuB,EAAKx+G,IAAMw+G,GAKjC,GAAIwvB,IAAe,EAAI/sI,EAAgB,SAAG8rI,GAAetiI,IAAI,SAAUwjI,GACrE,MAAOlB,GAAckB,GAAWjuI,IAGlC,KAAKiuI,IAAalB,GAEhB,IAAK,GADDkB,GAAYlB,EAAckB,GACrB3/G,EAAI,EAAGA,EAAI2/G,EAAUh1B,MAAM11G,OAAQ+qB,IAAK,CAC/C,GAAI4/G,GAAYD,EAAUh1B,MAAM3qF,EAC5B0/G,GAAazpI,QAAQ5E,KAAK+tI,gBAAgBQ,EAAWD,EAAUjuI,MAAQ,IACzEgtI,EAAckB,EAAUluI,IAAMkuI,GAIpCvuI,KAAKwtI,SAASJ,EAAeC,EAAer/H,EAASk/H,MAevD3lI,IAAK,sBACLhF,MAAO,SAA6B6qI,EAAeC,EAAeY,EAAuBO,GAYvF,IAAK,GAXD3vB,OAAO,GACPivB,MAAc,GACdQ,MAAY,GACZriB,MAAO,GACPC,MAAS,GACTuiB,MAAc,GAIdC,GAAY,EAAIptI,EAAgB,SAAG8rI,GACnCuB,KACK5qI,EAAI,EAAGA,EAAI2qI,EAAU9qI,OAAQG,IAAK,CACzC+pI,EAAcY,EAAU3qI,GACxBuqI,EAAYlB,EAAcU,EAG1B,KAAK,GAAIjgI,GAAI,EAAGA,EAAIygI,EAAUh1B,MAAM11G,OAAQiK,IAC1CgxG,EAAOyvB,EAAUh1B,MAAMzrG,OAEchK,KAAjC7D,KAAK6sI,eAAehuB,EAAKx+G,MAEvBw+G,EAAKoN,MAAQpN,EAAKqN,OACpBmhB,EAAcxuB,EAAKx+G,IAAMw+G,EAGrBA,EAAKoN,MAAQ6hB,GAEf7hB,EAAOgiB,EAAsB5tI,GAC7B6rH,EAASrN,EAAKqN,OACduiB,EAAcviB,IAEdD,EAAOpN,EAAKoN,KACZC,EAAS+hB,EAAsB5tI,GAC/BouI,EAAcxiB,OAKiBpoH,KAA/BupI,EAAcqB,IAChBE,EAAY9pI,MAAOg6G,KAAMA,EAAMqN,OAAQA,EAAQD,KAAMA,KAQ7D,IAAK,GAAIt0B,GAAM,EAAGA,EAAMg3C,EAAY/qI,OAAQ+zF,IAAO,CACjD,GAAIi3C,GAAQD,EAAYh3C,GAAKknB,KAEzByuB,EAAgBZ,EAAYa,aAAaqB,EAAO,OAEpDjuI,GAAK+D,WAAW4oI,EAAekB,GAG/BlB,EAAc7pH,KAAOkrH,EAAYh3C,GAAKu0B,OACtCohB,EAAc9pH,GAAKmrH,EAAYh3C,GAAKs0B,KACpCqhB,EAAcjtI,GAAK,eAAiBM,EAAKuC,YAIzC,IAAI2rI,GAAU7uI,KAAK2Q,KAAKupG,UAAUE,WAAWkzB,EAC7CuB,GAAQC,0BAA4BF,EAAMvuI,GAG1CL,KAAK2Q,KAAK2oG,MAAMs1B,EAAMvuI,IAAI0uI,iBAAmBF,EAAQxuI,GAGrDL,KAAK2Q,KAAK2oG,MAAMu1B,EAAQxuI,IAAMwuI,EAC9BA,EAAQlU,UAGR36H,KAAKgvI,mBAAmBJ,GACxBA,EAAM59F,YAAamrD,SAAS,EAAOtjB,QAAQ,QAa/CtxE,IAAK,gBACLhF,MAAO,WACL,GAAIyL,GAAUrK,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,KAS7E,YAPsCE,KAAlCmK,EAAQwgI,wBACVxgI,EAAQwgI,8BAE4B3qI,KAAlCmK,EAAQigI,wBACVjgI,EAAQigI,0BAGHjgI,KAaTzG,IAAK,WACLhF,MAAO,SAAkB6qI,EAAeC,EAAer/H,GACrD,GAAIk/H,KAAcvpI,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,KAAmBA,UAAU,EAGjF,IAAoD,IAAhD,EAAIrC,EAAgB,SAAG8rI,GAAexpI,SAKU,IAAhD,EAAItC,EAAgB,SAAG8rI,GAAexpI,QAAuE,GAAxDoK,EAAQigI,sBAAsBgB,wBAAvF,CAKA,IAAK,GAAI9yB,KAAUixB,GACjB,GAAIA,EAAc9pI,eAAe64G,QACKt4G,KAAhC7D,KAAK4sI,eAAezwB,GACtB,MAKN,IAAI8xB,GAAwBttI,EAAK+D,cAAesJ,EAAQigI,sBAGxD,QAAkCpqI,KAA9BmK,EAAQkhI,kBAAiC,CAE3C,GAAIC,KACJ,KAAK,GAAI3hG,KAAW4/F,GAClB,GAAIA,EAAc9pI,eAAekqC,GAAU,CACzC,GAAI8/F,GAAgBZ,EAAYa,aAAaH,EAAc5/F,GAC3D2hG,GAAkBtqI,KAAKyoI,GAK3B,GAAI8B,KACJ,KAAK,GAAIhzB,KAAUixB,GACjB,GAAIA,EAAc/pI,eAAe84G,IAEF,iBAAzBA,EAAO/xG,OAAO,EAAG,IAAwB,CAC3C,GAAIglI,GAAiB3C,EAAYa,aAAaF,EAAcjxB,GAAS,OACrEgzB,GAAkBvqI,KAAKwqI,GAM7B,KADApB,EAAwBjgI,EAAQkhI,kBAAkBjB,EAAuBkB,EAAmBC,IAE1F,KAAM,IAAI/qI,OAAM,kEAKaR,KAA7BoqI,EAAsB5tI,KACxB4tI,EAAsB5tI,GAAK,WAAaM,EAAKuC,aAE/C,IAAIosI,GAAYrB,EAAsB5tI,OAEFwD,KAAhCoqI,EAAsB79F,QACxB69F,EAAsB79F,MAAQ,UAIhC,IAAIt1B,OAAMjX,OACsBA,KAA5BoqI,EAAsBl5G,IACxBja,EAAM9a,KAAKuvI,oBAAoBnC,GAC/Ba,EAAsBl5G,EAAIja,EAAIia,OAEAlxB,KAA5BoqI,EAAsBt/G,QACZ9qB,KAARiX,IACFA,EAAM9a,KAAKuvI,oBAAoBnC,IAEjCa,EAAsBt/G,EAAI7T,EAAI6T,GAIhCs/G,EAAsB5tI,GAAKivI,CAG3B,IAAIE,GAAcxvI,KAAK2Q,KAAKupG,UAAUC,WAAW8zB,EAAuBtB,EACxE6C,GAAYzyB,WAAY,EACxByyB,EAAYC,eAAiBrC,EAC7BoC,EAAYE,eAAiBrC,EAE7BmC,EAAYhB,sBAAwBxgI,EAAQwgI,sBAG5CxuI,KAAK2Q,KAAKyoG,MAAM60B,EAAsB5tI,IAAMmvI,EAG5CxvI,KAAK2vI,oBAAoBvC,EAAeC,EAAeY,EAAuBjgI,EAAQwgI,sBAGtF,KAAK,GAAInU,KAAWgT,GAClB,GAAIA,EAAc/pI,eAAe+2H,QACEx2H,KAA7B7D,KAAK2Q,KAAK2oG,MAAM+gB,GAAwB,CAC1C,GAAIxb,GAAO7+G,KAAK2Q,KAAK2oG,MAAM+gB,EAE3Br6H,MAAKgvI,mBAAmBnwB,GAExBA,EAAK7tE,YAAamrD,SAAS,EAAOtjB,QAAQ,IAMhD,IAAK,GAAIsyC,KAAYiiB,GACfA,EAAc9pI,eAAe6nH,KAC/BnrH,KAAK4sI,eAAezhB,IAAcmkB,UAAWrB,EAAsB5tI,GAAIktC,KAAMvtC,KAAK2Q,KAAKyoG,MAAM+R,IAC7FnrH,KAAK2Q,KAAKyoG,MAAM+R,GAAUn6E,YAAa6nC,QAAQ,EAAMsjB,SAAS,IAKlE8xC,GAAsB5tI,OAAKwD,IAGP,IAAhBqpI,GACFltI,KAAK2Q,KAAK49D,QAAQrhB,KAAK,oBAI3B3lD,IAAK,qBACLhF,MAAO,SAA4Bs8G,OACIh7G,KAAjC7D,KAAK6sI,eAAehuB,EAAKx+G,MAC3BL,KAAK6sI,eAAehuB,EAAKx+G,KAAQ87F,QAAS0iB,EAAK7wG,QAAQmuF,QAAStjB,OAAQgmC,EAAK7wG,QAAQ6qE,YAIzFtxE,IAAK,eACLhF,MAAO,SAAsBs8G,GAC3B,GAAI+wB,GAAkB5vI,KAAK6sI,eAAehuB,EAAKx+G,QACvBwD,KAApB+rI,IACF/wB,EAAK7tE,YAAamrD,QAASyzC,EAAgBzzC,QAAStjB,OAAQ+2D,EAAgB/2D,eACrE74E,MAAK6sI,eAAehuB,EAAKx+G,QAWpCkH,IAAK,YACLhF,MAAO,SAAmB45G,GACxB,WAAgCt4G,KAA5B7D,KAAK2Q,KAAKyoG,MAAM+C,IAC2B,IAAtCn8G,KAAK2Q,KAAKyoG,MAAM+C,GAAQY,WAE/Bz3F,QAAQuuC,IAAI,yBACL,MAYXtsD,IAAK,sBACLhF,MAAO,SAA6B6qI,GAOlC,IAAK,GANDsB,IAAY,EAAIptI,EAAgB,SAAG8rI,GACnCvD,EAAOuD,EAAcsB,EAAU,IAAI35G,EACnCg1G,EAAOqD,EAAcsB,EAAU,IAAI35G,EACnC+0G,EAAOsD,EAAcsB,EAAU,IAAI//G,EACnCq7G,EAAOoD,EAAcsB,EAAU,IAAI//G,EACnC4e,MAAO,GACFxpC,EAAI,EAAGA,EAAI2qI,EAAU9qI,OAAQG,IACpCwpC,EAAO6/F,EAAcsB,EAAU3qI,IAC/B8lI,EAAOt8F,EAAKxY,EAAI80G,EAAOt8F,EAAKxY,EAAI80G,EAChCE,EAAOx8F,EAAKxY,EAAIg1G,EAAOx8F,EAAKxY,EAAIg1G,EAChCD,EAAOv8F,EAAK5e,EAAIm7G,EAAOv8F,EAAK5e,EAAIm7G,EAChCE,EAAOz8F,EAAK5e,EAAIq7G,EAAOz8F,EAAK5e,EAAIq7G,CAGlC,QAASj1G,EAAG,IAAO80G,EAAOE,GAAOp7G,EAAG,IAAOm7G,EAAOE,OAUpDziI,IAAK,cACLhF,MAAO,SAAqBstI,EAAe7hI,GACzC,GAAIk/H,KAAcvpI,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,KAAmBA,UAAU,EAGjF,QAAsBE,KAAlBgsI,EACF,KAAM,IAAIxrI,OAAM,4CAElB,QAAuCR,KAAnC7D,KAAK2Q,KAAKyoG,MAAMy2B,GAClB,KAAM,IAAIxrI,OAAM,4DAElB,QAAsDR,KAAlD7D,KAAK2Q,KAAKyoG,MAAMy2B,GAAeJ,eAEjC,WADAnqH,SAAQuuC,IAAI,YAAcg8E,EAAgB,qBAG5C,IAAIL,GAAcxvI,KAAK2Q,KAAKyoG,MAAMy2B,GAC9BJ,EAAiBD,EAAYC,eAC7BC,EAAiBF,EAAYE,cAGjC,QAAgB7rI,KAAZmK,OAAqDnK,KAA5BmK,EAAQ8hI,iBAAoE,kBAA5B9hI,GAAQ8hI,gBAAgC,CACnH,GAAIpI,MACAqI,GAAoBh7G,EAAGy6G,EAAYz6G,EAAGpG,EAAG6gH,EAAY7gH,EACzD,KAAK,GAAIwtF,KAAUszB,GACjB,GAAIA,EAAensI,eAAe64G,GAAS,CACzC,GAAI0uB,GAAgB7qI,KAAK2Q,KAAKyoG,MAAM+C,EACpCurB,GAAUvrB,IAAYpnF,EAAG81G,EAAc91G,EAAGpG,EAAGk8G,EAAcl8G,GAG/D,GAAIqhH,GAAehiI,EAAQ8hI,gBAAgBC,EAAiBrI,EAE5D,KAAK,GAAIwE,KAAYuD,GACnB,GAAIA,EAAensI,eAAe4oI,GAAW,CAC3C,GAAI+D,GAAiBjwI,KAAK2Q,KAAKyoG,MAAM8yB,OACNroI,KAA3BmsI,EAAa9D,KACf+D,EAAel7G,MAAiClxB,KAA7BmsI,EAAa9D,GAAUn3G,EAAkBy6G,EAAYz6G,EAAIi7G,EAAa9D,GAAUn3G,EACnGk7G,EAAethH,MAAiC9qB,KAA7BmsI,EAAa9D,GAAUv9G,EAAkB6gH,EAAY7gH,EAAIqhH,EAAa9D,GAAUv9G,QAMzG,KAAK,GAAIuhH,KAAYT,GACnB,GAAIA,EAAensI,eAAe4sI,GAAW,CAC3C,GAAIC,GAAkBnwI,KAAK2Q,KAAKyoG,MAAM82B,EACtCC,GAAkBV,EAAeS,IAEO,IAApCC,EAAgBniI,QAAQm4G,MAAMpxF,IAChCo7G,EAAgBp7G,EAAIy6G,EAAYz6G,IAEM,IAApCo7G,EAAgBniI,QAAQm4G,MAAMx3F,IAChCwhH,EAAgBxhH,EAAI6gH,EAAY7gH,GAOxC,IAAK,GAAIyhH,KAAYX,GACnB,GAAIA,EAAensI,eAAe8sI,GAAW,CAC3C,GAAIC,GAAkBrwI,KAAK2Q,KAAKyoG,MAAMg3B,EAGtCC,GAAgB1I,GAAK6H,EAAY7H,GACjC0I,EAAgBzI,GAAK4H,EAAY5H,GAGjCyI,EAAgBr/F,YAAa6nC,QAAQ,EAAOsjB,SAAS,UAE9Cn8F,MAAK4sI,eAAewD,GAM/B,IAAK,GADDE,MACKvsI,EAAI,EAAGA,EAAIyrI,EAAYl2B,MAAM11G,OAAQG,IAC5CusI,EAAiBzrI,KAAK2qI,EAAYl2B,MAAMv1G,GAI1C,KAAK,GAAIkoI,GAAM,EAAGA,EAAMqE,EAAiB1sI,OAAQqoI,IAAO,CACtD,GAAIptB,GAAOyxB,EAAiBrE,GAExBwC,EAAczuI,KAAK+tI,gBAAgBlvB,EAAMgxB,EAE7C,QAAyChsI,KAArC7D,KAAK4sI,eAAe6B,GAA4B,CAElD,GAAI8B,GAAevwI,KAAK2Q,KAAKyoG,MAAMp5G,KAAK4sI,eAAe6B,GAAaa,WAChEkB,EAAexwI,KAAK2Q,KAAK2oG,MAAMuF,EAAKiwB,0BACxC,QAAqBjrI,KAAjB2sI,EAA4B,CAC9BD,EAAab,eAAec,EAAanwI,IAAMmwI,QAGxCd,GAAec,EAAanwI,GAInC,IAAI6rH,GAASskB,EAAatkB,OACtBD,EAAOukB,EAAavkB,IACpBukB,GAAavkB,MAAQwiB,EACvBxiB,EAAOjsH,KAAK4sI,eAAe6B,GAAaa,UAExCpjB,EAASlsH,KAAK4sI,eAAe6B,GAAaa,SAI5C,IAAIhC,GAAgBZ,EAAYa,aAAaiD,EAAc,OAC3D7vI,GAAK+D,WAAW4oI,EAAeiD,EAAa/B,sBAG5C,IAAInuI,GAAK,eAAiBM,EAAKuC,YAC/BvC,GAAK+D,WAAW4oI,GAAiB7pH,KAAMyoG,EAAQ1oG,GAAIyoG,EAAMpzC,QAAQ,EAAOsjB,SAAS,EAAM97F,GAAIA,GAG3F,IAAIwuI,GAAU7uI,KAAK2Q,KAAKupG,UAAUE,WAAWkzB,EAC7CuB,GAAQC,0BAA4B0B,EAAanwI,GACjDL,KAAK2Q,KAAK2oG,MAAMj5G,GAAMwuI,EACtB7uI,KAAK2Q,KAAK2oG,MAAMj5G,GAAIs6H,eAEjB,CACL,GAAI8V,GAAezwI,KAAK2Q,KAAK2oG,MAAMuF,EAAKiwB,+BACnBjrI,KAAjB4sI,GACFzwI,KAAK0wI,aAAaD,GAGtB5xB,EAAK+b,UAEL/b,EAAK4b,mBACEz6H,MAAK2Q,KAAK2oG,MAAMuF,EAAKx+G,IAI9B,IAAK,GAAI+7G,KAAUszB,GACbA,EAAepsI,eAAe84G,IAChCp8G,KAAK0wI,aAAahB,EAAetzB,UAK9Bp8G,MAAK2Q,KAAKyoG,MAAMy2B,IAEH,IAAhB3C,GACFltI,KAAK2Q,KAAK49D,QAAQrhB,KAAK,mBAI3B3lD,IAAK,oBACLhF,MAAO,SAA2B+sI,GAChC,GAAIqB,KACJ,KAAkC,IAA9B3wI,KAAK+8G,UAAUuyB,GAAqB,CACtC,GAAIG,GAAiBzvI,KAAK2Q,KAAKyoG,MAAMk2B,GAAWG,cAChD,KAAK,GAAItzB,KAAUszB,GACbA,EAAensI,eAAe64G,IAChCw0B,EAAW9rI,KAAK7E,KAAK2Q,KAAKyoG,MAAM+C,GAAQ97G,IAK9C,MAAOswI,MAUTppI,IAAK,WACLhF,MAAO,SAAkB45G,GAKvB,IAJA,GAAIz2F,MAEAo5B,EAAU,MAEyBj7C,KAAhC7D,KAAK4sI,eAAezwB,IAAyBr9D,EAH1C,KAIRp5B,EAAM7gB,KAAK7E,KAAK2Q,KAAKyoG,MAAM+C,GAAQ97G,IACnC87G,EAASn8G,KAAK4sI,eAAezwB,GAAQmzB,UACrCxwF,GAKF,OAHAp5B,GAAM7gB,KAAK7E,KAAK2Q,KAAKyoG,MAAM+C,GAAQ97G,IACnCqlB,EAAMkrH,UAEClrH,KAUTne,IAAK,sBACLhF,MAAO,SAA6BsuI,EAAiB9hB,GACnD,OAAwBlrH,KAApBgtI,EACF,KAAM,IAAIxsI,OAAM,sDAElB,QAAmBR,KAAfkrH,EACF,KAAM,IAAI1qH,OAAM,iDAElB,QAAyCR,KAArC7D,KAAK2Q,KAAKyoG,MAAMy3B,GAClB,KAAM,IAAIxsI,OAAM,sEAGlBrE,MAAK2Q,KAAKyoG,MAAMy3B,GAAiB7/F,WAAW+9E,GAC5C/uH,KAAK2Q,KAAK49D,QAAQrhB,KAAK,mBAUzB3lD,IAAK,aACLhF,MAAO,SAAoBuuI,EAAa/hB,GACtC,OAAoBlrH,KAAhBitI,EACF,KAAM,IAAIzsI,OAAM,yCAElB,QAAmBR,KAAfkrH,EACF,KAAM,IAAI1qH,OAAM,wCAElB,QAAqCR,KAAjC7D,KAAK2Q,KAAK2oG,MAAMw3B,GAClB,KAAM,IAAIzsI,OAAM,yDAIlB,KAAK,GADD0sI,GAAa/wI,KAAKgxI,kBAAkBF,GAC/B/sI,EAAI,EAAGA,EAAIgtI,EAAWntI,OAAQG,IAAK,CAC/B/D,KAAK2Q,KAAK2oG,MAAMy3B,EAAWhtI,IACjCitC,WAAW+9E,GAElB/uH,KAAK2Q,KAAK49D,QAAQrhB,KAAK,mBAUzB3lD,IAAK,oBACLhF,MAAO,SAA2B65G,GAKhC,IAJA,GAAI12F,MAEAo5B,EAAU,MAEIj7C,KAAXu4G,OAAoDv4G,KAA5B7D,KAAK2Q,KAAK2oG,MAAM8C,IAAyBt9D,EAH9D,KAIRp5B,EAAM7gB,KAAK7E,KAAK2Q,KAAK2oG,MAAM8C,GAAQ/7G,IACnC+7G,EAASp8G,KAAK2Q,KAAK2oG,MAAM8C,GAAQ2yB,iBACjCjwF,GAGF,OADAp5B,GAAMkrH,UACClrH,KAUTne,IAAK,cACLhF,MAAO,SAAqB0uI,GAK1B,IAJA,GAAIC,GAAaD,EAEbnyF,EAAU,MAEaj7C,KAApBotI,OAAsEptI,KAArC7D,KAAK2Q,KAAK2oG,MAAM23B,IAAkCnyF,EAHhF,KAIRmyF,EAAkBjxI,KAAK2Q,KAAK2oG,MAAM23B,GAAiBnC,0BACnDhwF,QACwBj7C,KAApBotI,IACFC,EAAaD,EAGjB,OAAOC,MAYT3pI,IAAK,kBACLhF,MAAO,SAAyBs8G,EAAM1C,GACpC,MAAI0C,GAAKoN,MAAQ9P,EACR0C,EAAKoN,MACHpN,EAAKqN,OACPrN,EAAKqN,WAchB3kH,IAAK,cACLhF,MAAO,WAML,IAAK,GALD4uI,GAAU,EACVC,EAAiB,EACjBC,EAAa,EACbC,EAAa,EAERvtI,EAAI,EAAGA,EAAI/D,KAAK2Q,KAAK0oG,YAAYz1G,OAAQG,IAAK,CACrD,GAAIwpC,GAAOvtC,KAAK2Q,KAAKyoG,MAAMp5G,KAAK2Q,KAAK0oG,YAAYt1G,GAC7CwpC,GAAK+rE,MAAM11G,OAAS0tI,IACtBA,EAAa/jG,EAAK+rE,MAAM11G,QAE1ButI,GAAW5jG,EAAK+rE,MAAM11G,OACtBwtI,GAAkB3uI,KAAKgnB,IAAI8jB,EAAK+rE,MAAM11G,OAAQ,GAC9CytI,GAAc,EAEhBF,GAAoBE,EACpBD,GAAkCC,CAElC,IAAIE,GAAWH,EAAiB3uI,KAAKgnB,IAAI0nH,EAAS,GAC9CK,EAAoB/uI,KAAKusD,KAAKuiF,GAE9BE,EAAehvI,KAAKqK,MAAMqkI,EAAU,EAAIK,EAO5C,OAJIC,GAAeH,IACjBG,EAAeH,GAGVG,MAGJp2B,IAGTz7G,GAAiB,QAAIy7G,GAIjB,SAAUx7G,EAAQD,EAASM,GAgB/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAZzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAIsvF,GAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAIvCpxF,EAAOT,EAAoB,GAE3BwsI,EAAc,WAChB,QAASA,MACP,EAAI56C,EAA0B,SAAG9xF,KAAM0sI,GAkHzC,OA1GA,EAAI16C,EAAuB,SAAG06C,EAAa,OACzCnlI,IAAK,WACLhF,MAAO,SAAkBmvI,GACvB,GAMInkG,GANAokG,EAAgBhuI,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,MAE/EmmI,EAAO,IACPE,GAAQ,IACRH,EAAO,IACPE,GAAQ,GAEZ,IAAI4H,EAAc/tI,OAAS,EACzB,IAAK,GAAIG,GAAI,EAAGA,EAAI4tI,EAAc/tI,OAAQG,IACxCwpC,EAAOmkG,EAASC,EAAc5tI,IAC1B8lI,EAAOt8F,EAAKo3E,MAAMmH,YAAY5lH,OAChC2jI,EAAOt8F,EAAKo3E,MAAMmH,YAAY5lH,MAE5B6jI,EAAOx8F,EAAKo3E,MAAMmH,YAAY1lH,QAChC2jI,EAAOx8F,EAAKo3E,MAAMmH,YAAY1lH,OAE5B0jI,EAAOv8F,EAAKo3E,MAAMmH,YAAYxlH,MAChCwjI,EAAOv8F,EAAKo3E,MAAMmH,YAAYxlH,KAE5B0jI,EAAOz8F,EAAKo3E,MAAMmH,YAAYrtE,SAChCurF,EAAOz8F,EAAKo3E,MAAMmH,YAAYrtE,OAQpC,OAHa,OAATorF,IAA0B,MAAVE,GAA0B,MAATD,IAA0B,MAAVE,IACnDF,EAAO,EAAGE,EAAO,EAAGH,EAAO,EAAGE,EAAO,IAE9BF,KAAMA,EAAME,KAAMA,EAAMD,KAAMA,EAAME,KAAMA,MAQrDziI,IAAK,eACLhF,MAAO,SAAsBmvI,GAC3B,GAMInkG,GANAokG,EAAgBhuI,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,MAE/EmmI,EAAO,IACPE,GAAQ,IACRH,EAAO,IACPE,GAAQ,GAEZ,IAAI4H,EAAc/tI,OAAS,EACzB,IAAK,GAAIG,GAAI,EAAGA,EAAI4tI,EAAc/tI,OAAQG,IACxCwpC,EAAOmkG,EAASC,EAAc5tI,IAC1B8lI,EAAOt8F,EAAKxY,IACd80G,EAAOt8F,EAAKxY,GAEVg1G,EAAOx8F,EAAKxY,IACdg1G,EAAOx8F,EAAKxY,GAEV+0G,EAAOv8F,EAAK5e,IACdm7G,EAAOv8F,EAAK5e,GAEVq7G,EAAOz8F,EAAK5e,IACdq7G,EAAOz8F,EAAK5e,EAQlB,OAHa,OAATk7G,IAA0B,MAAVE,GAA0B,MAATD,IAA0B,MAAVE,IACnDF,EAAO,EAAGE,EAAO,EAAGH,EAAO,EAAGE,EAAO,IAE9BF,KAAMA,EAAME,KAAMA,EAAMD,KAAMA,EAAME,KAAMA,MASrDziI,IAAK,aACLhF,MAAO,SAAoB+4C,GACzB,OAASvmB,EAAG,IAAOumB,EAAMyuF,KAAOzuF,EAAMuuF,MACpCl7G,EAAG,IAAO2sB,EAAM0uF,KAAO1uF,EAAMwuF,UAWjCviI,IAAK,eACLhF,MAAO,SAAsBqM,EAAM3J,GACjC,GAAIqoI,KASJ,YARazpI,KAAToB,GAA+B,SAATA,GACxBtE,EAAK+D,WAAW4oI,EAAe1+H,EAAKZ,SAAS,GAC7Cs/H,EAAcv4G,EAAInmB,EAAKmmB,EACvBu4G,EAAc3+G,EAAI/f,EAAK+f,EACvB2+G,EAAcsE,oBAAsBhjI,EAAK0qG,MAAM11G,QAE/CjD,EAAK+D,WAAW4oI,EAAe1+H,EAAKZ,SAAS,GAExCs/H,MAGJZ,IAGT9sI,GAAiB,QAAI8sI,GAIjB,SAAU7sI,EAAQD,EAASM,GA4B/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAxBzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAI8yH,GAAkBn1H,EAAoB,KAEtCo1H,EAAmBz0H,EAAuBw0H,GAE1CxjC,EAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1C0jC,EAA8Br1H,EAAoB,KAElDs1H,EAA8B30H,EAAuB00H,GAErDE,EAAav1H,EAAoB,KAEjCw1H,EAAa70H,EAAuB40H,GAEpCoc,EAAS3xI,EAAoB,KAE7B4xI,EAASjxI,EAAuBgxI,GAOhClF,EAAU,SAAUoF,GAGtB,QAASpF,GAAQ3+H,EAAS2C,EAAMs8G,EAAW3gB,EAAWr+F,IACpD,EAAI6jF,EAA0B,SAAG9xF,KAAM2sI,EAEvC,IAAIvzC,IAAQ,EAAIo8B,EAAqC,SAAGx1H,MAAO2sI,EAAQ7W,YAAa,EAAIR,EAA0B,SAAGqX,IAAUpsI,KAAKP,KAAMgO,EAAS2C,EAAMs8G,EAAW3gB,EAAWr+F,GAK/K,OAHAmrF,GAAM2jB,WAAY,EAClB3jB,EAAMq2C,kBACNr2C,EAAMs2C,kBACCt2C,EAGT,OAbA,EAAIs8B,EAAoB,SAAGiX,EAASoF,GAa7BpF,GACPmF,EAAgB,QAElBlyI,GAAiB,QAAI+sI,GAIjB,SAAU9sI,EAAQD,EAASM,GAgB/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAZzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAIsvF,GAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,EAIrB,oBAAXvpF,UACTA,OAAOb,sBAAwBa,OAAOb,uBAAyBa,OAAOwpI,0BAA4BxpI,OAAOypI,6BAA+BzpI,OAAO0pI,wBAGjJ,IAAIvxI,GAAOT,EAAoB,GAE3B86G,EAAiB,WACnB,QAASA,GAAerqG,EAAMutC,IAC5B,EAAI4zC,EAA0B,SAAG9xF,KAAMg7G,GAEvCh7G,KAAK2Q,KAAOA,EACZ3Q,KAAKk+C,OAASA,EAEdl+C,KAAKmyI,iBAAkB,EACvBnyI,KAAK4kI,gBAAc/gI,GACnB7D,KAAKwkI,iBAAkB,EACvBxkI,KAAKoyI,iBAAkB,EACvBpyI,KAAKqyI,eAAiB,EACtBryI,KAAKs4F,eAAaz0F,GAClB7D,KAAKsyI,aAAc,EAEnBtyI,KAAKq1E,UAAW,EAChBr1E,KAAKgO,WACLhO,KAAK0tE,gBACH6kE,iBAAiB,EACjBC,iBAAiB,GAEnB7xI,EAAKC,OAAOZ,KAAKgO,QAAShO,KAAK0tE,gBAE/B1tE,KAAKyyI,0BACLzyI,KAAKs6G,qBAmUP,OAhUA,EAAItoB,EAAuB,SAAGgpB,IAC5BzzG,IAAK,qBACLhF,MAAO,WACL,GAAI62F,GAAQp5F,IAEZA,MAAK2Q,KAAK49D,QAAQl9B,GAAG,YAAa,WAChC+nD,EAAM/jB,UAAW,IAEnBr1E,KAAK2Q,KAAK49D,QAAQl9B,GAAG,UAAW,WAC9B+nD,EAAM/jB,UAAW,IAEnBr1E,KAAK2Q,KAAK49D,QAAQl9B,GAAG,eAAgB,WACnC+nD,EAAMs5C,iBAER1yI,KAAK2Q,KAAK49D,QAAQl9B,GAAG,UAAW,YACA,IAA1B+nD,EAAMg5C,iBACRh5C,EAAM/oB,YAGVrwE,KAAK2Q,KAAK49D,QAAQl9B,GAAG,eAAgB,WACnC+nD,EAAMk5C,aAAc,IAEtBtyI,KAAK2Q,KAAK49D,QAAQl9B,GAAG,eAAgB,WACnC+nD,EAAMk5C,aAAc,EAAKl5C,EAAM+4C,iBAAkB,IAEnDnyI,KAAK2Q,KAAK49D,QAAQl9B,GAAG,iBAAkBrxC,KAAK2yI,eAAer7E,KAAKt3D,OAChEA,KAAK2Q,KAAK49D,QAAQl9B,GAAG,kBAAmB,WACtC+nD,EAAMi5C,gBAAkB,EACxBj5C,EAAMg5C,iBAAkB,EACxBh5C,EAAMw5C,oBAER5yI,KAAK2Q,KAAK49D,QAAQl9B,GAAG,iBAAkB,WACrC+nD,EAAMi5C,gBAAkB,EACxBj5C,EAAMg5C,gBAAkBh5C,EAAMi5C,eAAiB,EAC/Cj5C,EAAMwrC,gBAAc/gI,KAEtB7D,KAAK2Q,KAAK49D,QAAQl9B,GAAG,UAAW,WAC9B+nD,EAAMi5C,eAAiB,EACvBj5C,EAAMk5C,aAAc,EACpBl5C,EAAMg5C,iBAAkB,GACM,IAA1Bh5C,EAAMorC,gBACRpvF,aAAagkD,EAAMwrC,aAEnBiO,qBAAqBz5C,EAAMwrC,aAE7BxrC,EAAMzoF,KAAK49D,QAAQ/8B,WAIvBjqC,IAAK,aACLhF,MAAO,SAAoByL,GACzB,OAAgBnK,KAAZmK,EAAuB,CACzB,GAAIV,IAAU,kBAAmB,kBACjC3M,GAAK2D,oBAAoBgJ,EAAQtN,KAAKgO,QAASA,OAInDzG,IAAK,kBACLhF,MAAO,YACwB,IAAzBvC,KAAKoyI,qBACkBvuI,KAArB7D,KAAK4kI,eACsB,IAAzB5kI,KAAKwkI,gBACPxkI,KAAK4kI,YAAcp8H,OAAO6sC,WAAWr1C,KAAK8yI,YAAYx7E,KAAKt3D,MAAOA,KAAKukI,oBAEvEvkI,KAAK4kI,YAAcp8H,OAAOb,sBAAsB3H,KAAK8yI,YAAYx7E,KAAKt3D,WAM9EuH,IAAK,cACLhF,MAAO,YACwB,IAAzBvC,KAAKoyI,kBAEPpyI,KAAK4kI,gBAAc/gI,IAEU,IAAzB7D,KAAKwkI,iBAEPxkI,KAAK4yI,kBAGP5yI,KAAKqwE,WAEwB,IAAzBrwE,KAAKwkI,iBAEPxkI,KAAK4yI,sBAWXrrI,IAAK,SACLhF,MAAO,WACLvC,KAAK2Q,KAAK49D,QAAQrhB,KAAK,WACvBltD,KAAKqwE,aAUP9oE,IAAK,iBACLhF,MAAO,WACL,GAAIk4F,GAASz6F,MAEgB,IAAzBA,KAAKmyI,kBAAqD,IAAzBnyI,KAAKoyI,kBAAkD,IAArBpyI,KAAKsyI,cAC1EtyI,KAAKmyI,iBAAkB,GACM,IAAzBnyI,KAAKwkI,gBACPh8H,OAAO6sC,WAAW,WAChBolD,EAAOpqB,SAAQ,IACd,GAEH7nE,OAAOb,sBAAsB,WAC3B8yF,EAAOpqB,SAAQ,SAMvB9oE,IAAK,UACLhF,MAAO,WACL,GAAIs2E,GAASl1E,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,IAAmBA,UAAU,EAE5E,KAAyB,IAArB3D,KAAKsyI,YAAsB,CAC7BtyI,KAAK2Q,KAAK49D,QAAQrhB,KAAK,cAEvBltD,KAAKmyI,iBAAkB,CACvB,IAAI78H,GAAMtV,KAAKk+C,OAAOD,MAAMC,OAAO6G,WAAW,KAGP,KAAnC/kD,KAAKk+C,OAAOD,MAAMC,OAAO9tC,OAAmD,IAApCpQ,KAAKk+C,OAAOD,MAAMC,OAAO7tC,QACnErQ,KAAKk+C,OAAOuR,UAGdzvD,KAAKs4F,YAAc9vF,OAAO0+F,kBAAoB,IAAM5xF,EAAI6xF,8BAAgC7xF,EAAI8xF,2BAA6B9xF,EAAI+xF,0BAA4B/xF,EAAIgyF,yBAA2BhyF,EAAIiyF,wBAA0B,GAEtNjyF,EAAIkyF,aAAaxnG,KAAKs4F,WAAY,EAAG,EAAGt4F,KAAKs4F,WAAY,EAAG,EAG5D,IAAIt4E,GAAIhgB,KAAKk+C,OAAOD,MAAMC,OAAOntC,YAC7B5F,EAAInL,KAAKk+C,OAAOD,MAAMC,OAAO8E,YAIjC,IAHA1tC,EAAI4vC,UAAU,EAAG,EAAGllC,EAAG7U,GAGe,IAAlCnL,KAAKk+C,OAAOD,MAAMltC,YACpB,MAIFuE,GAAI8gH,OACJ9gH,EAAI4nH,UAAUl9H,KAAK2Q,KAAK0pG,KAAKp+D,YAAYlnB,EAAG/0B,KAAK2Q,KAAK0pG,KAAKp+D,YAAYttB,GACvErZ,EAAI9S,MAAMxC,KAAK2Q,KAAK0pG,KAAK73G,MAAOxC,KAAK2Q,KAAK0pG,KAAK73G,OAE/C8S,EAAIwwC,YACJ9lD,KAAK2Q,KAAK49D,QAAQrhB,KAAK,gBAAiB53C,GACxCA,EAAI8wC,aAEW,IAAXyyB,KACoB,IAAlB74E,KAAKq1E,WAAwC,IAAlBr1E,KAAKq1E,WAAsD,IAAjCr1E,KAAKgO,QAAQukI,kBACpEvyI,KAAK+yI,WAAWz9H,KAIE,IAAlBtV,KAAKq1E,WAAwC,IAAlBr1E,KAAKq1E,WAAsD,IAAjCr1E,KAAKgO,QAAQwkI,kBACpExyI,KAAKgzI,WAAW19H,EAAKujE,GAGvBvjE,EAAIwwC,YACJ9lD,KAAK2Q,KAAK49D,QAAQrhB,KAAK,eAAgB53C,GACvCA,EAAI8wC,YAGJ9wC,EAAIihH,WACW,IAAX19C,GACFvjE,EAAI4vC,UAAU,EAAG,EAAGllC,EAAG7U,OAc7B5D,IAAK,eACLhF,MAAO,WACL,GAAI+S,GAAMtV,KAAKk+C,OAAOD,MAAMC,OAAO6G,WAAW,UACtBlhD,KAApB7D,KAAKs4F,aACPt4F,KAAKs4F,YAAc9vF,OAAO0+F,kBAAoB,IAAM5xF,EAAI6xF,8BAAgC7xF,EAAI8xF,2BAA6B9xF,EAAI+xF,0BAA4B/xF,EAAIgyF,yBAA2BhyF,EAAIiyF,wBAA0B,IAExNjyF,EAAIkyF,aAAaxnG,KAAKs4F,WAAY,EAAG,EAAGt4F,KAAKs4F,WAAY,EAAG,GAC5DhjF,EAAI8gH,OACJ9gH,EAAI4nH,UAAUl9H,KAAK2Q,KAAK0pG,KAAKp+D,YAAYlnB,EAAG/0B,KAAK2Q,KAAK0pG,KAAKp+D,YAAYttB,GACvErZ,EAAI9S,MAAMxC,KAAK2Q,KAAK0pG,KAAK73G,MAAOxC,KAAK2Q,KAAK0pG,KAAK73G,MAE/C,IAAI42G,GAAQp5G,KAAK2Q,KAAKyoG,MAClB7rE,MAAO,EAGX,KAAK,GAAI4uE,KAAU/C,GACbA,EAAM91G,eAAe64G,KACvB5uE,EAAO6rE,EAAM+C,GACb5uE,EAAKshF,OAAOv5G,GACZi4B,EAAKqhF,kBAAkBt5G,EAAKi4B,EAAK43C,UAKrC7vE,GAAIihH,aAYNhvH,IAAK,aACLhF,MAAO,SAAoB+S,GAgBzB,IAAK,GAfD29H,GAAatvI,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,IAAmBA,UAAU,GAE5Ey1G,EAAQp5G,KAAK2Q,KAAKyoG,MAClBC,EAAcr5G,KAAK2Q,KAAK0oG,YACxB9rE,MAAO,GACP43C,KAEA+tD,EAAUlzI,KAAKk+C,OAAO2+D,aAAc9nF,GAD3B,GACuCpG,GADvC,KAETwkH,EAAcnzI,KAAKk+C,OAAO2+D,aAC5B9nF,EAAG/0B,KAAKk+C,OAAOD,MAAMC,OAAOntC,YAHjB,GAIX4d,EAAG3uB,KAAKk+C,OAAOD,MAAMC,OAAO8E,aAJjB,KAMTowF,GAAiB9sI,IAAK4sI,EAAQvkH,EAAGzoB,KAAMgtI,EAAQn+G,EAAG0pB,OAAQ00F,EAAYxkH,EAAGvoB,MAAO+sI,EAAYp+G,GAGvFhxB,EAAI,EAAGA,EAAIs1G,EAAYz1G,OAAQG,IACtCwpC,EAAO6rE,EAAMC,EAAYt1G,IAErBwpC,EAAK8lG,aACPluD,EAAStgF,KAAKw0G,EAAYt1G,KAEP,IAAfkvI,EACF1lG,EAAK2uD,KAAK5mF,IACmD,IAApDi4B,EAAK+lG,6BAA6BF,GAC3C7lG,EAAK2uD,KAAK5mF,GAEVi4B,EAAKqhF,kBAAkBt5G,EAAKi4B,EAAK43C,SAMvC,KAAK,GAAIvyE,GAAK,EAAGA,EAAKuyE,EAASvhF,OAAQgP,IACrC26B,EAAO6rE,EAAMj0B,EAASvyE,IACtB26B,EAAK2uD,KAAK5mF,MAYd/N,IAAK,aACLhF,MAAO,SAAoB+S,GAKzB,IAAK,GAJDgkG,GAAQt5G,KAAK2Q,KAAK2oG,MAClBC,EAAcv5G,KAAK2Q,KAAK4oG,YACxBsF,MAAO,GAEF96G,EAAI,EAAGA,EAAIw1G,EAAY31G,OAAQG,IACtC86G,EAAOvF,EAAMC,EAAYx1G,KACF,IAAnB86G,EAAKsc,WACPtc,EAAK3iB,KAAK5mF,MAYhB/N,IAAK,0BACLhF,MAAO,WACL,GAAsB,mBAAXiG,QAAwB,CACjC,GAAI+qI,GAActrI,UAAUC,UAAU6f,aACtC/nB,MAAKwkI,iBAAkB,GACiB,GAApC+O,EAAY3uI,QAAQ,YAEtB5E,KAAKwkI,iBAAkB,GACoB,GAAlC+O,EAAY3uI,QAAQ,WAEzB2uI,EAAY3uI,QAAQ,YAAc,IACpC5E,KAAKwkI,iBAAkB,OAI3BxkI,MAAKwkI,iBAAkB,MAItBxpB,IAGTp7G,GAAiB,QAAIo7G,GAIjB,SAAUn7G,EAAQD,EAASM,GAgB/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAZzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAIsvF,GAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAIvC/iD,EAAS9uC,EAAoB,KAC7Bm6E,EAAan6E,EAAoB,KAEjCS,EAAOT,EAAoB,GAU3Bu6G,EAAS,WACX,QAASA,GAAO9pG,IACd,EAAImhF,EAA0B,SAAG9xF,KAAMy6G,GAEvCz6G,KAAK2Q,KAAOA,EACZ3Q,KAAKs4F,WAAa,EAClBt4F,KAAKwzI,gBAAc3vI,GACnB7D,KAAKyzI,eAAiBzzI,KAAK8+E,UAAUxnB,KAAKt3D,MAC1CA,KAAK0zI,eACL1zI,KAAKy4F,aAAc,EACnBz4F,KAAK2zI,oBAEL3zI,KAAKgO,WACLhO,KAAK0tE,gBACHC,YAAY,EACZt9D,OAAQ,OACRD,MAAO,QAETzP,EAAKC,OAAOZ,KAAKgO,QAAShO,KAAK0tE,gBAE/B1tE,KAAKs6G,qBA6aP,OA1aA,EAAItoB,EAAuB,SAAGyoB,IAC5BlzG,IAAK,qBACLhF,MAAO,WACL,GAAI62F,GAAQp5F,IAGZA,MAAK2Q,KAAK49D,QAAQte,KAAK,SAAU,SAAUnvD,GACvB,IAAdA,EAAIsP,QACNgpF,EAAMzoF,KAAK0pG,KAAKp+D,YAAYlnB,EAAgB,GAAZj0B,EAAIsP,OAEnB,IAAftP,EAAIuP,SACN+oF,EAAMzoF,KAAK0pG,KAAKp+D,YAAYttB,EAAiB,GAAb7tB,EAAIuP,UAGxCrQ,KAAK2Q,KAAK49D,QAAQl9B,GAAG,UAAWrxC,KAAKyvD,QAAQ6H,KAAKt3D,OAClDA,KAAK2Q,KAAK49D,QAAQl9B,GAAG,UAAW,WAC9B+nD,EAAMw6C,YAAYxiG,UAClBgoD,EAAMtiC,OAAO1lB,UACbgoD,EAAMy6C,gBAIVtsI,IAAK,aACLhF,MAAO,SAAoByL,GACzB,GAAIysF,GAASz6F,IAEb,QAAgB6D,KAAZmK,EAAuB,CACzB,GAAIV,IAAU,QAAS,SAAU,aACjC3M,GAAK2D,oBAAoBgJ,EAAQtN,KAAKgO,QAASA,IAGjB,IAA5BhO,KAAKgO,QAAQ2/D,aAEf3tE,KAAK6zI,WACL7zI,KAAKwzI,YAAct0D,YAAY,YAEb,IADFub,EAAOhrC,WAEnBgrC,EAAO9pF,KAAK49D,QAAQrhB,KAAK,mBAE1B,KACHltD,KAAKyzI,eAAiBzzI,KAAK8+E,UAAUxnB,KAAKt3D,MAC1CW,EAAKiH,iBAAiBY,OAAQ,SAAUxI,KAAKyzI,oBAIjDlsI,IAAK,WACLhF,MAAO,eAEoBsB,KAArB7D,KAAKwzI,aACP7gF,cAAc3yD,KAAKwzI,aAErB7yI,EAAKyH,oBAAoBI,OAAQ,SAAUxI,KAAKyzI,gBAChDzzI,KAAKyzI,mBAAiB5vI,MAGxB0D,IAAK,YACLhF,MAAO,WACLvC,KAAKyvD,UACLzvD,KAAK2Q,KAAK49D,QAAQrhB,KAAK,cASzB3lD,IAAK,kBACLhF,MAAO,WACL,GAAI+1F,GAAa30F,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,GAAK3D,KAAKs4F,YAEjE,IAArBt4F,KAAKy4F,cACPz4F,KAAK0zI,YAAYI,cAAgB9zI,KAAKi+C,MAAMC,OAAO9tC,MAAQkoF,EAC3Dt4F,KAAK0zI,YAAYK,eAAiB/zI,KAAKi+C,MAAMC,OAAO7tC,OAASioF,EAC7Dt4F,KAAK0zI,YAAYlxI,MAAQxC,KAAK2Q,KAAK0pG,KAAK73G,MACxCxC,KAAK0zI,YAAYnjI,SAAWvQ,KAAK68G,aAC/B9nF,EAAG,GAAM/0B,KAAKi+C,MAAMC,OAAO9tC,MAAQkoF,EACnC3pE,EAAG,GAAM3uB,KAAKi+C,MAAMC,OAAO7tC,OAASioF,QAW1C/wF,IAAK,kBACLhF,MAAO,WACL,OAA+BsB,KAA3B7D,KAAK0zI,YAAYlxI,OAAyD,IAAlCxC,KAAKi+C,MAAMC,OAAOntC,aAAwD,IAAnC/Q,KAAKi+C,MAAMC,OAAO8E,cAA0C,IAApBhjD,KAAKs4F,YAAoBt4F,KAAK0zI,YAAYI,cAAgB,EAAG,CAEtL,GAAIE,GAAah0I,KAAKi+C,MAAMC,OAAO9tC,MAAQpQ,KAAKs4F,WAAat4F,KAAK0zI,YAAYI,cAC1EG,EAAcj0I,KAAKi+C,MAAMC,OAAO7tC,OAASrQ,KAAKs4F,WAAat4F,KAAK0zI,YAAYK,eAC5EG,EAAWl0I,KAAK0zI,YAAYlxI,KAEd,IAAdwxI,GAAkC,GAAfC,EACrBC,EAAoC,GAAzBl0I,KAAK0zI,YAAYlxI,OAAewxI,EAAaC,GACjC,GAAdD,EACTE,EAAWl0I,KAAK0zI,YAAYlxI,MAAQwxI,EACZ,GAAfC,IACTC,EAAWl0I,KAAK0zI,YAAYlxI,MAAQyxI,GAGtCj0I,KAAK2Q,KAAK0pG,KAAK73G,MAAQ0xI,CAEvB,IAAIC,GAAoBn0I,KAAK68G,aAC3B9nF,EAAG,GAAM/0B,KAAKi+C,MAAMC,OAAOntC,YAC3B4d,EAAG,GAAM3uB,KAAKi+C,MAAMC,OAAO8E,eAGzBoxF,GACFr/G,EAAGo/G,EAAkBp/G,EAAI/0B,KAAK0zI,YAAYnjI,SAASwkB,EACnDpG,EAAGwlH,EAAkBxlH,EAAI3uB,KAAK0zI,YAAYnjI,SAASoe,EAErD3uB,MAAK2Q,KAAK0pG,KAAKp+D,YAAYlnB,GAAKq/G,EAAmBr/G,EAAI/0B,KAAK2Q,KAAK0pG,KAAK73G,MACtExC,KAAK2Q,KAAK0pG,KAAKp+D,YAAYttB,GAAKylH,EAAmBzlH,EAAI3uB,KAAK2Q,KAAK0pG,KAAK73G,UAI1E+E,IAAK,gBACLhF,MAAO,SAAuBA,GAC5B,GAAqB,gBAAVA,GACT,MAAOA,GAAQ,IACV,IAAqB,gBAAVA,GAAoB,CACpC,IAA4B,IAAxBA,EAAMqC,QAAQ,OAAwC,IAAzBrC,EAAMqC,QAAQ,MAC7C,MAAOrC,EACF,KAA4B,IAAxBA,EAAMqC,QAAQ,KACvB,MAAOrC,GAAQ,KAGnB,KAAM,IAAI8B,OAAM,wDAA0D9B,MAQ5EgF,IAAK,UACLhF,MAAO,WAEL,KAAOvC,KAAK2Q,KAAKulC,UAAUl0C,iBACzBhC,KAAK2Q,KAAKulC,UAAUh0C,YAAYlC,KAAK2Q,KAAKulC,UAAUj0C,WAetD,IAZAjC,KAAKi+C,MAAQ/tC,SAASC,cAAc,OACpCnQ,KAAKi+C,MAAMv3C,UAAY,cACvB1G,KAAKi+C,MAAM5xC,MAAMkE,SAAW,WAC5BvQ,KAAKi+C,MAAM5xC,MAAMoE,SAAW,SAC5BzQ,KAAKi+C,MAAMo2F,SAAW,IAItBr0I,KAAKi+C,MAAMC,OAAShuC,SAASC,cAAc,UAC3CnQ,KAAKi+C,MAAMC,OAAO7xC,MAAMkE,SAAW,WACnCvQ,KAAKi+C,MAAMvtC,YAAY1Q,KAAKi+C,MAAMC,QAE7Bl+C,KAAKi+C,MAAMC,OAAO6G,WAOhB,CACL,GAAIzvC,GAAMtV,KAAKi+C,MAAMC,OAAO6G,WAAW,KACvC/kD,MAAKs0I,eAAeh/H,GACpBtV,KAAKi+C,MAAMC,OAAO6G,WAAW,MAAMyiD,aAAaxnG,KAAKs4F,WAAY,EAAG,EAAGt4F,KAAKs4F,WAAY,EAAG,OAV1D,CACjC,GAAIr2C,GAAW/xC,SAASC,cAAc,MACtC8xC,GAAS51C,MAAMnC,MAAQ,MACvB+3C,EAAS51C,MAAM61C,WAAa,OAC5BD,EAAS51C,MAAMktC,QAAU,OACzB0I,EAASE,UAAY,mDACrBniD,KAAKi+C,MAAMC,OAAOxtC,YAAYuxC,GAQhCjiD,KAAK2Q,KAAKulC,UAAUxlC,YAAY1Q,KAAKi+C,OAErCj+C,KAAK2Q,KAAK0pG,KAAK73G,MAAQ,EACvBxC,KAAK2Q,KAAK0pG,KAAKp+D,aAAgBlnB,EAAG,GAAM/0B,KAAKi+C,MAAMC,OAAOntC,YAAa4d,EAAG,GAAM3uB,KAAKi+C,MAAMC,OAAO8E,cAElGhjD,KAAKu9F,iBASPh2F,IAAK,cACLhF,MAAO,WACL,GAAIs4F,GAAS76F,SAEO6D,KAAhB7D,KAAK82D,QACP92D,KAAK82D,OAAO1lB,UAEdpxC,KAAK41F,QACL51F,KAAK8oG,SAGL9oG,KAAK82D,OAAS,GAAI9nB,GAAOhvC,KAAKi+C,MAAMC,QACpCl+C,KAAK82D,OAAOr/C,IAAI,SAASsH,KAAMg8C,QAAQ,IAEvC/6D,KAAK82D,OAAOr/C,IAAI,OAAOsH,KAAMmnB,UAAW,EAAGtG,UAAWoP,EAAOi2B,gBAE7DoV,EAAW/C,QAAQt3E,KAAK82D,OAAQ,SAAUvuD,GACxCsyF,EAAOlqF,KAAK6oG,eAAeliC,QAAQ/uE,KAErCvI,KAAK82D,OAAOzlB,GAAG,MAAO,SAAU9oC,GAC9BsyF,EAAOlqF,KAAK6oG,eAAeC,MAAMlxG,KAEnCvI,KAAK82D,OAAOzlB,GAAG,YAAa,SAAU9oC,GACpCsyF,EAAOlqF,KAAK6oG,eAAeE,YAAYnxG,KAEzCvI,KAAK82D,OAAOzlB,GAAG,QAAS,SAAU9oC,GAChCsyF,EAAOlqF,KAAK6oG,eAAeG,OAAOpxG,KAEpCvI,KAAK82D,OAAOzlB,GAAG,WAAY,SAAU9oC,GACnCsyF,EAAOlqF,KAAK6oG,eAAeI,YAAYrxG,KAEzCvI,KAAK82D,OAAOzlB,GAAG,UAAW,SAAU9oC,GAClCsyF,EAAOlqF,KAAK6oG,eAAeK,OAAOtxG,KAEpCvI,KAAK82D,OAAOzlB,GAAG,SAAU,SAAU9oC,GACjCsyF,EAAOlqF,KAAK6oG,eAAeM,UAAUvxG,KAEvCvI,KAAK82D,OAAOzlB,GAAG,QAAS,SAAU9oC,GAChCsyF,EAAOlqF,KAAK6oG,eAAeO,QAAQxxG,KAIrCvI,KAAKi+C,MAAMC,OAAOt2C,iBAAiB,aAAc,SAAUW,GACzDsyF,EAAOlqF,KAAK6oG,eAAej/B,aAAahyE,KAE1CvI,KAAKi+C,MAAMC,OAAOt2C,iBAAiB,iBAAkB,SAAUW,GAC7DsyF,EAAOlqF,KAAK6oG,eAAej/B,aAAahyE,KAG1CvI,KAAKi+C,MAAMC,OAAOt2C,iBAAiB,YAAa,SAAUW,GACxDsyF,EAAOlqF,KAAK6oG,eAAeQ,YAAYzxG,KAEzCvI,KAAKi+C,MAAMC,OAAOt2C,iBAAiB,cAAe,SAAUW,GAC1DsyF,EAAOlqF,KAAK6oG,eAAeS,UAAU1xG,KAGvCvI,KAAK4zI,YAAc,GAAI5kG,GAAOhvC,KAAKi+C,OACnCo8B,EAAW9C,UAAUv3E,KAAK4zI,YAAa,SAAUrrI,GAC/CsyF,EAAOlqF,KAAK6oG,eAAejiC,UAAUhvE,QAazChB,IAAK,UACLhF,MAAO,WACL,GAAI6N,GAAQzM,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,GAAK3D,KAAKgO,QAAQoC,MACzFC,EAAS1M,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,GAAK3D,KAAKgO,QAAQqC,MAE9FD,GAAQpQ,KAAKu0I,cAAcnkI,GAC3BC,EAASrQ,KAAKu0I,cAAclkI,EAE5B,IAAImkI,IAAY,EACZC,EAAWz0I,KAAKi+C,MAAMC,OAAO9tC,MAC7BskI,EAAY10I,KAAKi+C,MAAMC,OAAO7tC,OAG9BiF,EAAMtV,KAAKi+C,MAAMC,OAAO6G,WAAW,MACnC4vF,EAAgB30I,KAAKs4F,UAGzB,IAFAt4F,KAAKs0I,eAAeh/H,GAEhBlF,GAASpQ,KAAKgO,QAAQoC,OAASC,GAAUrQ,KAAKgO,QAAQqC,QAAUrQ,KAAKi+C,MAAM5xC,MAAM+D,OAASA,GAASpQ,KAAKi+C,MAAM5xC,MAAMgE,QAAUA,EAChIrQ,KAAK40I,gBAAgBD,GAErB30I,KAAKi+C,MAAM5xC,MAAM+D,MAAQA,EACzBpQ,KAAKi+C,MAAM5xC,MAAMgE,OAASA,EAE1BrQ,KAAKi+C,MAAMC,OAAO7xC,MAAM+D,MAAQ,OAChCpQ,KAAKi+C,MAAMC,OAAO7xC,MAAMgE,OAAS,OAEjCrQ,KAAKi+C,MAAMC,OAAO9tC,MAAQ3N,KAAKi6B,MAAM18B,KAAKi+C,MAAMC,OAAOntC,YAAc/Q,KAAKs4F,YAC1Et4F,KAAKi+C,MAAMC,OAAO7tC,OAAS5N,KAAKi6B,MAAM18B,KAAKi+C,MAAMC,OAAO8E,aAAehjD,KAAKs4F,YAE5Et4F,KAAKgO,QAAQoC,MAAQA,EACrBpQ,KAAKgO,QAAQqC,OAASA,EAEtBrQ,KAAK2zI,kBACH5+G,EAAG,GAAM/0B,KAAKi+C,MAAMltC,YACpB4d,EAAG,GAAM3uB,KAAKi+C,MAAM+E,cAGtBwxF,GAAY,MACP,CAIL,GAAIK,GAAWpyI,KAAKi6B,MAAM18B,KAAKi+C,MAAMC,OAAOntC,YAAc/Q,KAAKs4F,YAC3Dw8C,EAAYryI,KAAKi6B,MAAM18B,KAAKi+C,MAAMC,OAAO8E,aAAehjD,KAAKs4F,WAG7Dt4F,MAAKi+C,MAAMC,OAAO9tC,QAAUykI,GAAY70I,KAAKi+C,MAAMC,OAAO7tC,SAAWykI,GACvE90I,KAAK40I,gBAAgBD,GAGnB30I,KAAKi+C,MAAMC,OAAO9tC,QAAUykI,IAC9B70I,KAAKi+C,MAAMC,OAAO9tC,MAAQykI,EAC1BL,GAAY,GAEVx0I,KAAKi+C,MAAMC,OAAO7tC,SAAWykI,IAC/B90I,KAAKi+C,MAAMC,OAAO7tC,OAASykI,EAC3BN,GAAY,GAkBhB,OAdkB,IAAdA,IACFx0I,KAAK2Q,KAAK49D,QAAQrhB,KAAK,UACrB98C,MAAO3N,KAAKi6B,MAAM18B,KAAKi+C,MAAMC,OAAO9tC,MAAQpQ,KAAKs4F,YACjDjoF,OAAQ5N,KAAKi6B,MAAM18B,KAAKi+C,MAAMC,OAAO7tC,OAASrQ,KAAKs4F,YACnDm8C,SAAUhyI,KAAKi6B,MAAM+3G,EAAWz0I,KAAKs4F,YACrCo8C,UAAWjyI,KAAKi6B,MAAMg4G,EAAY10I,KAAKs4F,cAIzCt4F,KAAK+0I,mBAIP/0I,KAAKy4F,aAAc,EACZ+7C,KAGTjtI,IAAK,iBAMLhF,MAAO,SAAwB+S,GAC7BtV,KAAKs4F,YAAc9vF,OAAO0+F,kBAAoB,IAAM5xF,EAAI6xF,8BAAgC7xF,EAAI8xF,2BAA6B9xF,EAAI+xF,0BAA4B/xF,EAAIgyF,yBAA2BhyF,EAAIiyF,wBAA0B,MAYxNhgG,IAAK,uBACLhF,MAAO,SAA8BwyB,GACnC,OAAQA,EAAI/0B,KAAK2Q,KAAK0pG,KAAKp+D,YAAYlnB,GAAK/0B,KAAK2Q,KAAK0pG,KAAK73G,SAY7D+E,IAAK,uBACLhF,MAAO,SAA8BwyB,GACnC,MAAOA,GAAI/0B,KAAK2Q,KAAK0pG,KAAK73G,MAAQxC,KAAK2Q,KAAK0pG,KAAKp+D,YAAYlnB,KAY/DxtB,IAAK,uBACLhF,MAAO,SAA8BosB,GACnC,OAAQA,EAAI3uB,KAAK2Q,KAAK0pG,KAAKp+D,YAAYttB,GAAK3uB,KAAK2Q,KAAK0pG,KAAK73G,SAY7D+E,IAAK,uBACLhF,MAAO,SAA8BosB,GACnC,MAAOA,GAAI3uB,KAAK2Q,KAAK0pG,KAAK73G,MAAQxC,KAAK2Q,KAAK0pG,KAAKp+D,YAAYttB,KAW/DpnB,IAAK,cACLhF,MAAO,SAAqBuY,GAC1B,OAASia,EAAG/0B,KAAKg1I,qBAAqBl6H,EAAIia,GAAIpG,EAAG3uB,KAAKi1I,qBAAqBn6H,EAAI6T,OAWjFpnB,IAAK,cACLhF,MAAO,SAAqBuY,GAC1B,OAASia,EAAG/0B,KAAKk1I,qBAAqBp6H,EAAIia,GAAIpG,EAAG3uB,KAAKm1I,qBAAqBr6H,EAAI6T,QAG5E8rF,IAGT76G,GAAiB,QAAI66G,GAIjB,SAAU56G,EAAQD,EAASM,GAgB/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAZzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAIsvF,GAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAIvCpxF,EAAOT,EAAoB,GAE3BwsI,EAAcxsI,EAAoB,KAAc,QAEhD46G,EAAO,WACT,QAASA,GAAKnqG,EAAMutC,GAClB,GAAIk7C,GAAQp5F,MAEZ,EAAI8xF,EAA0B,SAAG9xF,KAAM86G,GAEvC96G,KAAK2Q,KAAOA,EACZ3Q,KAAKk+C,OAASA,EAEdl+C,KAAKo1I,eAAiB,EAAIp1I,KAAKq1I,kBAC/Br1I,KAAKs1I,wBAA0B,iBAC/Bt1I,KAAKu1I,WAAa,EAClBv1I,KAAKw1I,YAAc,EACnBx1I,KAAKy1I,YAAc,EACnBz1I,KAAK01I,kBAAoB,EACzB11I,KAAK21I,kBAAoB,EACzB31I,KAAK41I,mBAAiB/xI,GACtB7D,KAAK61I,uBAAqBhyI,GAC1B7D,KAAK81I,UAAY,EAEjB91I,KAAK8mI,iBAAejjI,GAEpB7D,KAAK2Q,KAAK49D,QAAQl9B,GAAG,MAAOrxC,KAAKkwE,IAAI5Y,KAAKt3D,OAC1CA,KAAK2Q,KAAK49D,QAAQl9B,GAAG,oBAAqB,WACxC+nD,EAAMzoF,KAAK49D,QAAQrhB,KAAK,oBAE1BltD,KAAK2Q,KAAK49D,QAAQl9B,GAAG,aAAcrxC,KAAKi/G,YAAY3nD,KAAKt3D;+DAwS3D,OArSA,EAAIgyF,EAAuB,SAAG8oB,IAC5BvzG,IAAK,aACLhF,MAAO,WACL,GAAIyL,GAAUrK,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,KAE7E3D,MAAKgO,QAAUA,KAUjBzG,IAAK,MACLhF,MAAO,WACL,GAAIyL,GAAUrK,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,IAAOy1G,UAChF28B,EAAcpyI,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,IAAmBA,UAAU,GAE7E23C,MAAQ,GACR06F,MAAY,EAKhB,QAJsBnyI,KAAlBmK,EAAQorG,OAAgD,IAAzBprG,EAAQorG,MAAMx1G,SAC/CoK,EAAQorG,MAAQp5G,KAAK2Q,KAAK0oG,cAGR,IAAhB08B,EAAsB,CAExB,GAAIE,GAAkB,CACtB,KAAK,GAAI95B,KAAUn8G,MAAK2Q,KAAKyoG,MAC3B,GAAIp5G,KAAK2Q,KAAKyoG,MAAM91G,eAAe64G,GAAS,CAC1C,GAAI5uE,GAAOvtC,KAAK2Q,KAAKyoG,MAAM+C,IACK,IAA5B5uE,EAAK6/E,qBACP6oB,GAAmB,GAIzB,GAAIA,EAAkB,GAAMj2I,KAAK2Q,KAAK0oG,YAAYz1G,OAEhD,WADA5D,MAAKkwE,IAAIliE,GAAS,EAIpBstC,GAAQoxF,EAAY72D,SAAS71E,KAAK2Q,KAAKyoG,MAAOprG,EAAQorG,MAGtD48B,GAAY,QADQh2I,KAAK2Q,KAAK0oG,YAAYz1G,OACJ,QAAU,QAIhDoyI,IADavzI,KAAKL,IAAIpC,KAAKk+C,OAAOD,MAAMC,OAAOntC,YAAc,IAAK/Q,KAAKk+C,OAAOD,MAAMC,OAAO8E,aAAe,SAErG,CACLhjD,KAAK2Q,KAAK49D,QAAQrhB,KAAK,gBACvB5R,EAAQoxF,EAAY72D,SAAS71E,KAAK2Q,KAAKyoG,MAAOprG,EAAQorG,MAEtD,IAAIpL,GAAgD,IAApCvrG,KAAKwiB,IAAIq2B,EAAMyuF,KAAOzuF,EAAMuuF,MACxCqM,EAAgD,IAApCzzI,KAAKwiB,IAAIq2B,EAAM0uF,KAAO1uF,EAAMwuF,MAExCqM,EAAan2I,KAAKk+C,OAAOD,MAAMC,OAAOntC,YAAci9F,EACpDooC,EAAap2I,KAAKk+C,OAAOD,MAAMC,OAAO8E,aAAekzF,CAEzDF,GAAYG,GAAcC,EAAaD,EAAaC,EAGlDJ,EAAY,EACdA,EAAY,EACW,IAAdA,IACTA,EAAY,EAGd,IAAIr6F,GAAS+wF,EAAY2J,WAAW/6F,GAChCg7F,GAAqB/lI,SAAUorC,EAAQn5C,MAAOwzI,EAAW/lE,UAAWjiE,EAAQiiE,UAChFjwE,MAAK+lD,OAAOuwF,MAad/uI,IAAK,QACLhF,MAAO,SAAe45G,GACpB,GAAInuG,GAAUrK,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,KAE7E,QAAgCE,KAA5B7D,KAAK2Q,KAAKyoG,MAAM+C,GAAuB,CACzC,GAAIo6B,IAAiBxhH,EAAG/0B,KAAK2Q,KAAKyoG,MAAM+C,GAAQpnF,EAAGpG,EAAG3uB,KAAK2Q,KAAKyoG,MAAM+C,GAAQxtF,EAC9E3gB,GAAQuC,SAAWgmI,EACnBvoI,EAAQwoI,aAAer6B,EAEvBn8G,KAAK+lD,OAAO/3C,OAEZsX,SAAQuuC,IAAI,SAAWsoD,EAAS,wBAapC50G,IAAK,SACLhF,MAAO,SAAgByL,GACrB,OAAgBnK,KAAZmK,EAEF,YADAA,UAGqBnK,KAAnBmK,EAAQ2uB,SACV3uB,EAAQ2uB,QAAW5H,EAAG,EAAGpG,EAAG,QAEL9qB,KAArBmK,EAAQ2uB,OAAO5H,IACjB/mB,EAAQ2uB,OAAO5H,EAAI,OAEIlxB,KAArBmK,EAAQ2uB,OAAOhO,IACjB3gB,EAAQ2uB,OAAOhO,EAAI,OAEC9qB,KAAlBmK,EAAQxL,QACVwL,EAAQxL,MAAQxC,KAAK2Q,KAAK0pG,KAAK73G,WAERqB,KAArBmK,EAAQuC,WACVvC,EAAQuC,SAAWvQ,KAAKg/G,uBAEAn7G,KAAtBmK,EAAQiiE,YACVjiE,EAAQiiE,WAAcr0C,SAAU,KAER,IAAtB5tB,EAAQiiE,YACVjiE,EAAQiiE,WAAcr0C,SAAU,KAER,IAAtB5tB,EAAQiiE,YACVjiE,EAAQiiE,kBAEyBpsE,KAA/BmK,EAAQiiE,UAAUr0C,WACpB5tB,EAAQiiE,UAAUr0C,SAAW,SAEU/3B,KAArCmK,EAAQiiE,UAAUiF,iBACpBlnE,EAAQiiE,UAAUiF,eAAiB,iBAGrCl1E,KAAKy2I,YAAYzoI,MAgBnBzG,IAAK,cACLhF,MAAO,SAAqByL,GAC1B,OAAgBnK,KAAZmK,EAAJ,CAGAhO,KAAKs1I,wBAA0BtnI,EAAQiiE,UAAUiF,eAEjDl1E,KAAKi/G,eACkB,IAAnBjxG,EAAQ0oI,SACV12I,KAAK41I,eAAiB5nI,EAAQwoI,aAC9Bx2I,KAAK61I,mBAAqB7nI,EAAQ2uB,QAIb,GAAnB38B,KAAKu1I,YACPv1I,KAAK22I,mBAAkB,GAGzB32I,KAAKw1I,YAAcx1I,KAAK2Q,KAAK0pG,KAAK73G,MAClCxC,KAAK01I,kBAAoB11I,KAAK2Q,KAAK0pG,KAAKp+D,YACxCj8C,KAAKy1I,YAAcznI,EAAQxL,MAI3BxC,KAAK2Q,KAAK0pG,KAAK73G,MAAQxC,KAAKy1I,WAC5B,IAAImB,GAAa52I,KAAKk+C,OAAO2+D,aAAc9nF,EAAG,GAAM/0B,KAAKk+C,OAAOD,MAAMC,OAAOntC,YAAa4d,EAAG,GAAM3uB,KAAKk+C,OAAOD,MAAMC,OAAO8E,eAExHoxF,GACFr/G,EAAG6hH,EAAW7hH,EAAI/mB,EAAQuC,SAASwkB,EACnCpG,EAAGioH,EAAWjoH,EAAI3gB,EAAQuC,SAASoe,EAErC3uB,MAAK21I,mBACH5gH,EAAG/0B,KAAK01I,kBAAkB3gH,EAAIq/G,EAAmBr/G,EAAI/0B,KAAKy1I,YAAcznI,EAAQ2uB,OAAO5H,EACvFpG,EAAG3uB,KAAK01I,kBAAkB/mH,EAAIylH,EAAmBzlH,EAAI3uB,KAAKy1I,YAAcznI,EAAQ2uB,OAAOhO,GAItD,IAA/B3gB,EAAQiiE,UAAUr0C,aACO/3B,IAAvB7D,KAAK41I,gBACP51I,KAAK8mI,aAAe9mI,KAAK62I,cAAcv/E,KAAKt3D,MAC5CA,KAAK2Q,KAAK49D,QAAQl9B,GAAG,aAAcrxC,KAAK8mI,gBAExC9mI,KAAK2Q,KAAK0pG,KAAK73G,MAAQxC,KAAKy1I,YAC5Bz1I,KAAK2Q,KAAK0pG,KAAKp+D,YAAcj8C,KAAK21I,kBAClC31I,KAAK2Q,KAAK49D,QAAQrhB,KAAK,oBAGzBltD,KAAKo1I,eAAiB,GAAK,GAAKpnI,EAAQiiE,UAAUr0C,SAAW,OAAU,EAAI,GAC3E57B,KAAKs1I,wBAA0BtnI,EAAQiiE,UAAUiF,eAEjDl1E,KAAK8mI,aAAe9mI,KAAK22I,kBAAkBr/E,KAAKt3D,MAChDA,KAAK2Q,KAAK49D,QAAQl9B,GAAG,aAAcrxC,KAAK8mI,cACxC9mI,KAAK2Q,KAAK49D,QAAQrhB,KAAK,wBAU3B3lD,IAAK,gBACLhF,MAAO,WACL,GAAIg0I,IAAiBxhH,EAAG/0B,KAAK2Q,KAAKyoG,MAAMp5G,KAAK41I,gBAAgB7gH,EAAGpG,EAAG3uB,KAAK2Q,KAAKyoG,MAAMp5G,KAAK41I,gBAAgBjnH,GACpGioH,EAAa52I,KAAKk+C,OAAO2+D,aAAc9nF,EAAG,GAAM/0B,KAAKk+C,OAAOD,MAAMC,OAAOntC,YAAa4d,EAAG,GAAM3uB,KAAKk+C,OAAOD,MAAMC,OAAO8E,eACxHoxF,GACFr/G,EAAG6hH,EAAW7hH,EAAIwhH,EAAaxhH,EAC/BpG,EAAGioH,EAAWjoH,EAAI4nH,EAAa5nH,GAE7B+mH,EAAoB11I,KAAK2Q,KAAK0pG,KAAKp+D,YACnC05F,GACF5gH,EAAG2gH,EAAkB3gH,EAAIq/G,EAAmBr/G,EAAI/0B,KAAK2Q,KAAK0pG,KAAK73G,MAAQxC,KAAK61I,mBAAmB9gH,EAC/FpG,EAAG+mH,EAAkB/mH,EAAIylH,EAAmBzlH,EAAI3uB,KAAK2Q,KAAK0pG,KAAK73G,MAAQxC,KAAK61I,mBAAmBlnH,EAGjG3uB,MAAK2Q,KAAK0pG,KAAKp+D,YAAc05F,KAG/BpuI,IAAK,cACLhF,MAAO,eACuBsB,KAAxB7D,KAAK41I,oBAAsD/xI,KAAtB7D,KAAK8mI,eAC5C9mI,KAAK2Q,KAAK49D,QAAQ/8B,IAAI,aAAcxxC,KAAK8mI,cACzC9mI,KAAK41I,mBAAiB/xI,GACtB7D,KAAK61I,uBAAqBhyI,OAW9B0D,IAAK,oBACLhF,MAAO,WACL,GAAIu0I,GAAWnzI,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,IAAmBA,UAAU,EAE9E3D,MAAKu1I,YAAcv1I,KAAKo1I,eACxBp1I,KAAKu1I,YAA0B,IAAbuB,EAAoB,EAAM92I,KAAKu1I,UAEjD,IAAIzjF,GAAWnxD,EAAKuO,gBAAgBlP,KAAKs1I,yBAAyBt1I,KAAKu1I,WAEvEv1I,MAAK2Q,KAAK0pG,KAAK73G,MAAQxC,KAAKw1I,aAAex1I,KAAKy1I,YAAcz1I,KAAKw1I,aAAe1jF,EAClF9xD,KAAK2Q,KAAK0pG,KAAKp+D,aACblnB,EAAG/0B,KAAK01I,kBAAkB3gH,GAAK/0B,KAAK21I,kBAAkB5gH,EAAI/0B,KAAK01I,kBAAkB3gH,GAAK+8B,EACtFnjC,EAAG3uB,KAAK01I,kBAAkB/mH,GAAK3uB,KAAK21I,kBAAkBhnH,EAAI3uB,KAAK01I,kBAAkB/mH,GAAKmjC,GAIpF9xD,KAAKu1I,YAAc,IACrBv1I,KAAK2Q,KAAK49D,QAAQ/8B,IAAI,aAAcxxC,KAAK8mI,cACzC9mI,KAAKu1I,WAAa,MACS1xI,IAAvB7D,KAAK41I,iBACP51I,KAAK8mI,aAAe9mI,KAAK62I,cAAcv/E,KAAKt3D,MAC5CA,KAAK2Q,KAAK49D,QAAQl9B,GAAG,aAAcrxC,KAAK8mI,eAE1C9mI,KAAK2Q,KAAK49D,QAAQrhB,KAAK,yBAI3B3lD,IAAK,WACLhF,MAAO,WACL,MAAOvC,MAAK2Q,KAAK0pG,KAAK73G,SAGxB+E,IAAK,kBACLhF,MAAO,WACL,MAAOvC,MAAKk+C,OAAO2+D,aAAc9nF,EAAG,GAAM/0B,KAAKk+C,OAAOD,MAAMC,OAAOntC,YAAa4d,EAAG,GAAM3uB,KAAKk+C,OAAOD,MAAMC,OAAO8E,mBAG/G83D,IAGTl7G,GAAiB,QAAIk7G,GAIjB,SAAUj7G,EAAQD,EAASM,GAgB/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAZzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAIsvF,GAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAIvCpxF,EAAOT,EAAoB,GAE3B62I,EAAoB72I,EAAoB,KAAc,QACtD6hF,EAAQ7hF,EAAoB,KAAc,QAE1C26G,EAAqB,WACvB,QAASA,GAAmBlqG,EAAMutC,EAAQw8D,IACxC,EAAI5oB,EAA0B,SAAG9xF,KAAM66G,GAEvC76G,KAAK2Q,KAAOA,EACZ3Q,KAAKk+C,OAASA,EACdl+C,KAAK06G,iBAAmBA,EACxB16G,KAAKg3I,kBAAoB,GAAID,GAAkBpmI,EAAMutC,GAGrDl+C,KAAK2Q,KAAK6oG,eAAeC,MAAQz5G,KAAKy5G,MAAMniD,KAAKt3D,MACjDA,KAAK2Q,KAAK6oG,eAAeliC,QAAUt3E,KAAKs3E,QAAQhgB,KAAKt3D,MACrDA,KAAK2Q,KAAK6oG,eAAeE,YAAc15G,KAAK05G,YAAYpiD,KAAKt3D,MAC7DA,KAAK2Q,KAAK6oG,eAAeG,OAAS35G,KAAK25G,OAAOriD,KAAKt3D,MACnDA,KAAK2Q,KAAK6oG,eAAeI,YAAc55G,KAAK45G,YAAYtiD,KAAKt3D,MAC7DA,KAAK2Q,KAAK6oG,eAAeK,OAAS75G,KAAK65G,OAAOviD,KAAKt3D,MACnDA,KAAK2Q,KAAK6oG,eAAeM,UAAY95G,KAAK85G,UAAUxiD,KAAKt3D,MACzDA,KAAK2Q,KAAK6oG,eAAej/B,aAAev6E,KAAKu6E,aAAajjB,KAAKt3D,MAC/DA,KAAK2Q,KAAK6oG,eAAeO,QAAU/5G,KAAK+5G,QAAQziD,KAAKt3D,MACrDA,KAAK2Q,KAAK6oG,eAAeQ,YAAch6G,KAAKg6G,YAAY1iD,KAAKt3D,MAC7DA,KAAK2Q,KAAK6oG,eAAejiC,UAAYv3E,KAAKu3E,UAAUjgB,KAAKt3D,MACzDA,KAAK2Q,KAAK6oG,eAAeS,UAAYj6G,KAAKi6G,UAAU3iD,KAAKt3D,MAEzDA,KAAK81I,UAAY,EACjB91I,KAAK41F,QACL51F,KAAK8oG,SACL9oG,KAAK4hF,UAAQ/9E,GACb7D,KAAKi3I,aAAWpzI,GAChB7D,KAAKk3I,eAAarzI,GAElB7D,KAAK2Q,KAAKupG,UAAUrjC,WAAa72E,KAAK62E,WAAWvf,KAAKt3D,MAEtDA,KAAKgO,WACLhO,KAAK0tE,gBACHypE,WAAW,EACXC,UAAU,EACVvrI,OAAO,EACPwrI,UACEnpI,SAAS,EACTopI,OAASviH,EAAG,GAAIpG,EAAG,GAAIooD,KAAM,KAC7BwgE,cAAc,GAEhBC,mBAAmB,EACnBC,aAAc,IACdC,UAAU,GAEZ/2I,EAAKC,OAAOZ,KAAKgO,QAAShO,KAAK0tE,gBAE/B1tE,KAAKs6G,qBAisBP,OA9rBA,EAAItoB,EAAuB,SAAG6oB,IAC5BtzG,IAAK,qBACLhF,MAAO,WACL,GAAI62F,GAAQp5F,IAEZA,MAAK2Q,KAAK49D,QAAQl9B,GAAG,UAAW,WAC9B+D,aAAagkD,EAAM89C,kBACZ99C,GAAMzoF,KAAKupG,UAAUrjC,gBAIhCtvE,IAAK,aACLhF,MAAO,SAAoByL,GACzB,OAAgBnK,KAAZmK,EAAuB,CAEzB,GAAIV,IAAU,kBAAmB,kBAAmB,WAAY,cAAe,aAAc,uBAC7F3M,GAAKgE,uBAAuB2I,EAAQtN,KAAKgO,QAASA,GAGlDrN,EAAKmN,aAAa9N,KAAKgO,QAASA,EAAS,YAErCA,EAAQqrC,UACV14C,EAAKC,OAAOZ,KAAKgO,QAAQqrC,QAASrrC,EAAQqrC,SACtCrrC,EAAQqrC,QAAQnvC,QAClBlK,KAAKgO,QAAQqrC,QAAQnvC,MAAQvJ,EAAKiK,WAAWoD,EAAQqrC,QAAQnvC,SAKnElK,KAAKg3I,kBAAkBhmG,WAAWhxC,KAAKgO,YAWzCzG,IAAK,aACLhF,MAAO,SAAoBk+D,GACzB,OACE1rC,EAAG0rC,EAAM1rC,EAAIp0B,EAAKoF,gBAAgB/F,KAAKk+C,OAAOD,MAAMC,QACpDvvB,EAAG8xC,EAAM9xC,EAAIhuB,EAAK0F,eAAerG,KAAKk+C,OAAOD,MAAMC,YAWvD32C,IAAK,UACLhF,MAAO,SAAiBgG,IAClB,GAAI1F,OAAOuC,UAAYpF,KAAK81I,UAAY,KAC1C91I,KAAK41F,KAAKhf,QAAU52E,KAAK62E,WAAWtuE,EAAMozC,QAC1C37C,KAAK41F,KAAK+hD,SAAU,EACpB33I,KAAK8oG,MAAMtmG,MAAQxC,KAAK2Q,KAAK0pG,KAAK73G,MAElCxC,KAAK81I,WAAY,GAAIjzI,OAAOuC,cAUhCmC,IAAK,QACLhF,MAAO,SAAegG,GACpB,GAAIquE,GAAU52E,KAAK62E,WAAWtuE,EAAMozC,QAChCokC,EAAc//E,KAAK06G,iBAAiB1sG,QAAQ+xE,cAAgBx3E,EAAMuzD,gBAAgB,GAAGxP,SAAW/jD,EAAMuzD,gBAAgB,GAAG6qB,QAE7H3mF,MAAK43I,sBAAsBhhE,EAASruE,EAAOw3E,GAC3C//E,KAAK06G,iBAAiBm9B,oBAAoB,QAAStvI,EAAOquE,MAS5DrvE,IAAK,cACLhF,MAAO,SAAqBgG,GAC1B,GAAIquE,GAAU52E,KAAK62E,WAAWtuE,EAAMozC,OACpC37C,MAAK06G,iBAAiBm9B,oBAAoB,cAAetvI,EAAOquE,MASlErvE,IAAK,SACLhF,MAAO,SAAgBgG,GACrB,GAAIquE,GAAU52E,KAAK62E,WAAWtuE,EAAMozC,QAChCokC,EAAc//E,KAAK06G,iBAAiB1sG,QAAQ+xE,WAEhD//E,MAAK43I,sBAAsBhhE,EAASruE,EAAOw3E,GAE3C//E,KAAK06G,iBAAiBm9B,oBAAoB,QAAStvI,EAAOquE,GAC1D52E,KAAK06G,iBAAiBm9B,oBAAoB,OAAQtvI,EAAOquE,MAU3DrvE,IAAK,YACLhF,MAAO,SAAmBgG,GACxB,IAAI,GAAI1F,OAAOuC,UAAYpF,KAAK81I,UAAY,GAAI,CAC9C,GAAIl/D,GAAU52E,KAAK62E,WAAWtuE,EAAMozC,OACpC37C,MAAK06G,iBAAiBm9B,oBAAoB,UAAWtvI,EAAOquE,GAE5D52E,KAAK81I,WAAY,GAAIjzI,OAAOuC,cAIhCmC,IAAK,YACLhF,MAAO,SAAmBgG,GACxB,GAAIquE,GAAU52E,KAAK62E,YAAa9hD,EAAGxsB,EAAMyuC,QAASroB,EAAGpmB,EAAM4uC,SAC3Dn3C,MAAK06G,iBAAiBm9B,oBAAoB,YAAatvI,EAAOquE,MAUhErvE,IAAK,wBACLhF,MAAO,SAA+Bq0E,EAASruE,GAC7C,GAAIkoB,GAAM9sB,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,IAAmBA,UAAU,GAErEm0I,EAA8B93I,KAAK06G,iBAAiBq9B,wBACpDC,EAA8Bh4I,KAAK06G,iBAAiBu9B,wBACpDC,EAAoBl4I,KAAK06G,iBAAiB1pC,eAC1CmU,MAAW,EAEbA,IADU,IAAR10D,EACSzwB,KAAK06G,iBAAiBy9B,wBAAwBvhE,GAE9C52E,KAAK06G,iBAAiB09B,cAAcxhE,EAEjD,IAAIyhE,GAAqBr4I,KAAK06G,iBAAiBq9B,wBAC3CO,EAAqBt4I,KAAK06G,iBAAiBu9B,wBAC3CM,EAAmBv4I,KAAK06G,iBAAiB1pC,eAEzCwnE,EAAyBx4I,KAAKy4I,sBAAsBP,EAAmBK,GACvEG,EAAeF,EAAuBE,aACtCC,EAAeH,EAAuBG,aAEtCC,GAAe,CAEfN,GAAqBN,EAA8B,GAErDh4I,KAAK06G,iBAAiBm9B,oBAAoB,aAActvI,EAAOquE,GAC/DuO,GAAW,EACXyzD,GAAe,IACW,IAAjBF,GAAyBJ,EAAqB,GACvDt4I,KAAK06G,iBAAiBm9B,oBAAoB,eAAgBtvI,EAAOquE,EAASshE,GAC1El4I,KAAK06G,iBAAiBm9B,oBAAoB,aAActvI,EAAOquE,GAC/DgiE,GAAe,EACfzzD,GAAW,GACFmzD,EAAqBN,EAA8B,IAE5Dh4I,KAAK06G,iBAAiBm9B,oBAAoB,eAAgBtvI,EAAOquE,EAASshE,GAC1E/yD,GAAW,GAITkzD,EAAqBP,EAA8B,IAAsB,IAAjBc,GAE1D54I,KAAK06G,iBAAiBm9B,oBAAoB,aAActvI,EAAOquE,GAC/DuO,GAAW,GACFkzD,EAAqB,IAAsB,IAAjBM,GACnC34I,KAAK06G,iBAAiBm9B,oBAAoB,eAAgBtvI,EAAOquE,EAASshE,GAC1El4I,KAAK06G,iBAAiBm9B,oBAAoB,aAActvI,EAAOquE,GAC/DuO,GAAW,GACFkzD,EAAqBP,EAA8B,IAE5D93I,KAAK06G,iBAAiBm9B,oBAAoB,eAAgBtvI,EAAOquE,EAASshE,GAC1E/yD,GAAW,IAII,IAAbA,GAEFnlF,KAAK06G,iBAAiBm9B,oBAAoB,SAAUtvI,EAAOquE,MAa/DrvE,IAAK,wBACLhF,MAAO,SAA+B21I,EAAmBK,GAIvD,IAAK,GAHDG,IAAe,EACfC,GAAe,EAEV50I,EAAI,EAAGA,EAAIm0I,EAAkB9+B,MAAMx1G,OAAQG,KACkB,IAAhEw0I,EAAiBn/B,MAAMx0G,QAAQszI,EAAkB9+B,MAAMr1G,MACzD20I,GAAe,EAGnB,KAAK,GAAI9lI,GAAK,EAAGA,EAAK2lI,EAAiBn/B,MAAMx1G,OAAQgP,KACmB,IAAlEslI,EAAkB9+B,MAAMx0G,QAAQszI,EAAkB9+B,MAAMxmG,MAC1D8lI,GAAe,EAGnB,KAAK,GAAI/M,GAAM,EAAGA,EAAMuM,EAAkB5+B,MAAM11G,OAAQ+nI,KACgB,IAAlE4M,EAAiBj/B,MAAM10G,QAAQszI,EAAkB5+B,MAAMqyB,MACzDgN,GAAe,EAGnB,KAAK,GAAI7M,GAAM,EAAGA,EAAMyM,EAAiBj/B,MAAM11G,OAAQkoI,KACkB,IAAnEoM,EAAkB5+B,MAAM10G,QAAQszI,EAAkB5+B,MAAMwyB,MAC1D6M,GAAe,EAInB,QAASD,aAAcA,EAAcC,aAAcA,MAWrDpxI,IAAK,cACLhF,MAAO,SAAqBgG,OAEA1E,KAAtB7D,KAAK41F,KAAKhf,SACZ52E,KAAKs3E,QAAQ/uE,EAIf,IAAIglC,GAAOvtC,KAAK06G,iBAAiBiE,UAAU3+G,KAAK41F,KAAKhf,QAOrD,IALA52E,KAAK41F,KAAKvgB,UAAW,EACrBr1E,KAAK41F,KAAK7kB,aACV/wE,KAAK41F,KAAK35C,YAAct7C,EAAKC,UAAWZ,KAAK2Q,KAAK0pG,KAAKp+D,aACvDj8C,KAAK41F,KAAKumB,WAASt4G,OAENA,KAAT0pC,IAAiD,IAA3BvtC,KAAKgO,QAAQmpI,UAAoB,CACzDn3I,KAAK41F,KAAKumB,OAAS5uE,EAAKltC,IAEE,IAAtBktC,EAAK8lG,eACPrzI,KAAK06G,iBAAiB4B,cACtBt8G,KAAK06G,iBAAiBm+B,aAAatrG,IAIrCvtC,KAAK06G,iBAAiBm9B,oBAAoB,YAAatvI,EAAOvI,KAAK41F,KAAKhf,QAExE,IAAI7F,GAAY/wE,KAAK06G,iBAAiBo+B,aAAa1/B,KAEnD,KAAK,GAAI+C,KAAUprC,GACjB,GAAIA,EAAUztE,eAAe64G,GAAS,CACpC,GAAIv6G,GAASmvE,EAAUorC,GACnB/wG,GACF/K,GAAIuB,EAAOvB,GACXktC,KAAM3rC,EAGNmzB,EAAGnzB,EAAOmzB,EACVpG,EAAG/sB,EAAO+sB,EACVoqH,OAAQn3I,EAAOoM,QAAQm4G,MAAMpxF,EAC7BikH,OAAQp3I,EAAOoM,QAAQm4G,MAAMx3F,EAG/B/sB,GAAOoM,QAAQm4G,MAAMpxF,GAAI,EACzBnzB,EAAOoM,QAAQm4G,MAAMx3F,GAAI,EAEzB3uB,KAAK41F,KAAK7kB,UAAUlsE,KAAKuG,QAK7BpL,MAAK06G,iBAAiBm9B,oBAAoB,YAAatvI,EAAOvI,KAAK41F,KAAKhf,YAAS/yE,IAAW,MAUhG0D,IAAK,SACLhF,MAAO,SAAgBgG,GACrB,GAAIkyF,GAASz6F,IAEb,KAA0B,IAAtBA,KAAK41F,KAAK+hD,QAAd,CAKA33I,KAAK2Q,KAAK49D,QAAQrhB,KAAK,aAEvB,IAAI0pB,GAAU52E,KAAK62E,WAAWtuE,EAAMozC,QAEhCo1B,EAAY/wE,KAAK41F,KAAK7kB,SAC1B,IAAIA,GAAaA,EAAUntE,SAAqC,IAA3B5D,KAAKgO,QAAQmpI,UAAoB,CACpEn3I,KAAK06G,iBAAiBm9B,oBAAoB,WAAYtvI,EAAOquE,EAG7D,IAAIvZ,GAASuZ,EAAQ7hD,EAAI/0B,KAAK41F,KAAKhf,QAAQ7hD,EACvCuoC,EAASsZ,EAAQjoD,EAAI3uB,KAAK41F,KAAKhf,QAAQjoD,CAG3CoiD,GAAU7pE,QAAQ,SAAU6pE,GAC1B,GAAIxjC,GAAOwjC,EAAUxjC,MAEI,IAArBwjC,EAAUgoE,SACZxrG,EAAKxY,EAAI0lE,EAAOv8C,OAAOg3F,qBAAqBz6C,EAAOv8C,OAAO82F,qBAAqBjkE,EAAUh8C,GAAKsoC,KAGvE,IAArB0T,EAAUioE,SACZzrG,EAAK5e,EAAI8rE,EAAOv8C,OAAOi3F,qBAAqB16C,EAAOv8C,OAAO+2F,qBAAqBlkE,EAAUpiD,GAAK2uC,MAKlGt9D,KAAK2Q,KAAK49D,QAAQrhB,KAAK,uBAGvB,KAA8B,IAA1BltD,KAAKgO,QAAQopI,SAAmB,CAIlC,GAHAp3I,KAAK06G,iBAAiBm9B,oBAAoB,WAAYtvI,EAAOquE,MAAS/yE,IAAW,OAGvDA,KAAtB7D,KAAK41F,KAAKhf,QAEZ,WADA52E,MAAK45G,YAAYrxG,EAGnB,IAAI6jD,GAAQwqB,EAAQ7hD,EAAI/0B,KAAK41F,KAAKhf,QAAQ7hD,EACtCs3B,EAAQuqB,EAAQjoD,EAAI3uB,KAAK41F,KAAKhf,QAAQjoD,CAE1C3uB,MAAK2Q,KAAK0pG,KAAKp+D,aAAgBlnB,EAAG/0B,KAAK41F,KAAK35C,YAAYlnB,EAAIq3B,EAAOz9B,EAAG3uB,KAAK41F,KAAK35C,YAAYttB,EAAI09B,GAChGrsD,KAAK2Q,KAAK49D,QAAQrhB,KAAK,gBAW7B3lD,IAAK,YACLhF,MAAO,SAAmBgG,GACxBvI,KAAK41F,KAAKvgB,UAAW,CACrB,IAAItE,GAAY/wE,KAAK41F,KAAK7kB,SACtBA,IAAaA,EAAUntE,QACzBmtE,EAAU7pE,QAAQ,SAAUkE,GAE1BA,EAAEmiC,KAAKv/B,QAAQm4G,MAAMpxF,EAAI3pB,EAAE2tI,OAC3B3tI,EAAEmiC,KAAKv/B,QAAQm4G,MAAMx3F,EAAIvjB,EAAE4tI,SAE7Bh5I,KAAK06G,iBAAiBm9B,oBAAoB,UAAWtvI,EAAOvI,KAAK62E,WAAWtuE,EAAMozC,SAClF37C,KAAK2Q,KAAK49D,QAAQrhB,KAAK,qBAEvBltD,KAAK06G,iBAAiBm9B,oBAAoB,UAAWtvI,EAAOvI,KAAK62E,WAAWtuE,EAAMozC,YAAS93C,IAAW,GACtG7D,KAAK2Q,KAAK49D,QAAQrhB,KAAK,sBAW3B3lD,IAAK,UACLhF,MAAO,SAAiBgG,GACtB,GAAIquE,GAAU52E,KAAK62E,WAAWtuE,EAAMozC,OAEpC37C,MAAK41F,KAAK+hD,SAAU,MACQ9zI,KAAxB7D,KAAK8oG,MAAa,QACpB9oG,KAAK8oG,MAAMtmG,MAAQ,EAIrB,IAAIA,GAAQxC,KAAK8oG,MAAMtmG,MAAQ+F,EAAM/F,KACrCxC,MAAK+2E,KAAKv0E,EAAOo0E,MAYnBrvE,IAAK,OACLhF,MAAO,SAAcC,EAAOo0E,GAC1B,IAA8B,IAA1B52E,KAAKgO,QAAQ0pI,SAAmB,CAClC,GAAIuB,GAAWj5I,KAAK2Q,KAAK0pG,KAAK73G,KAC1BA,GAAQ,OACVA,EAAQ,MAENA,EAAQ,KACVA,EAAQ,GAGV,IAAI02I,OAAsBr1I,OACRA,KAAd7D,KAAK41F,OACoB,IAAvB51F,KAAK41F,KAAKvgB,WACZ6jE,EAAsBl5I,KAAKk+C,OAAO2+D,YAAY78G,KAAK41F,KAAKhf,SAI5D,IAAI36B,GAAcj8C,KAAK2Q,KAAK0pG,KAAKp+D,YAE7Bk9F,EAAY32I,EAAQy2I,EACpBG,GAAM,EAAID,GAAaviE,EAAQ7hD,EAAIknB,EAAYlnB,EAAIokH,EACnDE,GAAM,EAAIF,GAAaviE,EAAQjoD,EAAIstB,EAAYttB,EAAIwqH,CAKvD,IAHAn5I,KAAK2Q,KAAK0pG,KAAK73G,MAAQA,EACvBxC,KAAK2Q,KAAK0pG,KAAKp+D,aAAgBlnB,EAAGqkH,EAAIzqH,EAAG0qH,OAEdx1I,IAAvBq1I,EAAkC,CACpC,GAAII,GAAuBt5I,KAAKk+C,OAAO0+D,YAAYs8B,EACnDl5I,MAAK41F,KAAKhf,QAAQ7hD,EAAIukH,EAAqBvkH,EAC3C/0B,KAAK41F,KAAKhf,QAAQjoD,EAAI2qH,EAAqB3qH,EAG7C3uB,KAAK2Q,KAAK49D,QAAQrhB,KAAK,kBAEnB+rF,EAAWz2I,EACbxC,KAAK2Q,KAAK49D,QAAQrhB,KAAK,QAAUttB,UAAW,IAAKp9B,MAAOxC,KAAK2Q,KAAK0pG,KAAK73G,MAAOo0E,QAASA,IAEvF52E,KAAK2Q,KAAK49D,QAAQrhB,KAAK,QAAUttB,UAAW,IAAKp9B,MAAOxC,KAAK2Q,KAAK0pG,KAAK73G,MAAOo0E,QAASA,QAc7FrvE,IAAK,eACLhF,MAAO,SAAsBgG,GAC3B,IAA8B,IAA1BvI,KAAKgO,QAAQ0pI,SAAmB,CAElC,GAAIv2G,GAAQ,CAcZ,IAbI54B,EAAM0lD,WAER9sB,EAAQ54B,EAAM0lD,WAAa,IAClB1lD,EAAM2lD,SAIf/sB,GAAS54B,EAAM2lD,OAAS,GAMZ,IAAV/sB,EAAa,CAGf,GAAI3+B,GAAQxC,KAAK2Q,KAAK0pG,KAAK73G,MACvBu0E,EAAO51C,EAAQ,EACfA,GAAQ,IACV41C,GAAe,EAAIA,GAErBv0E,GAAS,EAAIu0E,CAGb,IAAIH,GAAU52E,KAAK62E,YAAa9hD,EAAGxsB,EAAMyuC,QAASroB,EAAGpmB,EAAM4uC,SAG3Dn3C,MAAK+2E,KAAKv0E,EAAOo0E,GAInBruE,EAAMD,qBAWVf,IAAK,cACLhF,MAAO,SAAqBgG,GAC1B,GAAIsyF,GAAS76F,KAET42E,EAAU52E,KAAK62E,YAAa9hD,EAAGxsB,EAAMyuC,QAASroB,EAAGpmB,EAAM4uC,UACvDoiG,GAAe,CAqCnB,QAlCmB11I,KAAf7D,KAAK4hF,SACmB,IAAtB5hF,KAAK4hF,MAAM/I,QACb74E,KAAKw5I,gBAAgB5iE,IAIG,IAAtB52E,KAAK4hF,MAAM/I,SACb0gE,GAAe,EACfv5I,KAAK4hF,MAAMkH,YAAYlS,EAAQ7hD,EAAI,EAAG6hD,EAAQjoD,EAAI,GAClD3uB,KAAK4hF,MAAM9P,UAK4B,IAAvC9xE,KAAKgO,QAAQqpI,SAASE,eAA4D,IAAlCv3I,KAAKgO,QAAQqpI,SAASnpI,SACxElO,KAAKk+C,OAAOD,MAAMmzB,SAIC,IAAjBmoE,QACsB11I,KAApB7D,KAAKk3I,aACPvkF,cAAc3yD,KAAKk3I,YACnBl3I,KAAKk3I,eAAarzI,IAEf7D,KAAK41F,KAAKvgB,WACbr1E,KAAKk3I,WAAa7hG,WAAW,WAC3B,MAAOwlD,GAAO4+C,gBAAgB7iE,IAC7B52E,KAAKgO,QAAQypI,iBAOO,IAAvBz3I,KAAKgO,QAAQnC,MAAgB,CAE/B,GAAI/K,GAAMd,KAAK06G,iBAAiBiE,UAAU/nC,OAC9B/yE,KAAR/C,IACFA,EAAMd,KAAK06G,iBAAiBkE,UAAUhoC,IAExC52E,KAAK06G,iBAAiBg/B,YAAY54I,OActCyG,IAAK,kBACLhF,MAAO,SAAyBq0E,GAC9B,GAAI7hD,GAAI/0B,KAAKk+C,OAAOg3F,qBAAqBt+D,EAAQ7hD,GAC7CpG,EAAI3uB,KAAKk+C,OAAOi3F,qBAAqBv+D,EAAQjoD,GAC7CgrH,GACFzzI,KAAM6uB,EACNzuB,IAAKqoB,EACLvoB,MAAO2uB,EACP0pB,OAAQ9vB,GAGNirH,MAAuC/1I,KAAlB7D,KAAKi3I,aAAyBpzI,GAAY7D,KAAKi3I,SAAS52I,GAC7Ew5I,GAAkB,EAClBC,EAAY,MAGhB,QAAsBj2I,KAAlB7D,KAAKi3I,SAAwB,CAM/B,IAAK,GAJD59B,GAAcr5G,KAAK2Q,KAAK0oG,YACxBD,EAAQp5G,KAAK2Q,KAAKyoG,MAClB7rE,MAAO,GACPwsG,KACKh2I,EAAI,EAAGA,EAAIs1G,EAAYz1G,OAAQG,IACtCwpC,EAAO6rE,EAAMC,EAAYt1G,KACkB,IAAvCwpC,EAAKysG,kBAAkBL,QACD91I,KAApB0pC,EAAKq7C,YACPmxD,EAAiBl1I,KAAKw0G,EAAYt1G,GAKpCg2I,GAAiBn2I,OAAS,IAE5B5D,KAAKi3I,SAAW79B,EAAM2gC,EAAiBA,EAAiBn2I,OAAS,IAEjEi2I,GAAkB,GAItB,OAAsBh2I,KAAlB7D,KAAKi3I,WAA8C,IAApB4C,EAA2B,CAM5D,IAAK,GAJDtgC,GAAcv5G,KAAK2Q,KAAK4oG,YACxBD,EAAQt5G,KAAK2Q,KAAK2oG,MAClBuF,MAAO,GACPo7B,KACKhO,EAAM,EAAGA,EAAM1yB,EAAY31G,OAAQqoI,IAC1CptB,EAAOvF,EAAMC,EAAY0yB,KACkB,IAAvCptB,EAAKm7B,kBAAkBL,KACF,IAAnB96B,EAAKsc,eAA0Ct3H,KAApBg7G,EAAKj2B,YAClCqxD,EAAiBp1I,KAAK00G,EAAY0yB,GAKpCgO,GAAiBr2I,OAAS,IAC5B5D,KAAKi3I,SAAW39B,EAAM2gC,EAAiBA,EAAiBr2I,OAAS,IACjEk2I,EAAY,YAIMj2I,KAAlB7D,KAAKi3I,SAEHj3I,KAAKi3I,SAAS52I,KAAOu5I,QACJ/1I,KAAf7D,KAAK4hF,QACP5hF,KAAK4hF,MAAQ,GAAIG,GAAM/hF,KAAKk+C,OAAOD,QAGrCj+C,KAAK4hF,MAAMs4D,gBAAkBJ,EAC7B95I,KAAK4hF,MAAMu4D,cAAgBn6I,KAAKi3I,SAAS52I,GAKzCL,KAAK4hF,MAAMkH,YAAYlS,EAAQ7hD,EAAI,EAAG6hD,EAAQjoD,EAAI,GAClD3uB,KAAK4hF,MAAMiH,QAAQ7oF,KAAKi3I,SAASruD,YACjC5oF,KAAK4hF,MAAM9P,OACX9xE,KAAK2Q,KAAK49D,QAAQrhB,KAAK,YAAaltD,KAAKi3I,SAAS52I,SAGjCwD,KAAf7D,KAAK4hF,QACP5hF,KAAK4hF,MAAM9vE,OACX9R,KAAK2Q,KAAK49D,QAAQrhB,KAAK,iBAa7B3lD,IAAK,kBACLhF,MAAO,SAAyBq0E,GAC9B,GAAI+iE,GAAa35I,KAAK06G,iBAAiB0/B,yBAAyBxjE,GAE5DyjE,GAAa,CACjB,IAAmC,SAA/Br6I,KAAK4hF,MAAMs4D,iBACb,OAAkDr2I,KAA9C7D,KAAK2Q,KAAKyoG,MAAMp5G,KAAK4hF,MAAMu4D,iBAKV,KAJnBE,EAAar6I,KAAK2Q,KAAKyoG,MAAMp5G,KAAK4hF,MAAMu4D,eAAeH,kBAAkBL,IAIhD,CACvB,GAAIW,GAAWt6I,KAAK06G,iBAAiBiE,UAAU/nC,EAC/CyjE,OAA0Bx2I,KAAby2I,GAAiCA,EAASj6I,KAAOL,KAAK4hF,MAAMu4D,wBAI5Bt2I,KAA7C7D,KAAK06G,iBAAiBiE,UAAU/nC,QACgB/yE,KAA9C7D,KAAK2Q,KAAK2oG,MAAMt5G,KAAK4hF,MAAMu4D,iBAC7BE,EAAar6I,KAAK2Q,KAAK2oG,MAAMt5G,KAAK4hF,MAAMu4D,eAAeH,kBAAkBL,KAK5D,IAAfU,IACFr6I,KAAKi3I,aAAWpzI,GAChB7D,KAAK4hF,MAAM9vE,OACX9R,KAAK2Q,KAAK49D,QAAQrhB,KAAK,kBAItB2tD,IAGTj7G,GAAiB,QAAIi7G,GAIjB,SAAUh7G,EAAQD,EAASM,GAgB/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAZzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAIsvF,GAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAKvC/iD,GADO9uC,EAAoB,GAClBA,EAAoB,MAC7Bm6E,EAAan6E,EAAoB,KACjC+uC,EAAW/uC,EAAoB,KAE/B62I,EAAoB,WACtB,QAASA,GAAkBpmI,EAAMutC,GAC/B,GAAIk7C,GAAQp5F,MAEZ,EAAI8xF,EAA0B,SAAG9xF,KAAM+2I,GAEvC/2I,KAAK2Q,KAAOA,EACZ3Q,KAAKk+C,OAASA,EAEdl+C,KAAKu6I,cAAe,EACpBv6I,KAAKw6I,qBACLx6I,KAAKy6I,kBACLz6I,KAAK81I,UAAY,EACjB91I,KAAK06I,WAAY,EAEjB16I,KAAK2Q,KAAK49D,QAAQl9B,GAAG,WAAY,WAC/B+nD,EAAMshD,WAAY,EAAKthD,EAAMuhD,8BAE/B36I,KAAK2Q,KAAK49D,QAAQl9B,GAAG,aAAc,WACjC+nD,EAAMshD,WAAY,EAAMthD,EAAMuhD,8BAEhC36I,KAAK2Q,KAAK49D,QAAQl9B,GAAG,UAAW,eACPxtC,KAAnBu1F,EAAMnqD,UACRmqD,EAAMnqD,SAASmC,YAInBpxC,KAAKgO,WAqSP,OAlSA,EAAIgkF,EAAuB,SAAG+kD,IAC5BxvI,IAAK,aACLhF,MAAO,SAAoByL,OACTnK,KAAZmK,IACFhO,KAAKgO,QAAUA,EACfhO,KAAKgY,aAITzQ,IAAK,SACLhF,MAAO,YACkC,IAAnCvC,KAAKgO,QAAQwpI,mBACW,IAAtBx3I,KAAKu6I,cACPv6I,KAAK46I,0BAEwB,IAAtB56I,KAAKu6I,cACdv6I,KAAK66I,kBAGP76I,KAAK26I,+BAGPpzI,IAAK,kBACLhF,MAAO,WAEL,GAAqC,GAAjCvC,KAAKw6I,kBAAkB52I,OAAa,CACtC,IAAK,GAAIG,GAAI,EAAGA,EAAI/D,KAAKw6I,kBAAkB52I,OAAQG,IACjD/D,KAAKw6I,kBAAkBz2I,GAAGqtC,SAE5BpxC,MAAKw6I,qBAIHx6I,KAAK86I,eAAiB96I,KAAK86I,cAAuB,SAAK96I,KAAK86I,cAAuB,QAAEhyI,YACvF9I,KAAK86I,cAAuB,QAAEhyI,WAAW5G,YAAYlC,KAAK86I,cAAuB,SAGnF96I,KAAKu6I,cAAe,KAatBhzI,IAAK,yBACLhF,MAAO,WACL,GAAIk4F,GAASz6F,IAEbA,MAAK66I,kBAEL76I,KAAK86I,gBACL,IAAIC,IAAkB,KAAM,OAAQ,OAAQ,QAAS,SAAU,UAAW,eACtEC,GAAwB,UAAW,YAAa,YAAa,aAAc,UAAW,WAAY,OAEtGh7I,MAAK86I,cAAuB,QAAI5qI,SAASC,cAAc,OACvDnQ,KAAK86I,cAAuB,QAAEp0I,UAAY,iBAC1C1G,KAAKk+C,OAAOD,MAAMvtC,YAAY1Q,KAAK86I,cAAuB,QAE1D,KAAK,GAAI/2I,GAAI,EAAGA,EAAIg3I,EAAen3I,OAAQG,IAAK,CAC9C/D,KAAK86I,cAAcC,EAAeh3I,IAAMmM,SAASC,cAAc,OAC/DnQ,KAAK86I,cAAcC,EAAeh3I,IAAI2C,UAAY,kBAAoBq0I,EAAeh3I,GACrF/D,KAAK86I,cAAuB,QAAEpqI,YAAY1Q,KAAK86I,cAAcC,EAAeh3I,IAE5E,IAAI+yD,GAAS,GAAI9nB,GAAOhvC,KAAK86I,cAAcC,EAAeh3I,IAC1B,UAA5Bi3I,EAAqBj3I,GACvBs2E,EAAW/C,QAAQxgB,EAAQ92D,KAAKi7I,KAAK3jF,KAAKt3D,OAE1Cq6E,EAAW/C,QAAQxgB,EAAQ92D,KAAKk7I,aAAa5jF,KAAKt3D,KAAMg7I,EAAqBj3I,KAG/E/D,KAAKw6I,kBAAkB31I,KAAKiyD,GAK9B,GAAI88E,GAAc,GAAI5kG,GAAOhvC,KAAKk+C,OAAOD,MACzCo8B,GAAW9C,UAAUq8D,EAAa,WAChCn5C,EAAO0gD,kBAETn7I,KAAKw6I,kBAAkB31I,KAAK+uI,GAE5B5zI,KAAKu6I,cAAe,KAGtBhzI,IAAK,eACLhF,MAAO,SAAsBuF,OACSjE,KAAhC7D,KAAKy6I,eAAe3yI,KACtB9H,KAAKy6I,eAAe3yI,GAAU9H,KAAK8H,GAAQwvD,KAAKt3D,MAChDA,KAAK2Q,KAAK49D,QAAQl9B,GAAG,aAAcrxC,KAAKy6I,eAAe3yI,IACvD9H,KAAK2Q,KAAK49D,QAAQrhB,KAAK,uBAI3B3lD,IAAK,mBACLhF,MAAO,SAA0BuF,OACKjE,KAAhC7D,KAAKy6I,eAAe3yI,KACtB9H,KAAK2Q,KAAK49D,QAAQ/8B,IAAI,aAAcxxC,KAAKy6I,eAAe3yI,IACxD9H,KAAK2Q,KAAK49D,QAAQrhB,KAAK,wBAChBltD,MAAKy6I,eAAe3yI,OAW/BP,IAAK,OACLhF,MAAO,YACD,GAAIM,OAAOuC,UAAYpF,KAAK81I,UAAY,MAE1C91I,KAAK2Q,KAAK49D,QAAQrhB,KAAK,OAAStxB,SAAU,MAC1C57B,KAAK81I,WAAY,GAAIjzI,OAAOuC,cAWhCmC,IAAK,gBACLhF,MAAO,WACL,IAAK,GAAI64I,KAAep7I,MAAKy6I,eACvBz6I,KAAKy6I,eAAen3I,eAAe83I,KACrCp7I,KAAK2Q,KAAK49D,QAAQ/8B,IAAI,aAAcxxC,KAAKy6I,eAAeW,IACxDp7I,KAAK2Q,KAAK49D,QAAQrhB,KAAK,kBAG3BltD,MAAKy6I,qBAGPlzI,IAAK,UACLhF,MAAO,WACLvC,KAAK2Q,KAAK0pG,KAAKp+D,YAAYttB,GAAK3uB,KAAKgO,QAAQqpI,SAASC,MAAM3oH,KAG9DpnB,IAAK,YACLhF,MAAO,WACLvC,KAAK2Q,KAAK0pG,KAAKp+D,YAAYttB,GAAK3uB,KAAKgO,QAAQqpI,SAASC,MAAM3oH,KAG9DpnB,IAAK,YACLhF,MAAO,WACLvC,KAAK2Q,KAAK0pG,KAAKp+D,YAAYlnB,GAAK/0B,KAAKgO,QAAQqpI,SAASC,MAAMviH,KAG9DxtB,IAAK,aACLhF,MAAO,WACLvC,KAAK2Q,KAAK0pG,KAAKp+D,YAAYlnB,GAAK/0B,KAAKgO,QAAQqpI,SAASC,MAAMviH,KAG9DxtB,IAAK,UACLhF,MAAO,WACL,GAAI02I,GAAWj5I,KAAK2Q,KAAK0pG,KAAK73G,MAC1BA,EAAQxC,KAAK2Q,KAAK0pG,KAAK73G,OAAS,EAAIxC,KAAKgO,QAAQqpI,SAASC,MAAMvgE,MAChE96B,EAAcj8C,KAAK2Q,KAAK0pG,KAAKp+D,YAC7Bk9F,EAAY32I,EAAQy2I,EACpBG,GAAM,EAAID,GAAan5I,KAAKk+C,OAAOy1F,iBAAiB5+G,EAAIknB,EAAYlnB,EAAIokH,EACxEE,GAAM,EAAIF,GAAan5I,KAAKk+C,OAAOy1F,iBAAiBhlH,EAAIstB,EAAYttB,EAAIwqH,CAE5En5I,MAAK2Q,KAAK0pG,KAAK73G,MAAQA,EACvBxC,KAAK2Q,KAAK0pG,KAAKp+D,aAAgBlnB,EAAGqkH,EAAIzqH,EAAG0qH,GACzCr5I,KAAK2Q,KAAK49D,QAAQrhB,KAAK,QAAUttB,UAAW,IAAKp9B,MAAOxC,KAAK2Q,KAAK0pG,KAAK73G,MAAOo0E,QAAS,UAGzFrvE,IAAK,WACLhF,MAAO,WACL,GAAI02I,GAAWj5I,KAAK2Q,KAAK0pG,KAAK73G,MAC1BA,EAAQxC,KAAK2Q,KAAK0pG,KAAK73G,OAAS,EAAIxC,KAAKgO,QAAQqpI,SAASC,MAAMvgE,MAChE96B,EAAcj8C,KAAK2Q,KAAK0pG,KAAKp+D,YAC7Bk9F,EAAY32I,EAAQy2I,EACpBG,GAAM,EAAID,GAAan5I,KAAKk+C,OAAOy1F,iBAAiB5+G,EAAIknB,EAAYlnB,EAAIokH,EACxEE,GAAM,EAAIF,GAAan5I,KAAKk+C,OAAOy1F,iBAAiBhlH,EAAIstB,EAAYttB,EAAIwqH,CAE5En5I,MAAK2Q,KAAK0pG,KAAK73G,MAAQA,EACvBxC,KAAK2Q,KAAK0pG,KAAKp+D,aAAgBlnB,EAAGqkH,EAAIzqH,EAAG0qH,GACzCr5I,KAAK2Q,KAAK49D,QAAQrhB,KAAK,QAAUttB,UAAW,IAAKp9B,MAAOxC,KAAK2Q,KAAK0pG,KAAK73G,MAAOo0E,QAAS,UAQzFrvE,IAAK,4BACLhF,MAAO,WACL,GAAIs4F,GAAS76F,SAES6D,KAAlB7D,KAAKivC,UACPjvC,KAAKivC,SAASmC,WAGsB,IAAlCpxC,KAAKgO,QAAQqpI,SAASnpI,WACmB,IAAvClO,KAAKgO,QAAQqpI,SAASE,aACxBv3I,KAAKivC,SAAWA,GAAWiH,UAAW1tC,OAAQF,gBAAgB,IAE9DtI,KAAKivC,SAAWA,GAAWiH,UAAWl2C,KAAKk+C,OAAOD,MAAO31C,gBAAgB,IAG3EtI,KAAKivC,SAAS25B,SAES,IAAnB5oE,KAAK06I,YACP16I,KAAKivC,SAASqoB,KAAK,KAAM,WACvBujC,EAAOqgD,aAAa,YACnB,WACHl7I,KAAKivC,SAASqoB,KAAK,OAAQ,WACzBujC,EAAOqgD,aAAa,cACnB,WACHl7I,KAAKivC,SAASqoB,KAAK,OAAQ,WACzBujC,EAAOqgD,aAAa,cACnB,WACHl7I,KAAKivC,SAASqoB,KAAK,QAAS,WAC1BujC,EAAOqgD,aAAa,eACnB,WACHl7I,KAAKivC,SAASqoB,KAAK,IAAK,WACtBujC,EAAOqgD,aAAa,YACnB,WACHl7I,KAAKivC,SAASqoB,KAAK,OAAQ,WACzBujC,EAAOqgD,aAAa,YACnB,WACHl7I,KAAKivC,SAASqoB,KAAK,OAAQ,WACzBujC,EAAOqgD,aAAa,aACnB,WACHl7I,KAAKivC,SAASqoB,KAAK,IAAK,WACtBujC,EAAOqgD,aAAa,aACnB,WACHl7I,KAAKivC,SAASqoB,KAAK,IAAK,WACtBujC,EAAOqgD,aAAa,aACnB,WACHl7I,KAAKivC,SAASqoB,KAAK,IAAK,WACtBujC,EAAOqgD,aAAa,YACnB,WACHl7I,KAAKivC,SAASqoB,KAAK,SAAU,WAC3BujC,EAAOqgD,aAAa,YACnB,WACHl7I,KAAKivC,SAASqoB,KAAK,WAAY,WAC7BujC,EAAOqgD,aAAa,aACnB,WAEHl7I,KAAKivC,SAASqoB,KAAK,KAAM,WACvBujC,EAAOwgD,iBAAiB,YACvB,SACHr7I,KAAKivC,SAASqoB,KAAK,OAAQ,WACzBujC,EAAOwgD,iBAAiB,cACvB,SACHr7I,KAAKivC,SAASqoB,KAAK,OAAQ,WACzBujC,EAAOwgD,iBAAiB,cACvB,SACHr7I,KAAKivC,SAASqoB,KAAK,QAAS,WAC1BujC,EAAOwgD,iBAAiB,eACvB,SACHr7I,KAAKivC,SAASqoB,KAAK,IAAK,WACtBujC,EAAOwgD,iBAAiB,YACvB,SACHr7I,KAAKivC,SAASqoB,KAAK,OAAQ,WACzBujC,EAAOwgD,iBAAiB,YACvB,SACHr7I,KAAKivC,SAASqoB,KAAK,OAAQ,WACzBujC,EAAOwgD,iBAAiB,aACvB,SACHr7I,KAAKivC,SAASqoB,KAAK,IAAK,WACtBujC,EAAOwgD,iBAAiB,aACvB,SACHr7I,KAAKivC,SAASqoB,KAAK,IAAK,WACtBujC,EAAOwgD,iBAAiB,aACvB,SACHr7I,KAAKivC,SAASqoB,KAAK,IAAK,WACtBujC,EAAOwgD,iBAAiB,YACvB,SACHr7I,KAAKivC,SAASqoB,KAAK,SAAU,WAC3BujC,EAAOwgD,iBAAiB,YACvB,SACHr7I,KAAKivC,SAASqoB,KAAK,WAAY,WAC7BujC,EAAOwgD,iBAAiB,aACvB,eAKJtE,IAGTn3I,GAAiB,QAAIm3I,GAIjB,SAAUl3I,EAAQD,EAASM,GAgB/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAZzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAIsvF,GAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAIvCq3B,EAAOlpH,EAAoB,KAAc,QACzCo5H,EAAOp5H,EAAoB,KAAc,QAEzCS,EAAOT,EAAoB,GAE3By6G,EAAmB,WACrB,QAASA,GAAiBhqG,EAAMutC,GAC9B,GAAIk7C,GAAQp5F,MAEZ,EAAI8xF,EAA0B,SAAG9xF,KAAM26G,GAEvC36G,KAAK2Q,KAAOA,EACZ3Q,KAAKk+C,OAASA,EACdl+C,KAAK84I,cAAiB1/B,SAAWE,UACjCt5G,KAAKs7I,UAAaliC,SAAWE,UAE7Bt5G,KAAKgO,WACLhO,KAAK0tE,gBACHqS,aAAa,EACbD,YAAY,EACZy7D,sBAAsB,EACtBC,qBAAqB,GAEvB76I,EAAKC,OAAOZ,KAAKgO,QAAShO,KAAK0tE,gBAE/B1tE,KAAK2Q,KAAK49D,QAAQl9B,GAAG,eAAgB,WACnC+nD,EAAMqiD,oBAqvBV,OAjvBA,EAAIzpD,EAAuB,SAAG2oB,IAC5BpzG,IAAK,aACLhF,MAAO,SAAoByL,GACzB,OAAgBnK,KAAZmK,EAAuB,CACzB,GAAIV,IAAU,cAAe,sBAAuB,aAAc,uBAClE3M,GAAK2D,oBAAoBgJ,EAAQtN,KAAKgO,QAASA,OAYnDzG,IAAK,gBACLhF,MAAO,SAAuBq0E,GAC5B,GAAIuO,IAAW,CACf,KAAgC,IAA5BnlF,KAAKgO,QAAQ8xE,WAAqB,CACpC,GAAIh/E,GAAMd,KAAK2+G,UAAU/nC,IAAY52E,KAAK4+G,UAAUhoC,EAGpD52E,MAAKs8G,kBAEOz4G,KAAR/C,IACFqkF,EAAWnlF,KAAK64I,aAAa/3I,IAE/Bd,KAAK2Q,KAAK49D,QAAQrhB,KAAK,kBAEzB,MAAOi4B,MAGT59E,IAAK,0BACLhF,MAAO,SAAiCq0E,GACtC,GAAI8kE,IAAmB,CACvB,KAAgC,IAA5B17I,KAAKgO,QAAQ8xE,WAAqB,CACpC,GAAIh/E,GAAMd,KAAK2+G,UAAU/nC,IAAY52E,KAAK4+G,UAAUhoC,OAExC/yE,KAAR/C,IACF46I,GAAmB,GACM,IAArB56I,EAAIuyI,aACNrzI,KAAK27I,eAAe76I,GAEpBd,KAAK64I,aAAa/3I,GAGpBd,KAAK2Q,KAAK49D,QAAQrhB,KAAK,mBAG3B,MAAOwuF,MAGTn0I,IAAK,sBACLhF,MAAO,SAA6By1D,EAAWzvD,EAAOquE,EAAS6R,GAC7D,GAAImzD,GAAiBj4I,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,IAAmBA,UAAU,GAEhFk1D,MAAa,EAEfA,IADqB,IAAnB+iF,GACaxiC,SAAWE,UAEbt5G,KAAKgxE,eAEpBnY,EAAoB,SAClBgjF,KAAO9mH,EAAG6hD,EAAQ7hD,EAAGpG,EAAGioD,EAAQjoD,GAChCuvB,OAAQl+C,KAAKk+C,OAAO2+D,YAAYjmC,IAElC/d,EAAkB,MAAItwD,MAED1E,KAAjB4kF,IACF5vB,EAA8B,kBAAI4vB,GAEpCzoF,KAAK2Q,KAAK49D,QAAQrhB,KAAK8K,EAAWa,MAGpCtxD,IAAK,eACLhF,MAAO,SAAsBzB,GAC3B,GAAIg7I,GAAiBn4I,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,GAAK3D,KAAKgO,QAAQutI,oBAEtG,YAAY13I,KAAR/C,IACEA,YAAesoH,KACM,IAAnB0yB,GACF97I,KAAK+7I,sBAAsBj7I,GAG/BA,EAAImiF,SACJjjF,KAAKg8I,gBAAgBl7I,IACd,MAKXyG,IAAK,iBACLhF,MAAO,SAAwBzB,IACJ,IAArBA,EAAIuyI,eACNvyI,EAAIqkF,UAAW,EACfnlF,KAAKi8I,qBAAqBn7I,OAY9ByG,IAAK,8BACLhF,MAAO,SAAqCX,GAG1C,IAAK,GAFDm4I,MACA3gC,EAAQp5G,KAAK2Q,KAAKyoG,MACbr1G,EAAI,EAAGA,EAAI/D,KAAK2Q,KAAK0oG,YAAYz1G,OAAQG,IAAK,CACrD,GAAIo4G,GAASn8G,KAAK2Q,KAAK0oG,YAAYt1G,EAC/Bq1G,GAAM+C,GAAQ69B,kBAAkBp4I,IAClCm4I,EAAiBl1I,KAAKs3G,GAG1B,MAAO49B,MAYTxyI,IAAK,2BACLhF,MAAO,SAAkCq0E,GACvC,GAAIslE,GAAYl8I,KAAKk+C,OAAO2+D,YAAYjmC,EACxC,QACE1wE,KAAMg2I,EAAUnnH,EAAI,EACpBzuB,IAAK41I,EAAUvtH,EAAI,EACnBvoB,MAAO81I,EAAUnnH,EAAI,EACrB0pB,OAAQy9F,EAAUvtH,EAAI,MAY1BpnB,IAAK,YACLhF,MAAO,SAAmBq0E,GACxB,GAAIulE,KAAax4I,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,KAAmBA,UAAU,GAG5Ey4I,EAAiBp8I,KAAKo6I,yBAAyBxjE,GAC/CmjE,EAAmB/5I,KAAKq8I,4BAA4BD,EAGxD,OAAIrC,GAAiBn2I,OAAS,GACT,IAAfu4I,EACKn8I,KAAK2Q,KAAKyoG,MAAM2gC,EAAiBA,EAAiBn2I,OAAS,IAE3Dm2I,EAAiBA,EAAiBn2I,OAAS,OAGpD,MAYJ2D,IAAK,2BACLhF,MAAO,SAAkCX,EAAQq4I,GAE/C,IAAK,GADD3gC,GAAQt5G,KAAK2Q,KAAK2oG,MACbv1G,EAAI,EAAGA,EAAI/D,KAAK2Q,KAAK4oG,YAAY31G,OAAQG,IAAK,CACrD,GAAIq4G,GAASp8G,KAAK2Q,KAAK4oG,YAAYx1G,EAC/Bu1G,GAAM8C,GAAQ49B,kBAAkBp4I,IAClCq4I,EAAiBp1I,KAAKu3G,OAa5B70G,IAAK,8BACLhF,MAAO,SAAqCX,GAC1C,GAAIq4I,KAEJ,OADAj6I,MAAKs8I,yBAAyB16I,EAAQq4I,GAC/BA,KAWT1yI,IAAK,YACLhF,MAAO,SAAmBq0E,GAQxB,IAAK,GAPD2lE,KAAa54I,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,KAAmBA,UAAU,GAG5Eu4I,EAAYl8I,KAAKk+C,OAAO2+D,YAAYjmC,GACpC4lE,EAAU,GACVC,EAAkB,KAClBnjC,EAAQt5G,KAAK2Q,KAAK2oG,MACbv1G,EAAI,EAAGA,EAAI/D,KAAK2Q,KAAK4oG,YAAY31G,OAAQG,IAAK,CACrD,GAAIq4G,GAASp8G,KAAK2Q,KAAK4oG,YAAYx1G,GAC/B86G,EAAOvF,EAAM8C,EACjB,IAAIyC,EAAKsc,UAAW,CAClB,GAAIkC,GAAQxe,EAAKp7F,KAAKsR,EAClBuoG,EAAQze,EAAKp7F,KAAKkL,EAClB4uG,EAAM1e,EAAKr7F,GAAGuR,EACdyoG,EAAM3e,EAAKr7F,GAAGmL,EACd+vB,EAAOmgE,EAAKqc,SAASyC,kBAAkBN,EAAOC,EAAOC,EAAKC,EAAK0e,EAAUnnH,EAAGmnH,EAAUvtH,EACtF+vB,GAAO89F,IACTC,EAAkBrgC,EAClBogC,EAAU99F,IAIhB,MAAwB,QAApB+9F,GACiB,IAAfF,EACKv8I,KAAK2Q,KAAK2oG,MAAMmjC,GAEhBA,MAGT,MAYJl1I,IAAK,kBACLhF,MAAO,SAAyBzB,GAC1BA,YAAesoH,GACjBppH,KAAK84I,aAAa1/B,MAAMt4G,EAAIT,IAAMS,EAElCd,KAAK84I,aAAax/B,MAAMx4G,EAAIT,IAAMS,KAYtCyG,IAAK,cACLhF,MAAO,SAAqBzB,GACtBA,YAAesoH,GACjBppH,KAAKs7I,SAASliC,MAAMt4G,EAAIT,IAAMS,EAE9Bd,KAAKs7I,SAAShiC,MAAMx4G,EAAIT,IAAMS,KAYlCyG,IAAK,uBACLhF,MAAO,SAA8BzB,GAC/BA,YAAesoH,UACVppH,MAAK84I,aAAa1/B,MAAMt4G,EAAIT,IACnCL,KAAK08I,wBAAwB57I,UAEtBd,MAAK84I,aAAax/B,MAAMx4G,EAAIT,OASvCkH,IAAK,cACLhF,MAAO,WACL,IAAK,GAAI45G,KAAUn8G,MAAK84I,aAAa1/B,MAC/Bp5G,KAAK84I,aAAa1/B,MAAM91G,eAAe64G,IACzCn8G,KAAK84I,aAAa1/B,MAAM+C,GAAQn5B,UAGpC,KAAK,GAAIo5B,KAAUp8G,MAAK84I,aAAax/B,MAC/Bt5G,KAAK84I,aAAax/B,MAAMh2G,eAAe84G,IACzCp8G,KAAK84I,aAAax/B,MAAM8C,GAAQp5B,UAIpChjF,MAAK84I,cAAiB1/B,SAAWE,aAWnC/xG,IAAK,wBACLhF,MAAO,WACL,GAAI8xC,GAAQ,CACZ,KAAK,GAAI8nE,KAAUn8G,MAAK84I,aAAa1/B,MAC/Bp5G,KAAK84I,aAAa1/B,MAAM91G,eAAe64G,KACzC9nE,GAAS,EAGb,OAAOA,MAWT9sC,IAAK,mBACLhF,MAAO,WACL,IAAK,GAAI45G,KAAUn8G,MAAK84I,aAAa1/B,MACnC,GAAIp5G,KAAK84I,aAAa1/B,MAAM91G,eAAe64G,GACzC,MAAOn8G,MAAK84I,aAAa1/B,MAAM+C,MAcrC50G,IAAK,mBACLhF,MAAO,WACL,IAAK,GAAI65G,KAAUp8G,MAAK84I,aAAax/B,MACnC,GAAIt5G,KAAK84I,aAAax/B,MAAMh2G,eAAe84G,GACzC,MAAOp8G,MAAK84I,aAAax/B,MAAM8C,MAcrC70G,IAAK,wBACLhF,MAAO,WACL,GAAI8xC,GAAQ,CACZ,KAAK,GAAI+nE,KAAUp8G,MAAK84I,aAAax/B,MAC/Bt5G,KAAK84I,aAAax/B,MAAMh2G,eAAe84G,KACzC/nE,GAAS,EAGb,OAAOA,MAWT9sC,IAAK,0BACLhF,MAAO,WACL,GAAI8xC,GAAQ,CACZ,KAAK,GAAI8nE,KAAUn8G,MAAK84I,aAAa1/B,MAC/Bp5G,KAAK84I,aAAa1/B,MAAM91G,eAAe64G,KACzC9nE,GAAS,EAGb,KAAK,GAAI+nE,KAAUp8G,MAAK84I,aAAax/B,MAC/Bt5G,KAAK84I,aAAax/B,MAAMh2G,eAAe84G,KACzC/nE,GAAS,EAGb,OAAOA,MAWT9sC,IAAK,oBACLhF,MAAO,WACL,IAAK,GAAI45G,KAAUn8G,MAAK84I,aAAa1/B,MACnC,GAAIp5G,KAAK84I,aAAa1/B,MAAM91G,eAAe64G,GACzC,OAAO,CAGX,KAAK,GAAIC,KAAUp8G,MAAK84I,aAAax/B,MACnC,GAAIt5G,KAAK84I,aAAax/B,MAAMh2G,eAAe84G,GACzC,OAAO,CAGX,QAAO,KAWT70G,IAAK,sBACLhF,MAAO,WACL,IAAK,GAAI45G,KAAUn8G,MAAK84I,aAAa1/B,MACnC,GAAIp5G,KAAK84I,aAAa1/B,MAAM91G,eAAe64G,IACrCn8G,KAAK84I,aAAa1/B,MAAM+C,GAAQwgC,YAAc,EAChD,OAAO,CAIb,QAAO,KAWTp1I,IAAK,wBACLhF,MAAO,SAA+BgrC,GACpC,IAAK,GAAIxpC,GAAI,EAAGA,EAAIwpC,EAAK+rE,MAAM11G,OAAQG,IAAK,CAC1C,GAAI86G,GAAOtxE,EAAK+rE,MAAMv1G,EACtB86G,GAAK57B,SACLjjF,KAAKg8I,gBAAgBn9B,OAYzBt3G,IAAK,uBACLhF,MAAO,SAA8BgrC,GACnC,IAAK,GAAIxpC,GAAI,EAAGA,EAAIwpC,EAAK+rE,MAAM11G,OAAQG,IAAK,CAC1C,GAAI86G,GAAOtxE,EAAK+rE,MAAMv1G,EACtB86G,GAAKhzG,OAAQ,EACb7L,KAAK48I,YAAY/9B,OAYrBt3G,IAAK,0BACLhF,MAAO,SAAiCgrC,GACtC,IAAK,GAAIxpC,GAAI,EAAGA,EAAIwpC,EAAK+rE,MAAM11G,OAAQG,IAAK,CAC1C,GAAI86G,GAAOtxE,EAAK+rE,MAAMv1G,EACtB86G,GAAK77B,WACLhjF,KAAKi8I,qBAAqBp9B,OAa9Bt3G,IAAK,aACLhF,MAAO,SAAoBX,IACJ,IAAjBA,EAAOiK,QACTjK,EAAOiK,OAAQ,EACXjK,YAAkBwnH,GACpBppH,KAAK2Q,KAAK49D,QAAQrhB,KAAK,YAAc3f,KAAM3rC,EAAOvB,KAElDL,KAAK2Q,KAAK49D,QAAQrhB,KAAK,YAAc2xD,KAAMj9G,EAAOvB,SAcxDkH,IAAK,cACLhF,MAAO,SAAqBX,GAC1B,GAAIi7I,IAAe,CAEnB,KAAK,GAAI1gC,KAAUn8G,MAAKs7I,SAASliC,MAC3Bp5G,KAAKs7I,SAASliC,MAAM91G,eAAe64G,SACtBt4G,KAAXjC,GAAwBA,YAAkBwnH,IAAQxnH,EAAOvB,IAAM87G,GAAUv6G,YAAkB03H,MAC7Ft5H,KAAK88I,WAAW98I,KAAKs7I,SAASliC,MAAM+C,UAC7Bn8G,MAAKs7I,SAASliC,MAAM+C,GAC3B0gC,GAAe,EAMrB,KAAK,GAAIzgC,KAAUp8G,MAAKs7I,SAAShiC,MAC3Bt5G,KAAKs7I,SAAShiC,MAAMh2G,eAAe84G,MAGhB,IAAjBygC,GACF78I,KAAKs7I,SAAShiC,MAAM8C,GAAQvwG,OAAQ,QAC7B7L,MAAKs7I,SAAShiC,MAAM8C,SAITv4G,KAAXjC,GAAwBA,YAAkB03H,IAAQ13H,EAAOvB,IAAM+7G,GAAUx6G,YAAkBwnH,KAASxnH,EAAOiK,SAChH7L,KAAK88I,WAAW98I,KAAKs7I,SAAShiC,MAAM8C,UAC7Bp8G,MAAKs7I,SAAShiC,MAAM8C,GAC3BygC,GAAe,QAKRh5I,KAAXjC,KACmB,IAAjBA,EAAOiK,QACTjK,EAAOiK,OAAQ,EACf7L,KAAK48I,YAAYh7I,GACjBi7I,GAAe,EACXj7I,YAAkBwnH,GACpBppH,KAAK2Q,KAAK49D,QAAQrhB,KAAK,aAAe3f,KAAM3rC,EAAOvB,KAEnDL,KAAK2Q,KAAK49D,QAAQrhB,KAAK,aAAe2xD,KAAMj9G,EAAOvB,MAGnDuB,YAAkBwnH,KAA6C,IAArCppH,KAAKgO,QAAQwtI,qBACzCx7I,KAAK+8I,qBAAqBn7I,KAIT,IAAjBi7I,GACF78I,KAAK2Q,KAAK49D,QAAQrhB,KAAK,qBAW3B3lD,IAAK,eACLhF,MAAO,WAGL,OAAS62G,MAFKp5G,KAAKy+G,mBAEMnF,MADXt5G,KAAK0+G,uBAYrBn3G,IAAK,mBACLhF,MAAO,WACL,GAAIy6I,KACJ,KAAgC,IAA5Bh9I,KAAKgO,QAAQ8xE,WACf,IAAK,GAAIq8B,KAAUn8G,MAAK84I,aAAa1/B,MAC/Bp5G,KAAK84I,aAAa1/B,MAAM91G,eAAe64G,IACzC6gC,EAAQn4I,KAAK7E,KAAK84I,aAAa1/B,MAAM+C,GAAQ97G,GAInD,OAAO28I,MAWTz1I,IAAK,mBACLhF,MAAO,WACL,GAAIy6I,KACJ,KAAgC,IAA5Bh9I,KAAKgO,QAAQ8xE,WACf,IAAK,GAAIs8B,KAAUp8G,MAAK84I,aAAax/B,MAC/Bt5G,KAAK84I,aAAax/B,MAAMh2G,eAAe84G,IACzC4gC,EAAQn4I,KAAK7E,KAAK84I,aAAax/B,MAAM8C,GAAQ/7G,GAInD,OAAO28I,MAUTz1I,IAAK,eACLhF,MAAO,SAAsBwuE,GAC3B,GAAI/iE,GAAUrK,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,MAEzEI,MAAI,GACJ1D,MAAK,EAET,KAAK0wE,IAAcA,EAAUqoC,QAAUroC,EAAUuoC,MAAO,KAAM,gEAK9D,KAHItrG,EAAQsuG,iBAAuCz4G,KAAxBmK,EAAQsuG,cACjCt8G,KAAKs8G,cAEHvrC,EAAUqoC,MACZ,IAAKr1G,EAAI,EAAGA,EAAIgtE,EAAUqoC,MAAMx1G,OAAQG,IAAK,CAC3C1D,EAAK0wE,EAAUqoC,MAAMr1G,EAErB,IAAIwpC,GAAOvtC,KAAK2Q,KAAKyoG,MAAM/4G,EAC3B,KAAKktC,EACH,KAAM,IAAI0vG,YAAW,iBAAmB58I,EAAK,cAG/CL,MAAK64I,aAAatrG,EAAMv/B,EAAQ8tI,gBAIpC,GAAI/qE,EAAUuoC,MACZ,IAAKv1G,EAAI,EAAGA,EAAIgtE,EAAUuoC,MAAM11G,OAAQG,IAAK,CAC3C1D,EAAK0wE,EAAUuoC,MAAMv1G,EAErB,IAAI86G,GAAO7+G,KAAK2Q,KAAK2oG,MAAMj5G,EAC3B,KAAKw+G,EACH,KAAM,IAAIo+B,YAAW,iBAAmB58I,EAAK,cAE/CL,MAAK64I,aAAah6B,GAGtB7+G,KAAK2Q,KAAK49D,QAAQrhB,KAAK,qBAWzB3lD,IAAK,cACLhF,MAAO,SAAqBwuE,GAC1B,GAAI+qE,KAAiBn4I,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,KAAmBA,UAAU,EAEpF,KAAKotE,OAAkCltE,KAArBktE,EAAUntE,OAAsB,KAAM,qCAExD5D,MAAKixE,cAAemoC,MAAOroC,IAAe+qE,eAAgBA,OAU5Dv0I,IAAK,cACLhF,MAAO,SAAqBwuE,GAC1B,IAAKA,OAAkCltE,KAArBktE,EAAUntE,OAAsB,KAAM,qCAExD5D,MAAKixE,cAAeqoC,MAAOvoC,OAS7BxpE,IAAK,kBACLhF,MAAO,WACL,IAAK,GAAI45G,KAAUn8G,MAAK84I,aAAa1/B,MAC/Bp5G,KAAK84I,aAAa1/B,MAAM91G,eAAe64G,KACpCn8G,KAAK2Q,KAAKyoG,MAAM91G,eAAe64G,UAC3Bn8G,MAAK84I,aAAa1/B,MAAM+C,GAIrC,KAAK,GAAIC,KAAUp8G,MAAK84I,aAAax/B,MAC/Bt5G,KAAK84I,aAAax/B,MAAMh2G,eAAe84G,KACpCp8G,KAAK2Q,KAAK2oG,MAAMh2G,eAAe84G,UAC3Bp8G,MAAK84I,aAAax/B,MAAM8C,QAMlCzB,IAGT/6G,GAAiB,QAAI+6G,GAIjB,SAAU96G,EAAQD,EAASM,GA4B/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAxBzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAIlB,GAAQnB,EAAoB,IAE5BoB,EAAST,EAAuBQ,GAEhC4tH,EAAkB/uH,EAAoB,KAEtCgvH,EAAkBruH,EAAuBouH,GAEzC1tH,EAAWrB,EAAoB,IAE/BsB,EAAWX,EAAuBU,GAElCswF,EAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAIvCpxF,EAAOT,EAAoB,GAC3BwsI,EAAcxsI,EAAoB,KAAc,QAWhDg9I,EAAqB,WACvB,QAASA,MACP,EAAIprD,EAA0B,SAAG9xF,KAAMk9I,GAEvCl9I,KAAKm9I,qBACLn9I,KAAKo9I,mBACLp9I,KAAKq9I,UACLr9I,KAAKs9I,SAELt9I,KAAKu9I,QAAS,EAiKhB,OAzJA,EAAIvrD,EAAuB,SAAGkrD,IAC5B31I,IAAK,cACLhF,MAAO,SAAqB2rI,EAAcJ,OACKjqI,KAAzC7D,KAAKm9I,kBAAkBjP,KACzBluI,KAAKm9I,kBAAkBjP,OAEzBluI,KAAKm9I,kBAAkBjP,GAAcrpI,KAAKipI,OAEAjqI,KAAtC7D,KAAKo9I,gBAAgBtP,KACvB9tI,KAAKo9I,gBAAgBtP,OAEvB9tI,KAAKo9I,gBAAgBtP,GAAajpI,KAAKqpI,MAYzC3mI,IAAK,cACLhF,MAAO,WACL,IAAK,GAAIwB,KAAK/D,MAAKo9I,gBACjB,GAAIp9I,KAAKo9I,gBAAgBr5I,GAAGH,OAAS,EAEnC,YADA5D,KAAKu9I,QAAS,EAKlBv9I,MAAKu9I,QAAS,KAUhBh2I,IAAK,cACLhF,MAAO,SAAqB45G,OACEt4G,KAAxB7D,KAAKq9I,OAAOlhC,KACdn8G,KAAKq9I,OAAOlhC,GAAU,MAW1B50G,IAAK,cACLhF,MAAO,SAAqB45G,GAC1B,GAAI/iB,GAAQp5F,KAERw9I,IAmBJ,OAjBmB,SAASC,GAAathC,GACvC,OAA4Bt4G,KAAxB25I,EAAYrhC,GACd,MAAOqhC,GAAYrhC,EAErB,IAAIgO,GAAQ/wB,EAAMikD,OAAOlhC,EACzB,IAAI/iB,EAAM+jD,kBAAkBhhC,GAAS,CACnC,GAAIhwE,GAAWitD,EAAM+jD,kBAAkBhhC,EACvC,IAAIhwE,EAASvoC,OAAS,EACpB,IAAK,GAAIG,GAAI,EAAGA,EAAIooC,EAASvoC,OAAQG,IACnComH,EAAQ1nH,KAAKJ,IAAI8nH,EAAOszB,EAAatxG,EAASpoC;gEAKpD,MADAy5I,GAAYrhC,GAAUgO,EACfA,GAGWhO,MAGtB50G,IAAK,kBACLhF,MAAO,SAAyBm7I,EAAOC,OACP95I,KAA1B7D,KAAKq9I,OAAOM,EAAMt9I,UAEUwD,KAA1B7D,KAAKq9I,OAAOK,EAAMr9I,MACpBL,KAAKq9I,OAAOK,EAAMr9I,IAAM,GAG1BL,KAAKq9I,OAAOM,EAAMt9I,IAAML,KAAKq9I,OAAOK,EAAMr9I,IAAM,MASpDkH,IAAK,oBACLhF,MAAO,SAA2B62G,GAChC,GAAIwkC,GAAW,GAEf,KAAK,GAAIzhC,KAAU/C,GACbA,EAAM91G,eAAe64G,QACKt4G,KAAxB7D,KAAKq9I,OAAOlhC,KACdyhC,EAAWn7I,KAAKL,IAAIpC,KAAKq9I,OAAOlhC,GAASyhC,GAM/C,KAAK,GAAIpwG,KAAW4rE,GACdA,EAAM91G,eAAekqC,QACM3pC,KAAzB7D,KAAKq9I,OAAO7vG,KACdxtC,KAAKq9I,OAAO7vG,IAAYowG,MAWhCr2I,IAAK,cACLhF,MAAO,SAAqB62G,EAAOrmG,GACjC,GAAI8qI,GAAQ,IACRC,GAAS,IACTC,EAAQ,IACRC,GAAS,GAEb,KAAK,GAAI7hC,KAAUn8G,MAAKs9I,MACtB,GAAIt9I,KAAKs9I,MAAMh6I,eAAe64G,IACxBn8G,KAAKs9I,MAAMnhC,KAAYppG,EAAO,CAChC,GAAIw6B,GAAO6rE,EAAM+C,EACjB0hC,GAAQp7I,KAAKL,IAAImrC,EAAKxY,EAAG8oH,GACzBC,EAAQr7I,KAAKJ,IAAIkrC,EAAKxY,EAAG+oH,GACzBC,EAAQt7I,KAAKL,IAAImrC,EAAK5e,EAAGovH,GACzBC,EAAQv7I,KAAKJ,IAAIkrC,EAAK5e,EAAGqvH,GAK/B,OACEH,MAAOA,EACPC,MAAOA,EACPC,MAAOA,EACPC,MAAOA,OAINd,KAGL/hC,EAAe,WACjB,QAASA,GAAaxqG,IACpB,EAAImhF,EAA0B,SAAG9xF,KAAMm7G,GAEvCn7G,KAAK2Q,KAAOA,EAEZ3Q,KAAKi+I,kBAAoBx7I,KAAKi6B,MAAsB,IAAhBj6B,KAAKyX,UACzCla,KAAK2oI,WAAa3oI,KAAKi+I,kBACvBj+I,KAAKk+I,YAAa,EAClBl+I,KAAKgO,WACLhO,KAAKm+I,eAAkBhiD,YAEvBn8F,KAAK0tE,gBACHi7D,eAAY9kI,GACZu6I,gBAAgB,EAChBC,cACEnwI,SAAS,EACTowI,gBAAiB,IACjBC,YAAa,IACbC,YAAa,IACbC,eAAe,EACfC,kBAAkB,EAClBC,sBAAsB,EACtB/+G,UAAW,KACXg/G,WAAY,YAGhBj+I,EAAKC,OAAOZ,KAAKgO,QAAShO,KAAK0tE,gBAC/B1tE,KAAKs6G,qBA+3CP,OA53CA,EAAItoB,EAAuB,SAAGmpB,IAC5B5zG,IAAK,qBACLhF,MAAO,WACL,GAAIk4F,GAASz6F,IAEbA,MAAK2Q,KAAK49D,QAAQl9B,GAAG,eAAgB,WACnCopD,EAAOokD,4BAET7+I,KAAK2Q,KAAK49D,QAAQl9B,GAAG,cAAe,WAClCopD,EAAOqkD,kBAET9+I,KAAK2Q,KAAK49D,QAAQl9B,GAAG,2BAA4B,WAC/CopD,EAAOokD,+BAIXt3I,IAAK,aACLhF,MAAO,SAAoByL,EAASuiE,GAClC,OAAgB1sE,KAAZmK,EAAuB,CACzB,GAAI+wI,GAAwB/+I,KAAKgO,QAAQqwI,aAAanwI,OAOtD,IANAvN,EAAK2D,qBAAqB,aAAc,kBAAmBtE,KAAKgO,QAASA,GACzErN,EAAKmN,aAAa9N,KAAKgO,QAASA,EAAS,oBACdnK,KAAvBmK,EAAQ26H,aACV3oI,KAAKi+I,kBAAoBjwI,EAAQ26H,aAGO,IAAtC3oI,KAAKgO,QAAQqwI,aAAanwI,QAmB5B,OAlB8B,IAA1B6wI,GAEF/+I,KAAK2Q,KAAK49D,QAAQrhB,KAAK,WAAW,GAIQ,OAAxCltD,KAAKgO,QAAQqwI,aAAaz+G,WAA8D,OAAxC5/B,KAAKgO,QAAQqwI,aAAaz+G,UACxE5/B,KAAKgO,QAAQqwI,aAAaC,gBAAkB,IAC9Ct+I,KAAKgO,QAAQqwI,aAAaC,kBAAoB,GAG5Ct+I,KAAKgO,QAAQqwI,aAAaC,gBAAkB,IAC9Ct+I,KAAKgO,QAAQqwI,aAAaC,kBAAoB,GAIlDt+I,KAAK2Q,KAAK49D,QAAQrhB,KAAK,4BAEhBltD,KAAKg/I,qCAAqCzuE,EAEjD,KAA8B,IAA1BwuE,EAGF,MADA/+I,MAAK2Q,KAAK49D,QAAQrhB,KAAK,WAChBvsD,EAAK+D,WAAW6rE,EAAYvwE,KAAKm+I,eAI9C,MAAO5tE,MAGThpE,IAAK,uCACLhF,MAAO,SAA8CguE,GACnD,IAA0C,IAAtCvwE,KAAKgO,QAAQqwI,aAAanwI,QAAkB,KAEnBrK,KAAvB0sE,EAAW4rB,UAAgD,IAAvB5rB,EAAW4rB,SACjD5rB,EAAW4rB,SACTjuF,YAAgDrK,KAAvC7D,KAAKm+I,cAAchiD,QAAQjuF,SAA+BlO,KAAKm+I,cAAchiD,QAAQjuF,QAC9FkuF,OAAQ,yBAEVp8F,KAAKm+I,cAAchiD,QAAQjuF,YAAiDrK,KAAvC7D,KAAKm+I,cAAchiD,QAAQjuF,SAA+BlO,KAAKm+I,cAAchiD,QAAQjuF,QAC1HlO,KAAKm+I,cAAchiD,QAAQC,OAASp8F,KAAKm+I,cAAchiD,QAAQC,QAAU,aACf,YAAjD,EAAI56F,EAAkB,SAAG+uE,EAAW4rB,UAC7Cn8F,KAAKm+I,cAAchiD,QAAQjuF,YAAyCrK,KAA/B0sE,EAAW4rB,QAAQjuF,SAA+BqiE,EAAW4rB,QAAQjuF,QAC1GlO,KAAKm+I,cAAchiD,QAAQC,OAAS7rB,EAAW4rB,QAAQC,QAAU,YACjE7rB,EAAW4rB,QAAQC,OAAS,0BACI,IAAvB7rB,EAAW4rB,UACpBn8F,KAAKm+I,cAAchiD,QAAQC,OAAS,YACpC7rB,EAAW4rB,SAAYC,OAAQ,yBAIjC,IAAIn3F,GAAO,YACiC,QAAxCjF,KAAKgO,QAAQqwI,aAAaz+G,WAA8D,OAAxC5/B,KAAKgO,QAAQqwI,aAAaz+G,YAC5E36B,EAAO,gBAIgBpB,KAArB0sE,EAAW+oC,OACbt5G,KAAKm+I,cAAc7kC,OAAUugB,QAAU3rH,SAAS,EAAMjJ,KAAM,YAC5DsrE,EAAW+oC,OAAUugB,QAAQ,QACQh2H,KAA5B0sE,EAAW+oC,MAAMugB,QAC1B75H,KAAKm+I,cAAc7kC,OAAUugB,QAAU3rH,SAAS,EAAMjJ,KAAM,YAC5DsrE,EAAW+oC,MAAMugB,QAAS,GAEa,iBAA5BtpD,GAAW+oC,MAAMugB,QAC1B75H,KAAKm+I,cAAc7kC,OAAUugB,OAAQtpD,EAAW+oC,MAAMugB,QACtDtpD,EAAW+oC,MAAMugB,QAAW3rH,QAASqiE,EAAW+oC,MAAMugB,OAAQ50H,KAAMA,SAG/BpB,KAAjC0sE,EAAW+oC,MAAMugB,OAAO50H,MAAuD,YAAjCsrE,EAAW+oC,MAAMugB,OAAO50H,OACxEA,EAAOsrE,EAAW+oC,MAAMugB,OAAO50H,MAGjCjF,KAAKm+I,cAAc7kC,OACjBugB,WAA4Ch2H,KAApC0sE,EAAW+oC,MAAMugB,OAAO3rH,SAA+BqiE,EAAW+oC,MAAMugB,OAAO3rH,QACvFjJ,SAAuCpB,KAAjC0sE,EAAW+oC,MAAMugB,OAAO50H,KAAqB,UAAYsrE,EAAW+oC,MAAMugB,OAAO50H,KACvF80H,cAAiDl2H,KAAtC0sE,EAAW+oC,MAAMugB,OAAOE,UAA0B,GAAMxpD,EAAW+oC,MAAMugB,OAAOE,UAC3FD,mBAA2Dj2H,KAA3C0sE,EAAW+oC,MAAMugB,OAAOC,gBAAuCvpD,EAAW+oC,MAAMugB,OAAOC,gBAEzGvpD,EAAW+oC,MAAMugB,QACf3rH,YAA6CrK,KAApC0sE,EAAW+oC,MAAMugB,OAAO3rH,SAA+BqiE,EAAW+oC,MAAMugB,OAAO3rH,QACxFjJ,KAAMA,EACN80H,cAAiDl2H,KAAtC0sE,EAAW+oC,MAAMugB,OAAOE,UAA0B,GAAMxpD,EAAW+oC,MAAMugB,OAAOE,UAC3FD,mBAA2Dj2H,KAA3C0sE,EAAW+oC,MAAMugB,OAAOC,gBAAuCvpD,EAAW+oC,MAAMugB,OAAOC,iBAM7G95H,KAAK2Q,KAAK49D,QAAQrhB,KAAK,6BAA8BjoD,GAGvD,MAAOsrE,MAGThpE,IAAK,eACLhF,MAAO,WACL,GAAIwyB,GAAkC,IAA9BtyB,KAAKs6C,IAAI/8C,KAAK2oI,aACtB,OAAO5zG,GAAItyB,KAAKqK,MAAMioB,MAGxBxtB,IAAK,oBACLhF,MAAO,SAA2BouI,GAChC,IAA0C,IAAtC3wI,KAAKgO,QAAQqwI,aAAanwI,QAAkB,CAC9ClO,KAAK2oI,WAAa3oI,KAAKi+I,iBAEvB,KAAK,GADDp0F,GAAS8mF,EAAW/sI,OAAS,GACxBG,EAAI,EAAGA,EAAI4sI,EAAW/sI,OAAQG,IAAK,CAC1C,GAAIwpC,GAAOojG,EAAW5sI,GAClBg5D,EAAQ,EAAIt6D,KAAKunD,GAAKhqD,KAAK4qI,mBAChB/mI,KAAX0pC,EAAKxY,IACPwY,EAAKxY,EAAI80B,EAASpnD,KAAKw6C,IAAI8f,QAEdl5D,KAAX0pC,EAAK5e,IACP4e,EAAK5e,EAAIk7B,EAASpnD,KAAKs6C,IAAIggB,SAYnCx1D,IAAK,gBACLhF,MAAO,WACL,IAA0C,IAAtCvC,KAAKgO,QAAQqwI,aAAanwI,UAAoD,IAAhClO,KAAKgO,QAAQowI,eAAyB,CAItF,IAAK,GADDnI,GAAkB,EACblyI,EAAI,EAAGA,EAAI/D,KAAK2Q,KAAK0oG,YAAYz1G,OAAQG,IAAK,EAErB,IADrB/D,KAAK2Q,KAAKyoG,MAAMp5G,KAAK2Q,KAAK0oG,YAAYt1G,IACxCqpH,qBACP6oB,GAAmB,GAKvB,GAAIA,EAAkB,GAAMj2I,KAAK2Q,KAAK0oG,YAAYz1G,OAAQ,CACxD,GACIumH,GAAQ,EAGR80B,GACFzQ,uBACE3U,QACE3rH,SAAS,IAMf,IAAIlO,KAAK2Q,KAAK0oG,YAAYz1G,OAXH,IAW8B,CAEnD,IADA,GAAIs7I,GAAcl/I,KAAK2Q,KAAK0oG,YAAYz1G,OACjC5D,KAAK2Q,KAAK0oG,YAAYz1G,OAbR,KAaqCumH,GAf3C,IAegE,CAE7EA,GAAS,CACT,IAAIg1B,GAASn/I,KAAK2Q,KAAK0oG,YAAYz1G,MAE/BumH,GAAQ,GAAM,EAChBnqH,KAAK2Q,KAAK1Q,QAAQm7G,WAAWgkC,eAAeH,GAE5Cj/I,KAAK2Q,KAAK1Q,QAAQm7G,WAAWiC,gBAAgB4hC,EAG/C,IAAIE,GADQn/I,KAAK2Q,KAAK0oG,YAAYz1G,QACXumH,EAAQ,GAAM,EAInC,MAHAnqH,MAAKq/I,gBACLr/I,KAAK2Q,KAAK49D,QAAQrhB,KAAK,qBACvB5nC,SAAQg6H,KAAK,gJAOjBt/I,KAAK2Q,KAAK1Q,QAAQs/I,YAAYvuG,YAAay0F,aAAchjI,KAAKJ,IAAI,IAAK,EAAI68I,KAEzE/0B,EAtCa,IAuCf7kG,QAAQg6H,KAAK,4GAIft/I,KAAK2Q,KAAK1Q,QAAQs/I,YAAYrX,MAAMloI,KAAK2Q,KAAK0oG,YAAar5G,KAAK2Q,KAAK4oG,aAAa,GAGlFv5G,KAAKw/I,gBAIL,KAAK,GAAI5sI,GAAK,EAAGA,EAAK5S,KAAK2Q,KAAK0oG,YAAYz1G,OAAQgP,KAEoB,IAAlE5S,KAAK2Q,KAAKyoG,MAAMp5G,KAAK2Q,KAAK0oG,YAAYzmG,IAAKw6G,qBAC7CptH,KAAK2Q,KAAKyoG,MAAMp5G,KAAK2Q,KAAK0oG,YAAYzmG,IAAKmiB,GAJlC,IAIwC,GAAM/0B,KAAK4qI,gBAC5D5qI,KAAK2Q,KAAKyoG,MAAMp5G,KAAK2Q,KAAK0oG,YAAYzmG,IAAK+b,GALlC,IAKwC,GAAM3uB,KAAK4qI,gBAKhE5qI,MAAKq/I,gBAGLr/I,KAAK2Q,KAAK49D,QAAQrhB,KAAK,+BAW7B3lD,IAAK,iBACLhF,MAAO,WAGL,IAAK,GAFD+4C,GAAQoxF,EAAY+S,aAAaz/I,KAAK2Q,KAAKyoG,MAAOp5G,KAAK2Q,KAAK0oG,aAC5D19D,EAAS+wF,EAAY2J,WAAW/6F,GAC3Bv3C,EAAI,EAAGA,EAAI/D,KAAK2Q,KAAK0oG,YAAYz1G,OAAQG,IAChD/D,KAAK2Q,KAAKyoG,MAAMp5G,KAAK2Q,KAAK0oG,YAAYt1G,IAAIgxB,GAAK4mB,EAAO5mB,EACtD/0B,KAAK2Q,KAAKyoG,MAAMp5G,KAAK2Q,KAAK0oG,YAAYt1G,IAAI4qB,GAAKgtB,EAAOhtB,KAI1DpnB,IAAK,gBACLhF,MAAO,WAEL,IADA,GAAIm9I,IAAkB,GACK,IAApBA,GAA0B,CAC/BA,GAAkB,CAClB,KAAK,GAAI37I,GAAI,EAAGA,EAAI/D,KAAK2Q,KAAK0oG,YAAYz1G,OAAQG,KACY,IAAxD/D,KAAK2Q,KAAKyoG,MAAMp5G,KAAK2Q,KAAK0oG,YAAYt1G,IAAIg5G,YAC5C2iC,GAAkB,EAClB1/I,KAAK2Q,KAAK1Q,QAAQm7G,WAAW4B,YAAYh9G,KAAK2Q,KAAK0oG,YAAYt1G,OAAQ,KAGnD,IAApB27I,GACF1/I,KAAK2Q,KAAK49D,QAAQrhB,KAAK,oBAK7B3lD,IAAK,UACLhF,MAAO,WACL,MAAOvC,MAAKi+I,qBAWd12I,IAAK,0BACLhF,MAAO,WACL,IAA0C,IAAtCvC,KAAKgO,QAAQqwI,aAAanwI,SAAoBlO,KAAK2Q,KAAK0oG,YAAYz1G,OAAS,EAAG,CAElF,GAAI2pC,OAAO,GACP4uE,MAAS,GACTwjC,GAAe,EAEfC,GAAiB,CACrB5/I,MAAK6/I,mBACL7/I,KAAKq+I,aAAe,GAAInB,GACxBl9I,KAAK8/I,WAAa,EAElB9/I,KAAK+/I,wBACL//I,KAAKggJ,qBACLhgJ,KAAKigJ,+BAEL,KAAK9jC,IAAUn8G,MAAK2Q,KAAKyoG,MACnBp5G,KAAK2Q,KAAKyoG,MAAM91G,eAAe64G,KACjC5uE,EAAOvtC,KAAK2Q,KAAKyoG,MAAM+C,OACAt4G,KAAnB0pC,EAAKv/B,QAAQ+mB,OAAsClxB,KAAnB0pC,EAAKv/B,QAAQ2gB,IAC5B,MAEM9qB,KAAvB0pC,EAAKv/B,QAAQm8G,OACfw1B,GAAe,EACf3/I,KAAKq+I,aAAahB,OAAOlhC,GAAU5uE,EAAKv/B,QAAQm8G,OAEhDy1B,GAAiB,EAMvB,KAAuB,IAAnBA,IAA4C,IAAjBD,EAC7B,KAAM,IAAIt7I,OAAM,0HAGO,IAAnBu7I,IAC2C,YAAzC5/I,KAAKgO,QAAQqwI,aAAaO,WAC5B5+I,KAAKkgJ,4BAC6C,aAAzClgJ,KAAKgO,QAAQqwI,aAAaO,WACnC5+I,KAAKmgJ,2BAC6C,WAAzCngJ,KAAKgO,QAAQqwI,aAAaO,YACnC5+I,KAAKogJ,iCAKT,KAAK,GAAIj1B,KAAYnrH,MAAK2Q,KAAKyoG,MACzBp5G,KAAK2Q,KAAKyoG,MAAM91G,eAAe6nH,IACjCnrH,KAAKq+I,aAAagC,YAAYl1B,EAIlC,IAAIm1B,GAAetgJ,KAAKugJ,kBAGxBvgJ,MAAKwgJ,eAGLxgJ,KAAKygJ,uBAAuBH,GAG5BtgJ,KAAK0gJ,qBAGL1gJ,KAAKw/I,qBAUXj4I,IAAK,qBACLhF,MAAO,WACL,GAAIs4F,GAAS76F,KAGT2gJ,GAAgB,EAChBC,KAcAC,EAAY,SAAmB9tI,EAAO4pB,GACxC,IAAK,GAAIw/E,KAAUthB,GAAOwjD,aAAaf,MACrC,GAAIziD,EAAOwjD,aAAaf,MAAMh6I,eAAe64G,IACvCthB,EAAOwjD,aAAaf,MAAMnhC,KAAYppG,EAAO,CAC/C,GAAIw6B,GAAOstD,EAAOlqF,KAAKyoG,MAAM+C,GACzBrhG,EAAM+/E,EAAOimD,yBAAyBvzG,EAC1CstD,GAAOkmD,yBAAyBxzG,EAAMzyB,EAAM6hB,MAAQ94B,IAAW,KAOnEm9I,EAAc,SAAqBjuI,GACrC,GAAImO,GAAM25E,EAAOwjD,aAAa2C,YAAYnmD,EAAOlqF,KAAKyoG,MAAOrmG,EAC7D,OAAI8nF,GAAOomD,eACA7+I,IAAK8e,EAAI28H,MAAOx7I,IAAK6e,EAAI48H,QAEzB17I,IAAK8e,EAAI68H,MAAO17I,IAAK6e,EAAI88H,QAKlCkD,EAAe,WAEjB,IAAK,GADDC,MACKp9I,EAAI,EAAGA,GAAK82F,EAAOilD,UAAW/7I,IACrCo9I,EAAWt8I,KAAKm8I,EAAYj9I,GAE9B,OAAOo9I,IAILC,EAAiB,QAASA,GAAe7rI,EAAQzK,GACnD,IAAIA,EAAIyK,EAAOlV,MAGfyK,EAAIyK,EAAOlV,KAAM,EACbw6F,EAAOwjD,aAAalB,kBAAkB5nI,EAAOlV,KAAK,CACpD,GAAI8rC,GAAW0uD,EAAOwjD,aAAalB,kBAAkB5nI,EAAOlV,GAC5D,IAAI8rC,EAASvoC,OAAS,EACpB,IAAK,GAAIG,GAAI,EAAGA,EAAIooC,EAASvoC,OAAQG,IACnCq9I,EAAevmD,EAAOlqF,KAAKyoG,MAAMjtE,EAASpoC,IAAK+G,KAQnDu2I,EAAoB,SAA2BC,GACjD,GAAIC,GAAW59I,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,GAAK,IAE/E69I,EAAW,IACXC,EAAW,IACXr/I,EAAM,IACNC,GAAO,GACX,KAAK,GAAIq/I,KAAcJ,GACrB,GAAIA,EAAUh+I,eAAeo+I,GAAa,CACxC,GAAIn0G,GAAOstD,EAAOlqF,KAAKyoG,MAAMsoC,GACzBv3B,EAAQtvB,EAAOwjD,aAAahB,OAAO9vG,EAAKltC,IACxCkQ,EAAWsqF,EAAOimD,yBAAyBvzG,GAI3Co0G,EAAuB9mD,EAAO+mD,oBAAoBr0G,EAAM+zG,GACxDO,GAAuB,EAAI3yB,EAAyB,SAAGyyB,EAAsB,GAC7EG,EAAeD,EAAqB,GACpCE,EAAeF,EAAqB,EAExCL,GAAW/+I,KAAKL,IAAI0/I,EAAcN,GAClCC,EAAWh/I,KAAKL,IAAI2/I,EAAcN,GAG9Bt3B,GAASo3B,IACXn/I,EAAMK,KAAKL,IAAImO,EAAUnO,GACzBC,EAAMI,KAAKJ,IAAIkO,EAAUlO,IAK/B,OAAQD,EAAKC,EAAKm/I,EAAUC,IAI1BO,EAAoB,SAA2BjlB,EAAOC,GACxD,GAAIilB,GAAYpnD,EAAOwjD,aAAa6D,YAAYnlB,EAAM18H,IAClD8hJ,EAAYtnD,EAAOwjD,aAAa6D,YAAYllB,EAAM38H,GACtD,OAAOoC,MAAKL,IAAI6/I,EAAWE,IAIzBC,EAAgB,SAAuBrlB,EAAOC,GAChD,GAAIqlB,GAAWxnD,EAAOwjD,aAAajB,gBAAgBrgB,EAAM18H,IACrDiiJ,EAAWznD,EAAOwjD,aAAajB,gBAAgBpgB,EAAM38H,GACzD,QAAiBwD,KAAbw+I,OAAuCx+I,KAAby+I,EAC5B,OAAO,CAGT,KAAK,GAAIv+I,GAAI,EAAGA,EAAIs+I,EAASz+I,OAAQG,IACnC,IAAK,GAAI8J,GAAI,EAAGA,EAAIy0I,EAAS1+I,OAAQiK,IACnC,GAAIw0I,EAASt+I,IAAMu+I,EAASz0I,GAC1B,OAAO,CAIb,QAAO,GAIL00I,EAAsB,SAA6Bp7I,EAAUk2I,EAAQmF,GACvE,IAAK,GAAIz+I,GAAI,EAAGA,EAAIs5I,EAAOz5I,OAAQG,IAAK,CACtC,GAAIomH,GAAQkzB,EAAOt5I,GACf0+I,EAAa5nD,EAAOklD,qBAAqB51B,EAC7C,IAAIs4B,EAAW7+I,OAAS,EACtB,IAAK,GAAIiK,GAAI,EAAGA,EAAI40I,EAAW7+I,OAAS,EAAGiK,KACe,IAApDu0I,EAAcK,EAAW50I,GAAI40I,EAAW50I,EAAI,KAC1CgtF,EAAOwjD,aAAaf,MAAMmF,EAAW50I,GAAGxN,MAAQw6F,EAAOwjD,aAAaf,MAAMmF,EAAW50I,EAAI,GAAGxN,KAC9F8G,EAASs7I,EAAW50I,GAAI40I,EAAW50I,EAAI,GAAI20I,KASnDE,EAAsB,SAA6B3lB,EAAOC,GAC5D,GAAI2lB,GAAeh/I,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,IAAmBA,UAAU,GAG9EimC,EAAOixD,EAAOimD,yBAAyB/jB,GACvClzF,EAAOgxD,EAAOimD,yBAAyB9jB,EAG3C,IAFcv6H,KAAKwiB,IAAI4kB,EAAOD,GAEhBixD,EAAO7sF,QAAQqwI,aAAaE,YAAa,CACrD,GAAIqE,MACAC,IAEJzB,GAAerkB,EAAO6lB,GACtBxB,EAAepkB,EAAO6lB,EAGtB,IAAItB,GAAWS,EAAkBjlB,EAAOC,GAEpC8lB,EAAqBzB,EAAkBuB,EAAcrB,GACrDwB,GAAsB,EAAI7zB,EAAyB,SAAG4zB,EAAoB,GAE1EE,GADOD,EAAoB,GACpBA,EAAoB,IAI3BE,GAHYF,EAAoB,GACpBA,EAAoB,GAEV1B,EAAkBwB,EAActB,IACtD2B,GAAsB,EAAIh0B,EAAyB,SAAG+zB,EAAqB,GAC3EE,EAAOD,EAAoB,GAE3BE,GADOF,EAAoB,GACfA,EAAoB,GAOpC,IANgBA,EAAoB,GAKnBzgJ,KAAKwiB,IAAI+9H,EAAOG,GAChBtoD,EAAO7sF,QAAQqwI,aAAaE,YAAa,CACxD,GAAI5hH,GAASqmH,EAAOG,EAAOtoD,EAAO7sF,QAAQqwI,aAAaE,WACnD5hH,IAAUymH,EAAYvoD,EAAO7sF,QAAQqwI,aAAaE,cACpD5hH,GAAUymH,EAAYvoD,EAAO7sF,QAAQqwI,aAAaE,aAGhD5hH,EAAS,IAEXk+D,EAAOwoD,YAAYrmB,EAAM38H,GAAIs8B,GAC7BgkH,GAAgB,GAEK,IAAjBgC,GAAuB9nD,EAAOyoD,cAActmB,OAOpDumB,EAAqB,SAA4Bh7B,EAAYh7E,GAW/D,IAAK,GARD4uE,GAAS5uE,EAAKltC,GACdmjJ,EAAWj2G,EAAK+rE,MAChBmqC,EAAY5oD,EAAOwjD,aAAahB,OAAO9vG,EAAKltC,IAG5CqjJ,EAAK7oD,EAAO7sF,QAAQqwI,aAAaC,gBAAkBzjD,EAAO7sF,QAAQqwI,aAAaC,gBAC/EqF,KACAC,KACK7/I,EAAI,EAAGA,EAAIy/I,EAAS5/I,OAAQG,IAAK,CACxC,GAAI86G,GAAO2kC,EAASz/I,EACpB,IAAI86G,EAAKoN,MAAQpN,EAAKqN,OAAQ,CAC5B,GAAI23B,GAAYhlC,EAAKoN,MAAQ9P,EAAS0C,EAAKp7F,KAAOo7F,EAAKr7F,EACvDmgI,GAAeH,EAASz/I,GAAG1D,IAAMwjJ,EAC7BhpD,EAAOwjD,aAAahB,OAAOwG,EAAUxjJ,IAAMojJ,GAC7CG,EAAW/+I,KAAKg6G,IAMtB,GAAIilC,GAAQ,SAAelpI,EAAO0+F,GAEhC,IAAK,GADD7oD,GAAM,EACDk7E,EAAM,EAAGA,EAAMryB,EAAM11G,OAAQ+nI,IACpC,OAAsC9nI,KAAlC8/I,EAAerqC,EAAMqyB,GAAKtrI,IAAmB,CAC/C,GAAImD,GAAIq3F,EAAOimD,yBAAyB6C,EAAerqC,EAAMqyB,GAAKtrI,KAAOua,CACzE61C,IAAOjtD,EAAIf,KAAKusD,KAAKxrD,EAAIA,EAAIkgJ,GAGjC,MAAOjzF,IAILszF,EAAS,SAAgBnpI,EAAO0+F,GAElC,IAAK,GADD7oD,GAAM,EACDq7E,EAAM,EAAGA,EAAMxyB,EAAM11G,OAAQkoI,IACpC,OAAsCjoI,KAAlC8/I,EAAerqC,EAAMwyB,GAAKzrI,IAAmB,CAC/C,GAAImD,GAAIq3F,EAAOimD,yBAAyB6C,EAAerqC,EAAMwyB,GAAKzrI,KAAOua,CACzE61C,IAAOizF,EAAKjhJ,KAAKgnB,IAAIjmB,EAAIA,EAAIkgJ,GAAK,KAGtC,MAAOjzF,IAGLuzF,EAAW,SAAkBz7B,EAAYjP,GAI3C,IAAK,GAHD2qC,GAAQppD,EAAOimD,yBAAyBvzG,GAExC22G,KACKjY,EAAM,EAAGA,EAAM1jB,EAAY0jB,IAAO,CACzC,GAAItC,GAAKma,EAAMG,EAAO3qC,GAClB6qC,EAAMJ,EAAOE,EAAO3qC,EAOxB,IAFA2qC,GADYxhJ,KAAKJ,KADL,GACiBI,KAAKL,IADtB,GACiCK,KAAKi6B,MAAMitG,EAAKwa,SAGrCtgJ,KAApBqgJ,EAASD,GACX,KAEFC,GAASD,GAAShY,EAEpB,MAAOgY,IAkELA,EAAQD,EAASz7B,EAAYq7B,IA/DhB,SAAoBK,GAEnC,GAAI1N,GAAe17C,EAAOimD,yBAAyBvzG,EAGnD,QAA0B1pC,KAAtB+8I,EAASrzG,EAAKltC,IAAmB,CACnC,GAAI+jJ,KACJhD,GAAe7zG,EAAM62G,GACrBxD,EAASrzG,EAAKltC,IAAM+jJ,EAGtB,GAAIC,GAAsBhD,EAAkBT,EAASrzG,EAAKltC,KACtDikJ,GAAsB,EAAIp1B,EAAyB,SAAGm1B,EAAqB,GAG3EE,GAFYD,EAAoB,GACpBA,EAAoB,GACfA,EAAoB,IACrCE,EAAiBF,EAAoB,GAErC58H,EAAOu8H,EAAQ1N,EAGfkO,EAAe,CACf/8H,GAAO,EACT+8H,EAAehiJ,KAAKL,IAAIslB,EAAM88H,EAAiB3pD,EAAO7sF,QAAQqwI,aAAaE,aAClE72H,EAAO,IAChB+8H,GAAgBhiJ,KAAKL,KAAKslB,EAAM68H,EAAiB1pD,EAAO7sF,QAAQqwI,aAAaE,cAG3D,GAAhBkG,IAEF5pD,EAAOwoD,YAAY91G,EAAKltC,GAAIokJ,GAE5B9D,GAAgB,IAgCTsD,GACXA,EAAQD,EAASz7B,EAAYi7B,GA7Bd,SAAkBS,GAC/B,GAAI1N,GAAe17C,EAAOimD,yBAAyBvzG,GAI/Cm3G,EAAuB7pD,EAAO+mD,oBAAoBr0G,GAClDo3G,GAAuB,EAAIz1B,EAAyB,SAAGw1B,EAAsB,GAC7ElD,EAAWmD,EAAqB,GAChClD,EAAWkD,EAAqB,GAEhCj9H,EAAOu8H,EAAQ1N,EAEfqO,EAAcrO,CACd7uH,GAAO,EACTk9H,EAAcniJ,KAAKL,IAAIm0I,GAAgBkL,EAAW5mD,EAAO7sF,QAAQqwI,aAAaE,aAAc0F,GACnFv8H,EAAO,IAChBk9H,EAAcniJ,KAAKJ,IAAIk0I,GAAgBiL,EAAW3mD,EAAO7sF,QAAQqwI,aAAaE,aAAc0F,IAG1FW,IAAgBrO,IAElB17C,EAAOkmD,yBAAyBxzG,EAAMq3G,MAAa/gJ,IAAW,GAE9D88I,GAAgB,IAOXsD,KA2DqC,IAA5CjkJ,KAAKgO,QAAQqwI,aAAaI,gBAlCI,SAAqCl2B,GACrE,GAAI80B,IAAS,EAAI/7I,EAAgB,SAAGu5F,EAAOklD,qBAC3C1C,GAASA,EAAOzM,SAChB,KAAK,GAAI7sI,GAAI,EAAGA,EAAIwkH,IAClBo4B,GAAgB,EAChB4B,EAAoBG,EAAqBrF,GAAQ,IAC3B,IAAlBsD,GAH0B58I,OAgCJ,GArBP,WACrB,IAAK,GAAIo4G,KAAUthB,GAAOlqF,KAAKyoG,MACzBve,EAAOlqF,KAAKyoG,MAAM91G,eAAe64G,IAASthB,EAAOyoD,cAAczoD,EAAOlqF,KAAKyoG,MAAM+C,SAwBtC,IAA/Cn8G,KAAKgO,QAAQqwI,aAAaK,kBA5DG,SAAoCn2B,GACnE,GAAI80B,IAAS,EAAI/7I,EAAgB,SAAGu5F,EAAOklD,qBAC3C1C,GAASA,EAAOzM,SAChB,KAAK,GAAI7sI,GAAI,EAAGA,EAAIwkH,EAAYxkH,IAAK,CACnC48I,GAAgB,CAChB,KAAK,GAAI9yI,GAAI,EAAGA,EAAIwvI,EAAOz5I,OAAQiK,IAGjC,IAAK,GAFDs8G,GAAQkzB,EAAOxvI,GACf40I,EAAa5nD,EAAOklD,qBAAqB51B,GACpCv8G,EAAI,EAAGA,EAAI60I,EAAW7+I,OAAQgK,IACrC21I,EAAmB,IAAMd,EAAW70I,GAGxC,KAAsB,IAAlB+yI,EAEF,QA+CuB,KAG0B,IAAnD3gJ,KAAKgO,QAAQqwI,aAAaM,sBAvBC,WAC7B,GAAItB,IAAS,EAAI/7I,EAAgB,SAAGu5F,EAAOklD,qBAC3C1C,GAASA,EAAOzM,SAChB,KAAK,GAAI7sI,GAAI,EAAGA,EAAIs5I,EAAOz5I,OAAQG,IAGjC,IAAK,GAFDomH,GAAQkzB,EAAOt5I,GACf0+I,EAAa5nD,EAAOklD,qBAAqB51B,GACpCt8G,EAAI,EAAGA,EAAI40I,EAAW7+I,OAAQiK,IACrCgtF,EAAOyoD,cAAcb,EAAW50I,OAzXrB,WAGf,IAAK,GAFDg3I,GAAY3D,IACZ4D,EAAU,EACL/gJ,EAAI,EAAGA,EAAI8gJ,EAAUjhJ,OAAS,EAAGG,IAAK,CAE7C+gJ,GADWD,EAAU9gJ,GAAG1B,IAAMwiJ,EAAU9gJ,EAAI,GAAG3B,IAC7By4F,EAAO7sF,QAAQqwI,aAAaG,YAC9CqC,EAAU98I,EAAI,EAAG+gJ,UAoZvBv9I,IAAK,sBACLhF,MAAO,SAA6BgrC,EAAMziC,GACxC,GAAIi6I,IAAS,MACDlhJ,KAARiH,IACFi6I,GAAS,EAEX,IAAI56B,GAAQnqH,KAAKq+I,aAAahB,OAAO9vG,EAAKltC,GAC1C,QAAcwD,KAAVsmH,EAAqB,CACvB,GAAIp3G,GAAQ/S,KAAKggJ,kBAAkBzyG,EAAKltC,IACpCkQ,EAAWvQ,KAAK8gJ,yBAAyBvzG,GACzCi0G,EAAW,IACXC,EAAW,GACf,IAAc,IAAV1uI,EAAa,CACf,GAAIiyI,GAAWhlJ,KAAK+/I,qBAAqB51B,GAAOp3G,EAAQ,EACxD,KAAe,IAAXgyI,OAAwClhJ,KAArBiH,EAAIk6I,EAAS3kJ,MAAgC,IAAX0kJ,EAAkB,CAEzEvD,EAAWjxI,EADGvQ,KAAK8gJ,yBAAyBkE,IAKhD,GAAIjyI,GAAS/S,KAAK+/I,qBAAqB51B,GAAOvmH,OAAS,EAAG,CACxD,GAAIqhJ,GAAWjlJ,KAAK+/I,qBAAqB51B,GAAOp3G,EAAQ,EACxD,KAAe,IAAXgyI,OAAwClhJ,KAArBiH,EAAIm6I,EAAS5kJ,MAAgC,IAAX0kJ,EAAkB,CACzE,GAAIG,GAAUllJ,KAAK8gJ,yBAAyBmE,EAC5CxD,GAAWh/I,KAAKL,IAAIq/I,EAAUyD,EAAU30I,IAI5C,OAAQixI,EAAUC,GAElB,OAAQ,EAAG,MAWfl6I,IAAK,gBACLhF,MAAO,SAAuBgrC,GAC5B,GAAIvtC,KAAKq+I,aAAajB,gBAAgB7vG,EAAKltC,IAEzC,IAAK,GADD8kJ,GAAUnlJ,KAAKq+I,aAAajB,gBAAgB7vG,EAAKltC,IAC5C0D,EAAI,EAAGA,EAAIohJ,EAAQvhJ,OAAQG,IAAK,CACvC,GAAIqhJ,GAAWD,EAAQphJ,GACnB+E,EAAa9I,KAAK2Q,KAAKyoG,MAAMgsC,EACjC,IAAIplJ,KAAKq+I,aAAalB,kBAAkBiI,GAAW,CAEjD,GAAIC,GAAS,IACTC,GAAU,IACVn5G,EAAWnsC,KAAKq+I,aAAalB,kBAAkBiI,EACnD,IAAIj5G,EAASvoC,OAAS,EACpB,IAAK,GAAI2hJ,GAAM,EAAGA,EAAMp5G,EAASvoC,OAAQ2hJ,IAAO,CAC9C,GAAIjX,GAAYtuI,KAAK2Q,KAAKyoG,MAAMjtE,EAASo5G,GACzCF,GAAS5iJ,KAAKL,IAAIijJ,EAAQrlJ,KAAK8gJ,yBAAyBxS,IACxDgX,EAAS7iJ,KAAKJ,IAAIijJ,EAAQtlJ,KAAK8gJ,yBAAyBxS,IAI5D,GAAI/9H,GAAWvQ,KAAK8gJ,yBAAyBh4I,GAEzC08I,EAAuBxlJ,KAAK4hJ,oBAAoB94I,GAChD28I,GAAuB,EAAIv2B,EAAyB,SAAGs2B,EAAsB,GAC7EhE,EAAWiE,EAAqB,GAChChE,EAAWgE,EAAqB,GAEhCb,EAAc,IAAOS,EAASC,GAC9B59H,EAAOnX,EAAWq0I,GAClBl9H,EAAO,GAAKjlB,KAAKwiB,IAAIyC,GAAQ+5H,EAAWzhJ,KAAKgO,QAAQqwI,aAAaE,aAAe72H,EAAO,GAAKjlB,KAAKwiB,IAAIyC,GAAQ85H,EAAWxhJ,KAAKgO,QAAQqwI,aAAaE,cACrJv+I,KAAK+gJ,yBAAyBj4I,EAAY87I,MAAa/gJ,IAAW,QAe5E0D,IAAK,yBACLhF,MAAO,SAAgC+9I,GACrCtgJ,KAAK0lJ,kBAEL,KAAK,GAAIv7B,KAASm2B,GAChB,GAAIA,EAAah9I,eAAe6mH,GAAQ,CAEtC,GAAIw7B,IAAY,EAAIrkJ,EAAgB,SAAGg/I,EAAan2B,GACpDw7B,GAAY3lJ,KAAK4lJ,mBAAmBD,GACpC3lJ,KAAK6lJ,eAAeF,EAGpB,KAAK,GAFDG,GAAmB,EAEd/hJ,EAAI,EAAGA,EAAI4hJ,EAAU/hJ,OAAQG,IAAK,CACzC,GAAIwpC,GAAOo4G,EAAU5hJ,EACrB,QAAsCF,KAAlC7D,KAAK0lJ,gBAAgBn4G,EAAKltC,IAAmB,CAC/C,GAAIya,GAAM9a,KAAKgO,QAAQqwI,aAAaE,YAAcuH,CAE9CA,GAAmB,IACrBhrI,EAAM9a,KAAK8gJ,yBAAyB6E,EAAU5hJ,EAAI,IAAM/D,KAAKgO,QAAQqwI,aAAaE,aAEpFv+I,KAAK+gJ,yBAAyBxzG,EAAMzyB,EAAKqvG,GACzCnqH,KAAK+lJ,6BAA6Bx4G,EAAM48E,EAAOrvG,GAE/CgrI,UAiBVv+I,IAAK,oBACLhF,MAAO,SAA2B6iJ,EAAUY,GAE1C,OAAsDniJ,KAAlD7D,KAAKq+I,aAAalB,kBAAkBiI,GAAxC,CAMA,IAAK,GADDnwD,MACKlxF,EAAI,EAAGA,EAAI/D,KAAKq+I,aAAalB,kBAAkBiI,GAAUxhJ,OAAQG,IACxEkxF,EAAWpwF,KAAK7E,KAAK2Q,KAAKyoG,MAAMp5G,KAAKq+I,aAAalB,kBAAkBiI,GAAUrhJ,IAIhF/D,MAAK6lJ,eAAe5wD,EAGpB,KAAK,GAAIgxD,GAAM,EAAGA,EAAMhxD,EAAWrxF,OAAQqiJ,IAAO,CAChD,GAAI3X,GAAYr5C,EAAWgxD,GACvBC,EAAiBlmJ,KAAKq+I,aAAahB,OAAO/O,EAAUjuI,GAExD,MAAI6lJ,EAAiBF,OAAsDniJ,KAAvC7D,KAAK0lJ,gBAAgBpX,EAAUjuI,KAajE,MAXA,IAAIya,OAAM,EAIRA,GADU,IAARmrI,EACIjmJ,KAAK8gJ,yBAAyB9gJ,KAAK2Q,KAAKyoG,MAAMgsC,IAE9CplJ,KAAK8gJ,yBAAyB7rD,EAAWgxD,EAAM,IAAMjmJ,KAAKgO,QAAQqwI,aAAaE,YAEvFv+I,KAAK+gJ,yBAAyBzS,EAAWxzH,EAAKorI,GAC9ClmJ,KAAK+lJ,6BAA6BzX,EAAW4X,EAAgBprI,GASjE,IAAK,GAFDuqI,GAAS,IACTC,GAAU,IACLa,EAAM,EAAGA,EAAMlxD,EAAWrxF,OAAQuiJ,IAAO,CAChD,GAAIrY,GAAc74C,EAAWkxD,GAAK9lJ,EAClCglJ,GAAS5iJ,KAAKL,IAAIijJ,EAAQrlJ,KAAK8gJ,yBAAyB9gJ,KAAK2Q,KAAKyoG,MAAM00B,KACxEwX,EAAS7iJ,KAAKJ,IAAIijJ,EAAQtlJ,KAAK8gJ,yBAAyB9gJ,KAAK2Q,KAAKyoG,MAAM00B,KAE1E9tI,KAAK+gJ,yBAAyB/gJ,KAAK2Q,KAAKyoG,MAAMgsC,GAAW,IAAOC,EAASC,GAASU,OAapFz+I,IAAK,+BACLhF,MAAO,SAAsCgrC,EAAM48E,EAAOrvG,GAGxD,GAAK9a,KAAKq+I,aAAad,OAAvB,CAGA,OAAoC15I,KAAhC7D,KAAK6/I,gBAAgB11B,GAAsB,CAC7C,GAAIi8B,GAAcpmJ,KAAK8gJ,yBAAyB9gJ,KAAK2Q,KAAKyoG,MAAMp5G,KAAK6/I,gBAAgB11B,IACrF,IAAIrvG,EAAMsrI,EAAcpmJ,KAAKgO,QAAQqwI,aAAaE,YAAa,CAC7D,GAAI72H,GAAO0+H,EAAcpmJ,KAAKgO,QAAQqwI,aAAaE,YAAczjI,EAC7DurI,EAAermJ,KAAKsmJ,kBAAkBtmJ,KAAK6/I,gBAAgB11B,GAAQ58E,EAAKltC,GAC5EL,MAAKqjJ,YAAYgD,EAAaE,UAAW7+H,IAK7C1nB,KAAK6/I,gBAAgB11B,GAAS58E,EAAKltC,GAEnCL,KAAK0lJ,gBAAgBn4G,EAAKltC,KAAM,EAEhCL,KAAKwmJ,kBAAkBj5G,EAAKltC,GAAI8pH,OAUlC5iH,IAAK,qBACLhF,MAAO,SAA4By6I,GAEjC,IAAK,GADD31I,MACKtD,EAAI,EAAGA,EAAIi5I,EAAQp5I,OAAQG,IAClCsD,EAAMxC,KAAK7E,KAAK2Q,KAAKyoG,MAAM4jC,EAAQj5I,IAErC,OAAOsD,MAWTE,IAAK,mBACLhF,MAAO,WACL,GAAI+9I,MACAnkC,MAAS,GACT5uE,MAAO,EAIX,KAAK4uE,IAAUn8G,MAAK2Q,KAAKyoG,MACvB,GAAIp5G,KAAK2Q,KAAKyoG,MAAM91G,eAAe64G,GAAS,CAC1C5uE,EAAOvtC,KAAK2Q,KAAKyoG,MAAM+C,EACvB,IAAIgO,OAA6CtmH,KAArC7D,KAAKq+I,aAAahB,OAAOlhC,GAAwB,EAAIn8G,KAAKq+I,aAAahB,OAAOlhC,EAC9C,QAAxCn8G,KAAKgO,QAAQqwI,aAAaz+G,WAA8D,OAAxC5/B,KAAKgO,QAAQqwI,aAAaz+G,WAC5E2N,EAAK5e,EAAI3uB,KAAKgO,QAAQqwI,aAAaC,gBAAkBn0B,EACrD58E,EAAKv/B,QAAQm4G,MAAMx3F,GAAI,IAEvB4e,EAAKxY,EAAI/0B,KAAKgO,QAAQqwI,aAAaC,gBAAkBn0B,EACrD58E,EAAKv/B,QAAQm4G,MAAMpxF,GAAI,OAEGlxB,KAAxBy8I,EAAan2B,KACfm2B,EAAan2B,OAEfm2B,EAAan2B,GAAOhO,GAAU5uE,EAGlC,MAAO+yG,MAWT/4I,IAAK,cACLhF,MAAO,WACL,GAAIkkJ,GAAU,CACd,KAAK,GAAItqC,KAAUn8G,MAAK2Q,KAAKyoG,MAC3B,GAAIp5G,KAAK2Q,KAAKyoG,MAAM91G,eAAe64G,GAAS,CAC1C,GAAI5uE,GAAOvtC,KAAK2Q,KAAKyoG,MAAM+C,OACct4G,KAArC7D,KAAKq+I,aAAahB,OAAOlhC,KAC3BsqC,EAAUl5G,EAAK+rE,MAAM11G,OAAS6iJ,EAAUA,EAAUl5G,EAAK+rE,MAAM11G,QAInE,MAAO6iJ,MAWTl/I,IAAK,4BACLhF,MAAO,WASL,IARA,GAAI04F,GAASj7F,KAETymJ,EAAU,EAEVC,EAAkB,SAAyBhJ,EAAOC,GACpD1iD,EAAOojD,aAAaqI,gBAAgBhJ,EAAOC,IAGtC8I,EAAU,GAGC,KADhBA,EAAUzmJ,KAAK+sI,gBAGf,IAAK,GAAI5wB,KAAUn8G,MAAK2Q,KAAKyoG,MAC3B,GAAIp5G,KAAK2Q,KAAKyoG,MAAM91G,eAAe64G,GAAS,CAC1C,GAAI5uE,GAAOvtC,KAAK2Q,KAAKyoG,MAAM+C,EACvB5uE,GAAK+rE,MAAM11G,SAAW6iJ,GACxBzmJ,KAAK2mJ,cAAcD,EAAiBvqC,OAe9C50G,IAAK,iCACLhF,MAAO,WACL,GAAI64F,GAASp7F,KAST4mJ,EAAmB,SAA0BlJ,EAAOC,EAAO9+B,OAG9Ch7G,KAFFu3F,EAAOijD,aAAahB,OAAOK,EAAMr9I,MAG5C+6F,EAAOijD,aAAahB,OAAOK,EAAMr9I,IAXtB,IAcb,IAAIqnB,IAAsBglH,EAAYa,aAAamQ,EAAO,QAAShR,EAAYa,aAAaoQ,EAAO,YAASjR,GAAYa,aAAa1uB,EAAM,QAE3IzjB,GAAOijD,aAAahB,OAAOM,EAAMt9I,IAAM+6F,EAAOijD,aAAahB,OAAOK,EAAMr9I,IAAMqnB,EAGhF1nB,MAAK2mJ,cAAcC,GACnB5mJ,KAAKq+I,aAAawI,kBAAkB7mJ,KAAK2Q,KAAKyoG,UAWhD7xG,IAAK,2BACLhF,MAAO,WACL,GAAIukJ,GAAS9mJ,KAIT4mJ,EAAmB,SAA0BlJ,EAAOC,EAAO9+B,OAG9Ch7G,KAFFijJ,EAAOzI,aAAahB,OAAOK,EAAMr9I,MAG5CymJ,EAAOzI,aAAahB,OAAOK,EAAMr9I,IANtB,KAQTw+G,EAAKoN,MAAQ0xB,EAAMt9I,GACrBymJ,EAAOzI,aAAahB,OAAOM,EAAMt9I,IAAMymJ,EAAOzI,aAAahB,OAAOK,EAAMr9I,IAAM,EAE9EymJ,EAAOzI,aAAahB,OAAOM,EAAMt9I,IAAMymJ,EAAOzI,aAAahB,OAAOK,EAAMr9I,IAAM,EAIlFL,MAAK2mJ,cAAcC,GACnB5mJ,KAAKq+I,aAAawI,kBAAkB7mJ,KAAK2Q,KAAKyoG,UAShD7xG,IAAK,eACLhF,MAAO,WACL,GAAIwkJ,GAAS/mJ,KAETgnJ,EAAkB,SAAyBl+I,EAAYwlI,GACrDyY,EAAO1I,aAAahB,OAAO/O,EAAUjuI,IAAM0mJ,EAAO1I,aAAahB,OAAOv0I,EAAWzI,KACnF0mJ,EAAO1I,aAAa4I,YAAYn+I,EAAWzI,GAAIiuI,EAAUjuI,IAI7DL,MAAK2mJ,cAAcK,GACnBhnJ,KAAKq+I,aAAa6I,iBAWpB3/I,IAAK,gBACLhF,MAAO,WACL,GAAI4kJ,GAASnnJ,KAETmH,EAAWxD,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,GAAK,aAC/EyjJ,EAAiBzjJ,UAAU,GAE3BmuD,KACAguF,EAAY,EAEZuH,EAAU,QAASA,GAAQ95G,EAAM+5G,GACnC,OAA0BzjJ,KAAtBiuD,EAASvkB,EAAKltC,IAAmB,KAEQwD,KAAvCsjJ,EAAO9I,aAAaf,MAAM/vG,EAAKltC,MACjC8mJ,EAAO9I,aAAaf,MAAM/vG,EAAKltC,IAAMinJ,EACrCH,EAAOrH,UAAYr9I,KAAKJ,IAAIilJ,EAAMH,EAAOrH,YAG3ChuF,EAASvkB,EAAKltC,KAAM,CAEpB,KAAK,GADDiuI,OAAY,GACPvqI,EAAI,EAAGA,EAAIwpC,EAAK+rE,MAAM11G,OAAQG,KACL,IAA5BwpC,EAAK+rE,MAAMv1G,GAAGo3H,YAEdmT,EADE/gG,EAAK+rE,MAAMv1G,GAAGkoH,OAAS1+E,EAAKltC,GAClBktC,EAAK+rE,MAAMv1G,GAAG0f,KAEd8pB,EAAK+rE,MAAMv1G,GAAGyf,GAGxB+pB,EAAKltC,KAAOiuI,EAAUjuI,KACxB8G,EAASomC,EAAM+gG,EAAW/gG,EAAK+rE,MAAMv1G,IACrCsjJ,EAAQ/Y,EAAWgZ,MAQ7B,QAAuBzjJ,KAAnBujJ,EACF,IAAK,GAAIrjJ,GAAI,EAAGA,EAAI/D,KAAK2Q,KAAK0oG,YAAYz1G,OAAQG,IAAK,CACrD,GAAIwpC,GAAOvtC,KAAK2Q,KAAKyoG,MAAMp5G,KAAK2Q,KAAK0oG,YAAYt1G,QACvBF,KAAtBiuD,EAASvkB,EAAKltC,MAChBgnJ,EAAQ95G,EAAMuyG,GACdA,GAAa,OAGZ,CACL,GAAIl0B,GAAQ5rH,KAAK2Q,KAAKyoG,MAAMguC,EAC5B,QAAcvjJ,KAAV+nH,EAEF,WADAtmG,SAAQk3E,MAAM,kBAAmB4qD,EAGnCC,GAAQz7B,OAYZrkH,IAAK,cACLhF,MAAO,SAAqB6iJ,EAAU19H,GACpC,GAAI6/H,GAASvnJ,KAET8xD,MACU,QAAS01F,GAAQpC,GAC7B,IAAItzF,EAASszF,KAGbtzF,EAASszF,IAAY,EACyB,OAA1CmC,EAAOv5I,QAAQqwI,aAAaz+G,WAAgE,OAA1C2nH,EAAOv5I,QAAQqwI,aAAaz+G,UAChF2nH,EAAO52I,KAAKyoG,MAAMgsC,GAAUrwH,GAAKrN,EAEjC6/H,EAAO52I,KAAKyoG,MAAMgsC,GAAUz2H,GAAKjH,MAEqB7jB,KAApD0jJ,EAAOlJ,aAAalB,kBAAkBiI,IACxC,IAAK,GAAIrhJ,GAAI,EAAGA,EAAIwjJ,EAAOlJ,aAAalB,kBAAkBiI,GAAUxhJ,OAAQG,IAC1EyjJ,EAAQD,EAAOlJ,aAAalB,kBAAkBiI,GAAUrhJ,KAItDqhJ,MAYV79I,IAAK,oBACLhF,MAAO,SAA2BklJ,EAAQC,GACxC,GAAIC,GAAU3nJ,KAEVmlJ,IA2BJ,OA1BqB,SAASyC,GAAezC,EAASvsF,GACpD,OAAoD/0D,KAAhD8jJ,EAAQtJ,aAAajB,gBAAgBxkF,GACvC,IAAK,GAAI70D,GAAI,EAAGA,EAAI4jJ,EAAQtJ,aAAajB,gBAAgBxkF,GAAOh1D,OAAQG,IAAK,CAC3E,GAAIiF,GAAS2+I,EAAQtJ,aAAajB,gBAAgBxkF,GAAO70D,EACzDohJ,GAAQn8I,IAAU,EAClB4+I,EAAezC,EAASn8I,KAoBfm8I,EAASsC,GAhBP,QAASI,GAAW1C,EAASvsF,GAC5C,OAAoD/0D,KAAhD8jJ,EAAQtJ,aAAajB,gBAAgBxkF,GACvC,IAAK,GAAI70D,GAAI,EAAGA,EAAI4jJ,EAAQtJ,aAAajB,gBAAgBxkF,GAAOh1D,OAAQG,IAAK,CAC3E,GAAIiF,GAAS2+I,EAAQtJ,aAAajB,gBAAgBxkF,GAAO70D,EACzD,QAAwBF,KAApBshJ,EAAQn8I,GACV,OAAS8+I,YAAa9+I,EAAQu9I,UAAW3tF,EAE3C,IAAIqyE,GAAS4c,EAAW1C,EAASn8I,EACjC,IAA2B,OAAvBiiI,EAAO6c,YACT,MAAO7c,GAIb,OAAS6c,YAAa,KAAMvB,UAAW3tF,IAIvBusF,EAASuC,MAY7BngJ,IAAK,2BACLhF,MAAO,SAAkCgrC,EAAMh9B,EAAU45G,IAInC,KAHFxmH,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,IAAmBA,UAAU,UAItCE,KAArC7D,KAAK+/I,qBAAqB51B,KAC5BnqH,KAAK+/I,qBAAqB51B,MAC1BnqH,KAAKigJ,6BAA6B91B,WAGsBtmH,KAAtD7D,KAAKigJ,6BAA6B91B,GAAO58E,EAAKltC,MAChDL,KAAK+/I,qBAAqB51B,GAAOtlH,KAAK0oC,GACtCvtC,KAAKggJ,kBAAkBzyG,EAAKltC,IAAML,KAAK+/I,qBAAqB51B,GAAOvmH,OAAS,GAE9E5D,KAAKigJ,6BAA6B91B,GAAO58E,EAAKltC,KAAM,GAGV,OAAxCL,KAAKgO,QAAQqwI,aAAaz+G,WAA8D,OAAxC5/B,KAAKgO,QAAQqwI,aAAaz+G,UAC5E2N,EAAKxY,EAAIxkB,EAETg9B,EAAK5e,EAAIpe,KAabhJ,IAAK,cACLhF,MAAO,WACL,MAA+C,OAAxCvC,KAAKgO,QAAQqwI,aAAaz+G,WAA8D,OAAxC5/B,KAAKgO,QAAQqwI,aAAaz+G,aAWnFr4B,IAAK,2BACLhF,MAAO,SAAkCgrC,GACvC,MAA4C,OAAxCvtC,KAAKgO,QAAQqwI,aAAaz+G,WAA8D,OAAxC5/B,KAAKgO,QAAQqwI,aAAaz+G,UACrE2N,EAAKxY,EAELwY,EAAK5e,KAWhBpnB,IAAK,iBACLhF,MAAO,SAAwBojJ,GACzBA,EAAU/hJ,OAAS,IACuB,OAAxC5D,KAAKgO,QAAQqwI,aAAaz+G,WAA8D,OAAxC5/B,KAAKgO,QAAQqwI,aAAaz+G,UAC5E+lH,EAAU98H,KAAK,SAAUrlB,EAAGC,GAC1B,MAAOD,GAAEuxB,EAAItxB,EAAEsxB,IAGjB4wH,EAAU98H,KAAK,SAAUrlB,EAAGC,GAC1B,MAAOD,GAAEmrB,EAAIlrB,EAAEkrB,SAMlBwsF,IAGTv7G,GAAiB,QAAIu7G,GAIjB,SAAUt7G,EAAQD,EAASM,GA4B/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAxBzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAIlB,GAAQnB,EAAoB,IAE5BoB,EAAST,EAAuBQ,GAEhC8b,EAAajd,EAAoB,IAEjC+wC,EAAcpwC,EAAuBsc,GAErC5b,EAAWrB,EAAoB,IAE/BsB,EAAWX,EAAuBU,GAElCswF,EAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAIvCpxF,EAAOT,EAAoB,GAC3B8uC,EAAS9uC,EAAoB,KAC7Bm6E,EAAan6E,EAAoB,KAQjCq7G,EAAqB,WACvB,QAASA,GAAmB5qG,EAAMutC,EAAQw8D,GACxC,GAAIthB,GAAQp5F,MAEZ,EAAI8xF,EAA0B,SAAG9xF,KAAMu7G,GAEvCv7G,KAAK2Q,KAAOA,EACZ3Q,KAAKk+C,OAASA,EACdl+C,KAAK06G,iBAAmBA,EAExB16G,KAAK+nJ,UAAW,EAChB/nJ,KAAKgoJ,oBAAkBnkJ,GACvB7D,KAAKioJ,gBAAcpkJ,GACnB7D,KAAKkoJ,aAAWrkJ,GAEhB7D,KAAKmoJ,uBACLnoJ,KAAKooJ,wBACLpoJ,KAAKqoJ,2BAELroJ,KAAK81I,UAAY,EACjB91I,KAAKsoJ,cAAiBlvC,SAAWE,UACjCt5G,KAAKuoJ,YAAa,EAClBvoJ,KAAKwoJ,QAAS,EACdxoJ,KAAKyoJ,wBAAsB5kJ,GAE3B7D,KAAKgO,WACLhO,KAAK0tE,gBACHx/D,SAAS,EACTw6I,iBAAiB,EACjBtmC,SAAS,EACTG,SAAS,EACT7E,aAAU75G,GACV8iH,UAAU,EACVgiC,YAAY,EACZC,YAAY,EACZC,kBACElkC,MAAO,MACPx0E,KAAM,EACNjmC,OAASwB,WAAY,UAAWC,OAAQ,UAAWC,WAAaF,WAAY,UAAWC,OAAQ,YAC/FqqD,YAAa,EACbuzD,oBAAqB,IAGzB5oH,EAAKC,OAAOZ,KAAKgO,QAAShO,KAAK0tE,gBAE/B1tE,KAAK2Q,KAAK49D,QAAQl9B,GAAG,UAAW,WAC9B+nD,EAAMD,WAERn5F,KAAK2Q,KAAK49D,QAAQl9B,GAAG,eAAgBrxC,KAAK8oJ,SAASxxF,KAAKt3D,OACxDA,KAAK2Q,KAAK49D,QAAQl9B,GAAG,aAAcrxC,KAAK8oJ,SAASxxF,KAAKt3D,OAkqCxD,OAzpCA,EAAIgyF,EAAuB,SAAGupB,IAC5Bh0G,IAAK,WACLhF,MAAO,YACe,IAAhBvC,KAAKwoJ,UAC8B,IAAjCxoJ,KAAKgO,QAAQ06I,gBACf1oJ,KAAKu9G,iBAELv9G,KAAKw9G,sBAWXj2G,IAAK,aACLhF,MAAO,SAAoByL,EAASuiE,EAAYtiE,OAC3BpK,KAAf0sE,QACwB1sE,KAAtB0sE,EAAWlvD,OACbrhB,KAAKgO,QAAQqT,OAASkvD,EAAWlvD,OAEjCrhB,KAAKgO,QAAQqT,OAASpT,EAAcoT,WAEXxd,KAAvB0sE,EAAWp8C,QACbn0B,KAAKgO,QAAQmmB,QAAUo8C,EAAWp8C,QAElCn0B,KAAKgO,QAAQmmB,QAAUlmB,EAAckmB,aAIzBtwB,KAAZmK,IACqB,iBAAZA,GACThO,KAAKgO,QAAQE,QAAUF,GAEvBhO,KAAKgO,QAAQE,SAAU,EACvBvN,EAAK+D,WAAW1E,KAAKgO,QAASA,KAEK,IAAjChO,KAAKgO,QAAQ06I,kBACf1oJ,KAAK+nJ,UAAW,GAElB/nJ,KAAK+oJ,aAWTxhJ,IAAK,iBACLhF,MAAO,YACiB,IAAlBvC,KAAK+nJ,SACP/nJ,KAAKw9G,kBAELx9G,KAAKu9G,oBAITh2G,IAAK,iBACLhF,MAAO,WACLvC,KAAK+nJ,UAAW,EAEhB/nJ,KAAKm5F,UACmB,IAApBn5F,KAAKuoJ,aACPvoJ,KAAKgoJ,gBAAgB37I,MAAMoM,QAAU,QACrCzY,KAAKkoJ,SAAS77I,MAAMoM,QAAU,QAC9BzY,KAAKioJ,YAAY57I,MAAMoM,QAAU,OACjCzY,KAAKgpJ,6BAITzhJ,IAAK,kBACLhF,MAAO,WACLvC,KAAK+nJ,UAAW,EAEhB/nJ,KAAKm5F,UACmB,IAApBn5F,KAAKuoJ,aACPvoJ,KAAKgoJ,gBAAgB37I,MAAMoM,QAAU,OACrCzY,KAAKkoJ,SAAS77I,MAAMoM,QAAU,OAC9BzY,KAAKioJ,YAAY57I,MAAMoM,QAAU,QACjCzY,KAAKipJ,wBAWT1hJ,IAAK,yBACLhF,MAAO,WAQL,GANAvC,KAAKm5F,SAGLn5F,KAAKkpJ,oBAGmB,IAApBlpJ,KAAKuoJ,WAAqB,CAE5BvoJ,KAAK+nJ,UAAW,EAChB/nJ,KAAKgoJ,gBAAgB37I,MAAMoM,QAAU,QACrCzY,KAAKkoJ,SAAS77I,MAAMoM,QAAU,OAE9B,IAAI0wI,GAAoBnpJ,KAAK06G,iBAAiBu9B,wBAC1CmR,EAAoBppJ,KAAK06G,iBAAiBq9B,wBAC1CsR,EAAqBF,EAAoBC,EACzC/nI,EAASrhB,KAAKgO,QAAQmmB,QAAQn0B,KAAKgO,QAAQqT,QAC3CioI,GAAgB,GAES,IAAzBtpJ,KAAKgO,QAAQo0G,UACfpiH,KAAKupJ,qBAAqBloI,GAC1BioI,GAAgB,IAEW,IAAzBtpJ,KAAKgO,QAAQu0G,WACO,IAAlB+mC,EACFtpJ,KAAKwpJ,iBAAiB,GAEtBF,GAAgB,EAElBtpJ,KAAKypJ,qBAAqBpoI,IAGF,IAAtB8nI,GAA4D,kBAA1BnpJ,MAAKgO,QAAQ0vG,WAC3B,IAAlB4rC,EACFtpJ,KAAKwpJ,iBAAiB,GAEtBF,GAAgB,EAElBtpJ,KAAK0pJ,sBAAsBroI,IACI,IAAtB+nI,GAAiD,IAAtBD,IAAqD,IAA1BnpJ,KAAKgO,QAAQ24G,YACtD,IAAlB2iC,EACFtpJ,KAAKwpJ,iBAAiB,GAEtBF,GAAgB,EAElBtpJ,KAAK2pJ,sBAAsBtoI,IAIF,IAAvBgoI,IACEF,EAAoB,IAAiC,IAA5BnpJ,KAAKgO,QAAQ26I,aAClB,IAAlBW,GACFtpJ,KAAKwpJ,iBAAiB,GAExBxpJ,KAAK4pJ,oBAAoBvoI,IACM,IAAtB8nI,IAAuD,IAA5BnpJ,KAAKgO,QAAQ46I,cAC3B,IAAlBU,GACFtpJ,KAAKwpJ,iBAAiB,GAExBxpJ,KAAK4pJ,oBAAoBvoI,KAK7BrhB,KAAK6pJ,iBAAiB7pJ,KAAKkoJ,SAAUloJ,KAAK8pJ,eAAexyF,KAAKt3D,OAG9DA,KAAK+pJ,oBAAoB,SAAU/pJ,KAAKgpJ,uBAAuB1xF,KAAKt3D,OAItEA,KAAK2Q,KAAK49D,QAAQrhB,KAAK,cAQzB3lD,IAAK,cACLhF,MAAO,WAUL,IARsB,IAAlBvC,KAAK+nJ,UACP/nJ,KAAKu9G,iBAIPv9G,KAAKm5F,SAELn5F,KAAKwoJ,OAAS,WACU,IAApBxoJ,KAAKuoJ,WAAqB,CAC5B,GAAIlnI,GAASrhB,KAAKgO,QAAQmmB,QAAQn0B,KAAKgO,QAAQqT,OAC/CrhB,MAAKkpJ,mBACLlpJ,KAAKgqJ,kBAAkB3oI,GACvBrhB,KAAKwpJ,mBACLxpJ,KAAKiqJ,mBAAmB5oI,EAAuB,gBAAKrhB,KAAKgO,QAAQmmB,QAAY,GAAkB,gBAG/Fn0B,KAAK6pJ,iBAAiB7pJ,KAAKkoJ,SAAUloJ,KAAK8pJ,eAAexyF,KAAKt3D,OAGhEA,KAAK+pJ,oBAAoB,QAAS/pJ,KAAKkqJ,gBAAgB5yF,KAAKt3D,UAQ9DuH,IAAK,WACLhF,MAAO,WACL,GAAIk4F,GAASz6F,MAGS,IAAlBA,KAAK+nJ,UACP/nJ,KAAKu9G,iBAIPv9G,KAAKm5F,QACL,IAAI5rD,GAAOvtC,KAAK06G,iBAAiByvC,kBACjC,QAAatmJ,KAAT0pC,EAAoB,CAEtB,GADAvtC,KAAKwoJ,OAAS,WACuB,kBAA1BxoJ,MAAKgO,QAAQ0vG,SAqBtB,KAAM,IAAIr5G,OAAM,kEApBhB,KAAuB,IAAnBkpC,EAAKwvE,UAAoB,CAC3B,GAAIvoF,GAAO7zB,EAAK+D,cAAe6oC,EAAKv/B,SAAS,EAI7C,IAHAwmB,EAAKO,EAAIwY,EAAKxY,EACdP,EAAK7F,EAAI4e,EAAK5e,EAEuB,IAAjC3uB,KAAKgO,QAAQ0vG,SAAS95G,OASxB,KAAM,IAAIS,OAAM,wEARhBrE,MAAKgO,QAAQ0vG,SAASlpF,EAAM,SAAU41H,GACd,OAAlBA,OAA4CvmJ,KAAlBumJ,GAAiD,aAAlB3vD,EAAO+tD,QAElE/tD,EAAO9pF,KAAK6jB,KAAK4kF,MAAMhmE,aAAalB,OAAOk4G,GAE7C3vD,EAAOuuD,+BAMXniD,OAAM7mG,KAAKgO,QAAQmmB,QAAQn0B,KAAKgO,QAAQqT,QAA0B,kBAAKrhB,KAAKgO,QAAQmmB,QAAY,GAAoB,sBAMxHn0B,MAAKgpJ,4BASTzhJ,IAAK,cACLhF,MAAO,WAUL,IARsB,IAAlBvC,KAAK+nJ,UACP/nJ,KAAKu9G,iBAIPv9G,KAAKm5F,SAELn5F,KAAKwoJ,OAAS,WACU,IAApBxoJ,KAAKuoJ,WAAqB,CAC5B,GAAIlnI,GAASrhB,KAAKgO,QAAQmmB,QAAQn0B,KAAKgO,QAAQqT,OAC/CrhB,MAAKkpJ,mBACLlpJ,KAAKgqJ,kBAAkB3oI,GACvBrhB,KAAKwpJ,mBACLxpJ,KAAKiqJ,mBAAmB5oI,EAAwB,iBAAKrhB,KAAKgO,QAAQmmB,QAAY,GAAmB,iBAGjGn0B,KAAK6pJ,iBAAiB7pJ,KAAKkoJ,SAAUloJ,KAAK8pJ,eAAexyF,KAAKt3D,OAIhEA,KAAKqqJ,iBAAiB,UAAWrqJ,KAAKsqJ,eAAehzF,KAAKt3D,OAC1DA,KAAKqqJ,iBAAiB,YAAarqJ,KAAKuqJ,eAAejzF,KAAKt3D,OAC5DA,KAAKqqJ,iBAAiB,SAAUrqJ,KAAKwqJ,iBAAiBlzF,KAAKt3D,OAC3DA,KAAKqqJ,iBAAiB,YAAarqJ,KAAKuqJ,eAAejzF,KAAKt3D,OAE5DA,KAAKqqJ,iBAAiB,cAAe,cACrCrqJ,KAAKqqJ,iBAAiB,SAAU,iBAQlC9iJ,IAAK,eACLhF,MAAO,WAUL,IARsB,IAAlBvC,KAAK+nJ,UACP/nJ,KAAKu9G,iBAIPv9G,KAAKm5F,SAELn5F,KAAKwoJ,OAAS,WAC0C,YAApD,EAAIhnJ,EAAkB,SAAGxB,KAAKgO,QAAQ24G,WAA2E,kBAA1C3mH,MAAKgO,QAAQ24G,SAAS8jC,kBAC/FzqJ,KAAK0qJ,kBAAoB1qJ,KAAK06G,iBAAiBgE,mBAAmB,OACnC76G,KAA3B7D,KAAK0qJ,mBAAiC,CACxC,GAAI7rC,GAAO7+G,KAAK2Q,KAAK2oG,MAAMt5G,KAAK0qJ,kBAEhC,YADA1qJ,MAAK2qJ,iBAAiB9rC,EAAKp7F,KAAMo7F,EAAKr7F,IAI1C,IAAwB,IAApBxjB,KAAKuoJ,WAAqB,CAC5B,GAAIlnI,GAASrhB,KAAKgO,QAAQmmB,QAAQn0B,KAAKgO,QAAQqT,OAC/CrhB,MAAKkpJ,mBACLlpJ,KAAKgqJ,kBAAkB3oI,GACvBrhB,KAAKwpJ,mBACLxpJ,KAAKiqJ,mBAAmB5oI,EAA4B,qBAAKrhB,KAAKgO,QAAQmmB,QAAY,GAAuB,qBAGzGn0B,KAAK6pJ,iBAAiB7pJ,KAAKkoJ,SAAUloJ,KAAK8pJ,eAAexyF,KAAKt3D,OAIhE,GADAA,KAAK0qJ,kBAAoB1qJ,KAAK06G,iBAAiBgE,mBAAmB,OACnC76G,KAA3B7D,KAAK0qJ,kBAAiC,CACxC,GAAI9b,GAAQ5uI,KAAK2Q,KAAK2oG,MAAMt5G,KAAK0qJ,mBAG7BE,EAAkB5qJ,KAAK6qJ,kBAAkBjc,EAAMnrH,KAAKsR,EAAG65G,EAAMnrH,KAAKkL,GAClEm8H,EAAgB9qJ,KAAK6qJ,kBAAkBjc,EAAMprH,GAAGuR,EAAG65G,EAAMprH,GAAGmL,EAEhE3uB,MAAKsoJ,aAAalvC,MAAMv0G,KAAK+lJ,EAAgBvqJ,IAC7CL,KAAKsoJ,aAAalvC,MAAMv0G,KAAKimJ,EAAczqJ,IAE3CL,KAAK2Q,KAAKyoG,MAAMwxC,EAAgBvqJ,IAAMuqJ,EACtC5qJ,KAAK2Q,KAAK0oG,YAAYx0G,KAAK+lJ,EAAgBvqJ,IAC3CL,KAAK2Q,KAAKyoG,MAAM0xC,EAAczqJ,IAAMyqJ,EACpC9qJ,KAAK2Q,KAAK0oG,YAAYx0G,KAAKimJ,EAAczqJ,IAGzCL,KAAKqqJ,iBAAiB,UAAWrqJ,KAAK+qJ,kBAAkBzzF,KAAKt3D,OAC7DA,KAAKqqJ,iBAAiB,QAAS,cAC/BrqJ,KAAKqqJ,iBAAiB,SAAU,cAChCrqJ,KAAKqqJ,iBAAiB,cAAerqJ,KAAKgrJ,sBAAsB1zF,KAAKt3D,OACrEA,KAAKqqJ,iBAAiB,SAAUrqJ,KAAKirJ,iBAAiB3zF,KAAKt3D,OAC3DA,KAAKqqJ,iBAAiB,YAAarqJ,KAAKkrJ,oBAAoB5zF,KAAKt3D,OACjEA,KAAKqqJ,iBAAiB,cAAe,cAIrCrqJ,KAAK+pJ,oBAAoB,gBAAiB,SAAUz0I,GAClD,GAAIoyH,GAAYkH,EAAM1T,SAASiwB,oBAAoB71I,IAClB,IAA7Bs1I,EAAgBzlE,WAClBylE,EAAgB71H,EAAI2yG,EAAUjkH,KAAKsR,EACnC61H,EAAgBj8H,EAAI+4G,EAAUjkH,KAAKkL,IAEN,IAA3Bm8H,EAAc3lE,WAChB2lE,EAAc/1H,EAAI2yG,EAAUlkH,GAAGuR,EAC/B+1H,EAAcn8H,EAAI+4G,EAAUlkH,GAAGmL,KAInC3uB,KAAK2Q,KAAK49D,QAAQrhB,KAAK,eAEvBltD,MAAKgpJ,4BASTzhJ,IAAK,iBACLhF,MAAO,WACL,GAAIs4F,GAAS76F,MAGS,IAAlBA,KAAK+nJ,UACP/nJ,KAAKu9G,iBAIPv9G,KAAKm5F,SAELn5F,KAAKwoJ,OAAS,QACd,IAAI4C,GAAgBprJ,KAAK06G,iBAAiB+D,mBACtC4sC,EAAgBrrJ,KAAK06G,iBAAiBgE,mBACtC4sC,MAAiBznJ,EACrB,IAAIunJ,EAAcxnJ,OAAS,EAAG,CAC5B,IAAK,GAAIG,GAAI,EAAGA,EAAIqnJ,EAAcxnJ,OAAQG,IACxC,IAAoD,IAAhD/D,KAAK2Q,KAAKyoG,MAAMgyC,EAAcrnJ,IAAIg5G,UAEpC,WADAlW,OAAM7mG,KAAKgO,QAAQmmB,QAAQn0B,KAAKgO,QAAQqT,QAA4B,oBAAKrhB,KAAKgO,QAAQmmB,QAAY,GAAsB,mBAKrF,mBAA5Bn0B,MAAKgO,QAAQ26I,aACtB2C,EAAiBtrJ,KAAKgO,QAAQ26I,gBAEvB0C,GAAcznJ,OAAS,GACO,kBAA5B5D,MAAKgO,QAAQ46I,aACtB0C,EAAiBtrJ,KAAKgO,QAAQ46I,WAIlC,IAA8B,kBAAnB0C,GAA+B,CACxC,GAAI92H,IAAS4kF,MAAOgyC,EAAe9xC,MAAO+xC,EAC1C,IAA8B,IAA1BC,EAAe1nJ,OAcjB,KAAM,IAAIS,OAAM,0EAbhBinJ,GAAe92H,EAAM,SAAU41H,GACP,OAAlBA,OAA4CvmJ,KAAlBumJ,GAAiD,WAAlBvvD,EAAO2tD,QAElE3tD,EAAOlqF,KAAK6jB,KAAK8kF,MAAMlmE,aAAaM,OAAO02G,EAAc9wC,OACzDze,EAAOlqF,KAAK6jB,KAAK4kF,MAAMhmE,aAAaM,OAAO02G,EAAchxC,OACzDve,EAAOlqF,KAAK49D,QAAQrhB,KAAK,mBACzB2tC,EAAOmuD,2BAEPnuD,EAAOlqF,KAAK49D,QAAQrhB,KAAK,mBACzB2tC,EAAOmuD,gCAObhpJ,MAAK2Q,KAAK6jB,KAAK8kF,MAAMlmE,aAAaM,OAAO23G,GACzCrrJ,KAAK2Q,KAAK6jB,KAAK4kF,MAAMhmE,aAAaM,OAAO03G,GACzCprJ,KAAK2Q,KAAK49D,QAAQrhB,KAAK,mBACvBltD,KAAKgpJ,4BAYTzhJ,IAAK,SACLhF,MAAO,YACwB,IAAzBvC,KAAKgO,QAAQE,SAEflO,KAAKuoJ,YAAa,EAElBvoJ,KAAKurJ,mBACiB,IAAlBvrJ,KAAK+nJ,SACP/nJ,KAAKipJ,oBAELjpJ,KAAKgpJ,2BAGPhpJ,KAAKwrJ,yBAGLxrJ,KAAKuoJ,YAAa,MAUtBhhJ,IAAK,kBACLhF,MAAO,eAEwBsB,KAAzB7D,KAAKgoJ,kBACPhoJ,KAAKgoJ,gBAAkB93I,SAASC,cAAc,OAC9CnQ,KAAKgoJ,gBAAgBthJ,UAAY,oBACX,IAAlB1G,KAAK+nJ,SACP/nJ,KAAKgoJ,gBAAgB37I,MAAMoM,QAAU,QAErCzY,KAAKgoJ,gBAAgB37I,MAAMoM,QAAU,OAEvCzY,KAAKk+C,OAAOD,MAAMvtC,YAAY1Q,KAAKgoJ,sBAIZnkJ,KAArB7D,KAAKioJ,cACPjoJ,KAAKioJ,YAAc/3I,SAASC,cAAc,OAC1CnQ,KAAKioJ,YAAYvhJ,UAAY,iBACP,IAAlB1G,KAAK+nJ,SACP/nJ,KAAKioJ,YAAY57I,MAAMoM,QAAU,OAEjCzY,KAAKioJ,YAAY57I,MAAMoM,QAAU,QAEnCzY,KAAKk+C,OAAOD,MAAMvtC,YAAY1Q,KAAKioJ,kBAIfpkJ,KAAlB7D,KAAKkoJ,WACPloJ,KAAKkoJ,SAAWh4I,SAASC,cAAc,OACvCnQ,KAAKkoJ,SAASxhJ,UAAY,YAC1B1G,KAAKkoJ,SAAS77I,MAAMoM,QAAUzY,KAAKgoJ,gBAAgB37I,MAAMoM,QACzDzY,KAAKk+C,OAAOD,MAAMvtC,YAAY1Q,KAAKkoJ,cAavC3gJ,IAAK,oBACLhF,MAAO,SAA2BwyB,EAAGpG,GACnC,GAAIk6H,GAAmBloJ,EAAK+D,cAAe1E,KAAKgO,QAAQ66I,iBAExDA,GAAiBxoJ,GAAK,aAAeM,EAAKuC,aAC1C2lJ,EAAiBhwE,QAAS,EAC1BgwE,EAAiB1sD,SAAU,EAC3B0sD,EAAiB9zH,EAAIA,EACrB8zH,EAAiBl6H,EAAIA,CAGrB,IAAI4e,GAAOvtC,KAAK2Q,KAAKupG,UAAUC,WAAW0uC,EAG1C,OAFAt7G,GAAKo3E,MAAMmH,aAAgB5lH,KAAM6uB,EAAG3uB,MAAO2uB,EAAGzuB,IAAKqoB,EAAG8vB,OAAQ9vB,GAEvD4e,KAQThmC,IAAK,oBACLhF,MAAO,WAELvC,KAAKm5F,SAGLn5F,KAAKkpJ,mBAGLvoJ,EAAKmB,mBAAmB9B,KAAKioJ,YAG7B,IAAI5mI,GAASrhB,KAAKgO,QAAQmmB,QAAQn0B,KAAKgO,QAAQqT,QAC3CqqC,EAAS1rD,KAAKyrJ,cAAc,WAAY,oCAAqCpqI,EAAa,MAAKrhB,KAAKgO,QAAQmmB,QAAY,GAAQ,KACpIn0B,MAAKioJ,YAAYv3I,YAAYg7C,GAG7B1rD,KAAK6pJ,iBAAiBn+F,EAAQ1rD,KAAK8pJ,eAAexyF,KAAKt3D,UASzDuH,IAAK,SACLhF,MAAO,WAELvC,KAAKwoJ,QAAS,GAGU,IAApBxoJ,KAAKuoJ,aACP5nJ,EAAKmB,mBAAmB9B,KAAKioJ,aAC7BtnJ,EAAKmB,mBAAmB9B,KAAKgoJ,iBAG7BhoJ,KAAK0rJ,4BAIP1rJ,KAAK2rJ,iCAGL3rJ,KAAK4rJ,sBAGL5rJ,KAAK6rJ,yBAGL7rJ,KAAK2Q,KAAK49D,QAAQrhB,KAAK,qBASzB3lD,IAAK,2BACLhF,MAAO,WAEL,GAAuC,GAAnCvC,KAAKmoJ,oBAAoBvkJ,OAAa,CACxC,IAAK,GAAIG,GAAI,EAAGA,EAAI/D,KAAKmoJ,oBAAoBvkJ,OAAQG,IACnD/D,KAAKmoJ,oBAAoBpkJ,GAAGqtC,SAE9BpxC,MAAKmoJ,2BAUT5gJ,IAAK,yBACLhF,MAAO,WAELvC,KAAKm5F,SAGLx4F,EAAKmB,mBAAmB9B,KAAKgoJ,iBAC7BrnJ,EAAKmB,mBAAmB9B,KAAKioJ,aAC7BtnJ,EAAKmB,mBAAmB9B,KAAKkoJ,UAGzBloJ,KAAKgoJ,iBACPhoJ,KAAKk+C,OAAOD,MAAM/7C,YAAYlC,KAAKgoJ,iBAEjChoJ,KAAKioJ,aACPjoJ,KAAKk+C,OAAOD,MAAM/7C,YAAYlC,KAAKioJ,aAEjCjoJ,KAAKkoJ,UACPloJ,KAAKk+C,OAAOD,MAAM/7C,YAAYlC,KAAKkoJ,UAIrCloJ,KAAKgoJ,oBAAkBnkJ,GACvB7D,KAAKioJ,gBAAcpkJ,GACnB7D,KAAKkoJ,aAAWrkJ,MAUlB0D,IAAK,mBACLhF,MAAO,WACL,GAAIwQ,GAAQpP,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,GAAK,CAEhF3D,MAAKkpJ,gBAAgB,mBAAqBn2I,GAAS7C,SAASC,cAAc,OAC1EnQ,KAAKkpJ,gBAAgB,mBAAqBn2I,GAAOrM,UAAY,qBAC7D1G,KAAKgoJ,gBAAgBt3I,YAAY1Q,KAAKkpJ,gBAAgB,mBAAqBn2I;gFAM7ExL,IAAK,uBACLhF,MAAO,SAA8B8e,GACnC,GAAIqqC,GAAS1rD,KAAKyrJ,cAAc,UAAW,qBAAsBpqI,EAAgB,SAAKrhB,KAAKgO,QAAQmmB,QAAY,GAAW,QAC1Hn0B,MAAKgoJ,gBAAgBt3I,YAAYg7C,GACjC1rD,KAAK6pJ,iBAAiBn+F,EAAQ1rD,KAAKy9G,YAAYnmD,KAAKt3D,UAGtDuH,IAAK,uBACLhF,MAAO,SAA8B8e,GACnC,GAAIqqC,GAAS1rD,KAAKyrJ,cAAc,UAAW,yBAA0BpqI,EAAgB,SAAKrhB,KAAKgO,QAAQmmB,QAAY,GAAW,QAC9Hn0B,MAAKgoJ,gBAAgBt3I,YAAYg7C,GACjC1rD,KAAK6pJ,iBAAiBn+F,EAAQ1rD,KAAK49G,YAAYtmD,KAAKt3D,UAGtDuH,IAAK,wBACLhF,MAAO,SAA+B8e,GACpC,GAAIqqC,GAAS1rD,KAAKyrJ,cAAc,WAAY,sBAAuBpqI,EAAiB,UAAKrhB,KAAKgO,QAAQmmB,QAAY,GAAY,SAC9Hn0B,MAAKgoJ,gBAAgBt3I,YAAYg7C,GACjC1rD,KAAK6pJ,iBAAiBn+F,EAAQ1rD,KAAK09G,SAASpmD,KAAKt3D,UAGnDuH,IAAK,wBACLhF,MAAO,SAA+B8e,GACpC,GAAIqqC,GAAS1rD,KAAKyrJ,cAAc,WAAY,sBAAuBpqI,EAAiB,UAAKrhB,KAAKgO,QAAQmmB,QAAY,GAAY,SAC9Hn0B,MAAKgoJ,gBAAgBt3I,YAAYg7C,GACjC1rD,KAAK6pJ,iBAAiBn+F,EAAQ1rD,KAAK69G,aAAavmD,KAAKt3D,UAGvDuH,IAAK,sBACLhF,MAAO,SAA6B8e,GAClC,GAAIrhB,KAAKgO,QAAQggE,IACf,GAAI89E,GAAiB,gCAErB,IAAIA,GAAiB,uBAEvB,IAAIpgG,GAAS1rD,KAAKyrJ,cAAc,SAAUK,EAAgBzqI,EAAY,KAAKrhB,KAAKgO,QAAQmmB,QAAY,GAAO,IAC3Gn0B,MAAKgoJ,gBAAgBt3I,YAAYg7C,GACjC1rD,KAAK6pJ,iBAAiBn+F,EAAQ1rD,KAAK89G,eAAexmD,KAAKt3D,UAGzDuH,IAAK,oBACLhF,MAAO,SAA2B8e,GAChC,GAAIqqC,GAAS1rD,KAAKyrJ,cAAc,OAAQ,sBAAuBpqI,EAAa,MAAKrhB,KAAKgO,QAAQmmB,QAAY,GAAQ,KAClHn0B,MAAKgoJ,gBAAgBt3I,YAAYg7C,GACjC1rD,KAAK6pJ,iBAAiBn+F,EAAQ1rD,KAAKgpJ,uBAAuB1xF,KAAKt3D,UAGjEuH,IAAK,gBACLhF,MAAO,SAAuBlC,EAAIqG,EAAW0pC,GAC3C,GAAI27G,GAAiBpoJ,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,GAAmBA,UAAU,GAAK,WASzF,OANA3D,MAAKkpJ,gBAAgB7oJ,EAAK,OAAS6P,SAASC,cAAc,OAC1DnQ,KAAKkpJ,gBAAgB7oJ,EAAK,OAAOqG,UAAYA,EAC7C1G,KAAKkpJ,gBAAgB7oJ,EAAK,SAAW6P,SAASC,cAAc,OAC5DnQ,KAAKkpJ,gBAAgB7oJ,EAAK,SAASqG,UAAYqlJ,EAC/C/rJ,KAAKkpJ,gBAAgB7oJ,EAAK,SAAS8hD,UAAY/R,EAC/CpwC,KAAKkpJ,gBAAgB7oJ,EAAK,OAAOqQ,YAAY1Q,KAAKkpJ,gBAAgB7oJ,EAAK,UAChEL,KAAKkpJ,gBAAgB7oJ,EAAK,UAGnCkH,IAAK,qBACLhF,MAAO,SAA4B6tC,GACjCpwC,KAAKgoJ,gBAAgBt3I,YAAY1Q,KAAKyrJ,cAAc,cAAe,sBAAuBr7G,OAa5F7oC,IAAK,sBACLhF,MAAO,SAA6BgG,EAAOyjJ,GACzChsJ,KAAKqoJ,wBAAwBxjJ,MAAO0D,MAAOA,EAAO0jJ,cAAeD,IACjEhsJ,KAAK2Q,KAAK49D,QAAQl9B,GAAG9oC,EAAOyjJ,MAW9BzkJ,IAAK,mBACLhF,MAAO,SAA0B2pJ,EAAgBF,GAC/C,OAAiDnoJ,KAA7C7D,KAAK2Q,KAAK6oG,eAAe0yC,GAI3B,KAAM,IAAI7nJ,OAAM,qDAAuD6nJ,EAAiB,mBAAoB,EAAIj7G,EAAqB,UAAG,EAAI3vC,EAAgB,SAAGtB,KAAK2Q,KAAK6oG,iBAHzKx5G,MAAKooJ,qBAAqB8D,GAAkBlsJ,KAAK2Q,KAAK6oG,eAAe0yC,GACrElsJ,KAAK2Q,KAAK6oG,eAAe0yC,GAAkBF,KAa/CzkJ,IAAK,sBACLhF,MAAO,WACL,IAAK,GAAI4pJ,KAAgBnsJ,MAAKooJ,qBACxBpoJ,KAAKooJ,qBAAqB9kJ,eAAe6oJ,KAC3CnsJ,KAAK2Q,KAAK6oG,eAAe2yC,GAAgBnsJ,KAAKooJ,qBAAqB+D,SAC5DnsJ,MAAKooJ,qBAAqB+D,GAGrCnsJ,MAAKooJ,2BASP7gJ,IAAK,yBACLhF,MAAO,WACL,IAAK,GAAIwB,GAAI,EAAGA,EAAI/D,KAAKqoJ,wBAAwBzkJ,OAAQG,IAAK,CAC5D,GAAIqoJ,GAAYpsJ,KAAKqoJ,wBAAwBtkJ,GAAGwE,MAC5C0jJ,EAAgBjsJ,KAAKqoJ,wBAAwBtkJ,GAAGkoJ,aACpDjsJ,MAAK2Q,KAAK49D,QAAQ/8B,IAAI46G,EAAWH,GAEnCjsJ,KAAKqoJ,8BAUP9gJ,IAAK,mBACLhF,MAAO,SAA0B8pJ,EAAYJ,GAC3C,GAAIn1F,GAAS,GAAI9nB,GAAOq9G,KACxBhyE,GAAW/C,QAAQxgB,EAAQm1F,GAC3BjsJ,KAAKmoJ,oBAAoBtjJ,KAAKiyD,MAShCvvD,IAAK,iCACLhF,MAAO,WAEL,IAAK,GAAIwB,GAAI,EAAGA,EAAI/D,KAAKsoJ,aAAahvC,MAAM11G,OAAQG,IAAK,CACvD/D,KAAK2Q,KAAK2oG,MAAMt5G,KAAKsoJ,aAAahvC,MAAMv1G,IAAI02H,mBACrCz6H,MAAK2Q,KAAK2oG,MAAMt5G,KAAKsoJ,aAAahvC,MAAMv1G,GAC/C,IAAIuoJ,GAAgBtsJ,KAAK2Q,KAAK4oG,YAAY30G,QAAQ5E,KAAKsoJ,aAAahvC,MAAMv1G,KACnD,IAAnBuoJ,GACFtsJ,KAAK2Q,KAAK4oG,YAAY1hF,OAAOy0H,EAAe,GAKhD,IAAK,GAAI15I,GAAK,EAAGA,EAAK5S,KAAKsoJ,aAAalvC,MAAMx1G,OAAQgP,IAAM,OACnD5S,MAAK2Q,KAAKyoG,MAAMp5G,KAAKsoJ,aAAalvC,MAAMxmG,GAC/C,IAAI25I,GAAgBvsJ,KAAK2Q,KAAK0oG,YAAYz0G,QAAQ5E,KAAKsoJ,aAAalvC,MAAMxmG,KACnD,IAAnB25I,GACFvsJ,KAAK2Q,KAAK0oG,YAAYxhF,OAAO00H,EAAe,GAIhDvsJ,KAAKsoJ,cAAiBlvC,SAAWE,aAYnC/xG,IAAK,oBACLhF,MAAO,SAA2BgG,GAChCvI,KAAK06G,iBAAiB4B,cACtBt8G,KAAKghE,UAAYhhE,KAAK2Q,KAAKupG,UAAUrjC,WAAWtuE,EAAMozC,QACtD37C,KAAKghE,UAAU/kB,YAAct7C,EAAKC,UAAWZ,KAAK2Q,KAAK0pG,KAAKp+D,gBAU9D10C,IAAK,wBACLhF,MAAO,SAA+BgG,GACpC,GAAIquE,GAAU52E,KAAKghE,UACf24E,EAAa35I,KAAK06G,iBAAiB0/B,yBAAyBxjE,GAC5DnzD,EAAOzjB,KAAK2Q,KAAKyoG,MAAMp5G,KAAKsoJ,aAAalvC,MAAM,IAC/C51F,EAAKxjB,KAAK2Q,KAAKyoG,MAAMp5G,KAAKsoJ,aAAalvC,MAAM,IAC7CyF,EAAO7+G,KAAK2Q,KAAK2oG,MAAMt5G,KAAK0qJ,kBAChC1qJ,MAAKyoJ,wBAAsB5kJ,EAE3B,IAAI2oJ,GAAa/oI,EAAKu2H,kBAAkBL,GACpC8S,EAAWjpI,EAAGw2H,kBAAkBL,IAEjB,IAAf6S,GACFxsJ,KAAKyoJ,oBAAsBhlI,EAC3Bo7F,EAAKqc,SAASz3G,KAAOA,IACC,IAAbgpI,IACTzsJ,KAAKyoJ,oBAAsBjlI,EAC3Bq7F,EAAKqc,SAAS13G,GAAKA,OAIY3f,KAA7B7D,KAAKyoJ,qBACPzoJ,KAAK06G,iBAAiBm+B,aAAa74I,KAAKyoJ,qBAG1CzoJ,KAAK2Q,KAAK49D,QAAQrhB,KAAK,cAUzB3lD,IAAK,mBACLhF,MAAO,SAA0BgG,GAC/BvI,KAAK2Q,KAAK49D,QAAQrhB,KAAK,iBACvB,IAAI0pB,GAAU52E,KAAK2Q,KAAKupG,UAAUrjC,WAAWtuE,EAAMozC,QAC/C7gC,EAAM9a,KAAKk+C,OAAO2+D,YAAYjmC,EAClC,QAAiC/yE,KAA7B7D,KAAKyoJ,oBACPzoJ,KAAKyoJ,oBAAoB1zH,EAAIja,EAAIia,EACjC/0B,KAAKyoJ,oBAAoB95H,EAAI7T,EAAI6T,MAC5B,CAEL,GAAIy9B,GAAQwqB,EAAQ7hD,EAAI/0B,KAAKghE,UAAUjsC,EACnCs3B,EAAQuqB,EAAQjoD,EAAI3uB,KAAKghE,UAAUryC,CACvC3uB,MAAK2Q,KAAK0pG,KAAKp+D,aAAgBlnB,EAAG/0B,KAAKghE,UAAU/kB,YAAYlnB,EAAIq3B,EAAOz9B,EAAG3uB,KAAKghE,UAAU/kB,YAAYttB,EAAI09B,GAE5GrsD,KAAK2Q,KAAK49D,QAAQrhB,KAAK,cAUzB3lD,IAAK,sBACLhF,MAAO,SAA6BgG,GAClC,GAAIquE,GAAU52E,KAAK2Q,KAAKupG,UAAUrjC,WAAWtuE,EAAMozC,QAC/Cg+F,EAAa35I,KAAK06G,iBAAiB0/B,yBAAyBxjE,GAC5DioC,EAAO7+G,KAAK2Q,KAAK2oG,MAAMt5G,KAAK0qJ,kBAEhC,QAAiC7mJ,KAA7B7D,KAAKyoJ,oBAAT,CAKAzoJ,KAAK06G,iBAAiB4B,aAGtB,KAAK,GAFDowC,GAAqB1sJ,KAAK06G,iBAAiB2hC,4BAA4B1C,GACvEpsG,MAAO1pC,GACFE,EAAI2oJ,EAAmB9oJ,OAAS,EAAGG,GAAK,EAAGA,IAClD,GAAI2oJ,EAAmB3oJ,KAAO/D,KAAKyoJ,oBAAoBpoJ,GAAI,CACzDktC,EAAOvtC,KAAK2Q,KAAKyoG,MAAMszC,EAAmB3oJ,GAC1C,OAIJ,OAAaF,KAAT0pC,OAAmD1pC,KAA7B7D,KAAKyoJ,oBAC7B,IAAuB,IAAnBl7G,EAAKwvE,UACPlW,MAAM7mG,KAAKgO,QAAQmmB,QAAQn0B,KAAKgO,QAAQqT,QAAyB,iBAAKrhB,KAAKgO,QAAQmmB,QAAY,GAAmB,qBAC7G,CACL,GAAI1Q,GAAOzjB,KAAK2Q,KAAKyoG,MAAMp5G,KAAKsoJ,aAAalvC,MAAM,GAC/Cp5G,MAAKyoJ,oBAAoBpoJ,KAAOojB,EAAKpjB,GACvCL,KAAK2qJ,iBAAiBp9G,EAAKltC,GAAIw+G,EAAKr7F,GAAGnjB,IAEvCL,KAAK2qJ,iBAAiB9rC,EAAKp7F,KAAKpjB,GAAIktC,EAAKltC,QAI7Cw+G,GAAKub,iBACLp6H,KAAK2Q,KAAK49D,QAAQrhB,KAAK,iBAEzBltD,MAAK2Q,KAAK49D,QAAQrhB,KAAK,eAezB3lD,IAAK,iBACLhF,MAAO,SAAwBgG,GAE7B,IAAI,GAAI1F,OAAOuC,UAAYpF,KAAK81I,UAAY,IAAK,CAC/C91I,KAAKghE,UAAYhhE,KAAK2Q,KAAKupG,UAAUrjC,WAAWtuE,EAAMozC,QACtD37C,KAAKghE,UAAU/kB,YAAct7C,EAAKC,UAAWZ,KAAK2Q,KAAK0pG,KAAKp+D,YAE5D,IAAI26B,GAAU52E,KAAKghE,UACfzzB,EAAOvtC,KAAK06G,iBAAiBiE,UAAU/nC,EAE3C,QAAa/yE,KAAT0pC,EACF,IAAuB,IAAnBA,EAAKwvE,UACPlW,MAAM7mG,KAAKgO,QAAQmmB,QAAQn0B,KAAKgO,QAAQqT,QAAyB,iBAAKrhB,KAAKgO,QAAQmmB,QAAY,GAAmB,qBAC7G,CAEL,GAAIw4H,GAAa3sJ,KAAK6qJ,kBAAkBt9G,EAAKxY,EAAGwY,EAAK5e,EACrD3uB,MAAK2Q,KAAKyoG,MAAMuzC,EAAWtsJ,IAAMssJ,EACjC3sJ,KAAK2Q,KAAK0oG,YAAYx0G,KAAK8nJ,EAAWtsJ,GAGtC,IAAIusJ,GAAiB5sJ,KAAK2Q,KAAKupG,UAAUE,YACvC/5G,GAAI,iBAAmBM,EAAKuC,aAC5BugB,KAAM8pB,EAAKltC,GACXmjB,GAAImpI,EAAWtsJ,GACf87F,SAAS,EACT09B,QACE3rH,SAAS,EACTjJ,KAAM,aACN80H,UAAW,KAGf/5H,MAAK2Q,KAAK2oG,MAAMszC,EAAevsJ,IAAMusJ,EACrC5sJ,KAAK2Q,KAAK4oG,YAAY10G,KAAK+nJ,EAAevsJ,IAE1CL,KAAKsoJ,aAAalvC,MAAMv0G,KAAK8nJ,EAAWtsJ,IACxCL,KAAKsoJ,aAAahvC,MAAMz0G,KAAK+nJ,EAAevsJ,IAGhDL,KAAK81I,WAAY,GAAIjzI,OAAOuC,cAIhCmC,IAAK,mBACLhF,MAAO,SAA0BgG,GAC/B,GAAIquE,GAAU52E,KAAK2Q,KAAKupG,UAAUrjC,WAAWtuE,EAAMozC,OACnD,QAAmC93C,KAA/B7D,KAAKsoJ,aAAalvC,MAAM,GAAkB,CAC5C,GAAIuzC,GAAa3sJ,KAAK2Q,KAAKyoG,MAAMp5G,KAAKsoJ,aAAalvC,MAAM,GACzDuzC,GAAW53H,EAAI/0B,KAAKk+C,OAAOg3F,qBAAqBt+D,EAAQ7hD,GACxD43H,EAAWh+H,EAAI3uB,KAAKk+C,OAAOi3F,qBAAqBv+D,EAAQjoD,GACxD3uB,KAAK2Q,KAAK49D,QAAQrhB,KAAK,eAClB,CACL,GAAId,GAAQwqB,EAAQ7hD,EAAI/0B,KAAKghE,UAAUjsC,EACnCs3B,EAAQuqB,EAAQjoD,EAAI3uB,KAAKghE,UAAUryC,CACvC3uB,MAAK2Q,KAAK0pG,KAAKp+D,aAAgBlnB,EAAG/0B,KAAKghE,UAAU/kB,YAAYlnB,EAAIq3B,EAAOz9B,EAAG3uB,KAAKghE,UAAU/kB,YAAYttB,EAAI09B,OAW9G9kD,IAAK,iBACLhF,MAAO,SAAwBgG,GAC7B,GAAIquE,GAAU52E,KAAK2Q,KAAKupG,UAAUrjC,WAAWtuE,EAAMozC,QAC/Cg+F,EAAa35I,KAAK06G,iBAAiB0/B,yBAAyBxjE,GAG5Di2E,MAAgBhpJ,OACeA,KAA/B7D,KAAKsoJ,aAAahvC,MAAM,KAC1BuzC,EAAgB7sJ,KAAK2Q,KAAK2oG,MAAMt5G,KAAKsoJ,aAAahvC,MAAM,IAAI4S,OAM9D,KAAK,GAFDwgC,GAAqB1sJ,KAAK06G,iBAAiB2hC,4BAA4B1C,GACvEpsG,MAAO1pC,GACFE,EAAI2oJ,EAAmB9oJ,OAAS,EAAGG,GAAK,EAAGA,IAElD,IAAgE,IAA5D/D,KAAKsoJ,aAAalvC,MAAMx0G,QAAQ8nJ,EAAmB3oJ,IAAY,CACjEwpC,EAAOvtC,KAAK2Q,KAAKyoG,MAAMszC,EAAmB3oJ,GAC1C,OAKJ/D,KAAK2rJ,qCAGQ9nJ,KAAT0pC,KACqB,IAAnBA,EAAKwvE,UACPlW,MAAM7mG,KAAKgO,QAAQmmB,QAAQn0B,KAAKgO,QAAQqT,QAAyB,iBAAKrhB,KAAKgO,QAAQmmB,QAAY,GAAmB,qBAE3EtwB,KAAnC7D,KAAK2Q,KAAKyoG,MAAMyzC,QAA6DhpJ,KAA7B7D,KAAK2Q,KAAKyoG,MAAM7rE,EAAKltC,KACvEL,KAAK8sJ,gBAAgBD,EAAet/G,EAAKltC,KAI/CL,KAAK2Q,KAAK49D,QAAQrhB,KAAK,cAazB3lD,IAAK,kBACLhF,MAAO,SAAyBwqJ,GAC9B,GAAI9xD,GAASj7F,KAETgtJ,GACF3sJ,GAAIM,EAAKuC,aACT6xB,EAAGg4H,EAAUn2E,QAAQ14B,OAAOnpB,EAC5BpG,EAAGo+H,EAAUn2E,QAAQ14B,OAAOvvB,EAC5ByhB,MAAO,MAGT,IAAoC,kBAAzBpwC,MAAKgO,QAAQo0G,QAAwB,CAC9C,GAAoC,IAAhCpiH,KAAKgO,QAAQo0G,QAAQx+G,OASvB,KAAM,IAAIS,OAAM,sEARhBrE,MAAKgO,QAAQo0G,QAAQ4qC,EAAa,SAAU5C,GACpB,OAAlBA,OAA4CvmJ,KAAlBumJ,GAAiD,YAAlBnvD,EAAOutD,SAElEvtD,EAAOtqF,KAAK6jB,KAAK4kF,MAAMhmE,aAAa3iB,IAAI25H,GACxCnvD,EAAO+tD,gCAQbhpJ,MAAK2Q,KAAK6jB,KAAK4kF,MAAMhmE,aAAa3iB,IAAIu8H,GACtChtJ,KAAKgpJ,4BAWTzhJ,IAAK,kBACLhF,MAAO,SAAyB0qJ,EAAcC,GAC5C,GAAI9xD,GAASp7F,KAETgtJ,GAAgBvpI,KAAMwpI,EAAczpI,GAAI0pI,EAC5C,IAAoC,kBAAzBltJ,MAAKgO,QAAQu0G,QAAwB,CAC9C,GAAoC,IAAhCviH,KAAKgO,QAAQu0G,QAAQ3+G,OAUvB,KAAM,IAAIS,OAAM,0EAThBrE,MAAKgO,QAAQu0G,QAAQyqC,EAAa,SAAU5C,GACpB,OAAlBA,OAA4CvmJ,KAAlBumJ,GAAiD,YAAlBhvD,EAAOotD,SAElEptD,EAAOzqF,KAAK6jB,KAAK8kF,MAAMlmE,aAAa3iB,IAAI25H,GACxChvD,EAAOsf,iBAAiB4B,cACxBlhB,EAAO4tD,gCAObhpJ,MAAK2Q,KAAK6jB,KAAK8kF,MAAMlmE,aAAa3iB,IAAIu8H,GACtChtJ,KAAK06G,iBAAiB4B,cACtBt8G,KAAKgpJ,4BAWTzhJ,IAAK,mBACLhF,MAAO,SAA0B0qJ,EAAcC,GAC7C,GAAIpG,GAAS9mJ,KAETgtJ,GAAgB3sJ,GAAIL,KAAK0qJ,kBAAmBjnI,KAAMwpI,EAAczpI,GAAI0pI,EAAc98G,MAAOpwC,KAAK2Q,KAAK6jB,KAAK8kF,MAAMh9E,MAAMt8B,KAAK0qJ,mBAAmBt6G,OAC5I+8G,EAAUntJ,KAAKgO,QAAQ24G,QAI3B,IAH2F,gBAAnE,KAAZwmC,EAA0B,aAAc,EAAI3rJ,EAAkB,SAAG2rJ,MAC3EA,EAAUA,EAAQ1C,iBAEG,kBAAZ0C,GAAwB,CACjC,GAAuB,IAAnBA,EAAQvpJ,OAcV,KAAM,IAAIS,OAAM,wEAbhB8oJ,GAAQH,EAAa,SAAU5C,GACP,OAAlBA,OAA4CvmJ,KAAlBumJ,GAAiD,aAAlBtD,EAAO0B,QAElE1B,EAAOn2I,KAAK2oG,MAAM0zC,EAAY3sJ,IAAI+5H,iBAClC0sB,EAAOn2I,KAAK49D,QAAQrhB,KAAK,WACzB45F,EAAOkC,2BAEPlC,EAAOn2I,KAAK6jB,KAAK8kF,MAAMlmE,aAAalB,OAAOk4G,GAC3CtD,EAAOpsC,iBAAiB4B,cACxBwqC,EAAOkC,gCAObhpJ,MAAK2Q,KAAK6jB,KAAK8kF,MAAMlmE,aAAalB,OAAO86G,GACzChtJ,KAAK06G,iBAAiB4B,cACtBt8G,KAAKgpJ,6BAIJztC,IAGT37G,GAAiB,QAAI27G,GAIjB,SAAU17G,EAAQD,GAItB6E,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAST,IAAI+kB,GAAS,SACTuwE,EAAO,UACPtzE,EAAS,SAET3iB,EAAS,SAIT2uE,GACFqM,WACE1uE,SAAW4pF,QAASD,GACpB/wF,QAAUgxF,QAASD,EAAMvwE,OAAQA,EAAQjgB,MARjC,QAQ+C0wF,SAAY,YACnE7hD,WAAa+Y,IAPP,OAQN0pC,YAAcb,QAASD,GACvBrB,UAAY50F,OAAQA,EAAQk2F,QAASD,EAAMvwE,OAAQA,EAAQjgB,MAXnD,QAWiE0wF,SAAY,aAEvFuhB,OACE0L,QACExhG,IAAMtV,SAAW4pF,QAASD,GAAQ2hC,aAAej1G,OAAQA,GAAUtf,MAAQqiB,QAAS,QAAS,WAAakvE,UAAY50F,OAAQA,EAAQk2F,QAASD,IAC/IlpF,QAAUT,SAAW4pF,QAASD,GAAQ2hC,aAAej1G,OAAQA,GAAUtf,MAAQqiB,QAAS,QAAS,WAAakvE,UAAY50F,OAAQA,EAAQk2F,QAASD,IACnJp0E,MAAQvV,SAAW4pF,QAASD,GAAQ2hC,aAAej1G,OAAQA,GAAUtf,MAAQqiB,QAAS,QAAS,WAAakvE,UAAY50F,OAAQA,EAAQk2F,QAASD,IACjJrB,UAAYlvE,QAAS,OAAQ,KAAM,UAAW1lB,OAAQA,IAExD63H,oBAAsB3hC,QAASD,GAC/Bm2B,QACE59E,OAAS0nD,QAASD,EAAME,SAAY,YACpC8mB,MAAQ/mB,QAASD,EAAME,SAAY,YACnCvB,UAAY50F,OAAQA,EAAQk2F,QAASD,IAEvC3tF,OACEA,OAASod,OAAQA,GACjB1b,WAAa0b,OAAQA,GACrBzb,OAASyb,OAAQA,GACjBqxC,SAAWrxC,QAAS,OAAQ,KAAM,QAASwwE,QAASD,GACpD1tF,SAAWoa,OAAQA,GACnBiyE,UAAY50F,OAAQA,EAAQ0lB,OAAQA,IAEtCgwG,QAAUx/B,QAASD,EAAMxwF,MAlCjB,SAmCRo+C,MACEv7C,OAASod,OAAQA,GACjB6oB,MAAQ5rB,OAAQA,GAChBklG,MAAQniG,OAAQA,GAChB5b,YAAc4b,OAAQA,GACtB4yB,aAAe31B,OAAQA,GACvBmlG,aAAepiG,OAAQA,GACvBi4D,OAASj4D,QAAS,aAAc,MAAO,SAAU,WACjDqiG,SAAWplG,OAAQA,GACnBqlG,OAAS9xB,QAASD,EAAMvwE,OAAQA,GAChCuiG,MACE3/G,OAASod,OAAQA,GACjB6oB,MAAQ5rB,OAAQA,GAChBklG,MAAQniG,OAAQA,GAChBwiG,KAAOxiG,OAAQA,GACfqiG,SAAWplG,OAAQA,GACnBiyE,UAAY50F,OAAQA,EAAQ0lB,OAAQA,IAEtCyiG,UACE7/G,OAASod,OAAQA,GACjB6oB,MAAQ5rB,OAAQA,GAChBklG,MAAQniG,OAAQA,GAChBwiG,KAAOxiG,OAAQA,GACfqiG,SAAWplG,OAAQA,GACnBiyE,UAAY50F,OAAQA,EAAQ0lB,OAAQA,IAEtC0iG,MACE9/G,OAASod,OAAQA,GACjB6oB,MAAQ5rB,OAAQA,GAChBklG,MAAQniG,OAAQA,GAChBwiG,KAAOxiG,OAAQA,GACfqiG,SAAWplG,OAAQA,GACnBiyE,UAAY50F,OAAQA,EAAQ0lB,OAAQA,IAEtC2iG,MACE//G,OAASod,OAAQA,GACjB6oB,MAAQ5rB,OAAQA,GAChBklG,MAAQniG,OAAQA,GAChBwiG,KAAOxiG,OAAQA,GACfqiG,SAAWplG,OAAQA,GACnBiyE,UAAY50F,OAAQA,EAAQ0lB,OAAQA,IAEtCkvE,UAAY50F,OAAQA,EAAQ0lB,OAAQA,IAEtCuxD,QAAUif,QAASD,GACnB6hC,YAAc3hC,SAAY,WAAYxzE,OAAQA,GAC9C6rB,OAAS9oB,OAAQA,EAAQzjB,UAAa,aACtCqmH,oBAAsBpyB,QAASD,GAC/Bj0F,QAAU2gB,OAAQA,EAAQ1gB,UAAa,aACvCs4F,SAAWrE,QAASD,GACpBwyB,SACEjoH,KAAOmiB,OAAQA,GACfliB,KAAOkiB,OAAQA,GACf6rB,OACEliC,SAAW4pF,QAASD,GACpBz1F,KAAOmiB,OAAQA,GACfliB,KAAOkiB,OAAQA,GACf+lG,YAAc/lG,OAAQA,GACtBgmG,eAAiBhmG,OAAQA,GACzBiyE,UAAY50F,OAAQA,EAAQk2F,QAASD,IAEvC2yB,uBAAyBzyB,SAAY,YACrCvB,UAAY50F,OAAQA,IAEtB+3H,gBAAkB5hC,SAAY,WAAYxzE,OAAQA,GAClDq1G,mBAAqBr1G,OAAQA,GAC7BkmG,QACEv8G,SAAW4pF,QAASD,GACpB3tF,OAASod,OAAQA,GACjB6oB,MAAQ5rB,OAAQA,GAChBwQ,GAAKxQ,OAAQA,GACboK,GAAKpK,OAAQA,GACbiyE,UAAY50F,OAAQA,EAAQk2F,QAASD,IAEvCgiC,QACE3rH,SAAW4pF,QAASD,GACpB5yF,MAAQqiB,QAAS,UAAW,aAAc,WAAY,gBAAiB,gBAAiB,aAAc,WAAY,WAAY,YAAa,gBAC3IyyG,WAAax1G,OAAQA,GACrBu1G,gBAAkBxyG,QAAS,aAAc,WAAY,QAASwwE,QAASD,GACvErB,UAAY50F,OAAQA,EAAQk2F,QAASD,IAEvCza,OAAS91D,OAAQA,EAAQzjB,UAAa,aACtCuM,OAASmU,OAAQA,GACjBsrG,iBACEu9B,SAAW7oI,OAAQA,GACnBiyE,UAAY50F,OAAQA,EAAQk2F,QAASD,EAAMtzE,OAAQA,IAErDhiB,OAASgiB,OAAQA,EAAQ1gB,UAAa,aACtC2yF,UAAY50F,OAAQA,IAEtB2rE,QACEw7C,kBAAoBjxB,QAASD,GAC7BvB,QAAS,4CACTE,UAAY50F,OAAQA,IAEtBo6G,aACEm7B,WAAar/C,QAASD,GACtBu/C,UAAYt/C,QAASD,GACrB06C,iBAAmBz6C,QAASD,GAC5B26C,iBAAmB16C,QAASD,GAC5BhsF,OAASisF,QAASD,GAClBw/C,UACEnpI,SAAW4pF,QAASD,GACpBy/C,OAASviH,GAAKxQ,OAAQA,GAAUoK,GAAKpK,OAAQA,GAAUwyD,MAAQxyD,OAAQA,GAAUiyE,UAAY50F,OAAQA,IACrG21I,cAAgBz/C,QAASD,GACzBrB,UAAY50F,OAAQA,EAAQk2F,QAASD,IAEvC9X,aAAe+X,QAASD,GACxB2/C,mBAAqB1/C,QAASD,GAC9B/X,YAAcgY,QAASD,GACvB0jD,sBAAwBzjD,QAASD,GACjC2jD,qBAAuB1jD,QAASD,GAChC4/C,cAAgBlzH,OAAQA,GACxBmzH,UAAY5/C,QAASD,GACrBrB,UAAY50F,OAAQA,IAEtBm6G,QACE4sB,YAAc9kI,UAAa,YAAa0gB,OAAQA,GAChD65H,gBAAkBtmD,QAASD,GAC3BwmD,cACEnwI,SAAW4pF,QAASD,GACpBymD,iBAAmB/5H,OAAQA,GAC3Bg6H,aAAeh6H,OAAQA,GACvBi6H,aAAej6H,OAAQA,GACvBk6H,eAAiB3mD,QAASD,GAC1B6mD,kBAAoB5mD,QAASD,GAC7B8mD,sBAAwB7mD,QAASD,GACjCj4D,WAAatY,QAAS,KAAM,KAAM,KAAM,OACxCs3H,YAAct3H,QAAS,UAAW,aAClCkvE,UAAY50F,OAAQA,EAAQk2F,QAASD,IAEvCrB,UAAY50F,OAAQA,IAEtB05G,cACEptG,SAAW4pF,QAASD,GACpB6wD,iBAAmB5wD,QAASD,GAC5BuqB,SAAWtqB,QAASD,EAAME,SAAY,YACtCwqB,SAAWzqB,QAASD,EAAME,SAAY,YACtC2lB,UAAY3lB,SAAY,YACxB4uB,UACE8jC,iBAAmB1yD,SAAY,YAC/BvB,UAAY50F,OAAQA,EAAQk2F,QAASD,EAAME,SAAY,aAEzD4wD,YAAc7wD,QAASD,EAAME,SAAY,YACzC6wD,YAAc9wD,QAASD,EAAME,SAAY,YACzC8wD,iBAAkB,4CAClBryD,UAAY50F,OAAQA,EAAQk2F,QAASD,IAEvCuhB,OACEpjD,aAAezxC,OAAQA,GACvBglG,qBAAuBhlG,OAAQA,EAAQ1gB,UAAa,aACpD2lH,aAAeliG,OAAQA,EAAQzjB,UAAa,aAC5CmqH,QACE59E,OAAS0nD,QAASD,EAAME,SAAY,YACpCxqD,MAAQuqD,QAASD,EAAME,SAAY,YACnCvB,UAAY50F,OAAQA,EAAQk2F,QAASD,IAEvC3tF,OACEyB,QAAU2b,OAAQA,GAClB5b,YAAc4b,OAAQA,GACtB1b,WACED,QAAU2b,OAAQA,GAClB5b,YAAc4b,OAAQA,GACtBkvE,UAAY50F,OAAQA,EAAQ0lB,OAAQA,IAEtCzb,OACEF,QAAU2b,OAAQA,GAClB5b,YAAc4b,OAAQA,GACtBkvE,UAAY50F,OAAQA,EAAQ0lB,OAAQA,IAEtCkvE,UAAY50F,OAAQA,EAAQ0lB,OAAQA,IAEtC6+F,OACEpxF,GAAK+iE,QAASD,GACdlpE,GAAKmpE,QAASD,GACdrB,UAAY50F,OAAQA,EAAQk2F,QAASD,IAEvCpyC,MACE85B,OAASj4D,OAAQA,GACjBpd,OAASod,OAAQA,GACjB6oB,MAAQ5rB,OAAQA,GAChBklG,MAAQniG,OAAQA,GAChB5b,YAAc4b,OAAQA,GACtB4yB,aAAe31B,OAAQA,GACvBmlG,aAAepiG,OAAQA,GACvBqiG,SAAWplG,OAAQA,GACnBqlG,OAAS9xB,QAASD,EAAMvwE,OAAQA,GAChCuiG,MACE3/G,OAASod,OAAQA,GACjB6oB,MAAQ5rB,OAAQA,GAChBklG,MAAQniG,OAAQA,GAChBwiG,KAAOxiG,OAAQA,GACfqiG,SAAWplG,OAAQA,GACnBiyE,UAAY50F,OAAQA,EAAQ0lB,OAAQA,IAEtCyiG,UACE7/G,OAASod,OAAQA,GACjB6oB,MAAQ5rB,OAAQA,GAChBklG,MAAQniG,OAAQA,GAChBwiG,KAAOxiG,OAAQA,GACfqiG,SAAWplG,OAAQA,GACnBiyE,UAAY50F,OAAQA,EAAQ0lB,OAAQA,IAEtC0iG,MACE9/G,OAASod,OAAQA,GACjB6oB,MAAQ5rB,OAAQA,GAChBklG,MAAQniG,OAAQA,GAChBwiG,KAAOxiG,OAAQA,GACfqiG,SAAWplG,OAAQA,GACnBiyE,UAAY50F,OAAQA,EAAQ0lB,OAAQA,IAEtC2iG,MACE//G,OAASod,OAAQA,GACjB6oB,MAAQ5rB,OAAQA,GAChBklG,MAAQniG,OAAQA,GAChBwiG,KAAOxiG,OAAQA,GACfqiG,SAAWplG,OAAQA,GACnBiyE,UAAY50F,OAAQA,EAAQ0lB,OAAQA,IAEtCkvE,UAAY50F,OAAQA,EAAQ0lB,OAAQA,IAEtC6pD,OAAS7pD,OAAQA,EAAQ/C,OAAQA,EAAQ1gB,UAAa,aACtDssH,kBACEk9B,SAAW9oI,OAAQA,GACnB2rG,QAAU5oG,OAAQA,GAClBkvE,UAAY50F,OAAQA,EAAQk2F,QAASD,EAAMtzE,OAAQA,IAErDs0D,QAAUif,QAASD,GACnBid,MACE2U,MAAQniG,OAAQA,GAChBgN,MAAQhN,OAAQA,GAChB6oB,MAAQ5rB,OAAQA,GAChBra,OAASod,OAAQA,GACjBkvE,UAAY50F,OAAQA,IAEtBvB,IAAMinB,OAAQA,EAAQ/C,OAAQA,GAC9BmgG,OACEv/B,UAAY79D,OAAQA,EAAQzjB,UAAa,aACzCgqH,YAAcvmG,OAAQA,EAAQzjB,UAAa,aAC3C2yF,UAAY50F,OAAQA,EAAQ0lB,OAAQA,IAEtC8oB,OAAS9oB,OAAQA,EAAQzjB,UAAa,aACtCqmH,oBAAsBpyB,QAASD,GAC/BsyB,OAAS5lG,OAAQA,EAAQ1gB,UAAa,aACtC0hD,QACEj/C,KAAOie,OAAQA,GACfne,OAASme,OAAQA,GACjBk6B,QAAUl6B,OAAQA,GAClBre,MAAQqe,OAAQA,GAChBiyE,UAAY50F,OAAQA,EAAQ2iB,OAAQA,IAEtC6lG,MAAQ7lG,OAAQA,GAChB43E,SAAWrE,QAASD,GACpBwyB,SACEjoH,KAAOmiB,OAAQA,GACfliB,KAAOkiB,OAAQA,GACf6rB,OACEliC,SAAW4pF,QAASD,GACpBz1F,KAAOmiB,OAAQA,GACfliB,KAAOkiB,OAAQA,GACf+lG,YAAc/lG,OAAQA,GACtBgmG,eAAiBhmG,OAAQA,GACzBiyE,UAAY50F,OAAQA,EAAQk2F,QAASD,IAEvC2yB,uBAAyBzyB,SAAY,YACrCvB,UAAY50F,OAAQA,IAEtB6oH,QACEv8G,SAAW4pF,QAASD,GACpB3tF,OAASod,OAAQA,GACjB6oB,MAAQ5rB,OAAQA,GAChBwQ,GAAKxQ,OAAQA,GACboK,GAAKpK,OAAQA,GACbiyE,UAAY50F,OAAQA,EAAQk2F,QAASD,IAEvC8sB,OAASr9F,QAAS,UAAW,SAAU,WAAY,MAAO,OAAQ,QAAS,gBAAiB,UAAW,MAAO,OAAQ,WAAY,eAAgB,SAAU,SAC5JojG,iBACEC,cAAgB7yB,QAASD,EAAMxwF,MAxTzB,SAyTNmyC,cAAgBj1B,OAAQA,GACxBgmF,eAAiBzS,QAASD,GAC1B+yB,cAAgB9yB,QAASD,GACzBgzB,oBAAsB/yB,QAASD,GAC/BrB,UAAY50F,OAAQA,IAEtBuuC,MAAQ5rB,OAAQA,GAChB64D,OAAS91D,OAAQA,EAAQzjB,UAAa,aACtCtB,OAASgiB,OAAQA,EAAQ1gB,UAAa,aACtCgsH,iBACEw9B,SAAW9oI,OAAQA,GACnB6oI,SAAW7oI,OAAQA,GACnBiyE,UAAY50F,OAAQA,EAAQk2F,QAASD,EAAMtzE,OAAQA,IAErDwQ,GAAKxQ,OAAQA,GACboK,GAAKpK,OAAQA,GACbiyE,UAAY50F,OAAQA,IAEtBu6F,SACEjuF,SAAW4pF,QAASD,GACpBwtC,WACEE,uBAAyBhhH,OAAQA,GACjCihH,gBAAkBjhH,OAAQA,GAC1BkhH,cAAgBlhH,OAAQA,GACxBmhH,gBAAkBnhH,OAAQA,GAC1BohH,SAAWphH,OAAQA,GACnBqhH,cAAgBrhH,OAAQA,GACxBiyE,UAAY50F,OAAQA,IAEtBikI,kBACEN,uBAAyBhhH,OAAQA,GACjCihH,gBAAkBjhH,OAAQA,GAC1BkhH,cAAgBlhH,OAAQA,GACxBmhH,gBAAkBnhH,OAAQA,GAC1BohH,SAAWphH,OAAQA,GACnBqhH,cAAgBrhH,OAAQA,GACxBiyE,UAAY50F,OAAQA,IAEtBkkI,WACEN,gBAAkBjhH,OAAQA,GAC1BkhH,cAAgBlhH,OAAQA,GACxBmhH,gBAAkBnhH,OAAQA,GAC1BwhH,cAAgBxhH,OAAQA,GACxBohH,SAAWphH,OAAQA,GACnBiyE,UAAY50F,OAAQA,IAEtBokI,uBACER,gBAAkBjhH,OAAQA,GAC1BkhH,cAAgBlhH,OAAQA,GACxBmhH,gBAAkBnhH,OAAQA,GAC1BwhH,cAAgBxhH,OAAQA,GACxBohH,SAAWphH,OAAQA,GACnBiyE,UAAY50F,OAAQA,IAEtBqkI,aAAe1hH,OAAQA,GACvB2hH,aAAe3hH,OAAQA,GACvB63E,QAAU90E,QAAS,YAAa,YAAa,wBAAyB,qBACtE6+G,eACEj4H,SAAW4pF,QAASD,GACpB0wB,YAAchkG,OAAQA,GACtB6hH,gBAAkB7hH,OAAQA,GAC1B8hH,kBAAoBvuC,QAASD,GAC7B3nB,KAAO4nB,QAASD,GAChBrB,UAAY50F,OAAQA,EAAQk2F,QAASD,IAEvCyuC,UAAY/hH,OAAQA,GACpBsgH,kBAAoB/sC,QAASD,GAC7BrB,UAAY50F,OAAQA,EAAQk2F,QAASD,IAIvClqB,YAAcmqB,QAASD,GACvBtb,YAAcub,QAASD,GACvBx2E,QAAUiG,OAAQA,GAClB6M,SACEmiE,SAAW0B,IAjYL,OAkYNxB,UAAY50F,OAAQA,IAEtByO,QAAUiX,OAAQA,GAClBlX,OAASkX,OAAQA,GACjBkvE,UAAY50F,OAAQA,GAGtB2uE,GAAWhD,OAAO+oB,QAAU/lB,EAAW6oC,MACvC7oC,EAAW+qC,aAAautC,iBAAmBt4E,EAAW6oC,KAEtD,IAAI5oC,IACF4oC,OACEpjD,aAAc,EAAG,EAAG,GAAI,GACxBuzD,qBAAsB,EAAG,EAAG,GAAI,GAChCr/G,OACEyB,QAAS,QAAS,WAClBD,YAAa,QAAS,WACtBE,WACED,QAAS,QAAS,WAClBD,YAAa,QAAS,YAExBG,OACEF,QAAS,QAAS,WAClBD,YAAa,QAAS,aAG1By6G,OACEpxF,GAAG,EACHpG,GAAG,GAEL82B,MACEv7C,OAAQ,QAAS,WACjBimC,MAAO,GAAI,EAAG,IAAK,GACnBs5E,MAAO,QAAS,UAAW,UAC3B/9G,YAAa,QAAS,QACtBwuC,aAAc,EAAG,EAAG,GAAI,GACxBwvE,aAAc,QAAS,YAGzB7wC,QAAQ,EACRqxC,oBAAoB,EAQpB/tB,SAAS,EACTkuB,SACEjoH,KAAM,GAAI,EAAG,IAAK,GAClBC,KAAM,GAAI,EAAG,IAAK,GAClB+tC,OACEliC,SAAS,EACT9L,KAAM,GAAI,EAAG,IAAK,GAClBC,KAAM,GAAI,EAAG,IAAK,GAClBioH,YAAa,GAAI,EAAG,IAAK,GACzBC,eAAgB,EAAG,EAAG,GAAI,KAG9BE,QACEv8G,SAAS,EACThE,MAAO,kBACPimC,MAAO,GAAI,EAAG,GAAI,GAClBpb,GAAI,GAAI,GAAI,GAAI,GAChBpG,GAAI,GAAI,GAAI,GAAI,IAElBg2F,OAAQ,UAAW,MAAO,SAAU,WAAY,UAAW,MAAO,SAAU,OAAQ,OAAQ,WAAY,gBACxG+F,iBACEC,cAAc,EACdnxE,cAAe,EAAG,EAAG,GAAI,GACzB+wD,eAAe,EACfqgB,cAAc,GAEhBz6E,MAAO,GAAI,EAAG,IAAK,IAErBmpE,OACE0L,QACExhG,IAAMtV,SAAS,EAAOsrH,aAAc,EAAG,EAAG,EAAG,KAAOv0H,KAAM,SAC1D0J,QAAUT,SAAS,EAAOsrH,aAAc,EAAG,EAAG,EAAG,KAAOv0H,KAAM,SAC9Dwe,MAAQvV,SAAS,EAAOsrH,aAAc,EAAG,EAAG,EAAG,KAAOv0H,KAAM,UAE9Dw0H,oBAAoB,EACpBvvH,OACEA,OAAQ,QAAS,WACjB0B,WAAY,QAAS,WACrBC,OAAQ,QAAS,WACjB8sD,SAAU,OAAQ,KAAM,QAAQ,GAAM,GACtCxuD,SAAU,EAAG,EAAG,EAAG,MAErBmtH,QAAQ,EACR7xE,MACEv7C,OAAQ,QAAS,WACjBimC,MAAO,GAAI,EAAG,IAAK,GACnBs5E,MAAO,QAAS,UAAW,UAC3B/9G,YAAa,QAAS,QACtBwuC,aAAc,EAAG,EAAG,GAAI,GACxBwvE,aAAc,QAAS,WACvBnqC,OAAQ,aAAc,MAAO,SAAU,WAEzC1G,QAAQ,EACR6gD,YAAa,IAAK,EAAG,EAAG,IACxBxP,oBAAoB,EACpB/tB,SAAS,EACTkuB,SACEjoH,KAAM,EAAG,EAAG,IAAK,GACjBC,KAAM,GAAI,EAAG,IAAK,GAClB+tC,OACEliC,SAAS,EACT9L,KAAM,GAAI,EAAG,IAAK,GAClBC,KAAM,GAAI,EAAG,IAAK,GAClBioH,YAAa,GAAI,EAAG,IAAK,GACzBC,eAAgB,EAAG,EAAG,GAAI,KAG9BoP,gBAAiB,IAAK,EAAG,EAAG,IAC5BC,mBAAoB,GAAI,EAAG,IAAK,GAChCnP,QACEv8G,SAAS,EACThE,MAAO,kBACPimC,MAAO,GAAI,EAAG,GAAI,GAClBpb,GAAI,GAAI,GAAI,GAAI,GAChBpG,GAAI,GAAI,GAAI,GAAI,IAElBkrG,QACE3rH,SAAS,EACTjJ,MAAO,UAAW,aAAc,WAAY,gBAAiB,gBAAiB,aAAc,WAAY,WAAY,YAAa,eACjI60H,gBAAiB,aAAc,WAAY,QAC3CC,WAAY,GAAK,EAAG,EAAG,MAEzB3pH,OAAQ,EAAG,EAAG,GAAI,IAEpB2rG,QAGEsiC,cACEnwI,SAAS,EACTowI,iBAAkB,IAAK,GAAI,IAAK,GAChCC,aAAc,IAAK,GAAI,IAAK,GAC5BC,aAAc,IAAK,GAAI,IAAK,GAC5BC,eAAe,EACfC,kBAAkB,EAClBC,sBAAsB,EACtB/+G,WAAY,KAAM,KAAM,KAAM,MAC9Bg/G,YAAa,UAAW,cAG5B5iC,aACEm7B,WAAW,EACXC,UAAU,EACV7E,iBAAiB,EACjBC,iBAAiB,EACjB3mI,OAAO,EACPwrI,UACEnpI,SAAS,EACTopI,OAASviH,GAAI,GAAI,EAAG,GAAI,GAAIpG,GAAI,GAAI,EAAG,GAAI,GAAIooD,MAAO,IAAM,EAAG,GAAK,OACpEwgE,cAAc,GAEhBx3D,aAAa,EACby3D,mBAAmB,EACnB13D,YAAY,EACZy7D,sBAAsB,EACtBC,qBAAqB,EACrB/D,cAAe,IAAK,EAAG,IAAM,IAC7BC,UAAU,GAEZp8B,cACEptG,SAAS,EACTw6I,iBAAiB,GAEnBvsD,SACEjuF,SAAS,EACTm3H,WAEEE,wBAAyB,KAAO,IAAO,EAAG,IAC1CC,gBAAiB,GAAK,EAAG,GAAI,KAC7BC,cAAe,GAAI,EAAG,IAAK,GAC3BC,gBAAiB,IAAM,EAAG,IAAK,MAC/BC,SAAU,IAAM,EAAG,EAAG,KACtBC,cAAe,EAAG,EAAG,EAAG,MAE1BC,kBAEEN,wBAAyB,IAAK,IAAK,EAAG,GACtCC,gBAAiB,IAAM,EAAG,EAAG,MAC7BC,cAAe,GAAI,EAAG,IAAK,GAC3BC,gBAAiB,IAAM,EAAG,IAAK,MAC/BC,SAAU,GAAK,EAAG,EAAG,KACrBC,cAAe,EAAG,EAAG,EAAG,MAE1BE,WACEN,gBAAiB,GAAK,EAAG,GAAI,KAC7BC,cAAe,IAAK,EAAG,IAAK,GAC5BC,gBAAiB,IAAM,EAAG,IAAK,MAC/BK,cAAe,IAAK,EAAG,IAAK,GAC5BJ,SAAU,IAAM,EAAG,EAAG,MAExBK,uBACER,gBAAiB,GAAK,EAAG,GAAI,KAC7BC,cAAe,IAAK,EAAG,IAAK,GAC5BC,gBAAiB,IAAM,EAAG,IAAK,MAC/BK,cAAe,IAAK,EAAG,IAAK,GAC5BJ,SAAU,IAAM,EAAG,EAAG,MAExBM,aAAc,GAAI,EAAG,IAAK,GAC1BC,aAAc,GAAK,IAAM,GAAK,KAC9B9pC,QAAS,YAAa,mBAAoB,YAAa,yBACvDkqC,UAAW,GAAK,IAAM,EAAG,MAI7B1mI,GAAQ2wE,WAAaA,EACrB3wE,EAAQ4wE,iBAAmBA,GAIvB,SAAU3wE,EAAQD,EAASM,GAwB/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GApBzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAI0sH,GAAkB/uH,EAAoB,KAEtCgvH,EAAkBruH,EAAuBouH,GAEzCp9B,EAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAEvCu7D,EAAiBptJ,EAAoB,KAErCqtJ,EAAkB1sJ,EAAuBysJ,GAYzC1xC,EAAc,WAChB,QAASA,GAAYjrG,EAAM06H,EAAYmiB,IACrC,EAAI17D,EAA0B,SAAG9xF,KAAM47G,GAEvC57G,KAAK2Q,KAAOA,EACZ3Q,KAAKylI,aAAe4F,EACpBrrI,KAAK0lI,eAAiB8nB,EACtBxtJ,KAAKytJ,eAAiB,GAAIF,GAAyB,QAiUrD,OAxTA,EAAIv7D,EAAuB,SAAG4pB,IAC5Br0G,IAAK,aACLhF,MAAO,SAAoByL,GACrBA,IACEA,EAAQy3H,eACVzlI,KAAKylI,aAAez3H,EAAQy3H,cAE1Bz3H,EAAQ03H,iBACV1lI,KAAK0lI,eAAiB13H,EAAQ03H,oBAYpCn+H,IAAK,QACLhF,MAAO,SAAeouI,EAAY+c,GAChC,GAAIC,GAAiBhqJ,UAAUC,OAAS,OAAsBC,KAAjBF,UAAU,IAAmBA,UAAU,GAGhFiqJ,EAAW5tJ,KAAKytJ,eAAeI,aAAa7tJ,KAAK2Q,KAAMggI,EAAY+c,EAGvE1tJ,MAAK8tJ,gBAAgBF,GAGrB5tJ,KAAK+tJ,gBAAgBH,GAGrB5tJ,KAAKguJ,iBAgBL,KAbA,GAEIzlC,GAAa,EACb0lC,EAAgBxrJ,KAAKJ,IAAI,IAAMI,KAAKL,IAAI,GAAKpC,KAAK2Q,KAAK0oG,YAAYz1G,OAAQ,MAG3EsqJ,EAAY,IACZC,EAAe,EACfC,EAAQ,EACRC,EAAQ,EACRC,EAAU,EACVC,EAAgB,EAEbL,EAbS,KAagB3lC,EAAa0lC,GAAe,CAC1D1lC,GAAc,CAEd,IAAIimC,GAAyBxuJ,KAAKyuJ,sBAAsBd,GAEpDe,GAAyB,EAAIx/B,EAAyB,SAAGs/B,EAAwB,EASrF,KAPAL,EAAeO,EAAuB,GACtCR,EAAYQ,EAAuB,GACnCN,EAAQM,EAAuB,GAC/BL,EAAQK,EAAuB,GAE/BJ,EAAUJ,EACVK,EAAgB,EACTD,EA1BY,GA0BgBC,EAvBZ,GAuBgD,CACrEA,GAAiB,EACjBvuJ,KAAK2uJ,UAAUR,EAAcC,EAAOC,EAEpC,IAAIO,GAAc5uJ,KAAK6uJ,WAAWV,GAE9BW,GAAc,EAAI5/B,EAAyB,SAAG0/B,EAAa,EAE/DN,GAAUQ,EAAY,GACtBV,EAAQU,EAAY,GACpBT,EAAQS,EAAY,QAY1BvnJ,IAAK,wBACLhF,MAAO,SAA+BorJ,GAQpC,IAAK,GAPDhd,GAAa3wI,KAAK2Q,KAAK0oG,YACvBD,EAAQp5G,KAAK2Q,KAAKyoG,MAClB80C,EAAY,EACZa,EAAkBpe,EAAW,GAC7Bqe,EAAY,EACZC,EAAY,EAEPC,EAAU,EAAGA,EAAUve,EAAW/sI,OAAQsrJ,IAAW,CAC5D,GAAI1uJ,GAAImwI,EAAWue,EAEnB,KAAoC,IAAhC91C,EAAM54G,GAAG4sH,qBAAuD,IAAvBhU,EAAM54G,GAAGu8G,YAAyC,IAAnB4wC,IAAwD,IAA7Bv0C,EAAM54G,GAAGwN,QAAQm4G,MAAMpxF,IAA2C,IAA7BqkF,EAAM54G,GAAGwN,QAAQm4G,MAAMx3F,EAAY,CAC7K,GAAIwgI,GAAcnvJ,KAAK6uJ,WAAWruJ,GAC9B4uJ,GAAc,EAAIlgC,EAAyB,SAAGigC,EAAa,GAC3Db,EAAUc,EAAY,GACtBhB,EAAQgB,EAAY,GACpBf,EAAQe,EAAY,EAEpBlB,GAAYI,IACdJ,EAAYI,EACZS,EAAkBvuJ,EAClBwuJ,EAAYZ,EACZa,EAAYZ,IAKlB,OAAQU,EAAiBb,EAAWc,EAAWC,MAWjD1nJ,IAAK,aACLhF,MAAO,SAAoB/B,GACzB,GAAI6uJ,IAAY,EAAIngC,EAAyB,SAAGlvH,KAAKsvJ,OAAO9uJ,GAAI,GAC5D4tJ,EAAQiB,EAAU,GAClBhB,EAAQgB,EAAU,EAGtB,QADc5sJ,KAAKusD,KAAKvsD,KAAKgnB,IAAI2kI,EAAO,GAAK3rJ,KAAKgnB,IAAI4kI,EAAO,IAC5CD,EAAOC,MAa1B9mJ,IAAK,YACLhF,MAAO,SAAmB/B,EAAG4tJ,EAAOC,GAYlC,IAAK,GAXD1d,GAAa3wI,KAAK2Q,KAAK0oG,YACvBD,EAAQp5G,KAAK2Q,KAAKyoG,MAClBm2C,EAAU,EACVC,EAAW,EACXC,EAAU,EAEVC,EAAMt2C,EAAM54G,GAAGu0B,EACf46H,EAAMv2C,EAAM54G,GAAGmuB,EACfihI,EAAK5vJ,KAAK6vJ,SAASrvJ,GACnBsvJ,EAAK9vJ,KAAK+vJ,SAASvvJ,GAEdwvJ,EAAO,EAAGA,EAAOrf,EAAW/sI,OAAQosJ,IAAQ,CACnD,GAAIjsJ,GAAI4sI,EAAWqf,EACnB,IAAIjsJ,IAAMvD,EAAG,CACX,GAAIyvJ,GAAM72C,EAAMr1G,GAAGgxB,EACfm7H,EAAM92C,EAAMr1G,GAAG4qB,EACfwhI,EAAOP,EAAG7rJ,GACVqsJ,EAAON,EAAG/rJ,GACVssJ,EAAc,EAAM5tJ,KAAKgnB,IAAIhnB,KAAKgnB,IAAIimI,EAAMO,EAAK,GAAKxtJ,KAAKgnB,IAAIkmI,EAAMO,EAAK,GAAI,IAClFX,IAAWY,GAAQ,EAAIC,EAAO3tJ,KAAKgnB,IAAIkmI,EAAMO,EAAK,GAAKG,GACvDb,GAAYW,GAAQC,GAAQV,EAAMO,IAAQN,EAAMO,GAAOG,GACvDZ,GAAWU,GAAQ,EAAIC,EAAO3tJ,KAAKgnB,IAAIimI,EAAMO,EAAK,GAAKI,IAI3D,GAAIzgG,GAAI2/F,EACJt5I,EAAIu5I,EACJn5I,EAAI+3I,EACJzyI,EAAI8zI,EACJhxI,EAAI4vI,EAGJxwG,GAAMxnC,EAAIu5C,EAAInxC,EAAIxI,IAAMA,EAAI25C,EAAIj0C,EAAI1F,GACpC2nC,IAAO3nC,EAAI4nC,EAAKxnC,GAAKu5C,CAGzBwpD,GAAM54G,GAAGu0B,GAAK6oB,EACdw7D,EAAM54G,GAAGmuB,GAAKkvB,EAGd79C,KAAKswJ,gBAAgB9vJ,MAUvB+G,IAAK,kBACLhF,MAAO,SAAyBqrJ,GAC9B,GAAIjd,GAAa3wI,KAAK2Q,KAAK0oG,YACvBgyB,EAAarrI,KAAKylI,YAEtBzlI,MAAK+vJ,WACL,KAAK,GAAIhsJ,GAAI,EAAGA,EAAI4sI,EAAW/sI,OAAQG,IAAK,CAC1C/D,KAAK+vJ,SAASpf,EAAW5sI,MACzB,KAAK,GAAI8J,GAAI,EAAGA,EAAI8iI,EAAW/sI,OAAQiK,IACrC7N,KAAK+vJ,SAASpf,EAAW5sI,IAAI4sI,EAAW9iI,IAAMw9H,EAAauiB,EAASjd,EAAW5sI,IAAI4sI,EAAW9iI,QAYpGtG,IAAK,kBACLhF,MAAO,SAAyBqrJ,GAC9B,GAAIjd,GAAa3wI,KAAK2Q,KAAK0oG,YACvBm0C,EAAextJ,KAAK0lI,cAExB1lI,MAAK6vJ,WACL,KAAK,GAAI9rJ,GAAI,EAAGA,EAAI4sI,EAAW/sI,OAAQG,IAAK,CAC1C/D,KAAK6vJ,SAASlf,EAAW5sI,MACzB,KAAK,GAAI8J,GAAI,EAAGA,EAAI8iI,EAAW/sI,OAAQiK,IACrC7N,KAAK6vJ,SAASlf,EAAW5sI,IAAI4sI,EAAW9iI,IAAM2/I,EAAe/qJ,KAAKgnB,IAAImkI,EAASjd,EAAW5sI,IAAI4sI,EAAW9iI,KAAM,OAWrHtG,IAAK,kBACLhF,MAAO,WACL,GAAIouI,GAAa3wI,KAAK2Q,KAAK0oG,YACvBD,EAAQp5G,KAAK2Q,KAAKyoG,KACtBp5G,MAAKuwJ,YACLvwJ,KAAKsvJ,SACL,KAAK,GAAIkB,GAAO,EAAGA,EAAO7f,EAAW/sI,OAAQ4sJ,IAC3CxwJ,KAAKuwJ,SAAS5f,EAAW6f,MAE3B,KAAK,GAAIC,GAAQ,EAAGA,EAAQ9f,EAAW/sI,OAAQ6sJ,IAAS,CAMtD,IAAK,GALDjwJ,GAAImwI,EAAW8f,GACff,EAAMt2C,EAAM54G,GAAGu0B,EACf46H,EAAMv2C,EAAM54G,GAAGmuB,EACfy/H,EAAQ,EACRC,EAAQ,EACH2B,EAAOS,EAAOT,EAAOrf,EAAW/sI,OAAQosJ,IAAQ,CACvD,GAAIjsJ,GAAI4sI,EAAWqf,EACnB,IAAIjsJ,IAAMvD,EAAG,CACX,GAAIyvJ,GAAM72C,EAAMr1G,GAAGgxB,EACfm7H,EAAM92C,EAAMr1G,GAAG4qB,EACf0hI,EAAc,EAAM5tJ,KAAKusD,KAAKvsD,KAAKgnB,IAAIimI,EAAMO,EAAK,GAAKxtJ,KAAKgnB,IAAIkmI,EAAMO,EAAK,GAC/ElwJ,MAAKuwJ,SAAS/vJ,GAAGwvJ,IAAShwJ,KAAK6vJ,SAASrvJ,GAAGuD,IAAM2rJ,EAAMO,EAAMjwJ,KAAK+vJ,SAASvvJ,GAAGuD,IAAM2rJ,EAAMO,GAAOI,GAAcrwJ,KAAK6vJ,SAASrvJ,GAAGuD,IAAM4rJ,EAAMO,EAAMlwJ,KAAK+vJ,SAASvvJ,GAAGuD,IAAM4rJ,EAAMO,GAAOG,IACtLrwJ,KAAKuwJ,SAASxsJ,GAAG0sJ,GAASzwJ,KAAKuwJ,SAAS/vJ,GAAGwvJ,GAC3C5B,GAASpuJ,KAAKuwJ,SAAS/vJ,GAAGwvJ,GAAM,GAChC3B,GAASruJ,KAAKuwJ,SAAS/vJ,GAAGwvJ,GAAM,IAIpChwJ,KAAKsvJ,OAAO9uJ,IAAM4tJ,EAAOC,OAO7B9mJ,IAAK,kBACLhF,MAAO,SAAyB/B,GAU9B,IAAK,GATDmwI,GAAa3wI,KAAK2Q,KAAK0oG,YACvBD,EAAQp5G,KAAK2Q,KAAKyoG,MAClBs3C,EAAO1wJ,KAAKuwJ,SAAS/vJ,GACrBmwJ,EAAQ3wJ,KAAK6vJ,SAASrvJ,GACtBowJ,EAAQ5wJ,KAAK+vJ,SAASvvJ,GACtBkvJ,EAAMt2C,EAAM54G,GAAGu0B,EACf46H,EAAMv2C,EAAM54G,GAAGmuB,EACfy/H,EAAQ,EACRC,EAAQ,EACH2B,EAAO,EAAGA,EAAOrf,EAAW/sI,OAAQosJ,IAAQ,CACnD,GAAIjsJ,GAAI4sI,EAAWqf,EACnB,IAAIjsJ,IAAMvD,EAAG,CAEX,GAAIqwJ,GAAOH,EAAKV,GACZc,EAAQD,EAAK,GACbE,EAAQF,EAAK,GAGbZ,EAAM72C,EAAMr1G,GAAGgxB,EACfm7H,EAAM92C,EAAMr1G,GAAG4qB,EACf0hI,EAAc,EAAM5tJ,KAAKusD,KAAKvsD,KAAKgnB,IAAIimI,EAAMO,EAAK,GAAKxtJ,KAAKgnB,IAAIkmI,EAAMO,EAAK,IAC3EtyG,EAAK+yG,EAAM5sJ,IAAM2rJ,EAAMO,EAAMW,EAAM7sJ,IAAM2rJ,EAAMO,GAAOI,GACtDxyG,EAAK8yG,EAAM5sJ,IAAM4rJ,EAAMO,EAAMU,EAAM7sJ,IAAM4rJ,EAAMO,GAAOG,EAC1DK,GAAKV,IAASpyG,EAAIC,GAClBuwG,GAASxwG,EACTywG,GAASxwG,CAGT,IAAI4S,GAAMzwD,KAAKsvJ,OAAOvrJ,EACtB0sD,GAAI,IAAM7S,EAAKkzG,EACfrgG,EAAI,IAAM5S,EAAKkzG,GAInB/wJ,KAAKsvJ,OAAO9uJ,IAAM4tJ,EAAOC,OAGtBzyC,IAITh8G,GAAiB,QAAIg8G,GAIjB,SAAU/7G,EAAQD,EAASM,GAgB/B,QAASW,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,QAAWF,GAZzF2D,OAAO6S,eAAe1X,EAAS,cAC7B2C,OAAO,GAGT,IAAIsvF,GAAmB3xF,EAAoB,KAEvC4xF,EAAmBjxF,EAAuBgxF,GAE1CE,EAAgB7xF,EAAoB,KAEpC8xF,EAAgBnxF,EAAuBkxF,GAQvCi/D,EAAgB,WAClB,QAASA,MACP,EAAIl/D,EAA0B,SAAG9xF,KAAMgxJ,GAoDzC,OAjDA,EAAIh/D,EAAuB,SAAGg/D,IAC5BzpJ,IAAK,eACLhF,MAAO,SAAsBoO,EAAMggI,EAAY+c,GAK7C,IAAK,GAJDE,MACAt0C,EAAQ3oG,EAAK2oG,MAGRv1G,EAAI,EAAGA,EAAI4sI,EAAW/sI,OAAQG,IAAK,CAC1C,GAAIwpC,GAAOojG,EAAW5sI,GAClB8sJ,IACJjD,GAASrgH,GAAQsjH,CACjB,KAAK,GAAIhjJ,GAAI,EAAGA,EAAI8iI,EAAW/sI,OAAQiK,IACrCgjJ,EAAKlgB,EAAW9iI,IAAM9J,GAAK8J,EAAI,EAAI,IAKvC,IAAK,GAAI+E,GAAK,EAAGA,EAAK86I,EAAW9pJ,OAAQgP,IAAM,CAC7C,GAAIisG,GAAOvF,EAAMo0C,EAAW96I,KAEL,IAAnBisG,EAAKsc,eAAgDt3H,KAA1B+pJ,EAAS/uC,EAAKqN,aAAiDroH,KAAxB+pJ,EAAS/uC,EAAKoN,QAClF2hC,EAAS/uC,EAAKqN,QAAQrN,EAAKoN,MAAQ,EACnC2hC,EAAS/uC,EAAKoN,MAAMpN,EAAKqN,QAAU,GAOvC,IAAK,GAHD4c,GAAY6H,EAAW/sI,OAGlBgK,EAAI,EAAGA,EAAIk7H,EAAWl7H,IAG7B,IAAK,GAFDqjJ,GAAQtgB,EAAW/iI,GACnB+iJ,EAAQ/C,EAASqD,GACZtlB,EAAM,EAAGA,EAAM7C,EAAY,EAAG6C,IAGrC,IAAK,GAFDulB,GAAQvgB,EAAWhF,GACnBwlB,EAAQvD,EAASsD,GACZx5D,EAAKi0C,EAAM,EAAGj0C,EAAKoxC,EAAWpxC,IAAM,CAC3C,GAAI05D,GAAQzgB,EAAWj5C,GACnB25D,EAAQzD,EAASwD,GAEjBz5I,EAAMlV,KAAKL,IAAI+uJ,EAAMC,GAAQD,EAAMF,GAASN,EAAMS,GACtDD,GAAMC,GAASz5I,EACf05I,EAAMH,GAASv5I,EAKrB,MAAOi2I,OAGJoD,IAGTpxJ,GAAiB,QAAIoxJ","file":"vis"}

=====================================================
== File: src/main/webapp/resources/plugin_extension/visjs/vis.min.css
=====================================================
.vis .overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10}.vis-active{box-shadow:0 0 10px #86d5f8}.vis [class*=span]{min-height:0;width:auto}div.vis-configuration{position:relative;display:block;float:left;font-size:12px}div.vis-configuration-wrapper{display:block;width:700px}div.vis-configuration-wrapper::after{clear:both;content:"";display:block}div.vis-configuration.vis-config-option-container{display:block;width:495px;background-color:#fff;border:2px solid #f7f8fa;border-radius:4px;margin-top:20px;left:10px;padding-left:5px}div.vis-configuration.vis-config-button{display:block;width:495px;height:25px;vertical-align:middle;line-height:25px;background-color:#f7f8fa;border:2px solid #ceced0;border-radius:4px;margin-top:20px;left:10px;padding-left:5px;cursor:pointer;margin-bottom:30px}div.vis-configuration.vis-config-button.hover{background-color:#4588e6;border:2px solid #214373;color:#fff}div.vis-configuration.vis-config-item{display:block;float:left;width:495px;height:25px;vertical-align:middle;line-height:25px}div.vis-configuration.vis-config-item.vis-config-s2{left:10px;background-color:#f7f8fa;padding-left:5px;border-radius:3px}div.vis-configuration.vis-config-item.vis-config-s3{left:20px;background-color:#e4e9f0;padding-left:5px;border-radius:3px}div.vis-configuration.vis-config-item.vis-config-s4{left:30px;background-color:#cfd8e6;padding-left:5px;border-radius:3px}div.vis-configuration.vis-config-header{font-size:18px;font-weight:700}div.vis-configuration.vis-config-label{width:120px;height:25px;line-height:25px}div.vis-configuration.vis-config-label.vis-config-s3{width:110px}div.vis-configuration.vis-config-label.vis-config-s4{width:100px}div.vis-configuration.vis-config-colorBlock{top:1px;width:30px;height:19px;border:1px solid #444;border-radius:2px;padding:0;margin:0;cursor:pointer}input.vis-configuration.vis-config-checkbox{left:-5px}input.vis-configuration.vis-config-rangeinput{position:relative;top:-5px;width:60px;padding:1px;margin:0;pointer-events:none}input.vis-configuration.vis-config-range{-webkit-appearance:none;border:0 solid #fff;background-color:rgba(0,0,0,0);width:300px;height:20px}input.vis-configuration.vis-config-range::-webkit-slider-runnable-track{width:300px;height:5px;background:#dedede;background:-moz-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#dedede),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-o-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-ms-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:linear-gradient(to bottom,#dedede 0,#c8c8c8 99%);border:1px solid #999;box-shadow:#aaa 0 0 3px 0;border-radius:3px}input.vis-configuration.vis-config-range::-webkit-slider-thumb{-webkit-appearance:none;border:1px solid #14334b;height:17px;width:17px;border-radius:50%;background:#3876c2;background:-moz-linear-gradient(top,#3876c2 0,#385380 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#3876c2),color-stop(100%,#385380));background:-webkit-linear-gradient(top,#3876c2 0,#385380 100%);background:-o-linear-gradient(top,#3876c2 0,#385380 100%);background:-ms-linear-gradient(top,#3876c2 0,#385380 100%);background:linear-gradient(to bottom,#3876c2 0,#385380 100%);box-shadow:#111927 0 0 1px 0;margin-top:-7px}input.vis-configuration.vis-config-range:focus{outline:0}input.vis-configuration.vis-config-range:focus::-webkit-slider-runnable-track{background:#9d9d9d;background:-moz-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#9d9d9d),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:-o-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:-ms-linear-gradient(top,#9d9d9d 0,#c8c8c8 99%);background:linear-gradient(to bottom,#9d9d9d 0,#c8c8c8 99%)}input.vis-configuration.vis-config-range::-moz-range-track{width:300px;height:10px;background:#dedede;background:-moz-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#dedede),color-stop(99%,#c8c8c8));background:-webkit-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-o-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:-ms-linear-gradient(top,#dedede 0,#c8c8c8 99%);background:linear-gradient(to bottom,#dedede 0,#c8c8c8 99%);border:1px solid #999;box-shadow:#aaa 0 0 3px 0;border-radius:3px}input.vis-configuration.vis-config-range::-moz-range-thumb{border:none;height:16px;width:16px;border-radius:50%;background:#385380}input.vis-configuration.vis-config-range:-moz-focusring{outline:1px solid #fff;outline-offset:-1px}input.vis-configuration.vis-config-range::-ms-track{width:300px;height:5px;background:0 0;border-color:transparent;border-width:6px 0;color:transparent}input.vis-configuration.vis-config-range::-ms-fill-lower{background:#777;border-radius:10px}input.vis-configuration.vis-config-range::-ms-fill-upper{background:#ddd;border-radius:10px}input.vis-configuration.vis-config-range::-ms-thumb{border:none;height:16px;width:16px;border-radius:50%;background:#385380}input.vis-configuration.vis-config-range:focus::-ms-fill-lower{background:#888}input.vis-configuration.vis-config-range:focus::-ms-fill-upper{background:#ccc}.vis-configuration-popup{position:absolute;background:rgba(57,76,89,.85);border:2px solid #f2faff;line-height:30px;height:30px;width:150px;text-align:center;color:#fff;font-size:14px;border-radius:4px;-webkit-transition:opacity .3s ease-in-out;-moz-transition:opacity .3s ease-in-out;transition:opacity .3s ease-in-out}.vis-configuration-popup:after,.vis-configuration-popup:before{left:100%;top:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.vis-configuration-popup:after{border-color:rgba(136,183,213,0);border-left-color:rgba(57,76,89,.85);border-width:8px;margin-top:-8px}.vis-configuration-popup:before{border-color:rgba(194,225,245,0);border-left-color:#f2faff;border-width:12px;margin-top:-12px}div.vis-tooltip{position:absolute;visibility:hidden;padding:5px;white-space:nowrap;font-family:verdana;font-size:14px;color:#000;background-color:#f5f4ed;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;border:1px solid #808074;box-shadow:3px 3px 10px rgba(0,0,0,.2);pointer-events:none;z-index:5}div.vis-color-picker{position:absolute;top:0;left:30px;margin-top:-140px;margin-left:30px;width:310px;height:444px;z-index:1;padding:10px;border-radius:15px;background-color:#fff;display:none;box-shadow:rgba(0,0,0,.5) 0 0 10px 0}div.vis-color-picker div.vis-arrow{position:absolute;top:147px;left:5px}div.vis-color-picker div.vis-arrow::after,div.vis-color-picker div.vis-arrow::before{right:100%;top:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}div.vis-color-picker div.vis-arrow:after{border-color:rgba(255,255,255,0);border-right-color:#fff;border-width:30px;margin-top:-30px}div.vis-color-picker div.vis-color{position:absolute;width:289px;height:289px;cursor:pointer}div.vis-color-picker div.vis-brightness{position:absolute;top:313px}div.vis-color-picker div.vis-opacity{position:absolute;top:350px}div.vis-color-picker div.vis-selector{position:absolute;top:137px;left:137px;width:15px;height:15px;border-radius:15px;border:1px solid #fff;background:#4c4c4c;background:-moz-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#4c4c4c),color-stop(12%,#595959),color-stop(25%,#666),color-stop(39%,#474747),color-stop(50%,#2c2c2c),color-stop(51%,#000),color-stop(60%,#111),color-stop(76%,#2b2b2b),color-stop(91%,#1c1c1c),color-stop(100%,#131313));background:-webkit-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:-o-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:-ms-linear-gradient(top,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%);background:linear-gradient(to bottom,#4c4c4c 0,#595959 12%,#666 25%,#474747 39%,#2c2c2c 50%,#000 51%,#111 60%,#2b2b2b 76%,#1c1c1c 91%,#131313 100%)}div.vis-color-picker div.vis-new-color{position:absolute;width:140px;height:20px;border:1px solid rgba(0,0,0,.1);border-radius:5px;top:380px;left:159px;text-align:right;padding-right:2px;font-size:10px;color:rgba(0,0,0,.4);vertical-align:middle;line-height:20px}div.vis-color-picker div.vis-initial-color{position:absolute;width:140px;height:20px;border:1px solid rgba(0,0,0,.1);border-radius:5px;top:380px;left:10px;text-align:left;padding-left:2px;font-size:10px;color:rgba(0,0,0,.4);vertical-align:middle;line-height:20px}div.vis-color-picker div.vis-label{position:absolute;width:300px;left:10px}div.vis-color-picker div.vis-label.vis-brightness{top:300px}div.vis-color-picker div.vis-label.vis-opacity{top:338px}div.vis-color-picker div.vis-button{position:absolute;width:68px;height:25px;border-radius:10px;vertical-align:middle;text-align:center;line-height:25px;top:410px;border:2px solid #d9d9d9;background-color:#f7f7f7;cursor:pointer}div.vis-color-picker div.vis-button.vis-cancel{left:5px}div.vis-color-picker div.vis-button.vis-load{left:82px}div.vis-color-picker div.vis-button.vis-apply{left:159px}div.vis-color-picker div.vis-button.vis-save{left:236px}div.vis-color-picker input.vis-range{width:290px;height:20px}div.vis-network div.vis-manipulation{box-sizing:content-box;border-width:0;border-bottom:1px;border-style:solid;border-color:#d6d9d8;background:#fff;background:-moz-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#fff),color-stop(48%,#fcfcfc),color-stop(50%,#fafafa),color-stop(100%,#fcfcfc));background:-webkit-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:-o-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:-ms-linear-gradient(top,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);background:linear-gradient(to bottom,#fff 0,#fcfcfc 48%,#fafafa 50%,#fcfcfc 100%);padding-top:4px;position:absolute;left:0;top:0;width:100%;height:28px}div.vis-network div.vis-edit-mode{position:absolute;left:0;top:5px;height:30px}div.vis-network div.vis-close{position:absolute;right:0;top:0;width:30px;height:30px;background-position:20px 3px;background-repeat:no-repeat;background-image:url(img/network/cross.png);cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div.vis-network div.vis-close:hover{opacity:.6}div.vis-network div.vis-edit-mode div.vis-button,div.vis-network div.vis-manipulation div.vis-button{float:left;font-family:verdana;font-size:12px;-moz-border-radius:15px;border-radius:15px;display:inline-block;background-position:0 0;background-repeat:no-repeat;height:24px;margin-left:10px;cursor:pointer;padding:0 8px 0 8px;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div.vis-network div.vis-manipulation div.vis-button:hover{box-shadow:1px 1px 8px rgba(0,0,0,.2)}div.vis-network div.vis-manipulation div.vis-button:active{box-shadow:1px 1px 8px rgba(0,0,0,.5)}div.vis-network div.vis-manipulation div.vis-button.vis-back{background-image:url(img/network/backIcon.png)}div.vis-network div.vis-manipulation div.vis-button.vis-none:hover{box-shadow:1px 1px 8px transparent;cursor:default}div.vis-network div.vis-manipulation div.vis-button.vis-none:active{box-shadow:1px 1px 8px transparent}div.vis-network div.vis-manipulation div.vis-button.vis-none{padding:0}div.vis-network div.vis-manipulation div.notification{margin:2px;font-weight:700}div.vis-network div.vis-manipulation div.vis-button.vis-add{background-image:url(img/network/addNodeIcon.png)}div.vis-network div.vis-edit-mode div.vis-button.vis-edit,div.vis-network div.vis-manipulation div.vis-button.vis-edit{background-image:url(img/network/editIcon.png)}div.vis-network div.vis-edit-mode div.vis-button.vis-edit.vis-edit-mode{background-color:#fcfcfc;border:1px solid #ccc}div.vis-network div.vis-manipulation div.vis-button.vis-connect{background-image:url(img/network/connectIcon.png)}div.vis-network div.vis-manipulation div.vis-button.vis-delete{background-image:url(img/network/deleteIcon.png)}div.vis-network div.vis-edit-mode div.vis-label,div.vis-network div.vis-manipulation div.vis-label{margin:0 0 0 23px;line-height:25px}div.vis-network div.vis-manipulation div.vis-separator-line{float:left;display:inline-block;width:1px;height:21px;background-color:#bdbdbd;margin:0 7px 0 15px}div.vis-network div.vis-navigation div.vis-button{width:34px;height:34px;-moz-border-radius:17px;border-radius:17px;position:absolute;display:inline-block;background-position:2px 2px;background-repeat:no-repeat;cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}div.vis-network div.vis-navigation div.vis-button:hover{box-shadow:0 0 3px 3px rgba(56,207,21,.3)}div.vis-network div.vis-navigation div.vis-button:active{box-shadow:0 0 1px 3px rgba(56,207,21,.95)}div.vis-network div.vis-navigation div.vis-button.vis-up{background-image:url(img/network/upArrow.png);bottom:50px;left:55px}div.vis-network div.vis-navigation div.vis-button.vis-down{background-image:url(img/network/downArrow.png);bottom:10px;left:55px}div.vis-network div.vis-navigation div.vis-button.vis-left{background-image:url(img/network/leftArrow.png);bottom:10px;left:15px}div.vis-network div.vis-navigation div.vis-button.vis-right{background-image:url(img/network/rightArrow.png);bottom:10px;left:95px}div.vis-network div.vis-navigation div.vis-button.vis-zoomIn{background-image:url(img/network/plus.png);bottom:10px;right:15px}div.vis-network div.vis-navigation div.vis-button.vis-zoomOut{background-image:url(img/network/minus.png);bottom:10px;right:55px}div.vis-network div.vis-navigation div.vis-button.vis-zoomExtends{background-image:url(img/network/zoomExtends.png);bottom:50px;right:15px}.vis-current-time{background-color:#ff7f6e;width:2px;z-index:1;pointer-events:none}.vis-rolling-mode-btn{height:40px;width:40px;position:absolute;top:7px;right:20px;border-radius:50%;font-size:28px;cursor:pointer;opacity:.8;color:#fff;font-weight:700;text-align:center;background:#3876c2}.vis-rolling-mode-btn:before{content:"\26F6"}.vis-rolling-mode-btn:hover{opacity:1}.vis-custom-time{background-color:#6e94ff;width:2px;cursor:move;z-index:1}.vis-panel.vis-background.vis-horizontal .vis-grid.vis-horizontal{position:absolute;width:100%;height:0;border-bottom:1px solid}.vis-panel.vis-background.vis-horizontal .vis-grid.vis-minor{border-color:#e5e5e5}.vis-panel.vis-background.vis-horizontal .vis-grid.vis-major{border-color:#bfbfbf}.vis-data-axis .vis-y-axis.vis-major{width:100%;position:absolute;color:#4d4d4d;white-space:nowrap}.vis-data-axis .vis-y-axis.vis-major.vis-measure{padding:0;margin:0;border:0;visibility:hidden;width:auto}.vis-data-axis .vis-y-axis.vis-minor{position:absolute;width:100%;color:#bebebe;white-space:nowrap}.vis-data-axis .vis-y-axis.vis-minor.vis-measure{padding:0;margin:0;border:0;visibility:hidden;width:auto}.vis-data-axis .vis-y-axis.vis-title{position:absolute;color:#4d4d4d;white-space:nowrap;bottom:20px;text-align:center}.vis-data-axis .vis-y-axis.vis-title.vis-measure{padding:0;margin:0;visibility:hidden;width:auto}.vis-data-axis .vis-y-axis.vis-title.vis-left{bottom:0;-webkit-transform-origin:left top;-moz-transform-origin:left top;-ms-transform-origin:left top;-o-transform-origin:left top;transform-origin:left bottom;-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}.vis-data-axis .vis-y-axis.vis-title.vis-right{bottom:0;-webkit-transform-origin:right bottom;-moz-transform-origin:right bottom;-ms-transform-origin:right bottom;-o-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.vis-legend{background-color:rgba(247,252,255,.65);padding:5px;border:1px solid #b3b3b3;box-shadow:2px 2px 10px rgba(154,154,154,.55)}.vis-legend-text{white-space:nowrap;display:inline-block}.vis-item{position:absolute;color:#1a1a1a;border-color:#97b0f8;border-width:1px;background-color:#d5ddf6;display:inline-block;z-index:1}.vis-item.vis-selected{border-color:#ffc200;background-color:#fff785;z-index:2}.vis-editable.vis-selected{cursor:move}.vis-item.vis-point.vis-selected{background-color:#fff785}.vis-item.vis-box{text-align:center;border-style:solid;border-radius:2px}.vis-item.vis-point{background:0 0}.vis-item.vis-dot{position:absolute;padding:0;border-width:4px;border-style:solid;border-radius:4px}.vis-item.vis-range{border-style:solid;border-radius:2px;box-sizing:border-box}.vis-item.vis-background{border:none;background-color:rgba(213,221,246,.4);box-sizing:border-box;padding:0;margin:0}.vis-item .vis-item-overflow{position:relative;width:100%;height:100%;padding:0;margin:0;overflow:hidden}.vis-item-visible-frame{white-space:nowrap}.vis-item.vis-range .vis-item-content{position:relative;display:inline-block}.vis-item.vis-background .vis-item-content{position:absolute;display:inline-block}.vis-item.vis-line{padding:0;position:absolute;width:0;border-left-width:1px;border-left-style:solid}.vis-item .vis-item-content{white-space:nowrap;box-sizing:border-box;padding:5px}.vis-item .vis-onUpdateTime-tooltip{position:absolute;background:#4f81bd;color:#fff;width:200px;text-align:center;white-space:nowrap;padding:5px;border-radius:1px;transition:.4s;-o-transition:.4s;-moz-transition:.4s;-webkit-transition:.4s}.vis-item .vis-delete,.vis-item .vis-delete-rtl{position:absolute;top:0;width:24px;height:24px;box-sizing:border-box;padding:0 5px;cursor:pointer;-webkit-transition:background .2s linear;-moz-transition:background .2s linear;-ms-transition:background .2s linear;-o-transition:background .2s linear;transition:background .2s linear}.vis-item .vis-delete{right:-24px}.vis-item .vis-delete-rtl{left:-24px}.vis-item .vis-delete-rtl:after,.vis-item .vis-delete:after{content:"\00D7";color:red;font-family:arial,sans-serif;font-size:22px;font-weight:700;-webkit-transition:color .2s linear;-moz-transition:color .2s linear;-ms-transition:color .2s linear;-o-transition:color .2s linear;transition:color .2s linear}.vis-item .vis-delete-rtl:hover,.vis-item .vis-delete:hover{background:red}.vis-item .vis-delete-rtl:hover:after,.vis-item .vis-delete:hover:after{color:#fff}.vis-item .vis-drag-center{position:absolute;width:100%;height:100%;top:0;left:0;cursor:move}.vis-item.vis-range .vis-drag-left{position:absolute;width:24px;max-width:20%;min-width:2px;height:100%;top:0;left:-4px;cursor:w-resize}.vis-item.vis-range .vis-drag-right{position:absolute;width:24px;max-width:20%;min-width:2px;height:100%;top:0;right:-4px;cursor:e-resize}.vis-range.vis-item.vis-readonly .vis-drag-left,.vis-range.vis-item.vis-readonly .vis-drag-right{cursor:auto}.vis-itemset{position:relative;padding:0;margin:0;box-sizing:border-box}.vis-itemset .vis-background,.vis-itemset .vis-foreground{position:absolute;width:100%;height:100%;overflow:visible}.vis-axis{position:absolute;width:100%;height:0;left:0;z-index:1}.vis-foreground .vis-group{position:relative;box-sizing:border-box;border-bottom:1px solid #bfbfbf}.vis-foreground .vis-group:last-child{border-bottom:none}.vis-nesting-group{cursor:pointer}.vis-nested-group{background:#f5f5f5}.vis-label.vis-nesting-group.expanded:before{content:"\25BC"}.vis-label.vis-nesting-group.collapsed-rtl:before{content:"\25C0"}.vis-label.vis-nesting-group.collapsed:before{content:"\25B6"}.vis-overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10}.vis-labelset{position:relative;overflow:hidden;box-sizing:border-box}.vis-labelset .vis-label{position:relative;left:0;top:0;width:100%;color:#4d4d4d;box-sizing:border-box}.vis-labelset .vis-label{border-bottom:1px solid #bfbfbf}.vis-labelset .vis-label.draggable{cursor:pointer}.vis-labelset .vis-label:last-child{border-bottom:none}.vis-labelset .vis-label .vis-inner{display:inline-block;padding:5px}.vis-labelset .vis-label .vis-inner.vis-hidden{padding:0}.vis-panel{position:absolute;padding:0;margin:0;box-sizing:border-box}.vis-panel.vis-bottom,.vis-panel.vis-center,.vis-panel.vis-left,.vis-panel.vis-right,.vis-panel.vis-top{border:1px #bfbfbf}.vis-panel.vis-center,.vis-panel.vis-left,.vis-panel.vis-right{border-top-style:solid;border-bottom-style:solid;overflow:hidden}.vis-left.vis-panel.vis-vertical-scroll,.vis-right.vis-panel.vis-vertical-scroll{height:100%;overflow-x:hidden;overflow-y:scroll}.vis-left.vis-panel.vis-vertical-scroll{direction:rtl}.vis-left.vis-panel.vis-vertical-scroll .vis-content{direction:ltr}.vis-right.vis-panel.vis-vertical-scroll{direction:ltr}.vis-right.vis-panel.vis-vertical-scroll .vis-content{direction:rtl}.vis-panel.vis-bottom,.vis-panel.vis-center,.vis-panel.vis-top{border-left-style:solid;border-right-style:solid}.vis-background{overflow:hidden}.vis-panel>.vis-content{position:relative}.vis-panel .vis-shadow{position:absolute;width:100%;height:1px;box-shadow:0 0 10px rgba(0,0,0,.8)}.vis-panel .vis-shadow.vis-top{top:-1px;left:0}.vis-panel .vis-shadow.vis-bottom{bottom:-1px;left:0}.vis-graph-group0{fill:#4f81bd;fill-opacity:0;stroke-width:2px;stroke:#4f81bd}.vis-graph-group1{fill:#f79646;fill-opacity:0;stroke-width:2px;stroke:#f79646}.vis-graph-group2{fill:#8c51cf;fill-opacity:0;stroke-width:2px;stroke:#8c51cf}.vis-graph-group3{fill:#75c841;fill-opacity:0;stroke-width:2px;stroke:#75c841}.vis-graph-group4{fill:#ff0100;fill-opacity:0;stroke-width:2px;stroke:#ff0100}.vis-graph-group5{fill:#37d8e6;fill-opacity:0;stroke-width:2px;stroke:#37d8e6}.vis-graph-group6{fill:#042662;fill-opacity:0;stroke-width:2px;stroke:#042662}.vis-graph-group7{fill:#00ff26;fill-opacity:0;stroke-width:2px;stroke:#00ff26}.vis-graph-group8{fill:#f0f;fill-opacity:0;stroke-width:2px;stroke:#f0f}.vis-graph-group9{fill:#8f3938;fill-opacity:0;stroke-width:2px;stroke:#8f3938}.vis-timeline .vis-fill{fill-opacity:.1;stroke:none}.vis-timeline .vis-bar{fill-opacity:.5;stroke-width:1px}.vis-timeline .vis-point{stroke-width:2px;fill-opacity:1}.vis-timeline .vis-legend-background{stroke-width:1px;fill-opacity:.9;fill:#fff;stroke:#c2c2c2}.vis-timeline .vis-outline{stroke-width:1px;fill-opacity:1;fill:#fff;stroke:#e5e5e5}.vis-timeline .vis-icon-fill{fill-opacity:.3;stroke:none}.vis-time-axis{position:relative;overflow:hidden}.vis-time-axis.vis-foreground{top:0;left:0;width:100%}.vis-time-axis.vis-background{position:absolute;top:0;left:0;width:100%;height:100%}.vis-time-axis .vis-text{position:absolute;color:#4d4d4d;padding:3px;overflow:hidden;box-sizing:border-box;white-space:nowrap}.vis-time-axis .vis-text.vis-measure{position:absolute;padding-left:0;padding-right:0;margin-left:0;margin-right:0;visibility:hidden}.vis-time-axis .vis-grid.vis-vertical{position:absolute;border-left:1px solid}.vis-time-axis .vis-grid.vis-vertical-rtl{position:absolute;border-right:1px solid}.vis-time-axis .vis-grid.vis-minor{border-color:#e5e5e5}.vis-time-axis .vis-grid.vis-major{border-color:#bfbfbf}.vis-timeline{position:relative;border:1px solid #bfbfbf;overflow:hidden;padding:0;margin:0;box-sizing:border-box}

=====================================================
== File: src/main/webapp/WEB-INF/i18n/multisynth-studio_en.properties
=====================================================
common.application.name=MultiSynth Studio
common.signin=Sign In
common.signup=Sign Up
common.signout=Sign Out
common.welcome=Welcome
common.home=Home
common.already.member=Already a member ?
common.new.member=New to site ?
common.search.by=Search by
common.actions=Actions
common.create=Create
common.update=Update
common.delete=Delete
common.cancel=Cancel
common.close=Close
common.refresh=Refresh
common.reset=Reset
common.manage=Manage

common.error=Ooops!
common.caution=Caution!
common.success=Success!
common.success.message=Operation successfully completed.
common.expire.session=Expire session
common.expire.session.message=Are you sure you want to remove this user's session ?


# failure
common.failure.badcredentials.message=The username or password you entered is not valid.
common.failure.userdisabled.message=Account not enabled, please contact support.
common.failure.sessionauthentication.message=Maximum sessions for this user exceeded. Please, sign out one of these.
common.failure.resourcenotfound=Requested Resource Not Found
common.failure.resourcenotfound.message=Sorry, we did not find the resource you were looking for.
common.failure.uncaughtexception.message=Unknown error occurred, please contact support.
common.failure.accessdenied=Access denied
common.failure.accessdenied.message=Full authentication is required to access this resource.
common.failure.logintimeout=Login Timeout
common.failure.logintimeout.message=The client's session has expired and must log in again.


# setting page
settings=Settings
settings.account=Account
settings.password=Password
settings.avatar.change=Update profile picture
settings.avatar.upload=Upload photo
settings.avatar.upload.success.message=Profile picture uploaded
settings.avatar.upload.error.message=Image upload failed
settings.avatar.select.error.message=Please select an image
settings.avatar.method.zoom.in=Zoom In

=====================================================
== File: src/main/webapp/WEB-INF/i18n/multisynth-studio_it.properties
=====================================================
common.application.name=MultiSynth Studio
common.signin=Accedi
common.signup=Registrati
common.signout=Esci
common.welcome=Benvenuto
common.home=Home
common.already.member=Sei gi&agrave; un membro ?
common.new.member=Non hai un account ?
common.search.by=Cerca per
common.actions=Azioni
common.create=Crea
common.update=Modifica
common.delete=Elimina
common.cancel=Annulla
common.close=Chiudi
common.refresh=Ricarica
common.reset=Reimposta
common.manage=Gestisci

common.error=Ooops!
common.caution=Attenzione!
common.success=Successo!
common.success.message=Operazione avvenuta con successo.
common.expire.session=Rimuovi sessione
common.expire.session.message=Sei sicuro di voler rimuovere la sessione per questo utente ?


# failure
common.failure.badcredentials.message=La username o la password inserita non &egrave; corretta.
common.failure.userdisabled.message=Account non abilitato, si prega di contattare il supporto tecnico.
common.failure.sessionauthentication.message=Le sessioni massime per questo utente sono state superate. Per favore, uscire da una di queste.
common.failure.resourcenotfound=Risorsa Richiesta Non Trovata
common.failure.resourcenotfound.message=Spiacenti, non abbiamo trovato la risorsa che stavi cercando.
common.failure.uncaughtexception.message=Errore sconosciuto, si prega di contattare il supporto tecnico.
common.failure.accessdenied=Accesso Negato
common.failure.accessdenied.message=Non hai i permessi per accedere a questa risorsa.
common.failure.logintimeout=Timeout Di Accesso
common.failure.logintimeout.message=La sessione del client &egrave; scaduta e deve accedere nuovamente.


# setting page
settings=Impostazioni
settings.account=Account
settings.password=Password
settings.avatar.change=Aggiorna l'immagine del profilo
settings.avatar.upload=Carica foto
settings.avatar.upload.success.message=Immagine del profilo aggiornata
settings.avatar.upload.error.message=Errore nel caricamento dell'immagine
settings.avatar.select.error.message=Per favore, seleziona un'immagine
settings.avatar.method.zoom.in=Zoom avanti

=====================================================
== File: src/main/webapp/WEB-INF/spring/root-context.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://www.springframework.org/schema/beans" xmlns:util="http://www.springframework.org/schema/util"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:tx="http://www.springframework.org/schema/tx"
  
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd
           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">

   <!--  
        This will automatically locate application property file you have
        within your classpath. The located property file is parsed and their values can
        then be used within application context files in the form of
        @Value("${appconfig_properties.propertyKey}").
   -->
   <util:properties id="appconfig_properties" location="classpath:appconfig.properties" />
  
   <!--  
        This will automatically locate database property file you have
        within your classpath. The located property file is parsed and their values can
        then be used within application context files in the form of
        ${propertyKey}.
    -->
   <context:property-placeholder location="classpath:jdbc.properties"/>
   
   <!--
        This declaration will cause Spring to locate every @Component,
        @Repository and @Service in your application. In practical terms this
        allows you to write a POJO and then simply annotate the new POJO as an
        @Service and Spring will automatically detect, instantiate and
        dependency inject your service at startup time. Importantly, you can
        then also have your new service injected into any other class that
        requires it simply by declaring a field for your service inside the
        relying class and Spring will inject it.  Note that the exclude filter
        ensures @Controller classes are not instantiate.
        
        Furthermore, this turns on @Autowired, @PostConstruct etc support. These 
        annotations allow you to use common Spring and Java Enterprise Edition 
        annotations in your classes without needing to do any special configuration. 
        The most commonly used annotation is @Autowired, which instructs Spring to
        dependency inject an object into your class.
    -->
   <context:component-scan base-package="com.sesygroup.choreography.web">
        <context:exclude-filter expression="org.springframework.stereotype.Controller" type="annotation"/>
   </context:component-scan>

   <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driverClassName}"/>

=====================================================
== File: src/main/webapp/WEB-INF/spring/security-config.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://www.springframework.org/schema/beans"
   xmlns:security="http://www.springframework.org/schema/security"
   xmlns:aop="http://www.springframework.org/schema/aop"

   xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    	http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">

   <security:global-method-security pre-post-annotations="enabled" />

   <security:http auto-config='true' use-expressions="true" >
      <security:access-denied-handler error-page="/accessdenied" />
      <security:intercept-url pattern="/" access="permitAll" />
      <security:intercept-url pattern="/static/**" access="permitAll" />
      <security:intercept-url pattern="/welcome/**" access="isAuthenticated()" />
      <security:intercept-url pattern="/settings/**" access="isAuthenticated()" />
      <security:intercept-url pattern="/administration/**" access="hasAnyRole('administrator')" />
      
      <!-- for utility controller -->
      <security:intercept-url pattern="/utility/user/create" access="permitAll" />
      <security:intercept-url pattern="/utility/user/check/**" access="permitAll" />
      <security:intercept-url pattern="/utility/user/avatar/**" access="isAuthenticated()" />
      
      <!-- for choreography -->
      <security:intercept-url pattern="/choreography/**" access="isAuthenticated()" />
          
      <security:form-login login-page="/login"
                           authentication-failure-handler-ref="authenticationFailureHandler"
                           default-target-url="/welcome" always-use-default-target="false" />

      <security:logout logout-success-url="/login" invalidate-session="true" delete-cookies="JSESSIONID"/>
      
      <security:session-management invalid-session-url="/logintimeout">
         <!-- error-if-maximum-exceeded="false" ensure that if max-sessions exceeded, the 
         org.springframework.security.web.authentication.session.SessionAuthenticationException is not thrown
         and the oldest session will be automatically invalidated.
         otherwise, putting error-if-maximum-exceeded="true" if max-sessions exceeded, the 
         org.springframework.security.web.authentication.session.SessionAuthenticationException is thrown,
         but if the user closes the browser without performing logout, the session will not be automatically invalidated,
         therefore SessionAuthenticationException will always be thrown. -->
         <security:concurrency-control max-sessions="5" error-if-maximum-exceeded="false" 
                                       session-registry-ref="sessionRegistry" expired-url="/logintimeout"/>
      </security:session-management>
      
   </security:http>
   
   

=====================================================
== File: src/main/webapp/WEB-INF/spring/tiles-defs.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
       "http://tiles.apache.org/dtds/tiles-config_3_0.dtd">

<tiles-definitions>
   <definition name="standalone.login" template="/WEB-INF/views/standalone/login.jsp" />
   <definition name="standalone.accessdenied" template="/WEB-INF/views/standalone/page_403.jsp" />
   <definition name="standalone.resourcenotfound" template="/WEB-INF/views/standalone/page_404.jsp" />
   <definition name="standalone.logintimeout" template="/WEB-INF/views/standalone/page_440.jsp" />
   <definition name="standalone.uncaughtexception" template="/WEB-INF/views/standalone/page_500.jsp" />
   

   <definition name="layout" template="/WEB-INF/views/layout/layout.jsp">
      <put-attribute name="navigation_left" value="/WEB-INF/views/layout/navigation_left.jsp" />
      <put-attribute name="navigation_top"  value="/WEB-INF/views/layout/navigation_top.jsp" />
      <put-attribute name="content_top" value="/WEB-INF/views/layout/content_top.jsp" />
      <put-attribute name="footer" value="/WEB-INF/views/layout/footer.jsp" />
   </definition>

   <!-- Setting -->
   <definition name="common.welcome" extends="layout">
      <put-attribute name="content" value="/WEB-INF/views/common/welcome.jsp" />
   </definition>
     
   <definition name="settings.account" extends="layout">
      <put-attribute name="active" value="account"/>
      <put-attribute name="action" value="/settings/account" />
      <put-attribute name="content">
         <definition template="/WEB-INF/views/settings/layout.jsp">
            <put-attribute name="settings_content" value="/WEB-INF/views/settings/account.jsp" />
         </definition>
      </put-attribute>
   </definition>
   
   <definition name="settings.password" extends="layout">
      <put-attribute name="active" value="password"/>
      <put-attribute name="action" value="/settings/password" />
      <put-attribute name="content">
         <definition template="/WEB-INF/views/settings/layout.jsp">
            <put-attribute name="settings_content" value="/WEB-INF/views/settings/password.jsp" />
         </definition>
      </put-attribute>
   </definition>
   
    <!-- Administration Users -->
   <definition name="administration.user.list" extends="layout">
      <put-attribute name="view_type" value="list" />
      <put-attribute name="content" value="/WEB-INF/views/administration/user/user_list.jsp" />
   </definition>

=====================================================
== File: src/main/webapp/WEB-INF/spring/webmvc-config.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc"
   xmlns:context="http://www.springframework.org/schema/context"

   xsi:schemaLocation="
          http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
          http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
          http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

   <!-- Enable Spring Annotation -->
   <mvc:annotation-driven
      content-negotiation-manager="contentNegotiationManager" />

   <bean id="contentNegotiationManager"
      class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
      <property name="favorPathExtension" value="false" />
      <property name="favorParameter" value="false" />
      <property name="ignoreAcceptHeader" value="false" />
      <property name="mediaTypes">
         <value>
            atom=application/atom+xml
            html=text/html
            json=application/json
            *=*/*
         </value>
      </property>
   </bean>

   <!-- The controllers are auto detected POJOs labeled with the @Controller annotation. -->
   <context:component-scan  base-package="com.sesygroup.choreography.web.presentation" use-default-filters="false">
      <context:include-filter expression="org.springframework.stereotype.Controller" type="annotation"/>
   </context:component-scan>

   <!-- Handles HTTP GET requests for /static/** by efficiently serving up 
      static resources that are in src/main/webapp/resources/ directory and downloaded 
      as webjars. We apply caching for our static resources by creating a cache-control 
      with a maxAge of 30 days -->
   <mvc:resources mapping="/static/**" location="/resources/, /webjars/">
      <mvc:cache-control cache-public="true" max-age="2592000" />
      <mvc:resource-chain resource-cache="true">
         <mvc:resolvers>
            <!-- Spring will automatically add the WebJarsResourceResolver 
               if the org.webjars:webjars-locator library resides on the classpath. This 
               resolver allows you to remove the version number in the path (e.g., static/jquery/2.2.3/jquery.min.js). -->
            <bean
               class="org.springframework.web.servlet.resource.WebJarsResourceResolver" />
         </mvc:resolvers>
      </mvc:resource-chain>
   </mvc:resources>

=====================================================
== File: src/main/webapp/WEB-INF/views/administration/user/user_form.jsp
=====================================================
<%@page import="java.util.Base64"%>
<%@page import="com.sesygroup.choreography.web.business.model.User"%>
<%@page import="com.sesygroup.choreography.web.business.model.Role"%>
<%@page import="java.util.List"%>
<%@page import="java.util.ArrayList"%>

<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<%@include file="user_javascript.jsp"%>

<div class="row">
   <div class="col-md-12 col-sm-12 col-xs-12">
      <div class="x_panel">
         <div class="x_title">
            <h2>
               <c:choose>
                  <c:when test="${requestScope.view_type == 'update'}">
                     <spring:message code="user.update" />
                  </c:when>
                  <c:when test="${requestScope.view_type == 'create'}">
                     <spring:message code="user.create" />
                  </c:when>
                  <c:when test="${requestScope.view_type == 'delete'}">
                     <spring:message code="user.delete" />
                  </c:when>
               </c:choose>
            </h2>
            <ul class="nav navbar-right panel_toolbox">
               <li><a class="collapse-link"><i class="fa fa-chevron-up"></i></a></li>
            </ul>
            <div class="clearfix"></div>
         </div>
         <div class="x_content">

            <br />
            <form:form modelAttribute="user" id="user_form" action="${pageContext.request.contextPath}${requestScope.action}" class="form-horizontal form-label-left" method="POST">
               <form:hidden path="id" />
               <div class="form-group">
                  <label class="control-label col-md-3 col-sm-3 col-xs-12" for="username"><spring:message code="user.username" /> <span class="required">*</span> </label>
                  <div class="col-md-9 col-sm-9 col-xs-12">
                     <spring:message code="user.username.already.exists" var="usernameAlreadyExists" />
                     <form:input path="username" type="text" data-parsley-trigger="focusout" data-parsley-remote-validator="remote-validator-username" data-parsley-remote-message="${usernameAlreadyExists}" data-parsley-remote="${pageContext.request.contextPath}/utility/user/check/username?username={value}&user_id=${user.id}" required="required" class="form-control custom-parsley-success" />
                  </div>
               </div>
               <div class="form-group">
                  <label class="control-label col-md-3 col-sm-3 col-xs-12" for="firstname"><spring:message code="user.firstname" /> <span class="required">*</span> </label>
                  <div class="col-md-9 col-sm-9 col-xs-12">
                     <form:input path="firstname" type="text" required="required" class="form-control" />

=====================================================
== File: src/main/webapp/WEB-INF/views/administration/user/user_javascript.jsp
=====================================================
<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>

<script type="text/javascript" charset="utf-8">
    function findAllUsers(){
       $('#user_list').dataTable({
      	  "destroy": true,
          "bProcessing": true,
          "bServerSide": true,
          "sPaginationType": "full_numbers",
          "sAjaxDataProp": "rows",
          "aoColumns": [
              {"mData": "username"}, 
              {"mData": "firstname"},
              {"mData": "lastname"},
              {"mData": "email"},
              {"sName": "Actions",
                 "bSearchable": false,
                 "bSortable": false,
                 "sDefaultContent": "",
                 "mRender":  function(data, type, full){
                    return "<a href='${pageContext.request.contextPath}/administration/user/update?id=" + full['id'] + "' class='btn btn-primary btn-xs'><i class='fa fa-folder'></i> <spring:message code='common.update' /> </a> "+
                           "<a href='${pageContext.request.contextPath}/administration/user/delete?id=" + full['id'] + "' class='btn btn-danger btn-xs'><i class='fa fa-trash'></i> <spring:message code='common.delete' /> </a>"+
                           "<a data-href='${pageContext.request.contextPath}/administration/user/expire/session?id=" + full['id'] + "' class='btn btn-warning btn-xs open-modal-expire-session'><i class='fa fa-sign-out'></i> <spring:message code='common.expire.session' /></a>";
                 }
             }
          ],
          "sAjaxSource": "${pageContext.request.contextPath}/administration/user/findallpaginated",
          "oLanguage": {"sUrl": "${pageContext.request.contextPath}/static/plugin_extension/datatables/i18n/datatables-${pageContext.response.locale}.properties"},
          "fnServerParams": addparams,
          "fnServerData": function ( sSource, aoData, fnCallback, oSettings ) {
             oSettings.jqXHR = $.ajax( {
               "dataType": 'json',
               "type": "POST",
               "url": sSource,
               "data": aoData,
               "success":  function (json) {
                  fnCallback(json.result);
               },
               "error": function (e) {
                   console.log(e.message);
               }
             });
           },
          "initComplete": function( settings, json ) {
             $(".open-modal-expire-session").on("click", function () {
                $(".modal-footer #expire-session").attr("href", $(this).data('href'));
                $("#modal-expire-session").modal('show');
          	 });
           }
      }).columnFilter({

=====================================================
== File: src/main/webapp/WEB-INF/views/administration/user/user_list.jsp
=====================================================
<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>

<%@include file="user_javascript.jsp"%>

<div class="row">
   <div class="col-md-12 col-sm-12 col-xs-12">
      <div class="x_panel">
         <div class="x_title">
            <h2>
               <spring:message code="common.manage" />
               <spring:message code="users" />
            </h2>
            <ul class="nav navbar-right panel_toolbox">
               <li><a href="${pageContext.request.contextPath}/administration/user/create"><i class="fa fa-plus"></i></a></li>
               <li><a href="javascript:findAllUsers()"><i class="fa fa-refresh"></i></a></li>
               <li><a class="collapse-link"><i class="fa fa-chevron-up"></i></a></li>
            </ul>
            <div class="clearfix"></div>
         </div>
         <div class="x_content">
            <p class="text-muted font-13 m-b-30"></p>
            <table id="user_list" class="table table-striped table-bordered dt-responsive nowrap" cellspacing="0" width="100%">
               <thead>
                  <tr>
                     <th><spring:message code="user.username" /></th>
                     <th><spring:message code="user.firstname" /></th>
                     <th><spring:message code="user.lastname" /></th>
                     <th><spring:message code="user.email" /></th>
                     <th><spring:message code="common.actions" /></th>
                  </tr>
               </thead>
               <tfoot>
                  <tr>
                     <th><spring:message code="common.search.by" /> <spring:message code="user.username" /></th>
                     <th><spring:message code="common.search.by" /> <spring:message code="user.firstname" /></th>
                     <th><spring:message code="common.search.by" /> <spring:message code="user.lastname" /></th>
                     <th><spring:message code="common.search.by" /> <spring:message code="user.email" /></th>
                     <th></th>
                  </tr>
               </tfoot>
               <tbody>
               </tbody>
            </table>
            <div id="modal-expire-session" class="modal fade bs-example-modal-sm" tabindex="-1" role="dialog" aria-hidden="true">
               <div class="modal-dialog modal-sm">
                  <div class="modal-content">
                     <div class="modal-header">
                        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                           <span aria-hidden="true">&times;</span>
                        </button>

=====================================================
== File: src/main/webapp/WEB-INF/views/choreography/abstractparticipantbehavior/abstractparticipantbehavior.jsp
=====================================================
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<%@include file="choreographyspecification_javascript.jsp"%>
<%@include file="abstractparticipantbehavior_javascript.jsp"%>

<div class="row">
   <div class="col-md-12 col-sm-12 col-xs-12">
      <div class="margin_top_20">
         <div class="x_panel">
            <div class="x_title">
               <h2>
                  <spring:message code="choreography.participants" />
               </h2>
               <ul class="nav navbar-right panel_toolbox">
                  <li><a class="collapse-link"><i class="fa fa-chevron-up"></i></a></li>
               </ul>
               <div class="clearfix"></div>
            </div>
            <div class="x_content">
               <div class="text-right">
                  <button id="addCsParticipant" class="btn btn-success btn-sm">
                     <spring:message code="choreography.participant.create" />
                  </button>
               </div>
               <table id="participants-list" class="table table-striped table-bordered dt-responsive nowrap" cellspacing="0" width="100%">
                  <thead>
                     <tr>
                        <th><spring:message code="choreography.participant.name" /></th>
                        <th><spring:message code="common.actions" /></th>
                     </tr>
                  </thead>
                  <tbody>
                  </tbody>
               </table>
            </div>
         </div>
      </div>

      <div class="x_panel">
         <div class="x_title">
            <h2>
               <spring:message code="choreography.specification" />
            </h2>
            <ul class="nav navbar-right panel_toolbox">
               <li><a class="collapse-link"><i class="fa fa-chevron-up"></i></a></li>
            </ul>
            <div class="clearfix"></div>
         </div>
         <div class="x_content">
            <%-- Add participant modal --%>
            <div id="cs-participant-popUp-modal" class="modal fade" tabindex="-1" aria-labelledby="cs-participant-popUp-modal-label" role="dialog" aria-hidden="true">

=====================================================
== File: src/main/webapp/WEB-INF/views/choreography/abstractparticipantbehavior/abstractparticipantbehavior_javascript.jsp
=====================================================
<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>

<script type="text/javascript" charset="utf-8">
   // abstract participant behavior
   var apb_nodesDataset, apb_edgesDataset, apb_network = null;

   function apb_initNetwork(apb_nodesArray, apb_edgesArray) {
      apb_detroyNetwork();
      apb_nodesDataset = new vis.DataSet(apb_nodesArray);
      apb_edgesDataset = new vis.DataSet(apb_edgesArray);
      var items = {
         nodes: apb_nodesDataset,
         edges: apb_edgesDataset
      };

      var options = {
         groups: {
            genericNode: {
               color: {
                  border: '#2B7CE9',
                  background: '#97C2FC',
                  highlight: {
                     border: '#2B7CE9',
                     background: '#D2E5FF'
                  },
                  hover: {
                     border: '#2B7CE9',
                     background: '#D2E5FF'
                  }
               }
            },
            sourceNode: {
               color: {
                  border: '#33CC33',
                  background: '#ADEBAD',
                  highlight: {
                     border: '#33CC33',
                     background: '#D6F5D6'
                  },
                  hover: {
                     border: '#33CC33',
                     background: '#D6F5D6'
                  }
               }
            },
            sinkNode: {
               color: {
                  border: '#E92929',
                  background: '#FD9898',
                  highlight: {

=====================================================
== File: src/main/webapp/WEB-INF/views/choreography/abstractparticipantbehavior/choreographyspecification_javascript.jsp
=====================================================
<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>

<script type="text/javascript" charset="utf-8">
   // choreography specification
   var cs_nodesDataset, cs_edgesDataset, cs_network = null;

   function cs_initNetwork(cs_nodesArray, cs_edgesArray) {
      cs_detroyNetwork();
      cs_nodesDataset = new vis.DataSet(cs_nodesArray);
      cs_edgesDataset = new vis.DataSet(cs_edgesArray);

      var items = {
         nodes: cs_nodesDataset,
         edges: cs_edgesDataset
      };
      var options = {
         groups: {
            genericNode: {
               color: {
                  border: '#2B7CE9',
                  background: '#97C2FC',
                  highlight: {
                     border: '#2B7CE9',
                     background: '#D2E5FF'
                  },
                  hover: {
                     border: '#2B7CE9',
                     background: '#D2E5FF'
                  }
               }
            },
            sourceNode: {
               color: {
                  border: '#33CC33',
                  background: '#ADEBAD',
                  highlight: {
                     border: '#33CC33',
                     background: '#D6F5D6'
                  },
                  hover: {
                     border: '#33CC33',
                     background: '#D6F5D6'
                  }
               }
            },
            sinkNode: {
               color: {
                  border: '#E92929',
                  background: '#FD9898',
                  highlight: {

=====================================================
== File: src/main/webapp/WEB-INF/views/choreography/coordinationdelegate/coordinationdelegate.jsp
=====================================================
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<%@include file="coordinationdelegate_javascript.jsp"%>

<div class="row">
   <div class="col-md-12 col-sm-12 col-xs-12">
      <div class="x_panel">
         <div class="x_title">
            <h2>
               <spring:message code="coordination.delegate" />
            </h2>
            <ul class="nav navbar-right panel_toolbox">
               <li><a class="collapse-link"><i class="fa fa-chevron-up"></i></a></li>
            </ul>
            <div class="clearfix"></div>
         </div>
         <div class="x_content">
            <div id="coordinationdelegate_vis_container" class="col-md-8 col-sm-8 col-xs-12 vis_container"></div>
            <div class="col-md-4 col-sm-4 col-xs-12">
               <div class="">
                  <label> <input type="checkbox" id="cd-physics" class="form-control js-switch" /> <spring:message code="choreography.editor.lock" /> <label>
               </div>
               <div class="margin_top_20">
                  <div class="x_title">
                     <h2>
                        <spring:message code="choreography.properties" />
                     </h2>
                     <div class="clearfix"></div>
                  </div>
                  <%-- participant property --%>
                  <div id="coordinationdelegate-participant-properties" class="col-md-12 col-sm-12 col-xs-12" style="display: none">
                     <div class="property">
                        <p>
                           <spring:message code="choreography.participant.name" />
                        </p>
                        <input type="text" id="property-cd-participant-name" name="property-cd-participant-name" class="form-control" disabled />
                     </div>
                  </div>
                  
                  <%-- node property --%>
                  <div id="coordinationdelegate-node-properties" class="col-md-12 col-sm-12 col-xs-12" style="display: none">
                     <div class="property">
                        <p>
                           <spring:message code="choreography.state.id" />
                        </p>
                        <input type="text" id="property-cd-state-id" name="property-cd-state-id" class="form-control" disabled />
                     </div>
                     <%-- 
                     <div class="property">
                        <p>
                           <spring:message code="choreography.state.type" />

=====================================================
== File: src/main/webapp/WEB-INF/views/choreography/coordinationdelegate/coordinationdelegate_javascript.jsp
=====================================================
<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>

<script type="text/javascript" charset="utf-8">
   // coordination delegate
   var cd_nodesDataset, cd_edgesDataset, cd_network = null;

   function cd_initNetwork(cd_nodesArray, cd_edgesArray) {
      cd_detroyNetwork();
      cd_nodesDataset = new vis.DataSet(cd_nodesArray);
      cd_edgesDataset = new vis.DataSet(cd_edgesArray);
      var items = {
         nodes: cd_nodesDataset,
         edges: cd_edgesDataset
      };

      var options = {
         groups: {
            genericNode: {
               color: {
                  border: '#2B7CE9',
                  background: '#97C2FC',
                  highlight: {
                     border: '#2B7CE9',
                     background: '#D2E5FF'
                  },
                  hover: {
                     border: '#2B7CE9',
                     background: '#D2E5FF'
                  }
               }
            },
            sourceNode: {
               color: {
                  border: '#33CC33',
                  background: '#ADEBAD',
                  highlight: {
                     border: '#33CC33',
                     background: '#D6F5D6'
                  },
                  hover: {
                     border: '#33CC33',
                     background: '#D6F5D6'
                  }
               }
            },
            sinkNode: {
               color: {
                  border: '#E92929',
                  background: '#FD9898',
                  highlight: {

=====================================================
== File: src/main/webapp/WEB-INF/views/choreography/hybridsystembehavior/concreteparticipantbehavior_javascript.jsp
=====================================================
<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>

<script type="text/javascript" charset="utf-8">
   // concrete participant behavior
   var cpb_nodesDataset, cpb_edgesDataset, cpb_network = null;

   function cpb_initNetwork(cpb_nodesArray, cpb_edgesArray) {
      cpb_detroyNetwork();
      cpb_nodesDataset = new vis.DataSet(cpb_nodesArray);
      cpb_edgesDataset = new vis.DataSet(cpb_edgesArray);

      var items = {
         nodes: cpb_nodesDataset,
         edges: cpb_edgesDataset
      };
      var options = {
         groups: {
            genericNode: {
               color: {
                  border: '#2B7CE9',
                  background: '#97C2FC',
                  highlight: {
                     border: '#2B7CE9',
                     background: '#D2E5FF'
                  },
                  hover: {
                     border: '#2B7CE9',
                     background: '#D2E5FF'
                  }
               }
            },
            sourceNode: {
               color: {
                  border: '#33CC33',
                  background: '#ADEBAD',
                  highlight: {
                     border: '#33CC33',
                     background: '#D6F5D6'
                  },
                  hover: {
                     border: '#33CC33',
                     background: '#D6F5D6'
                  }
               }
            },
            sinkNode: {
               color: {
                  border: '#E92929',
                  background: '#FD9898',
                  highlight: {

=====================================================
== File: src/main/webapp/WEB-INF/views/choreography/hybridsystembehavior/hybridsystembehavior.jsp
=====================================================
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<%@include file="concreteparticipantbehavior_javascript.jsp"%>
<%@include file="hybridsystembehavior_javascript.jsp"%>

<div class="row">
   <div class="col-md-12 col-sm-12 col-xs-12">
      <div class="x_panel">
         <div class="x_title">
            <h2>
               <spring:message code="concrete.participant.behavior" />
            </h2>
            <ul class="nav navbar-right panel_toolbox">
               <li><a class="collapse-link"><i class="fa fa-chevron-up"></i></a></li>
            </ul>
            <div class="clearfix"></div>
         </div>
         <div class="x_content">
            <%-- Add participant modal --%>
            <div id="cpb-participant-popUp-modal" class="modal fade" tabindex="-1" aria-labelledby="cpb-participant-popUp-modal-label" role="dialog" aria-hidden="true">
               <div class="modal-dialog modal-lg">
                  <div class="modal-content">
                     <div class="modal-header">
                        <button type="button" class="close" data-dismiss="modal">
                           <span aria-hidden="true">×</span>
                        </button>
                        <h4 class="modal-title" id="cpb-participant-popUp-modal-label">
                           <spring:message code="choreography.participant.create" />
                        </h4>
                     </div>
                     <div class="modal-body">
                        <div class="row">
                           <label class="col-md-3 col-sm-12 col-xs-12 text-md-right text-sm-left text-xs-left" for="cpb-participant-name"><spring:message code="choreography.participant.name" /><span class="required">*</span></label>
                           <div class="col-md-9 col-sm-12 col-xs-12">
                              <input type="text" id="cpb-participant-name" name="cpb-participant-name" data-parsley-participant_exists="" data-parsley-trigger="focusout" required="required" class="form-control" />
                           </div>
                        </div>
                     </div>
                     <div class="modal-footer">
                        <button type="button" class="btn btn-default" data-dismiss="modal">
                           <spring:message code="common.close" />
                        </button>
                        <button id="saveCpbParticipant" type="button" class="btn btn-primary">
                           <spring:message code="common.create" />
                        </button>
                     </div>
                  </div>
               </div>
            </div>

            <%-- Add node modal --%>

=====================================================
== File: src/main/webapp/WEB-INF/views/choreography/hybridsystembehavior/hybridsystembehavior_javascript.jsp
=====================================================
<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>

<script type="text/javascript" charset="utf-8">
   // hybrid system behavior
   var hsb_nodesDataset, hsb_edgesDataset, hsb_network = null;

   function hsb_initNetwork(hsb_nodesArray, hsb_edgesArray) {
      hsb_detroyNetwork();
      hsb_nodesDataset = new vis.DataSet(hsb_nodesArray);
      hsb_edgesDataset = new vis.DataSet(hsb_edgesArray);
      var items = {
         nodes: hsb_nodesDataset,
         edges: hsb_edgesDataset
      };

      var options = {
         groups: {
            genericNode: {
               color: {
                  border: '#2B7CE9',
                  background: '#97C2FC',
                  highlight: {
                     border: '#2B7CE9',
                     background: '#D2E5FF'
                  },
                  hover: {
                     border: '#2B7CE9',
                     background: '#D2E5FF'
                  }
               }
            },
            sourceNode: {
               color: {
                  border: '#33CC33',
                  background: '#ADEBAD',
                  highlight: {
                     border: '#33CC33',
                     background: '#D6F5D6'
                  },
                  hover: {
                     border: '#33CC33',
                     background: '#D6F5D6'
                  }
               }
            },
            sinkNode: {
               color: {
                  border: '#E92929',
                  background: '#FD9898',
                  highlight: {

=====================================================
== File: src/main/webapp/WEB-INF/views/common/copyright.jsp
=====================================================
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<spring:message code="common.application.name" /> - Copyright &copy; 2017 <a href="http://www.alexanderperucci.com/">Alexander Perucci</a>

=====================================================
== File: src/main/webapp/WEB-INF/views/common/welcome.jsp
=====================================================
PUT WELCOME PAGE HERE !

=====================================================
== File: src/main/webapp/WEB-INF/views/layout/content_top.jsp
=====================================================
<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>

<div class="row top_tiles">
	<div class="animated flipInY col-lg-3 col-md-3 col-sm-6 col-xs-12">
		<div class="tile-stats">
			<div class="icon">
				<i class="fa fa-caret-square-o-right"></i>
			</div>
			<div class="count">13</div>
			<h3>New members</h3>
			<p>Lorem ipsum psdea itgum rixt.</p>
		</div>
	</div>
	<div class="animated flipInY col-lg-3 col-md-3 col-sm-6 col-xs-12">
		<div class="tile-stats">
			<div class="icon">
				<i class="fa fa-comments-o"></i>
			</div>
			<div class="count">124</div>
			<h3>Registered users</h3>
			<p>Lorem ipsum psdea itgum rixt.</p>
		</div>
	</div>
	<div class="animated flipInY col-lg-3 col-md-3 col-sm-6 col-xs-12">
		<div class="tile-stats">
			<div class="icon">
				<i class="fa fa-sort-amount-desc"></i>
			</div>
			<div class="count">6</div>
			<h3>Defined profiles</h3>
			<p>Lorem ipsum psdea itgum rixt.</p>
		</div>
	</div>
	<div class="animated flipInY col-lg-3 col-md-3 col-sm-6 col-xs-12">
		<div class="tile-stats">
			<div class="icon">
				<i class="fa fa-check-square-o"></i>
			</div>
			<div class="count">49</div>
			<h3>Associated informations</h3>
			<p>Lorem ipsum psdea itgum rixt.</p>
		</div>
	</div>
</div>

=====================================================
== File: src/main/webapp/WEB-INF/views/layout/footer.jsp
=====================================================
<footer>
	<div class="pull-right">
		<%@include file="../common/copyright.jsp"%>
	</div>
	<div class="clearfix"></div>
</footer>

=====================================================
== File: src/main/webapp/WEB-INF/views/layout/layout.jsp
=====================================================
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>

<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<%@taglib uri="http://www.springframework.org/security/tags" prefix="security"%>

<tiles:importAttribute scope="request" />

<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">

<title><spring:message code="common.application.name" /></title>

<link rel="icon" type="image/ico" href="${pageContext.request.contextPath}/static/favicon.ico" />

<%@include file="layout_css.jsp"%>

<%-- jQuery - leave here because enables the use of $ on jsp pages that they use $(document).ready(function() {...}); --%>
<script src="${pageContext.request.contextPath}/static/gentelella/vendors/jquery/dist/jquery.min.js"></script>

<%-- Application --%>
<script src="${pageContext.request.contextPath}/static/application.js"></script>

</head>

<body class="nav-md">
   <div class="container body">
      <div class="main_container">

         <%-- left navigation --%>
         <tiles:insertAttribute name="navigation_left" />
         <%-- /left navigation --%>

         <%-- top navigation --%>
         <tiles:insertAttribute name="navigation_top" />
         <%-- /top navigation --%>

         <%-- page content --%>
         <div class="right_col" role="main">
            <div class="">
               <%-- top content 
               <tiles:insertAttribute name="content_top" />--%>
               <%-- /top content --%>

               <%-- content --%>

=====================================================
== File: src/main/webapp/WEB-INF/views/layout/layout_css.jsp
=====================================================
<%-- Bootstrap --%>
<link href="${pageContext.request.contextPath}/static/gentelella/vendors/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">

<%-- Font Awesome --%>
<link href="${pageContext.request.contextPath}/static/gentelella/vendors/font-awesome/css/font-awesome.min.css" rel="stylesheet">

<%-- NProgress --%>
<link href="${pageContext.request.contextPath}/static/gentelella/vendors/nprogress/nprogress.css" rel="stylesheet">

<%-- Dropzone.js --%>
<link href="${pageContext.request.contextPath}/static/gentelella/vendors/dropzone/dist/min/dropzone.min.css" rel="stylesheet">

<%-- Animate.css --%>
<link href="${pageContext.request.contextPath}/static/gentelella/vendors/animate.css/animate.min.css" rel="stylesheet">

<%-- Datatables Responsive --%>
<link href="${pageContext.request.contextPath}/static/gentelella/vendors/datatables.net-bs/css/dataTables.bootstrap.min.css" rel="stylesheet">
<link href="${pageContext.request.contextPath}/static/gentelella/vendors/datatables.net-responsive-bs/css/responsive.bootstrap.min.css" rel="stylesheet">
<link href="${pageContext.request.contextPath}/static/plugin_extension/datatables/datatables-columnfilter.css" rel="stylesheet">

<%-- Select2 --%>
<link href="${pageContext.request.contextPath}/static/gentelella/vendors/select2/dist/css/select2.min.css" rel="stylesheet">

<!-- Switchery -->
<link href="${pageContext.request.contextPath}/static/gentelella/vendors/switchery/dist/switchery.min.css" rel="stylesheet">

<%-- Cropper --%>
<link href="${pageContext.request.contextPath}/static/gentelella/vendors/cropper/dist/cropper.min.css" rel="stylesheet">

<%-- PNotify --%>
<link href="${pageContext.request.contextPath}/static/gentelella/vendors/pnotify/dist/pnotify.css" rel="stylesheet">
<link href="${pageContext.request.contextPath}/static/gentelella/vendors/pnotify/dist/pnotify.buttons.css" rel="stylesheet">
<link href="${pageContext.request.contextPath}/static/gentelella/vendors/pnotify/dist/pnotify.nonblock.css" rel="stylesheet">

<%-- Visjs --%>
<link href="${pageContext.request.contextPath}/static/plugin_extension/visjs/vis.min.css" rel="stylesheet">
    
<%-- Gentelella Theme Style --%>
<link href="${pageContext.request.contextPath}/static/gentelella/build/css/custom.min.css" rel="stylesheet">

<%-- Countries Flags --%>
<link href="${pageContext.request.contextPath}/static/plugin_extension/countries-flags/countries-flags.css" rel="stylesheet">

<%-- Application Style --%>
<link href="${pageContext.request.contextPath}/static/application.css" rel="stylesheet">

=====================================================
== File: src/main/webapp/WEB-INF/views/layout/layout_javascript.jsp
=====================================================
<%-- Bootstrap --%>
<script src="${pageContext.request.contextPath}/static/gentelella/vendors/bootstrap/dist/js/bootstrap.min.js"></script>

<%-- FastClick --%>
<script src="${pageContext.request.contextPath}/static/gentelella/vendors/fastclick/lib/fastclick.js"></script> 

<%-- NProgress --%>
<script src="${pageContext.request.contextPath}/static/gentelella/vendors/nprogress/nprogress.js"></script>

<!-- validator -->
<script src="${pageContext.request.contextPath}/static/gentelella/vendors/validator/validator.js"></script>

<%-- Dropzone.js --%>
<script src="${pageContext.request.contextPath}/static/gentelella/vendors/dropzone/dist/min/dropzone.min.js"></script>

<%-- Datatables Responsive --%>
<script src="${pageContext.request.contextPath}/static/gentelella/vendors/datatables.net/js/jquery.dataTables.min.js"></script>
<script src="${pageContext.request.contextPath}/static/gentelella/vendors/datatables.net-bs/js/dataTables.bootstrap.min.js"></script>
<script src="${pageContext.request.contextPath}/static/gentelella/vendors/datatables.net-responsive/js/dataTables.responsive.min.js"></script>
<script src="${pageContext.request.contextPath}/static/gentelella/vendors/datatables.net-responsive-bs/js/responsive.bootstrap.js"></script>
<script src="${pageContext.request.contextPath}/static/plugin_extension/datatables/datatables-columnfilter.js"></script>
<script src="${pageContext.request.contextPath}/static/plugin_extension/datatables/datatables-columnfilter-utility.js"></script>

<%-- Select2 --%>
<script src="${pageContext.request.contextPath}/static/gentelella/vendors/select2/dist/js/select2.full.min.js"></script>

<!-- Switchery -->
<script src="${pageContext.request.contextPath}/static/gentelella/vendors/switchery/dist/switchery.min.js"></script>

<%-- Cropper --%>
<script src="${pageContext.request.contextPath}/static/gentelella/vendors/cropper/dist/cropper.min.js"></script>

<%-- PNotify --%>
<script src="${pageContext.request.contextPath}/static/gentelella/vendors/pnotify/dist/pnotify.js"></script>
<script src="${pageContext.request.contextPath}/static/gentelella/vendors/pnotify/dist/pnotify.buttons.js"></script>
<script src="${pageContext.request.contextPath}/static/gentelella/vendors/pnotify/dist/pnotify.nonblock.js"></script>
<script src="${pageContext.request.contextPath}/static/gentelella/vendors/pnotify/dist/pnotify.animate.js"></script>

<%-- Parsley --%>
<script src="${pageContext.request.contextPath}/static/gentelella/vendors/parsleyjs/dist/parsley.min.js"></script>
<script src="${pageContext.request.contextPath}/static/plugin_extension/parsleyjs/parsley-extra.js"></script>
<script src="${pageContext.request.contextPath}/static/plugin_extension/parsleyjs/i18n/${pageContext.response.locale}.js"></script>

<%-- Visjs --%>
<script src="${pageContext.request.contextPath}/static/plugin_extension/visjs/vis.min.js"></script>
<script src="${pageContext.request.contextPath}/static/plugin_extension/visjs/i18n/vis.locales.js"></script>

<%-- Gentelella Theme Scripts --%> 
<script src="${pageContext.request.contextPath}/static/gentelella/build/js/custom.min.js"></script> 

=====================================================
== File: src/main/webapp/WEB-INF/views/layout/navigation_left.jsp
=====================================================
<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<%@ taglib uri="http://www.springframework.org/security/tags" prefix="security"%>

<div class="col-md-3 left_col">
	<div class="left_col scroll-view">
	    <div class="navbar nav_title" style="border: 0;">
           <a href="${pageContext.request.contextPath}/welcome" class="site_title">
           		<span><spring:message code="common.application.name" /></span>
           </a>
        </div>

        <div class="clearfix"></div>
        
        <%-- menu profile quick info --%>
        <div class="profile">
           <div class="profile_pic">
             <img class="avatar_image avatar_navigation_left" 
                  src="${pageContext.request.contextPath}/utility/user/avatar/show" 
                  data_origin_src="${pageContext.request.contextPath}/utility/user/avatar/show"
                  onerror="handleImageErrorLoad(this);"
                  data_error_src="${pageContext.request.contextPath}/static/images/user-template_1.png"     
                  alt="<security:authentication property='principal.user.firstname' /> <security:authentication property='principal.user.lastname' />">
           </div>
           <div class="profile_info">
              <span><spring:message code="common.welcome" />,</span>
              <h2><security:authentication property="principal.user.firstname" /> <security:authentication property="principal.user.lastname" /></h2>
           </div>
        </div>
        <%-- /menu profile quick info --%>
        <div class="clearfix"></div>
        <%-- sidebar menu --%>
		<div id="sidebar-menu" class="main_menu_side hidden-print main_menu">
           
			<div class="menu_section">
                <ul class="nav side-menu">
                 <security:authorize access="hasAnyRole('administrator')">
					<li><a><i class="fa fa-bug"></i><spring:message code="common.manage"/><span class="fa fa-chevron-down"></span></a>
						   <ul class="nav child_menu">
							   <li><a href="${pageContext.request.contextPath}/administration/user/list"><spring:message code="users"/></a></li>
						   </ul>
                    </li>
                    </security:authorize>
                    <li><a><i class="fa fa-transgender-alt"></i><spring:message code="choreography"/><span class="fa fa-chevron-down"></span></a>
                        <ul class="nav child_menu">
                           <li><a href="${pageContext.request.contextPath}/choreography/abstractparticipantbehavior"><spring:message code="abstract.participant.behavior.generator"/></a></li>
                           <li><a href="${pageContext.request.contextPath}/choreography/hybridsystembehavior"><spring:message code="hybrid.system.behavior.generator"/></a></li>
                           <li><a href="${pageContext.request.contextPath}/choreography/coordinationdelegate"><spring:message code="coordination.delegate.generator"/></a></li>
                           <li><a href="${pageContext.request.contextPath}/choreography/choreographedsystem"><spring:message code="choreographed.system"/></a></li>
                        </ul>
                    </li>

=====================================================
== File: src/main/webapp/WEB-INF/views/layout/navigation_top.jsp
=====================================================
<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<%@ taglib uri="http://www.springframework.org/security/tags" prefix="security"%>

<div class="top_nav">
	<div class="nav_menu">
		<nav>
			<div class="nav toggle">
				<a id="menu_toggle"><i class="fa fa-bars"></i></a>
			</div>
      
			<ul class="nav navbar-nav navbar-right">
				<li class="">
                     <a href="javascript:;"class="user-profile dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
                        <img class="avatar_image profile_img" 
                             src="${pageContext.request.contextPath}/utility/user/avatar/show"
                             data_origin_src="${pageContext.request.contextPath}/utility/user/avatar/show"
                             onerror="handleImageErrorLoad(this);"
                             data_error_src="${pageContext.request.contextPath}/static/images/user-template_1.png"     
                             alt="<security:authentication property='principal.user.firstname' /> <security:authentication property='principal.user.lastname' />">
                        <span class=" fa fa-angle-down"></span>
				     </a>
					<ul class="dropdown-menu dropdown-usermenu pull-right">
						<li><a href="${pageContext.request.contextPath}/settings/account"><i class="glyphicon glyphicon-cog pull-right"></i> <spring:message code="settings" /></a></li>
						<li><a href="${pageContext.request.contextPath}/j_spring_security_logout"><i class="glyphicon glyphicon-off pull-right"></i> <spring:message code="common.signout" /></a></li>
					</ul>
               </li>
<%--
				<li role="presentation" class="dropdown"><a href="javascript:;"
					class="dropdown-toggle info-number" data-toggle="dropdown"
					aria-expanded="false"> <i class="fa fa-envelope-o"></i> <span
						class="badge bg-green">6</span>
				</a>
					<ul id="menu1" class="dropdown-menu list-unstyled msg_list"
						role="menu">
						<li><a> <span class="image"><img
									src="${pageContext.request.contextPath}/static/images/user-template_1.png"
									alt="Profile Image" /></span> <span> <span>John Smith</span> <span
									class="time">3 mins ago</span>
							</span> <span class="message"> Film festivals used to be
									do-or-die moments for movie makers. They were where... </span>
						</a></li>
						<li><a> <span class="image"><img
									src="${pageContext.request.contextPath}/static/images/user-template_1.png"
									alt="Profile Image" /></span> <span> <span>John Smith</span> <span
									class="time">3 mins ago</span>
							</span> <span class="message"> Film festivals used to be
									do-or-die moments for movie makers. They were where... </span>
						</a></li>
						<li><a> <span class="image"><img
									src="${pageContext.request.contextPath}/static/images/user-template_1.png"

=====================================================
== File: src/main/webapp/WEB-INF/views/settings/account.jsp
=====================================================
<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>

<form:form modelAttribute="user" id="user_form" action="${pageContext.request.contextPath}${requestScope.action}" class="form-horizontal form-label-left" data-parsley-validate="data-parsley-validate"  method="POST">
   <form:hidden path="id" />
   <div class="form-group">
      <label class="control-label col-md-3 col-sm-3 col-xs-12" for="username"><spring:message code="user.username" /></label>
      <div class="col-md-9 col-sm-9 col-xs-12">
         <form:input path="username" type="text" name="username" class="form-control" disabled="true" />
      </div>
   </div>
   <div class="form-group">
      <label class="control-label col-md-3 col-sm-3 col-xs-12" for="firstname"><spring:message code="user.firstname" /><span class="required">*</span> </label>
      <div class="col-md-9 col-sm-9 col-xs-12">
         <form:input path="firstname" type="text" name="firstname" data-parsley-trigger="focusout" required="required" class="form-control" />
      </div>
   </div>
   <div class="form-group">
      <label class="control-label col-md-3 col-sm-3 col-xs-12" for="lastname"><spring:message code="user.lastname" /><span class="required">*</span> </label>
      <div class="col-md-9 col-sm-9 col-xs-12">
         <form:input path="lastname" type="text" name="lastname" data-parsley-trigger="focusout" required="required" class="form-control" />
      </div>
   </div>
   <div class="form-group">
      <label class="control-label col-md-3 col-sm-3 col-xs-12" for="email"><spring:message code="user.email" /><span class="required">*</span> </label>
      <div class="col-md-9 col-sm-9 col-xs-12">
         <spring:message code="user.email.already.exists" var="emailAlreadyExists" />
         <form:input path="email" type="email" name="email" data-parsley-trigger="focusout" data-parsley-remote-validator="remote-validator-email" data-parsley-remote-message="${emailAlreadyExists}" data-parsley-remote="${pageContext.request.contextPath}/utility/user/check/email?email={value}&user_id=${user.id}" class="form-control custom-parsley-success" required="required" />
      </div>
   </div>
   <div class="form-group margin_top_20">
      <div class="col-md-9 col-sm-9 col-xs-12 col-md-offset-3 col-sm-offset-3">
         <form:button type="reset" class="btn btn-default">
            <spring:message code="common.reset" />
         </form:button>
         <form:button type="submit" class="btn btn-success">
            <spring:message code="common.update" />
         </form:button>
      </div>
   </div>
</form:form>


=====================================================
== File: src/main/webapp/WEB-INF/views/settings/layout.jsp
=====================================================
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<%@ taglib uri="http://www.springframework.org/security/tags" prefix="security"%>

<%@include file="settings_javascript.jsp"%>

<div class="row">
   <div class="col-md-12 col-sm-12 col-xs-12">
      <div class="x_panel">
         <div class="x_title">
            <h2>
               <spring:message code="settings" />
            </h2>
            <ul class="nav navbar-right panel_toolbox">
               <li><a class="collapse-link"><i class="fa fa-chevron-up"></i></a></li>
            </ul>
            <div class="clearfix"></div>
         </div>
         <div class="x_content">
            <div class="col-md-3 col-sm-12 col-xs-12" id="crop-avatar">
               <div class="row">
                  <%-- Current avatar --%>
                  <div class="avatar-view">
                     <div id="avatarTooltip" class="animate slideInUp">                     
                        <div id="avatarTooltipContent">
                           <div id="avatarTooltipContentIcon" class="animate zoomIn">
                              <span class="fa fa-camera"></span>
                           </div>
                           <div id="avatarTooltipContentDescription">
                              <span><spring:message code='settings.avatar.change'/></span>
                           </div>
                        </div>
                     </div>
                     <img class="avatar_image" src="${pageContext.request.contextPath}/utility/user/avatar/show"
                                               data_origin_src="${pageContext.request.contextPath}/utility/user/avatar/show"
                                               onerror="handleImageErrorLoad(this);"
                                               data_error_src="${pageContext.request.contextPath}/static/images/user-template_1.png"
                                               alt="<security:authentication property='principal.user.firstname' /> <security:authentication property='principal.user.lastname' />">
                  </div>
               
                  <div id="avatar-modal" class="modal fade" tabindex="-1" aria-labelledby="avatar-modal-label" role="dialog" aria-hidden="true">
                     <div class="modal-dialog modal-lg">
                        <div class="modal-content">
                           <form class="avatar-form" action="${pageContext.request.contextPath}/utility/user/avatar/update" enctype="multipart/form-data" method="POST">
                              <div class="modal-header">
                                 <button type="button" class="close" data-dismiss="modal">&times;</button>
                                 <h4 class="modal-title" id="avatar-modal-label">
                                    <spring:message code="settings.avatar.change" />
                                 </h4>
                              </div>

=====================================================
== File: src/main/webapp/WEB-INF/views/settings/password.jsp
=====================================================
<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>

<form:form modelAttribute="user" id="user_form" action="${pageContext.request.contextPath}${requestScope.action}" class="form-horizontal form-label-left"  data-parsley-validate="data-parsley-validate" method="POST">
   <form:hidden path="id" />
   <div class="form-group">
      <label class="control-label col-md-3 col-sm-3 col-xs-12" for="password"><spring:message code="user.password" /></label>
      <div class="col-md-9 col-sm-9 col-xs-12">
         <form:input path="password" type="password" class="form-control" disabled="true"/>
      </div>
   </div>
   <div class="form-group">
      <label class="control-label col-md-3 col-sm-3 col-xs-12" for="newPassword"><spring:message code="user.password.new" /><span class="required">*</span> </label>
      <div class="col-md-9 col-sm-9 col-xs-12">
         <input id="newPassword" name="newPassword" type="password" data-parsley-trigger="focusout" required="required" class="form-control" />
      </div>
   </div>
   <div class="form-group">
      <label class="control-label col-md-3 col-sm-3 col-xs-12" for="confirmPassword"><spring:message code="user.password.repeat" /><span class="required">*</span> </label>
      <div class="col-md-9 col-sm-9 col-xs-12">
         <input id="confirmPassword" name="confirmPassword" type="password" data-parsley-trigger="focusout" data-parsley-equalto="#newPassword" required="required" class="form-control" />
      </div>
   </div>
   <div class="form-group margin_top_20">
      <div class="col-md-9 col-sm-9 col-xs-12 col-md-offset-3 col-sm-offset-3">
         <form:button type="reset" class="btn btn-default">
            <spring:message code="common.reset" />
         </form:button>
         <form:button type="submit" class="btn btn-success">
            <spring:message code="common.update" />
         </form:button>
      </div>
   </div>
</form:form>

=====================================================
== File: src/main/webapp/WEB-INF/views/settings/settings_javascript.jsp
=====================================================
<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>

<script type="text/javascript" charset="utf-8">
   function CropAvatar($element) {
      this.$container = $element;

      this.$avatarView = this.$container.find('.avatar-view');
      this.$allAvatar = $('.avatar_image');
      this.$avatar = this.$avatarView.find('img');
      this.$avatarTooltip = this.$avatarView.find('#avatarTooltip');
      this.$avatarModal = this.$container.find('#avatar-modal');
      this.$avatarForm = this.$avatarModal.find('.avatar-form');
      this.$avatarUpload = this.$avatarForm.find('.avatar-upload');
      this.$avatarSrc = this.$avatarForm.find('.avatar-src');
      this.$avatarData = this.$avatarForm.find('.avatar-data');
      this.$avatarInput = this.$avatarForm.find('.avatar-input');
      this.$avatarSave = this.$avatarForm.find('.avatar-save');
      this.$avatarBtns = this.$avatarForm.find('.avatar-btns');

      this.$avatarWrapper = this.$avatarModal.find('.avatar-wrapper');
      this.$avatarPreview = this.$avatarModal.find('.avatar-preview');

      this.init();
   }

   $(document)
         .ready(
               function() {
                  CropAvatar.prototype = {
                     constructor : CropAvatar,

                     support : {
                        fileList : !!$('<input type="file">').prop('files'),
                        blobURLs : !!window.URL && URL.createObjectURL,
                        formData : !!window.FormData
                     },

                     init : function() {
                        this.support.datauri = this.support.fileList
                              && this.support.blobURLs;

                        if (!this.support.formData) {
                           this.initIframe();
                        }

                        this.initModal();
                        this.addListener();
                     },

                     addListener : function() {

=====================================================
== File: src/main/webapp/WEB-INF/views/standalone/login.jsp
=====================================================
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>

<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%>

<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">

<title><spring:message code="common.application.name" /></title>

<link rel="icon" type="image/ico" href="${pageContext.request.contextPath}/static/favicon.ico" />

<%@include file="../layout/layout_css.jsp"%>

<%-- jQuery - leave here because enables the use of $ on jsp pages that they use $(document).ready(function() {...}); --%>
<script src="${pageContext.request.contextPath}/static/gentelella/vendors/jquery/dist/jquery.min.js"></script>

<%-- Application --%>
<script src="${pageContext.request.contextPath}/static/application.js"></script>

</head>

<body class="login">
   <div id="languages"><span class="bfh-languages" data-language="en_US" data-flags="true">
      <a href="?lang=en"><i class="glyphicon flag-US"></i> English</span></a> <a href="?lang=it"><i class="glyphicon flag-IT"></i> Italiano</span></a>
   </div>
   <div>
      <a class="hiddenanchor" id="signup"></a> <a class="hiddenanchor" id="signin"></a> <a class="hiddenanchor" id="forgot"></a>

      <div class="login_wrapper">
         <div class="animate form signin_form">
            <section class="login_content">
               <form action="${pageContext.request.contextPath}/j_spring_security_check" data-parsley-validate="data-parsley-validate" method="post">
                  <h1>
                     <spring:message code="common.signin" />
                  </h1>
                  <div>
                     <input type="text" name="j_username" placeholder="<spring:message code='user.username' />" required="required" class="form-control" />
                  </div>
                  <div>
                     <input type="password" name="j_password" placeholder="<spring:message code='user.password' />" required="required" class="form-control" />
                  </div>
                  <div>
                     <button class="btn btn-theme btn-block" type="submit">
                        <i class="fa fa-lock"></i>
                        <spring:message code="common.signin" />

=====================================================
== File: src/main/webapp/WEB-INF/views/standalone/page_403.jsp
=====================================================
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>

<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%>

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <title><spring:message code="common.application.name" /></title>
   
    <link rel="icon" type="image/ico" href="${pageContext.request.contextPath}/static/favicon.ico" />

    <%@include file="../layout/layout_css.jsp"%>
  </head>

  <body class="nav-md">
    <div class="container body">
      <div class="main_container">
        <!-- page content -->
        <div class="col-md-12 col-sm-12 col-xs-12">
          <div class="col-middle">
            <div class="text-center text-center">
              <h1 class="error-number">403</h1>
              <h2><spring:message code="common.failure.accessdenied" /></h2>
              <p><spring:message code="common.failure.accessdenied.message" /> <a href="${pageContext.request.contextPath}/welcome"><spring:message code="common.home" /></a>
              </p>
            </div>
          </div>
        </div>
        <!-- /page content -->
      </div>
    </div>
  </body>
</html>

=====================================================
== File: src/main/webapp/WEB-INF/views/standalone/page_404.jsp
=====================================================
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>

<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%>

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <title><spring:message code="common.application.name" /></title>
   
    <link rel="icon" type="image/ico" href="${pageContext.request.contextPath}/static/favicon.ico" />

    <%@include file="../layout/layout_css.jsp"%>
  </head>

  <body class="nav-md">
    <div class="container body">
      <div class="main_container">
        <!-- page content -->
        <div class="col-md-12 col-sm-12 col-xs-12">
          <div class="col-middle">
            <div class="text-center text-center">
              <h1 class="error-number">404</h1>
              <h2><spring:message code="common.failure.resourcenotfound" /></h2>
              <p><spring:message code="common.failure.resourcenotfound.message" /> <a href="${pageContext.request.contextPath}/welcome"><spring:message code="common.home" /></a>
              </p>
            </div>
          </div>
        </div>
        <!-- /page content -->
      </div>
    </div>
  </body>
</html>

=====================================================
== File: src/main/webapp/WEB-INF/views/standalone/page_440.jsp
=====================================================
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>

<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%>

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <title><spring:message code="common.application.name" /></title>
   
    <link rel="icon" type="image/ico" href="${pageContext.request.contextPath}/static/favicon.ico" />

    <%@include file="../layout/layout_css.jsp"%>
  </head>

  <body class="nav-md">
    <div class="container body">
      <div class="main_container">
        <!-- page content -->
        <div class="col-md-12 col-sm-12 col-xs-12">
          <div class="col-middle">
            <div class="text-center text-center">
              <h1 class="error-number">440</h1>
              <h2><spring:message code="common.failure.logintimeout" /></h2>
              <p><spring:message code="common.failure.logintimeout.message" /> <a href="${pageContext.request.contextPath}/login"><spring:message code="common.signin" /></a>
              </p>
            </div>
          </div>
        </div>
        <!-- /page content -->
      </div>
    </div>
  </body>
</html>

=====================================================
== File: src/main/webapp/WEB-INF/views/standalone/page_500.jsp
=====================================================
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>

<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%>

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <title><spring:message code="common.application.name" /></title>
   
    <link rel="icon" type="image/ico" href="${pageContext.request.contextPath}/static/favicon.ico" />

    <%@include file="../layout/layout_css.jsp"%>
  </head>

  <body class="nav-md">
    <div class="container body">
      <div class="main_container">
        <!-- page content -->
        <div class="col-md-12 col-sm-12 col-xs-12">
          <div class="col-middle">
            <div class="text-center text-center">
              <h1 class="error-number">500</h1>
              <h2><spring:message code="common.error" /></h2>
              <p><spring:message code="common.failure.uncaughtexception.message" /> <a href="${pageContext.request.contextPath}/welcome"><spring:message code="common.home" /></a>
              </p>
            </div>
          </div>
        </div>
        <!-- /page content -->
      </div>
    </div>
  </body>
</html>

=====================================================
== File: src/main/webapp/WEB-INF/web.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://xmlns.jcp.org/xml/ns/javaee"
   xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
   version="3.1">
   <display-name>multisynth-studio</display-name>

   <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>
            /WEB-INF/spring/root-context.xml /WEB-INF/spring/security-config.xml
        </param-value>
   </context-param>

   <servlet>
      <servlet-name>multisynth-studio</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <init-param>
         <param-name>contextConfigLocation</param-name>
         <param-value>/WEB-INF/spring/webmvc-config.xml</param-value>
         <param-value>/WEB-INF/spring/webmvc-config.xml</param-value>
      </init-param>
      <load-on-startup>1</load-on-startup>
   </servlet>
   
   <servlet-mapping>
      <servlet-name>multisynth-studio</servlet-name>
      <url-pattern>/</url-pattern>
   </servlet-mapping>
   
   <error-page>
      <error-code>404</error-code>
      <location>/resourcenotfound</location>
   </error-page>
   
   <!-- SpringSecurity Filter Chain -->
    
   <filter>
      <filter-name>springSecurityFilterChain</filter-name>
      <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
   </filter>
   
   <filter-mapping>
      <filter-name>springSecurityFilterChain</filter-name>
      <url-pattern>/*</url-pattern>
   </filter-mapping>
   
   <listener>
      <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
   </listener>