diff --git a/keycloak/scripts/ansible/inventories/local/group_vars/local-es.yml b/keycloak/scripts/ansible/inventories/local/group_vars/local-es.yml deleted file mode 100644 index 947c47f1..00000000 --- a/keycloak/scripts/ansible/inventories/local/group_vars/local-es.yml +++ /dev/null @@ -1,6 +0,0 @@ -es_heap_size: 1500m -es_etc_cluster_name: sunbird-dev -es_etc_discovery_zen_minimum_master_nodes: 2 -es_snapshot_host: "{{ groups['es-backup'][0] }}" -es_restore_host: "{{ groups['es-backup'][0] }}" -snapshot_base_path: application diff --git a/keycloak/scripts/ansible/inventories/local/group_vars/local-log-es.yml b/keycloak/scripts/ansible/inventories/local/group_vars/local-log-es.yml deleted file mode 100644 index a62feed5..00000000 --- a/keycloak/scripts/ansible/inventories/local/group_vars/local-log-es.yml +++ /dev/null @@ -1,6 +0,0 @@ -es_heap_size: 1500m -es_etc_cluster_name: sunbird-log-dev -es_snapshot_host: "{{ groups['log-es-backup'][0] }}" -es_restore_host: "{{ groups['log-es-backup'][0] }}" -snapshot_base_path: logger -es_host: "{{ groups['log-es'][0] }}" diff --git a/keycloak/scripts/ansible/inventories/local/group_vars/local-postgresql-master.yml b/keycloak/scripts/ansible/inventories/local/group_vars/local-postgresql-master.yml deleted file mode 100644 index 804b9da3..00000000 --- a/keycloak/scripts/ansible/inventories/local/group_vars/local-postgresql-master.yml +++ /dev/null @@ -1,25 +0,0 @@ -# postgresql_users should only be created in master and replicated to slave -postgresql_databases: - - name: "{{kong_postgres_database}}" - - name: "{{keycloak_postgres_database}}" - - name: "{{application_postgres_database}}" - -postgresql_users: - - name: "{{ postgres_replication_user_name }}" - password: "{{ postgres_replication_user_password }}" - role_attr_flags: REPLICATION - - name: "{{ postgres_exporter_user }}" - password: "{{ postgres_exporter_password }}" - role_attr_flags: SUPERUSER - - name: "{{kong_postgres_user}}" - password: "{{kong_postgres_password}}" - db: "{{kong_postgres_database}}" - priv: "ALL" - - name: "{{keycloak_postgres_user}}" - password: "{{keycloak_postgres_password}}" - db: "{{keycloak_postgres_database}}" - priv: "ALL" - - name: "{{application_postgres_user}}" - password: "{{application_postgres_password}}" - db: "{{application_postgres_database}}" - priv: "ALL" diff --git a/keycloak/scripts/ansible/inventories/local/group_vars/local.yml b/keycloak/scripts/ansible/inventories/local/group_vars/local.yml deleted file mode 100644 index 9c5173b7..00000000 --- a/keycloak/scripts/ansible/inventories/local/group_vars/local.yml +++ /dev/null @@ -1,291 +0,0 @@ -# ENVIRONMENT CONFIGURATION -env: local #Name of the environment, e.g. dev, staging or production. -proxy_server_name: dev.open-sunbird.org #Domain on which the portal will be accessed. e.g. staging.{implementation-name}.org -proxy_site_key: "{{ vault_proxy_site_key }}" #SSL certificate's site.key file contents. More details in this wiki: https://github.com/project-sunbird/sunbird-commons/wiki/Updating-SSL-certificates-in-Sunbird-Proxy-service -proxy_site_crt: "{{ vault_proxy_site_crt }}" #SSL certificate's site.crt file contents. More details in this wiki: https://github.com/project-sunbird/sunbird-commons/wiki/Updating-SSL-certificates-in-Sunbird-Proxy-service -ansible_connection: "local" - -# DB CONFIGURATION - -## Below passwords are used by DB install scripts when creating databases. Please use strong passwords. -application_postgres_password: "{{vault_application_postgres_password}}" #Password for Application database. -keycloak_postgres_password: "{{vault_keycloak_postgres_password}}" #Password for Keycloak (Authentication service) database. -kong_postgres_password: "{{ vault_kong_postgres_password }}" #Password for Kong (API Manager) database. - -## Postgres configuration -swarm_address_space: 10.0.0.0/16 #Application server address space (e.g. 10.3.0.0/24), also the agentpublicSubnet if using Azure scripts provided -keycloak_address_space: 10.113.0.0/24 -postgres_address_space: 10.10.0.0/24 - -## Cassandra configuration -cassandra_server_private_ip: 10.10.4.4 #Private IP of cassandra server -keystore_password: "{{vault_keystore_password}}" #Password to use for encrypting cassandra keystore. Use a strong password. -truststore_password: "{{vault_truststore_password}}" #Password to use for encrypting cassandra truststore. Use a strong password. - -# APPLICATION CONFIGURATION - -kong_host: api-manager_kong - -## DB address -application_postgres_host: "{{ groups['postgresql-master'][0]}}" #Private IP of Postgres server -keycloak_postgres_host: "{{ groups['postgresql-master'][0]}}" #Private IP of Postgres server -kong_postgres_host: "{{ groups['postgresql-master'][0]}}" #Private IP of Postgres server -sunbird_mongo_ip: 10.10.2.5 #Private IP of Mongo DB server -sunbird_cassandra_host: 10.10.4.4 #Private IP of Cassandra server -sunbird_es_host: 10.10.3.7,10.10.3.8,10.10.3.6 #Private IP of Elastic Search server. If ES cluster has multiple nodes then add all nodes by separating them with comma. e.g. 10.2.0.1,10.2.0.2,10.2.0.3 - -## Application server configurations -sunbird_ekstep_api_base_url: https://qa.ekstep.in/api #API base URL of the Ekstep environment. Use `https://qa.ekstep.in/api` for non-prod deployments, and use `https://api.ekstep.in/` for prod deployment. -sunbird_ekstep_proxy_base_url: https://qa.ekstep.in #Base URL of the Ekstep environment. Use `https://qa.ekstep.in/` for non-prod deployments, and `https://community.ekstep.in/` for prod deployment. -sunbird_env: qa #Ekstep environment to connect to. Use `qa` for non-prod deployments, and `prod` for prod deployment. -sunbird_mail_server_host: "{{ mail_server_host }}" #SMTP server IP. Could be ignored if not mails are to be sent. -sunbird_mail_server_port: "{{ mail_server_port }}" #SMTP port. Could be ignored if not mails are to be sent. -sunbird_mail_server_username: "{{ mail_server_username }}" #SMTP username. Could be ignored if not mails are to be sent. -sunbird_mail_server_password: "{{ mail_server_password }}" #SMTP server pasword. Could be ignored if not mails are to be sent. -sunbird_mail_server_from_email: support-dev@open-sunbird.org #Email ID that should be as from address in mails - -## Keycloak (auth server) login details -sunbird_sso_username: "{{ vault_sunbird_sso_username }}" -sunbird_sso_password: "{{ vault_sunbird_sso_password }}" -keycloak_admin_username: admin -keycloak_admin_initial_password: "{{ vault_keycloak_admin_password }}" -keycloak_tar_path: keycloak.tar.gz -keycloak_theme_path: artifacts/sunbird - - -## Content Repo configuration -sunbird_api_auth_token: "{{ vault_sunbird_api_auth_token }}" #Authorization key (JWT) to access Sunbird APIs. This will be in the output of deploy-apis.sh script, extracting it out is documented in the deployment wiki. -sunbird_ekstep_api_key: "{{ vault_sunbird_ekstep_api_key }}" #Authorization key (JWT) to access Ekstep APIs. Steps to generate this are documented on https://github.com/project-sunbird/sunbird-commons/wiki/Obtaining-API-token-for-accessing-ekstep-APIs -sunbird_trampoline_secret: "{{ vault_sunbird_trampoline_secret }}" - -# ADVANCED CONFIGURATIONS - -cassandra_listen_address: "{{ cassandra_server_private_ip }}" -cassandra_seeds: "{{ cassandra_server_private_ip }}" -cassandra_broadcast_rpc_address: "{{ cassandra_server_private_ip }}" -cassandra_broadcast_address: "{{ cassandra_server_private_ip }}" -cassandra_listen_interface: '' -cassandra_log_dir: '/var/log/cassandra' -cassandra_root_dir: '/etc/cassandra' -cassandra_version: '3.9' -cassandra_port: 9042 -cassandra_rpc_address: 0.0.0.0 -cassandra_restore_dir: /home/deployer/ -cassandra_backup_azure_container_name: cassandra-backup -cassandra_backup_azure_storage_account_name: "{{ backup_storage_name }}" -cassandra_backup_azure_storage_access_key: "{{backup_storage_key}}" -cassandra_backup_dir: /data/cassandra/backup - -keycloak_url: http://10.113.0.7 - -keycloak_auth_server_url: "https://{{ proxy_server_name }}/auth" -keycloak_realm: sunbird -sunbird_content_player_url: "https://{{ proxy_server_name }}/api/" -sunbird_learner_player_url: "https://{{ proxy_server_name }}/api/" -sunbird_sso_client_id: admin-cli -sunbird_mongo_port: 27017 -sunbird_mongodb_port: 27017 -sunbird_portal_realm: sunbird -sunbird_portal_auth_server_client: portal -sunbird_trampoline_client_id: trampoline -sunbird_appid: sunbird_portal -sunbird_default_tenant: sunbird -sunbird_echo_api_url: "https://{{ proxy_server_name }}/api/echo/" -sunbird_pg_host: "{{ application_postgres_host }}" -sunbird_pg_port: 5432 -sunbird_pg_db: quartz -sunbird_pg_user: quartz -sunbird_pg_password: "{{ application_postgres_password }}" -sunbird_installation: sunbird -sunbird_account_name: sunbirddev -sunbird_account_key: "{{ vault_sunbird_account_key }}" -sunbird_sunbird_quartz_mode: cluster -sunbird_encryption_mode: local -sunbird_cassandra_urls: "{{ cassandra_server_private_ip }}:{{ cassandra_port }}" -sunbird_session_store_type: cassandra -sunbird_keycloak_client_id: 'portal' -sunbird_keycloak_public: true -sunbird_cache_store: "memory" -sunbird_cache_ttl: 1800 -sunbird_portal_title_name: portal -sunbird_web_url: "https://{{ proxy_server_name }}" -sunbird_sso_publickey: "{{vault_sunbird_sso_publickey}}" -sunbird_azure_storage_account: "{{vault_sunbird_azure_storage_account}}" -sunbird_azure_storage_key: "{{vault_sunbird_azure_storage_key}}" -sunbird_container_name: portal -sunbird_cdn_url: https://dev-sunbird-temp.azureedge.net/{{sunbird_container_name}} -mongo_backup_dir: /home/deployer/mongo-backups -sunbird_background_actor_host: actor-service -sunbird_actor_system_name: BackGroundRemoteMiddlewareActorSystem -sunbird_app_url: -sunbird_fcm_account_key: -sunbird_env_logo_url: - - -#player_tenant_dir: -sunbird_dataservice_url: https://{{ proxy_server_name }}/api/ -project: sunbird -application_postgres_database: quartz -application_postgres_user: quartz -keycloak_postgres_database: keycloak -keycloak_postgres_user: keycloak - - -## Cassandra download URI -cassandra_repo: 'deb http://www.apache.org/dist/cassandra/debian 39x main' -cassandra_repo_key: 'https://www.apache.org/dist/cassandra/KEYS' - -#API Manager -kong_postgres_port: 5432 -kong_postgres_user: api_manager_dev -kong_postgres_database: api_manager_dev - -es_curl_host: 10.10.3.7 - -## Logging details -syslog: - host: 172.16.0.5 - port: 51415 - -## PostgreSQL config -postgres_replication_user_name: replication -postgres_replication_user_password: "{{ vault_postgres_replication_user_password }}" - -postgresql_hba_entries: - - { type: local, database: all, user: postgres, auth_method: peer } - - { type: local, database: all, user: all, auth_method: peer } - - { type: host, database: all, user: all, address: '127.0.0.1/32', auth_method: md5 } - - { type: host, database: all, user: all, address: '::1/128', auth_method: md5 } - - { type: host, database: all, user: "{{ postgres_exporter_user }}", address: '{{ swarm_address_space }}', auth_method: md5 } - - { type: host, database: replication, user: "{{ postgres_replication_user_name }}", address: '{{ postgres_address_space }}', auth_method: md5 } - - { type: host, database: all, user: all, address: '{{ swarm_address_space }}', auth_method: md5 } - - { type: host, database: all, user: all, address: '{{ keycloak_address_space }}', auth_method: md5 } - -ansible_vault_password: "{{ vault_ansible_vault_password }}" -docker_hub_password: "{{ vault_docker_hub_password }}" -jenkins_slave_jenkins_username: "{{ vault_jenkins_slave_jenkins_username }}" -jenkins_slave_jenkins_password: "{{ vault_jenkins_slave_jenkins_password }}" -ops_private_key: "{{ vault_ops_private_key }}" -deployer_ssh_key: "{{ vault_deployer_ssh_key }}" -proxy_prometheus_admin_creds: "{{ vault_proxy_prometheus_admin_creds }}" - -# ADDITIONAL CONFIGURATION -backup_storage_name: "sunbirdbackupsdev" -prometheus_storage_retention_time: 72h0m0s -curl_host: dev.open-sunbird.org - -mail_server_host: smtp.sendgrid.net -mail_server_port: 587 -mail_server_username: azure_886153b1defb14e38ecc9c7301625aba@azure.com -mail_server_password: "{{ vault_mail_server_password }}" - -logger_es_host: "{{ groups['dev-log-es'][0] }}" -logger_es_port: 9200 - -kibana_oauth_redirect_url: https://dev.open-sunbird.org/oauth2/callback -monitor_alerts_slack_channel: sunbird-dev-alert -keycloak: True - -api__host: dev.open-sunbird.org - -proxy_replicas: 2 -proxy_reservation_memory: 32M -proxy_limit_memory: 128M -kong_replicas: 3 -kong_reservation_memory: 64M -kong_limit_memory: 256M -echo_service_replicas: 2 -echo_service_reservation_memory: 8M -echo_service_limit_memory: 16M -adminutil_replicas: 2 -adminutil_reservation_memory: 512M -adminutil_limit_memory: 1024M - -actor_replicas: 2 -actor_reservation_memory: 500M -actor_limit_memory: 1024M - -learner_replicas: 2 -learner_reservation_memory: 1500M -learner_limit_memory: 1500M - -player_replicas: 2 -player_reservation_memory: 256M -player_limit_memory: 512M - -content_replicas: 2 -content_reservation_memory: 64M -content_limit_memory: 256M - -keycloak1_replicas: 1 -keycloak1_reservation_memory: 768M -keycloak1_limit_memory: 1024M - -keycloak2_replicas: 1 -keycloak2_reservation_memory: 768M -keycloak2_limit_memory: 1024M - -monitor_es_host: "{{ groups['es'][0] }}" -alertmanager_host: "{{ groups['swarm-agent-for-alertmanager'][0] }}" -prometheus_host: "{{ groups['swarm-agent-for-prometheus'][0] }}" - -swarm_load_balancer: 10.0.0.100 -filebeat_logtsash_host: "{{ swarm_load_balancer }}" - -expected_minimum_logs_per_minute: 30 - -proxy_prometheus: true - -enable_scraping_docker_metrics: true -enable_mongodb_availability_check: false - -postgres_exporter_postgres_port: 5432 -postgres_exporter_user: postgres_exporter -postgres_exporter_password: "{{ vault_postgres_exporter_password }}" -sunbird_learner_service_base_url: https://dev.open-sunbird.org/api -kong_admin_api_url: http://api-manager_kong:8001 - -postgresql_backup_azure_storage_account_name: "{{ backup_storage_name }}" -postgresql_backup_azure_storage_access_key: "{{ backup_storage_key }}" -postgresql_restore_azure_storage_account_name: "{{ backup_storage_name }}" -postgresql_restore_azure_storage_access_key: "{{ backup_storage_key }}" - -grafana_url: https://dev.open-sunbird.org/grafana -grafana_editor_username: editor - -app_alerts_mailing_list: "rayulu@ilimi.in, harishg@ilimi.in, manzarul.haque@tarento.com,{{devops_alerts_mailing_list}}" -devops_alerts_mailing_list: "deepakn@sahajsoft.com, manojv@ilimi.in, shashankt@sahajsoft.com, mathew.pallan@tarento.com, bineesh.k@riflexions.com" -site_alerts_mailing_list: "shailesh@ekstepplus.org, ashwin@tekditechnologies.com, lakhan_m@tekditechnologies.com, amol_g@techjoomla.com, {{devops_alerts_mailing_list}}" -keycloak_alerts_mailing_list: "ashwin@tekditechnologies.com, amol_g@techjoomla.com, {{devops_alerts_mailing_list}}" -api_manager_alerts_mailing_list: "ashwin@tekditechnologies.com, amol_g@techjoomla.com, {{devops_alerts_mailing_list}}" - -jenkins_url: http://10.20.0.4:8080/jenkins - -kibana_oauth_authenticated_email_domains: - - ekstep.org - - sahajsoft.com - - ilimi.in - - tarento.com - -kibana_oauth_authenticated_email_ids: - - shailesh@ekstepplus.org - - vijetha.nayak@riflexions.com - - bineesh.k@riflexions.com - - arvind.yadav@compassitesinc.com - -monitor_alerts_mail_from_email: alerts@open-sunbird.org -monitor_alerts_mail_server_host: "{{ mail_server_host }}" -monitor_alerts_mail_server_port: "{{ mail_server_port }}" -monitor_alerts_mail_server_username: "{{ mail_server_username }}" -monitor_alerts_mail_server_password: "{{ mail_server_password }}" -env_short_name: dev - -# keycloak sms provider -keycloak_build_src: "keycloak_build" -keycloak_ver: "keycloak-3.2.0.Final" -keycloak_sms_provider_build: "keycloak-email-phone-autthenticator-1.0-SNAPSHOT.jar" -keycloak_sms_provider_templates_src: "templates.tar.gz" -keycloak_sms_provider_templates_dest: "/opt/keycloak/themes/sunbird/login" -keycloak_ekstep_sunbird_login_theme_file: "login.tar.gz" -keycloak_ekstep_sunbird_login_theme_dest: "/opt/keycloak/themes/sunbird/login" -keycloak_postgresql: "postgresql-9.4.1212.jar" diff --git a/keycloak/scripts/ansible/inventories/local/group_vars/localhost.yml b/keycloak/scripts/ansible/inventories/local/group_vars/localhost.yml deleted file mode 100644 index 9c5173b7..00000000 --- a/keycloak/scripts/ansible/inventories/local/group_vars/localhost.yml +++ /dev/null @@ -1,291 +0,0 @@ -# ENVIRONMENT CONFIGURATION -env: local #Name of the environment, e.g. dev, staging or production. -proxy_server_name: dev.open-sunbird.org #Domain on which the portal will be accessed. e.g. staging.{implementation-name}.org -proxy_site_key: "{{ vault_proxy_site_key }}" #SSL certificate's site.key file contents. More details in this wiki: https://github.com/project-sunbird/sunbird-commons/wiki/Updating-SSL-certificates-in-Sunbird-Proxy-service -proxy_site_crt: "{{ vault_proxy_site_crt }}" #SSL certificate's site.crt file contents. More details in this wiki: https://github.com/project-sunbird/sunbird-commons/wiki/Updating-SSL-certificates-in-Sunbird-Proxy-service -ansible_connection: "local" - -# DB CONFIGURATION - -## Below passwords are used by DB install scripts when creating databases. Please use strong passwords. -application_postgres_password: "{{vault_application_postgres_password}}" #Password for Application database. -keycloak_postgres_password: "{{vault_keycloak_postgres_password}}" #Password for Keycloak (Authentication service) database. -kong_postgres_password: "{{ vault_kong_postgres_password }}" #Password for Kong (API Manager) database. - -## Postgres configuration -swarm_address_space: 10.0.0.0/16 #Application server address space (e.g. 10.3.0.0/24), also the agentpublicSubnet if using Azure scripts provided -keycloak_address_space: 10.113.0.0/24 -postgres_address_space: 10.10.0.0/24 - -## Cassandra configuration -cassandra_server_private_ip: 10.10.4.4 #Private IP of cassandra server -keystore_password: "{{vault_keystore_password}}" #Password to use for encrypting cassandra keystore. Use a strong password. -truststore_password: "{{vault_truststore_password}}" #Password to use for encrypting cassandra truststore. Use a strong password. - -# APPLICATION CONFIGURATION - -kong_host: api-manager_kong - -## DB address -application_postgres_host: "{{ groups['postgresql-master'][0]}}" #Private IP of Postgres server -keycloak_postgres_host: "{{ groups['postgresql-master'][0]}}" #Private IP of Postgres server -kong_postgres_host: "{{ groups['postgresql-master'][0]}}" #Private IP of Postgres server -sunbird_mongo_ip: 10.10.2.5 #Private IP of Mongo DB server -sunbird_cassandra_host: 10.10.4.4 #Private IP of Cassandra server -sunbird_es_host: 10.10.3.7,10.10.3.8,10.10.3.6 #Private IP of Elastic Search server. If ES cluster has multiple nodes then add all nodes by separating them with comma. e.g. 10.2.0.1,10.2.0.2,10.2.0.3 - -## Application server configurations -sunbird_ekstep_api_base_url: https://qa.ekstep.in/api #API base URL of the Ekstep environment. Use `https://qa.ekstep.in/api` for non-prod deployments, and use `https://api.ekstep.in/` for prod deployment. -sunbird_ekstep_proxy_base_url: https://qa.ekstep.in #Base URL of the Ekstep environment. Use `https://qa.ekstep.in/` for non-prod deployments, and `https://community.ekstep.in/` for prod deployment. -sunbird_env: qa #Ekstep environment to connect to. Use `qa` for non-prod deployments, and `prod` for prod deployment. -sunbird_mail_server_host: "{{ mail_server_host }}" #SMTP server IP. Could be ignored if not mails are to be sent. -sunbird_mail_server_port: "{{ mail_server_port }}" #SMTP port. Could be ignored if not mails are to be sent. -sunbird_mail_server_username: "{{ mail_server_username }}" #SMTP username. Could be ignored if not mails are to be sent. -sunbird_mail_server_password: "{{ mail_server_password }}" #SMTP server pasword. Could be ignored if not mails are to be sent. -sunbird_mail_server_from_email: support-dev@open-sunbird.org #Email ID that should be as from address in mails - -## Keycloak (auth server) login details -sunbird_sso_username: "{{ vault_sunbird_sso_username }}" -sunbird_sso_password: "{{ vault_sunbird_sso_password }}" -keycloak_admin_username: admin -keycloak_admin_initial_password: "{{ vault_keycloak_admin_password }}" -keycloak_tar_path: keycloak.tar.gz -keycloak_theme_path: artifacts/sunbird - - -## Content Repo configuration -sunbird_api_auth_token: "{{ vault_sunbird_api_auth_token }}" #Authorization key (JWT) to access Sunbird APIs. This will be in the output of deploy-apis.sh script, extracting it out is documented in the deployment wiki. -sunbird_ekstep_api_key: "{{ vault_sunbird_ekstep_api_key }}" #Authorization key (JWT) to access Ekstep APIs. Steps to generate this are documented on https://github.com/project-sunbird/sunbird-commons/wiki/Obtaining-API-token-for-accessing-ekstep-APIs -sunbird_trampoline_secret: "{{ vault_sunbird_trampoline_secret }}" - -# ADVANCED CONFIGURATIONS - -cassandra_listen_address: "{{ cassandra_server_private_ip }}" -cassandra_seeds: "{{ cassandra_server_private_ip }}" -cassandra_broadcast_rpc_address: "{{ cassandra_server_private_ip }}" -cassandra_broadcast_address: "{{ cassandra_server_private_ip }}" -cassandra_listen_interface: '' -cassandra_log_dir: '/var/log/cassandra' -cassandra_root_dir: '/etc/cassandra' -cassandra_version: '3.9' -cassandra_port: 9042 -cassandra_rpc_address: 0.0.0.0 -cassandra_restore_dir: /home/deployer/ -cassandra_backup_azure_container_name: cassandra-backup -cassandra_backup_azure_storage_account_name: "{{ backup_storage_name }}" -cassandra_backup_azure_storage_access_key: "{{backup_storage_key}}" -cassandra_backup_dir: /data/cassandra/backup - -keycloak_url: http://10.113.0.7 - -keycloak_auth_server_url: "https://{{ proxy_server_name }}/auth" -keycloak_realm: sunbird -sunbird_content_player_url: "https://{{ proxy_server_name }}/api/" -sunbird_learner_player_url: "https://{{ proxy_server_name }}/api/" -sunbird_sso_client_id: admin-cli -sunbird_mongo_port: 27017 -sunbird_mongodb_port: 27017 -sunbird_portal_realm: sunbird -sunbird_portal_auth_server_client: portal -sunbird_trampoline_client_id: trampoline -sunbird_appid: sunbird_portal -sunbird_default_tenant: sunbird -sunbird_echo_api_url: "https://{{ proxy_server_name }}/api/echo/" -sunbird_pg_host: "{{ application_postgres_host }}" -sunbird_pg_port: 5432 -sunbird_pg_db: quartz -sunbird_pg_user: quartz -sunbird_pg_password: "{{ application_postgres_password }}" -sunbird_installation: sunbird -sunbird_account_name: sunbirddev -sunbird_account_key: "{{ vault_sunbird_account_key }}" -sunbird_sunbird_quartz_mode: cluster -sunbird_encryption_mode: local -sunbird_cassandra_urls: "{{ cassandra_server_private_ip }}:{{ cassandra_port }}" -sunbird_session_store_type: cassandra -sunbird_keycloak_client_id: 'portal' -sunbird_keycloak_public: true -sunbird_cache_store: "memory" -sunbird_cache_ttl: 1800 -sunbird_portal_title_name: portal -sunbird_web_url: "https://{{ proxy_server_name }}" -sunbird_sso_publickey: "{{vault_sunbird_sso_publickey}}" -sunbird_azure_storage_account: "{{vault_sunbird_azure_storage_account}}" -sunbird_azure_storage_key: "{{vault_sunbird_azure_storage_key}}" -sunbird_container_name: portal -sunbird_cdn_url: https://dev-sunbird-temp.azureedge.net/{{sunbird_container_name}} -mongo_backup_dir: /home/deployer/mongo-backups -sunbird_background_actor_host: actor-service -sunbird_actor_system_name: BackGroundRemoteMiddlewareActorSystem -sunbird_app_url: -sunbird_fcm_account_key: -sunbird_env_logo_url: - - -#player_tenant_dir: -sunbird_dataservice_url: https://{{ proxy_server_name }}/api/ -project: sunbird -application_postgres_database: quartz -application_postgres_user: quartz -keycloak_postgres_database: keycloak -keycloak_postgres_user: keycloak - - -## Cassandra download URI -cassandra_repo: 'deb http://www.apache.org/dist/cassandra/debian 39x main' -cassandra_repo_key: 'https://www.apache.org/dist/cassandra/KEYS' - -#API Manager -kong_postgres_port: 5432 -kong_postgres_user: api_manager_dev -kong_postgres_database: api_manager_dev - -es_curl_host: 10.10.3.7 - -## Logging details -syslog: - host: 172.16.0.5 - port: 51415 - -## PostgreSQL config -postgres_replication_user_name: replication -postgres_replication_user_password: "{{ vault_postgres_replication_user_password }}" - -postgresql_hba_entries: - - { type: local, database: all, user: postgres, auth_method: peer } - - { type: local, database: all, user: all, auth_method: peer } - - { type: host, database: all, user: all, address: '127.0.0.1/32', auth_method: md5 } - - { type: host, database: all, user: all, address: '::1/128', auth_method: md5 } - - { type: host, database: all, user: "{{ postgres_exporter_user }}", address: '{{ swarm_address_space }}', auth_method: md5 } - - { type: host, database: replication, user: "{{ postgres_replication_user_name }}", address: '{{ postgres_address_space }}', auth_method: md5 } - - { type: host, database: all, user: all, address: '{{ swarm_address_space }}', auth_method: md5 } - - { type: host, database: all, user: all, address: '{{ keycloak_address_space }}', auth_method: md5 } - -ansible_vault_password: "{{ vault_ansible_vault_password }}" -docker_hub_password: "{{ vault_docker_hub_password }}" -jenkins_slave_jenkins_username: "{{ vault_jenkins_slave_jenkins_username }}" -jenkins_slave_jenkins_password: "{{ vault_jenkins_slave_jenkins_password }}" -ops_private_key: "{{ vault_ops_private_key }}" -deployer_ssh_key: "{{ vault_deployer_ssh_key }}" -proxy_prometheus_admin_creds: "{{ vault_proxy_prometheus_admin_creds }}" - -# ADDITIONAL CONFIGURATION -backup_storage_name: "sunbirdbackupsdev" -prometheus_storage_retention_time: 72h0m0s -curl_host: dev.open-sunbird.org - -mail_server_host: smtp.sendgrid.net -mail_server_port: 587 -mail_server_username: azure_886153b1defb14e38ecc9c7301625aba@azure.com -mail_server_password: "{{ vault_mail_server_password }}" - -logger_es_host: "{{ groups['dev-log-es'][0] }}" -logger_es_port: 9200 - -kibana_oauth_redirect_url: https://dev.open-sunbird.org/oauth2/callback -monitor_alerts_slack_channel: sunbird-dev-alert -keycloak: True - -api__host: dev.open-sunbird.org - -proxy_replicas: 2 -proxy_reservation_memory: 32M -proxy_limit_memory: 128M -kong_replicas: 3 -kong_reservation_memory: 64M -kong_limit_memory: 256M -echo_service_replicas: 2 -echo_service_reservation_memory: 8M -echo_service_limit_memory: 16M -adminutil_replicas: 2 -adminutil_reservation_memory: 512M -adminutil_limit_memory: 1024M - -actor_replicas: 2 -actor_reservation_memory: 500M -actor_limit_memory: 1024M - -learner_replicas: 2 -learner_reservation_memory: 1500M -learner_limit_memory: 1500M - -player_replicas: 2 -player_reservation_memory: 256M -player_limit_memory: 512M - -content_replicas: 2 -content_reservation_memory: 64M -content_limit_memory: 256M - -keycloak1_replicas: 1 -keycloak1_reservation_memory: 768M -keycloak1_limit_memory: 1024M - -keycloak2_replicas: 1 -keycloak2_reservation_memory: 768M -keycloak2_limit_memory: 1024M - -monitor_es_host: "{{ groups['es'][0] }}" -alertmanager_host: "{{ groups['swarm-agent-for-alertmanager'][0] }}" -prometheus_host: "{{ groups['swarm-agent-for-prometheus'][0] }}" - -swarm_load_balancer: 10.0.0.100 -filebeat_logtsash_host: "{{ swarm_load_balancer }}" - -expected_minimum_logs_per_minute: 30 - -proxy_prometheus: true - -enable_scraping_docker_metrics: true -enable_mongodb_availability_check: false - -postgres_exporter_postgres_port: 5432 -postgres_exporter_user: postgres_exporter -postgres_exporter_password: "{{ vault_postgres_exporter_password }}" -sunbird_learner_service_base_url: https://dev.open-sunbird.org/api -kong_admin_api_url: http://api-manager_kong:8001 - -postgresql_backup_azure_storage_account_name: "{{ backup_storage_name }}" -postgresql_backup_azure_storage_access_key: "{{ backup_storage_key }}" -postgresql_restore_azure_storage_account_name: "{{ backup_storage_name }}" -postgresql_restore_azure_storage_access_key: "{{ backup_storage_key }}" - -grafana_url: https://dev.open-sunbird.org/grafana -grafana_editor_username: editor - -app_alerts_mailing_list: "rayulu@ilimi.in, harishg@ilimi.in, manzarul.haque@tarento.com,{{devops_alerts_mailing_list}}" -devops_alerts_mailing_list: "deepakn@sahajsoft.com, manojv@ilimi.in, shashankt@sahajsoft.com, mathew.pallan@tarento.com, bineesh.k@riflexions.com" -site_alerts_mailing_list: "shailesh@ekstepplus.org, ashwin@tekditechnologies.com, lakhan_m@tekditechnologies.com, amol_g@techjoomla.com, {{devops_alerts_mailing_list}}" -keycloak_alerts_mailing_list: "ashwin@tekditechnologies.com, amol_g@techjoomla.com, {{devops_alerts_mailing_list}}" -api_manager_alerts_mailing_list: "ashwin@tekditechnologies.com, amol_g@techjoomla.com, {{devops_alerts_mailing_list}}" - -jenkins_url: http://10.20.0.4:8080/jenkins - -kibana_oauth_authenticated_email_domains: - - ekstep.org - - sahajsoft.com - - ilimi.in - - tarento.com - -kibana_oauth_authenticated_email_ids: - - shailesh@ekstepplus.org - - vijetha.nayak@riflexions.com - - bineesh.k@riflexions.com - - arvind.yadav@compassitesinc.com - -monitor_alerts_mail_from_email: alerts@open-sunbird.org -monitor_alerts_mail_server_host: "{{ mail_server_host }}" -monitor_alerts_mail_server_port: "{{ mail_server_port }}" -monitor_alerts_mail_server_username: "{{ mail_server_username }}" -monitor_alerts_mail_server_password: "{{ mail_server_password }}" -env_short_name: dev - -# keycloak sms provider -keycloak_build_src: "keycloak_build" -keycloak_ver: "keycloak-3.2.0.Final" -keycloak_sms_provider_build: "keycloak-email-phone-autthenticator-1.0-SNAPSHOT.jar" -keycloak_sms_provider_templates_src: "templates.tar.gz" -keycloak_sms_provider_templates_dest: "/opt/keycloak/themes/sunbird/login" -keycloak_ekstep_sunbird_login_theme_file: "login.tar.gz" -keycloak_ekstep_sunbird_login_theme_dest: "/opt/keycloak/themes/sunbird/login" -keycloak_postgresql: "postgresql-9.4.1212.jar" diff --git a/keycloak/scripts/ansible/inventories/local/hosts b/keycloak/scripts/ansible/inventories/local/hosts deleted file mode 100644 index 74af6e13..00000000 --- a/keycloak/scripts/ansible/inventories/local/hosts +++ /dev/null @@ -1,166 +0,0 @@ -[dev-postgresql-1] -10.10.0.4 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" - -[dev-postgresql-master:children] -dev-postgresql-1 - -[dev-postgresql-slave:children] - - -[postgresql-master:children] -dev-postgresql-master - -[postgresql-slave:children] -dev-postgresql-slave - -[postgresql-backup:children] -postgresql-master - -[postgresql-restore:children] -postgresql-master - -[dev-keycloak-1] -10.113.0.4 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" - -[dev-keycloak-2] -10.113.0.5 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" - - -[dev-log-es-1] -10.10.3.10 ansible_ssh_user=deployer node_name=dev-log-es-1 es_etc_node_master=true es_etc_node_data=true ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" - -[dev-es-1] -10.10.3.7 ansible_ssh_user=deployer es_instance_name=dev-es-1 es_etc_node_master=true es_etc_node_data=true ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" - -[dev-es-2] -10.10.3.8 ansible_ssh_user=deployer es_instance_name=dev-es-2 es_etc_node_master=true es_etc_node_data=true ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" - -[dev-es-3] -10.10.3.6 ansible_ssh_user=deployer es_instance_name=dev-es-3 es_etc_node_master=true es_etc_node_data=true ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" - -[dev-cassandra-1] -10.10.4.4 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" - -[dev-swarm-bootstrap-manager] -172.16.0.5 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" - -[dev-swarm-manager] -172.16.0.5 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" - -[dev-keycloak1] -10.113.0.4 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" - -[dev-keycloak2] -10.113.0.5 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" - -[keycloak:children] -dev-keycloak1 -dev-keycloak2 - -[swarm-agent-docker-prune] -localhost ansible_connection=local - -[dev-kong-api] -localhost ansible_connection=local - -[kong-api:children] -dev-kong-api - -[dev-grafana-dashboards-export] -localhost ansible_connection=local - -[grafana-dashboards-export:children] -dev-grafana-dashboards-export - -[dev-grafana-dashboards-import] -localhost ansible_connection=local - -[grafana-dashboards-import:children] -dev-grafana-dashboards-import - -[swarm-bootstrap-manager:children] -dev-swarm-bootstrap-manager - -[swarm-manager:children] -dev-swarm-manager - - -[dev-es:children] -dev-es-1 -dev-es-2 -dev-es-3 - -[dev-log-es:children] -dev-log-es-1 - -[es:children] -dev-es - -[es-backup:children] -dev-es-1 - -[log-es-backup:children] -dev-log-es-1 - -[log-es:children] -dev-log-es - -[cassandra:children] -dev-cassandra-1 - -[dev-keycloak:children] -dev-keycloak-1 -dev-keycloak-2 - -[swarm-agent-for-prometheus] -10.0.0.9 ansible_ssh_user=ops ansible_ssh_private_key_file=/run/secrets/ops-private-key - -[swarm-agent-for-grafana] -10.0.0.12 ansible_ssh_user=ops ansible_ssh_private_key_file=/run/secrets/ops-private-key - -[swarm-agent-for-alertmanager] -10.0.0.9 ansible_ssh_user=ops ansible_ssh_private_key_file=/run/secrets/ops-private-key - -[local] -localhost ansible_connection=local - -[localhost] -localhost ansible_connection=local - -[non-swarm-nodes:children] -postgresql-master -postgresql-slave -postgresql-backup -postgresql-restore -es -cassandra -log-es -keycloak -local -localhost - -[local-task-runners:children] -kong-api -grafana-dashboards-export -grafana-dashboards-import - -[swarm-nodes:children] -swarm-manager -swarm-bootstrap-manager -swarm-agent-for-prometheus -swarm-agent-for-grafana -swarm-agent-for-alertmanager - -[node-exporter:children] -non-swarm-nodes -swarm-manager - -[log-forwarder:children] -non-swarm-nodes -swarm-manager - -[dev:children] -non-swarm-nodes -swarm-nodes -local-task-runners - diff --git a/keycloak/scripts/ansible/inventories/local/secrets.yml b/keycloak/scripts/ansible/inventories/local/secrets.yml deleted file mode 100644 index be20efff..00000000 --- a/keycloak/scripts/ansible/inventories/local/secrets.yml +++ /dev/null @@ -1,806 +0,0 @@ -$ANSIBLE_VAULT;1.1;AES256 -36303132313138313463326365646333383038393233383933383866373566626136386162613065 -6439656630616138356461336236653930663938666164320a346139373336333761666333336139 -37626139313933356164653232666537663232336334363962323430636139373638313636326531 -6132643336643034620a373532363830633066633137316261616365646239326132333639653334 -30613062383462633164646237616566353235646637353765386239666361346662316238386438 -38336239633038643132343064383932663666373361346162306233346362363863343135663431 -33623431633963343961656539303764626166643634623631303163623537663362373038343264 -33333938333333623064666132363863386231393734333066363563643937303035323237636163 -36343937346533633338646132626461303338633036663035666161616631363130623731656631 -30633834393037383065663931303931373366323933366333313538666136626234613163316139 -31383635346632316162303461613336653833633463316561363739393862316633356231666532 -30616234326235386464386435633334613134353964376132306438393332333436333936363239 -36336232336266303037346138396165346131653833333232313233343864303465646661373561 -65343539653961396562656663306266356538633965653761653834666563346232333065663666 -63336130663034356132383932356466656233613631653538396664383038646230613566326466 -64396363326563613630653133363733343132353930656330373161663837656439376531343733 -65653762623366656334333732653463366239623762366339313966386465316565326665663838 -65646563326264623739663633306634316133626438383462333537316132353265623034306136 -35393036643864353036643265383937363363323232326232356235343562386637303565663061 -62383163313436623633613363633638386430636434646539616334623436316662306466653639 -38653264323330383766663038626263343232356538393237343338396665323062343535373034 -61316534343462353335626166643337623762353437333830303430376161356539643138383733 -63663964366264316639353934613761616466613831626465653662633061633131623733313336 -66333233383930343231363863623634316437623462626665303530303835393733626564326339 -61313861633830366466663836613837366665393130343062336430376236646637653430666663 -39646563623437636438336132316537316363333837353133646536303437666166353237333230 -33326636333362346538626362616161306131623238616563663431623439323563363633623936 -33386230633564396465646266336564363963636439313662613765323935666430636439336631 -64363332666165346530323762323963636165343633393939303965653738616364366432623636 -33386136336163303332343438663330303036333332363530383231316239623838376132316235 -30383533643934646361313663366539316562636563326665656365383837313534346133616531 -35346162333237333835336263613563633731386164306139643338306538666463303163623261 -31626634386138633539396162643063396536313632366161613335656365346464373130333663 -39646261613233636631373761653235366430343438663639326334643735323030663139616434 -66383034633837663433386463356463633133303238383962636430396539663036346330663338 -66323832363561333538393331376465636533396663386135623739333865306530613338623766 -63363732353535303836336462636533623135393164313332656363656262656534353266656239 -33353466363131323736343136333433373433346136373866313166306135326337333837333136 -38663737626630613932383735343838663961393263393266366136386532373365393462336163 -64343238303832663937376133656135643834343061353461626439356265643630656437306135 -32356637363433303465356661346263333561386630323962613265393037663239343062653564 -32656639393939336636656338333866646332303935346539333537623266613863643864653063 -38336337633262636630643262636138346161626538313431383132636639626633363663373736 -32353165373363643136353535316334626635333866316461393730613336666133353734313533 -37616438313466373931636166633133393334376636643738353263626439323139653530313837 -30616434626461636437313566653038383061333366373137643265316633316566653735353734 -39313366373864613839313837376662316231306561336439656330663261643163343039343066 -64613432343332363461366630626435336133616232653032643232343862626135643637666332 -36303536333666356235386338656437653236653530313264633435373765336234386635343435 -66636130323963323265373831313739353738313535393461383031616164343332376565663964 -34656137386532633637643730356135363361643539356433613130646165373065666461646631 -66623263346138616632373164396334613538353235373135656164343035303036656462333062 -31626635636232343965656238323330393962656461343534613131376666663261633261356331 -33356134373164653436613537636531626433313130313431616164663962343233326365376138 -36663936636664313537643861303565643166653965666266393266353135343164623162356334 -63613930323133663464396430653039386538393962303339333236366631393831643239656232 -31383138323466366362623032396633346463346566376330623635636463333733623866396266 -32313763666438353231313132373363353737393335653835623330306633343638326637353531 -38613466386637656531363762626135653362666266393939393966636634616230343238653136 -63613236383734663365656339396135656162366533343539633734386664633561376330653866 -39643235646238343435646166636330613334386138333462633564333131306464316137306664 -61376562396530626338636433303939336431626566643261393763316234626265303338613530 -66336432656363313930613336383636393036386232323737333436393436386538626134383964 -61613939353133376230623066336338663535643932396232323066363463643731613534636134 -34656637306338383131666139336439363437646366396333363837303466376330613763353764 -32383839653136343633323430373737373131613163353233353631373063666234323630343331 -30623137623863393665626562356461306336313463393336383330663861366132663630626136 -61323464656137653431616166366366656566656530363138313935376136656461343366313532 -31373966623662333662313331356233613230653762653635643038633332356161323635346364 -34623138333337333734616431663262393866303736383663306265313330303035306365616566 -37363233336661356135313337336235663063386161306564663334343066623161353966333739 -63316361633433346637366637326631326363653938396638636237373330383033313061643566 -30316532643062346631356266653139656539353462333831643763326537616530323539383831 -62613035366534336632393531633462623662666637363165633633336631373535663261636331 -38353436663139663832323061656165383464353232616330366566663432616563303438383937 -66633563663765393564653035386234386238303037396232656263326564353237363165373230 -63643066323964383030333037646634386130313639633161393939636139373130383739636339 -34666464303933613866313734656235643461666466336439343761323432363631386165636364 -65616634666338393531396132306537653136643035323262333464356132396536326366376631 -31396262666363613138663733316661333763363531366463643564373863386636396637343730 -30643861326639636332643834333662313333643466636165663730356438303139326465616239 -39316563623437306633626136343637313432626533373165343931626536623666633765333262 -63396165333835313937343634356633336134643836356235376131386439383037636230373234 -32343063373063333363363531613562623966643834306566353734313336333537343230626563 -62306339373532383938363934656233643333663662666363323134373835356666643863666538 -37356237396361653032623538303937396464343432623237613965306633376330326537643639 -30653233346134343637656333616233666639643931646633316362353866353131306532386163 -35376135336631353166353565366562626535636562623833616339373532386434383431633565 -36343335656265616235666235393661663263616538393465346363656637663765653461653066 -33303338643162393063303336636330656363316239636165383363653661393039363663633362 -39386165303462373865333964623933363930623034653865613565303238376532366637633162 -37313433353332336139633330626130636438663031623131333661343430653033383330646566 -32643861663235396633663930353864636533613036383563653839313532343731346634336466 -31626161386361643562356561643865333962623166376333643066623634653664646231323635 -66333866376632613765306539306636613533633063353233383564653761653237396163396564 -35643566656663363239643632616164393535633635653863653937663331373132613063346238 -62363263396462383862336132643837316430393738323366363035376261353833333137323262 -38333466633034346464393433366131376439396266323331373237393031376466653137643061 -64633535616130353037646334386133653336633739366330613163396237356665366239646236 -35623531336239656137613933373536653530663936323735346238336463663834666537653365 -31656339373264373931663764633235616463366266323939356539343064393064323561666631 -31346533323334633731636366383136613637376431363532633534623033643662363263383965 -32646232303264643034396664663635366262316234613732663736626162623266353334363564 -35326133643166396134333963303934353266333331666138623664396436383064663835643637 -38373866363835623933393734643535643962666331333561663334303433366564303263393037 -30636133303939636635656564613766656363666361326461646136336661373732636633396637 -37623034336261626665613739366630616438396533666436623632663162393933386362313966 -39616138303938303132656439643966643634636638343534333030343833393064613837366336 -62643962313366633434316237316135363765656637636563643965373830633962373861313031 -34343633613938383031363433646133623931376465613034346562666562383763626530636366 -33366565646565623562353466633062356433653562633931333866646339656466623738353839 -35343036306664313539303030363464653536373365396136306463393636376434376532653039 -63636236306461336332643937326461323961373639363061663165356435636466393361323834 -36663232333237653031373332636539613631626234366137373861646135313535656463623337 -31363265383933343634643862623733666237626130303936343736633861616561316239336162 -30346533393662623361656134613831323236316238663930633231663865353133336432343937 -32396535613035376564393761313230656462626433343664633338653065613535313065376538 -31633932663362366536633466616235333337323939356131343135343836383134393566323630 -64636338613762373463636633646436303137323937656531386233656334333434326566373163 -63303138633438626437373465353130346534376433363361356535306536646564313736336237 -63323336623830333931613165366463363337623165653164663731393766356462313839376435 -66346362396234323764646163653561316531623061346238303032333035623333383563396530 -32396230336538333563363236313335643862393162613637373539343634653532613336313663 -30393864363963626134323963643864383739663833306365313434333739353532666130316265 -33316438636262373862396136663061393962633037643532343236376639366136306236316461 -31393362366531333964653763633632343962343239616132616361663665623663303065323366 -61303131666138373337313565363435316238313830343965636430336532316666383939633933 -66346231373438323066326231633336666535646232393933336330643666326534356164336636 -39353438616563383265366330643837356263343466663537356337616166623037303238313061 -66316666623866633035326336653431366665616235363432643139373961663435366331313234 -39663431353161386231353636656331656134396334396439383637303561366537313632646539 -36636336666433363731656136373561393632336235663266306166663134333465366438393762 -66393534663739323263303333353739616336316539623537303839656438356534616262336633 -34656466656230316532303039656639323835613833653739656339666264616363323363666330 -38616464393163653037613030323032656562316535306265326262633962313534643836633233 -61386539373036306634333764363366383566646137393034346565366366396136343032653538 -32323335306438303861613136613937343961666537333161613939653564366439353537363465 -33376361393532313962306435313730303866643462316537373632396362316166396166643437 -39396239393864323661643331643938646335353032363262326165373465643436306631666164 -34306661353536383938626632323966643561313864613630353765313230386239663661396432 -66383761623539376634376661633132613032333464666639633531643963366533613536353863 -64333433396564386139656238316638323966616231336361396238663433636237653766623062 -37656534373031656662333464663937633864393761666663303462353333343661656537383736 -38343339303465343839666132386239323734643461316566333166646637373238613836303738 -30323939366539313339313239383836616537663465626635656234363966383766363263643763 -36353865393461386633366562353161636166313039363834323838643834326464323136666537 -63346564623537323161653437663762356632366439636235656131393863333530373230373936 -65326539356438643337356538303031363038366334383834323139643830323531616632303037 -35363566636564336161663933323137393431396463653130303634353534633063613438623861 -38636164346536373838626264366361373634666131306532326539316233636165313631326631 -63643735633933316237636231323432646439633538366535316165623838376362303962313733 -39313365636634393639346532383135333566613361363530656534393561653565393737623061 -36633035383636343339613964643638646636626335303566646234393130613264616539383539 -38383262383462313361363630326161653731306165663038363338623931323862316466626339 -35356233373461616463636530373962306134636565643466613963396364643835373364343562 -66316630626630306361313837386236633433323438653264316464313763336163623031353166 -39393036633933656666396465663339326663306338356332333738663161323837653431383037 -39333463623538306666653830616630666335313664316238326264376237656537393632636237 -32323063356663616261333561646562356233353237303166303062636332636135633634313131 -35663064373436386166393564343933646630303635666234663061323638373338633662353064 -61363838613836643662386431366362333934373964346432616138336337393034663762376334 -31386135616333663334663130383530393836333037646336393434376233363638326661656662 -34346363343131373564663931316431316261666536396231633436363266366231393464303438 -62373364626339393961656235626163663837353361363036313634653230316366323065333933 -64326334656661393432313737643735373633313263626463616264363463343434663832633135 -37633938306362303262636663633231666634306463656663653535663063623233383362333631 -38353237373361636637616239613334623364623232326662646461373034383030666561613764 -31376533663666376437663363333763663761643533393937363731363636346263396436326366 -62316337336533326266353862633437313338646235316537626335363438643363396235663231 -63333732303536643036613063313962623165633562643534636339346635346563313437646633 -61363535363234623439666365316134396633396139396663303263353934396365363837363361 -36353966366666626236356331303333333332326465656266393165653632336532353930626363 -38303135313837326465373139626138373430393763376635313062386132383738393037613965 -66343838383665313430313564653131373863646130386433626164646131653234616238356236 -61393530616566656162643763363166313665653238323836356539653064646661306635633038 -61663631313031666564333361653337303731656639356362346639303561393265303461623364 -61666637646533613831383863353562336363663263646437376164353063373934346139353237 -35396132353766653836646532616435633162663335393734623336643231306538666235653532 -66373364336261363737396634346530346266303565613262373639393837626630613432316335 -35353438326336316463323135313238643863653663383437306566623634336466663464623364 -61336562303566373732363231366163383538333636353366306631643339396635623839383739 -35303433616436303335633334316162663938306631636362366334303836613035646231633062 -38636530343037356435343039373935343737613635383666613666613336613933306433346536 -33353034303662386164303130633739396630323930646332343461303637623836323138613037 -38323137356335613362666263386538316563323834626631396661343431353162313263636537 -66333663323366333734636262326335616634656366646566353963646563646331363864643235 -35316338356263326566343462353331323565363737393030373136303634303236313266343030 -31626438346266633234633263643831613964313562613065393737363237666537636536616135 -39653761666363303362366439373938313063306364393161656332626138333235306464306439 -64356433303262353636336535376535383639376361383661646330643561383738373535663635 -61383664363262386666613763386533303438366666383035326235303932656336383535323738 -62623636336164323462653939386130303662333037616562326432363537653437376364343630 -39656634656133353639616637656166633537383465323463626636663030303139313062633337 -64626664373038373833656664663630383231373161313538336134623135613737633831383362 -31386439653865313765336133316337386664653939343162373834613737373062653036396534 -64643133396530326335636332376634393734353135373863653237616162353262376139353237 -35643764333365393135386363646438306362646561346665343163383834363931643135366137 -38633931316436623465306533636664346433386230613436656562653635346161646534336665 -62303136383563366134323035333635363337366539643332336237306235643532633634383936 -31316335663833316163316364383564626236343164333538356333323761363736313263323137 -37613933366566383265356561386238656334613631643232343862373833623538636236316536 -33386631343265663032383735643361636332613835333833383130316662646463343139613530 -61326433616163626336343532323839393065656630613534613466633763353061353930653437 -33653232326636653039666533323735373736346532333337363163316631656530613935333864 -38393833336161643136383835373432363939366166626566633064356366663337373933323934 -39313964343035333562303861616166393961353166346638393633663636353930333563633365 -63633663643864383661306236376166643366616165346331323761656666393936363631363031 -31373463363066376661306133346366663239393333376564373133393432353866653462383662 -36313661663862363662386564356363316634363964336537636561653730613436396165356433 -38666532646436633132653964313737343165303938653966336231663138373265343363313935 -33383961623431333161363661356163396438633565663964663162303362363063366465303933 -36333662633930313238613662323063663634643037323739393231656631333632393136306439 -33643439323263666337333865316664336332656235373731643139373732396136626534316330 -36636461616230613632313966663762663533303037373763313562306562373232316332356634 -34333935353333346335616133303235376336326661396266653934373765343663666338306537 -38646230306562313538636136306531343765326439663636373763373764666336636133386466 -61613665316361393631313564356339626161313135613037376332626636313766353731633430 -35346635643239636133383865396634653665333431626333323336636239363063646535363239 -32626331383333376365383533363132366364316639356632656339396263306134376136663534 -63396535343938376337626433333539393134363434393230633566326332303666343434303832 -64313063363966333232383138383539656565343834386534366661626266666334653066656537 -32323337343336333536353263653066643731373766376330613232386564316263336166376461 -38326362306664313336326534623436323336393036323961616262656236626336646331323238 -39336233333832356234363065323762623734353439363538646362626534336133313931353537 -62366431373537343464343235343464326462616466613038313536646466393965636463393163 -30343363363530383361653433643035346335663535376665653737303064353662636531663331 -31663734663266343566643630323738386337656530646334303936636562376238313936353139 -65346438386263646231343031363162336134363532623665396666313933356134666334353365 -39306536353238653761363735383064363533343834646265353834653137343937633966666235 -30623434366439633234643265613530386134393466373365366339363561373132343134656433 -33303565383837633266346139323561323338353634613037626336353763386239383061346663 -39353062396339393234656164343736313862393335616230313664373139663262633561616436 -66386466663130613663666639613062633234376436623931356332323232353064663761663437 -32366631393833306632653130623161646365383565396430656637646361333366643833383461 -32373833393237623836663637373665373761363463316339343332326564333639656235623738 -36663135633463646564376463353532383134303864303332396366316265613464343134396466 -37656531353137356261383731393162643235313332343262336231333165326632356539313864 -38326665376533626162626538666638343434363263306637643333646636346236396664386234 -66316366336366623432356463383362653937623739333136353239346635323437336361643831 -62663937343562323461343166313430666434366332383462666539626566393164386134386236 -66303637323762666564313230333637646662633738633537323364316164653462626433313861 -38346231633164306432323435313466393830653962353466323962306635316265653466396263 -63393939316430356235326565376531633433626663303734306335666438383439306637666166 -30353766643233386463623666643430313961633561363666303630343231346133616461656662 -61323861333862313531303166376663303933613837386666643039393162396332373261363731 -32303634303132346535366630383761656533316335363837366463323565343062623261376264 -32356239313064303632366264343465643362646431656136343136386539303866396439333936 -62666164373839323732363262343131323338623234326430333538646564653937396133653866 -31373964653039326262316662626266376462316238656132333134303437356136613361666362 -65623362323637336664366433356435303332626536363966393764353635663731386433666134 -38333161653533616462386665633861643330623561393334636663396363363833656439666339 -31386237383531373536623036386437306135376637326134663937373838653063616463363236 -33306462343230303762373335626362393334353531313663333761636536613733323435386663 -33313762326465376134343435353263346532393865373366363935376337636632373034386431 -65316133613634616663376231363136383733336139636335323063613538616434373736336364 -34623666653131333862353931646266643737323865623636623038333636663663383863363336 -66363936303938346435373866306234616164313930653866646164636466333661336632663830 -64396337646636613661333933396336626264346238346361393562633364316361356236663435 -66623063376561396138646666623738663539356138306561353664356365343535306531343332 -64393362333636333135333735616366626266313331343634323338333738356437303462383538 -37396463663731663565313066623931613030303633626266623739383063376536646130333865 -31373263353261356361306639633331663632393338346561383933633838643438643730363565 -36323563343639373639656264623761643263646438333333326364366532336363633563393639 -35623436653566653563353161393438353332613537343336353830306139666631373237336130 -64343131373965383333623833633734653039633138646431633739336264643131386538633836 -61366530373732356530323530663232326335653230303366373461623137363033376138383562 -66373931646162613438323263303763616464323338626334313630373832623234343439363264 -34396533616535303931643630636363393433366463663665393536643835383438663961653435 -34653962636333313936636238316237626234386366363634363739613431646239626439636662 -35623731653937643263656235623466396537613663626237353233633865323633653439396332 -64326362343532346239386435633437646230303031653938616363393261346665653034353833 -65326465663032373932323866396564653538336535373634643332633032323435653439396535 -32373135373363656132383863656266383566363036343232623037363666316234643366623639 -34666531653965323363393664363230666536633064393035646163333730376264363966356638 -37376437376461613035636461663336633330306464396566633361623436356333633234366237 -33616635663966333738346264636534633764376363643233623135376536613730363631316235 -34653235373331663432333635386435353034613831373435666633313765343065396662653932 -66643339313164336239373732393231333037326338303933626430366463353831663536393530 -38626262353335656338623335383666303661373430326535643464363937343064306465646432 -65613335643831366164316365666361613165653863343033653730393236663437616361383165 -65616332366261653461376435343333396333653533353662333261313831633338356531393639 -30326562653862393333613666643332643830303634316637643264383165373539306531313632 -61636132646335656333636363343464356632316534333538383131376432383162646430376431 -63316339353232356432386431353438616337376161326563336461613061313337636539323133 -34646161656565623537336463613235656335346663363439616365316661376435363861326135 -31613532653931636365626264326536623839666637373737323831356461316239373562623336 -32633337623830633731623537353064336533666139333364356437663835656331366339653564 -31396633396162316361346338636362363630376162353733633762373461393063336462633464 -35353530616265353636313338623863613936306663643037363665636236363233386535656437 -61626165366333333736333039623138613835346562356631333730646234333134393366643533 -62356637396466396662656361333432666664633037373262313863333539326563643063656564 -66366637326263323638386232386630396634643132623433343035656361386165616664396633 -33613063633463336430313237373965613565633035623361313162373032386161346139613233 -66333665363466343938626665643632366130353461343533363461653036313233326461363265 -34656166646331303836613039346130656439666530376263316162323233306638306664653561 -64353735613863623166393833613962343464326561326238393231346335396633666233646332 -39303736343632613135373465616264633635326537363835666333343061363739336332373330 -66653864393534663330623039626434626365643538363964613634613061363939613837613261 -38336466323636643438373038666536656633386332366661343861323330306632623130626637 -35613334343731653134323361326563616165333833626134366137376236646337633239636333 -30366636666265306533616138646339393362633236633633313861643364633933376664653035 -36346663643762663365343635383739323165633333353138656366373638356539343939633534 -32333837633636363937353762666162626430393236663238373932663039616464613566613361 -36326632666463353066633764323563613333623333356465353163653431323632653135613061 -37363663613738303265613665623565316331356336623830303432646661333065373530393431 -37656566353130643230376432663132613338653730386464376230316362313533306466666130 -39656536353830343465366162373237376561323566323433313538663237666166626532386262 -35653435386238373431353762353239326365656134386433643466643462636232303236366633 -66336562656264666235396162636433353064353537343538613338653935663930623532656165 -33316562633131363862613566386566383835633065343532643731313234363034333165336131 -36626635616433626564356436383233623030356661616365616365616161336132656639303564 -31323466643464353461306462316538663963613636373831623361393433646465626666366631 -38363264313033656231653161633962626234646239373564663333333434336462356362343234 -62353862343734323339653831656536623265626439343632343161383663373532363765613535 -39656662633732343431616265323266663366346634316135356230336263323563643335336662 -64653064633538653133613735303838396366346665346338303337306637313236313139643135 -35313433366332356366363132323363383533336235333632653265303539326266346137333334 -32346131353435633762643834393230633664373535643762623534346364373163373038343636 -30313663333139353862353630623730666530323262663435653636663839363737393061383066 -31633530623665663838366331636263313265323234653630663661316465653564373163663633 -34663063643164336639363132643731336431646134333263636235343835633937626265393561 -32363939623837333438616461356361643132336130396564323665303463613261343863643266 -31303039633038383631363665396335616336343838376539306238346463376535313561653732 -31376338663165346339643236313038393164646463343062353137663366393735336235646339 -62646232323838613534366164346435366662393865363861396662353666363230373737666261 -66323563383930376237666131646339393032656166626632626439333232633164313831313165 -30376238616435653831636236376332356535666265663863643139643764336630376462333337 -32303537326362643439666136623636353534313366613563313432626266373564393030326632 -30396635393933306464613766306336323233636438396132323338383066636632316330633238 -62613366383336313434343339303166336436393766666561393664636164303566373334336338 -31356162303836623961333638646166373435393137376136386239343430353036353734616230 -33626332316433393466393365323932383837303338383136376338663166383133643364653764 -61383534636130613366366639336566663234636461346461316130396661336262623337393534 -66373036306563373662383335623965323739626236613766366236623062313637323964373038 -38383136333133663364323066366261663734306136653832366134353938303739346234343936 -38303366343366666538333661643433376539653666616666333261656631646537343731653034 -36373832623165333363346363353762663935323737323565353336396630653535343339663037 -32623737633230396562613762646663373833366632313663363261613737383565383633653830 -39613263313465643135336131376534393337666433623262633234646431303264656630386333 -32656362346164646462376464656362386233373039663637383233646461383230646336356433 -36323439653564653438323966393566633339326337646434313930383532663861373237613663 -34623363323735323433363466393835616633316164663833373439316461376164616164653865 -39326163623763383633373561333730336532643966393730623962656338333437366132616338 -36363933353238643464373461323130373930373162333761373363393165313635363766663935 -35303066323334313531616361373835653234373134306233333037336235306134366633623864 -36623235313230656339373739626230316338636430623134353233366261353134616633663463 -65373435366230313861633638303437356262333562303464383536633037316134623833626431 -65313062396337343033636264373032363739393836633665623862633931393264646239343039 -63643231373636636636303331393730663634653831663834633931323733623031326236656265 -33396537656165303964633535633065326533376665323236326266383134376138613538393932 -66616565353236313463393136343238353835653761313562363930373630393065313732346332 -39656537376132306134613838343332383736376230646235333266363136623030356433636131 -62623861376431613431373139376335343135626434323733623434353761393630613531306433 -32636637613864353361653733383965626465386562633331633264386633326165346532626533 -32343637643638643037386236316164363539313437363038393533663238616436653238326136 -35363437653063616562623334333736376639623461333463303466343838313731383363623639 -63636536326438333735376137396435363764656432656132326439363137323533346366393564 -61383635643037626134386461336563643434393636396166353633306162383665363831663561 -32383961353066636532386166323639376266623563613134323236616462393739363430616538 -32376132653436343834363661633138376539666239663136313132643830306139616563656265 -33336664613262326463383064623032383139383434343064363338336463626136643765303437 -62663765326434393830653237363564626632363964373234316233383130333964366663346264 -64616437326139613836623465643266323839356536393265326237386131393166616365636538 -30363332386139646563656664356435633736386165643830313766663637666438356536376530 -66333636336666303766396465383066356138376462616664636136663430646466333239333437 -39316137313665333537356432363835303834376639663362613636663931306538316361656664 -33343533326530343832376562646661653364303866343630623866636161613234313636343138 -31376461333834633566303364333566363932373264323432643139333131323339316531643661 -38363039363361636261633136326564353337303339353437643331313534633632646562636132 -31663739376335613961383766353964653535306664373738626464353438653030346339613536 -34393238636665323732633832353863323933663638663433306230626264323336373531383061 -38666666393062333637393634396638353035373765313637323130646666616664313034663638 -34633235373137326165346530303637633837343463383131386432326430363332356635623235 -32663263386335313837663135663032313765636663356432663733643830333464353634616266 -66656563653037326333656238663937363835646139393230383763613736396466326531383937 -35366266396436623131383966653839323835373032356463336561396265623130346433333630 -33346635313264626434666532396536373965346164393934386330373931646264326433616461 -33666464323465666361353036353831653637393436646238613037636334663863323630346331 -64316563626635346235376463333165333938326166323461653935373966353164383664666461 -61383361653964396666663365613938626534626337363933343464383962623564323039363431 -66386564353431323838396365333234376665636533346562643864636566306633663832646232 -66363033363737616564336632626331346136343762316137373037653034313738656638646133 -62386264666661633036623861633131636666353433616462336230383737636164633362363662 -32323930653732663064343234383136633332316534323238383236326330303533386337363832 -32313036613132333563633333356535323531363230366534616263323962326635376261356164 -30633663386432666466396466376437353066313934303639333935653330343434643266613065 -39336662326561656638616230326334376637303431666539333439313636383437353066393532 -63343331663566653665343533333935383937666133353037396438616461343038343666633636 -36353834323435323633303738653262623635313134333364663633343562356364326365613764 -31383362366233323937393065653464396663333830326337616464386434336337333434366533 -32323338363833313565346238626162383763383665626538306564623065363738646138393664 -30623730323038323163636239313433643366353032376234343166656234316230633530373630 -34303137396634313562613562303361306434653833373232393062313461393337646166373964 -63313966303432383830363164373339386139346237313035663966316438343464656236616536 -33336630336532616239316261636438346536303566656332363366336466393531353261653731 -30393665343236663462616562313737386666613736396465656266333533623435646132663466 -32343962663230316636393337613061383330663938613938376433333264393932616331313337 -64616632313263633332363464633166643932333634306337333638616566333431323361653761 -63383137386262633037346562323732663630633939343764313463346432623839346364646361 -34393430386230643863613030326464356532376232666135376436636637626163386162663662 -61393239373662353437623064643835353966643366656435386235343461623734303734373936 -61396630353537623563373736343934663832363138306465323930396532356365363937636539 -36373066383738653465386561343837303035313933636232323763366265353434666536386435 -66383739633437356533386366306130656432356163386365373337656463326638626666323162 -34333137306131386335353064663962336432663730373338313661326266353738326330616239 -33643531656339376663613735646266663065346138313838323061363265666239613663346334 -64323633336632663836626166626163356330343863323939366265366339386236363530353534 -61336633663763303462373463323563346332646534613437323736646639323834373439643430 -32393034646434306163373434623434623836656134383230636236653662306562393335646662 -36316664363334353436633466626137353930653436343163353662633565333338386630393237 -66633732646134383232306466663230333036303939336534613163386562383234616338383166 -39646365383839383065653033613366313739393661656239366661323734353366636266373463 -35303437393061356138393135313832616532356438303434383663353331613030386665386462 -37376566626239363730663464333635353265376635663962336534306262333938333363646163 -64373961313632373365663562393333633539363137303062353834303936393239653937383261 -34323664666234313262326266623465653963396330663638303133626630326466393331363936 -66343730626334393163323561643639363466333966653266623232343063383934666665366630 -36386132346561303831636262393634326561373232366438383532333963316364323031343366 -30383338643035353663646237366431356435346662396436633636343732653132616562643130 -66613263653831363130363436613231626464343234346137623537366331346138633166376334 -37333962363931623033393134386564353265323436353564646634663361353236386332313665 -65656234383831323561643638646139643165643464633836343233326532343362313134623239 -32363762376533393430336133643231366634613934623761333434626437313435616661316231 -36356636656665656562313739393130343162343462336133633561646434613163346130353738 -34303935623936616539636135333761306463393236346436636132383837376333306633636531 -62343166383036353865333737356534353661303330306661323039636131376365383864396163 -62633537663630393665363930646133643464653834616564373530666663386132393235393864 -37653233343936386437336532646664313962333864316438396662326139636161393533666466 -36643034363538306435323464326164616664353066323564323432336261353462373961353237 -63616562373035313561363661366332346130323932393131623538353537633162663362383438 -66633930363733353936613230613438356662633134386664613435666133303136333637616539 -32366164646536363335333365663961643965336332306364363437633762636230393538326265 -30313431623265313634666264366664316361653631306534396265353964393839396331326363 -31636538303362323764313265323462643635323734643435386664316663633335613132363432 -33316561326631313737356231303632653664393863383264633962326637633436393364323864 -63643636636664393331653032376336323039313265633466313965633664346632653237356562 -33393966323937393266336233336566636232616231396465323462353639343230643261393336 -61643134393239386661633833663937653233386235633964366565343232333238363665323063 -39376463393936313932333265373065393333343761363134646565383564616335366630363731 -64333035383031636538313364633438346563323534633462396430353732666361343032626132 -61326339323230393632363934366336663062333832303262623431623961393338386531303763 -38373362643234306538613439306665333130663432373533343739633932383564613036383433 -31656466396436656563303132393033653530393733663531646361643533383639623765373235 -61653635323731396436636531363638646462366565323136333431373063636164666563636665 -38376237623332636234663862363330653138363463323832306330366162656235623737316539 -36393161316134393838323565366333623261396538623737323732653730623265623031333562 -31663964366166633261646163343933666137333738643263333663373365333630326236353263 -66643961313939383736343862303366356161376466323763356162393031353738393065313538 -38623038363065376665313031323636653361333561343536663332616637643131393936346337 -34643639333133366538336539643162303262356239336366316631323431656633653761303266 -66333161633630613533316166633439346137373064363862336664386539316561383464373136 -38303733663164353531663561336137636161333836663963343135326138643363363238376638 -35343233366337653964663635396534373233356235383930316437376363653737386639336636 -31386238323737616139373632663562383734653763333139303239303830363961653961333633 -35336264626634646262663166613331333239623963366133333833656333613837323632313863 -35643733623966613936646636326163363735303733336439353731613062343034626262346661 -35663234663338623361393530626232663561663830636633613431393832373663386238623230 -36653737333563306534653230376239353833653131303035353637323339316235323639366637 -30343335313831376237633932656332306265373530653165653061656261306530653966373132 -64353962626465343639613764333463633365326230336563303231383665393162353034336331 -63333264323264306332323633613163633465376362336466336564303532636465663563663538 -62656632346133653330373737646664386161386264383236336531623931316666343537363466 -64643861643935363433316133633835636166346136363261363735663063343538313766653161 -61613433386165666638633663656235346135353764373132333630353432616433623862306139 -37633066636533326139393033336566666135646132663233303361613833333533666366616437 -39316537353534626330343762623432366239396233333033353238393439323339663339346664 -36386163383466643035643366363639343831613534373466643430623362666638663439373835 -62386662653132643133626463353366366561373338663734363535613838363063366665636637 -34333333316531613931613036383538383333306635646464366463396339313534333638623131 -31663731653535626236623161346561623439356162316537666139343266623138643830363734 -65386136323235616162356439353933353063386661343665663532386532396338353733396663 -33656561653430613832363263306337383334656633376431613135383066333837613165303939 -30636465373735623434323331616539386531386163623265656566623265633238373838633330 -66396639313935623436313733333339623066333838633563643563383233306565376136306632 -31343838346237383362393238373363633237376330316139383638613535643566646464633361 -36343431623165356631383964323561663866656532643439346231393731393838613362666562 -38646237653530623837363165386561663438366663353964333933626136396237616663643566 -36376663363137363835616535623133346136343362373033376562323034656432393064343766 -31666334663263356539346463393232663135313331333435393063333031303063323433663765 -63393734313265306563613630313634333262666334343066343835316461326163646638363961 -36323036386134366232346432393261373631336539653965646431313363613761363433333334 -36303535616135643363333265623236656161373832653835343535373039636563363664656430 -37326631656439363730313831646436333965366232653163336139343763333631396265616562 -38326366396266386663343431306338363033653166663964396631643932396536303536626431 -33396430636130636332346239373536326161396338336536623636363734343832633666323965 -65613735316638663438626237316366643831643764626135366531323835343161316564373764 -65336164656431636632343864376234366139346162663537633465656239643739333265313838 -66363337333966373261336664613666343135663436663632623934363739353932396539353033 -61343161393539386236366562393061336434653535316635373061643832366364643230623436 -64653730303934386537656663366535666131323737323534323531313135316438393838373063 -32383336636333393763643339613939383332646139656564613164353264643236363834373966 -62613532376635643162323834636364363233653437336563393062326137666132343831656434 -34616235366561343766376236376165616630643332363639613866663066326339636164303232 -30376363383431363233363738306230303735663933323530363664376136306236346362323332 -31306365653731373135316439323366666639663765653630613330383635333139383336333634 -34363933636532306433646264323031396364376432323537376236643933333566363135613336 -36386462616363313336623233666564653361306563386663623431643536646637366431623261 -65653338376238613761383532376233393631383133396635633033353933336138383064636538 -33366336396564653134663835343964316261336665303664346166633235383533306234626434 -66633137393336336465313833653430333937623635336230323664396334396538366265653861 -37366464396166616461326435656537383162363966306166303765633739636332336533633063 -39326566666433333939646662336534633064303765316338616239626635336566346137663464 -61666564636332336134363331306337373630653962613962646630356538316233623938633266 -34383737373765653934373233626437643839376334636665303738373035366230666162626163 -63383464623534343464396163626665633462333134663561616533373038373932623536363461 -64613736613433643866396166303132633361313837653639646330663034663630363038363664 -63623061323362383338303536303061346635316532366535303835616231333836653330666661 -30313839373161393735313536383734333262666261633862613363393137346137363437363232 -63653538636633353966306436663835656638356332623237393434353235343064333037656235 -36346162636631343139653634346563356635613665656661316163383962353237343534633339 -38386462323162653039393735393661326665386638323934613439353830663632306332656137 -61363233383535356536333761666564643464316436306235613331356134613834666561303161 -34333830333139333733663632303838653037306135633533363865346432343734303837633061 -64616134393636383331613164393465386630353461623764396534326462623866663066353530 -61643736633430616232633933363364303533336338636230643039386530353233316266656436 -66643433316338353262333661356563633266346331393965643561663864653663663533383665 -37323363343861343737633134666530646237313364323165393732393737646465343163666630 -64643536336433303134333238393861323463663436356433353635326134323439366438353134 -65643065396366363964343236663635313866373265663033326363353034323561666336363762 -64626532393537326539636266323162666662383333663363326232333139363536393537333734 -30333032626162613533613165353165356437376230616335643564623034356131666439613262 -64653533386265303866396135616538633661613036623864313165336632643333626264363639 -66643864376236373266613761323038326664373533363931643264623065633835346331623261 -38313664663062663331633338363036613761366130313464666539393933316564303662666661 -66646232353262616636643034343530313835666163373433633833613837633565386164656235 -66343032316136356232623739613135643165653366623162346234353630306365653438376332 -62316536393831383733303735643436653735396236646430643232346535396533643635356332 -39623031393336313635656535653535613933376232323135376165356662353239333638366633 -30646362663362646439643932303030313738386535363262306438333039376133313935326339 -64363663313934353265326638306262373662373636383135303334386136636166386266613535 -64323235383435363761656234393034646531353836626135303863636637613333383137346235 -37613636363438373830623039623236353736373365363038333637656265383135656164353731 -62323935346535343535333863616363383766333937636464376331306239636563343938303534 -39336337646137363135383134393163306637623964646339663366646130623539303735303833 -36396135316432356534356365316235323437353331346464663739343561353536623031643338 -32613131366235633434373034613766626463623530613032663839336366383335623763656666 -64613634383364643232316166653333356566356232646662666234363635643538653364316565 -63626531376566313933636635653231636438653033346563613964616437366339353131373961 -38656535616332656462626361363364613034623633636138343231643062653936316637333838 -32303131623034343233373336306635663038343234626561376264303635383338663734356237 -62393634633565653331363462346664663434353461623965323838666231666335313031323864 -65353364623330613131366539306564303061383134316362623665666636613936306135386363 -32636536356235323266643961643534653331663361636665353031323464376639356130363765 -63343262316661393931343336363437373336356163663835636366653364323537346532643661 -34666531313064353537666533303837663237313635633934653036353966323765646435626336 -61653338326161333035353631663239366335353239303737616137313364306265326134663037 -31636465623039616361646332303962663937633039666337393762393532313166323633633539 -33666236336133326630323766626533373035316330303262643264633839363337316161383439 -33613165363964356130663963393961626438383531613163663830613835333038336339366465 -36653461306166653633353738393666396261353538393834393637326636616439343131636536 -35653234633566653563383738653538363635316239633736386563393865623264316266373863 -34623235626132336165373134336438653032633534623639663864383438326437386238613062 -39643330633430336435643361643664336330303466333539306361386362366265623734633830 -62663565626366396533643130363662373830623164633536313665656230373830343036633237 -62343332616364653930383766396336386165383133373431623665653038643931313536643732 -34353831323038653963623533336465356337653130333264396231613235303961323230636534 -38623935653833366264316535663133623632363130646136643730373338613230336532343633 -35376463303936346562306161616231623236653164326261323164623735303834363266316537 -36353161613864633131666663646266663463306562646331656563346435386164363132366637 -35316132616661353637303265303137643863366537626533313264656166383461633066336437 -37323732653533643165393931616465626230626663643933313737396537316165326230653463 -61653166396165623464643438626238646630303865313330646234343635623365646665333437 -35333333346338303733306639393533346166653565333362316536356235616162333234633737 -36613030646365666363373063373564656337663837663039643333363365326161326537626335 -65393136306161396166346239323337393232323235373535643765323932353563313631643863 -31613465333439376665363664643433653539666533323531636437356330656361616637376231 -66353139373864636534333966613263613039653832343464313466633235393631323161336330 -66366266616365386538633130333034396138396162663733393836656137336337613062393837 -66323661666137333335393939626232663334333035623434356663336135643837363433306535 -31633564363130336639666538343038323834646536663332306336383864306165373033393563 -33623135333561666265666439353666343437393833613637393634663330656562653631343035 -32336666393131363334323637303939663133613261353965393934633933613534303438333538 -65353930303864646337383237396133346136336136353131323461323262343730323334343035 -62653766366136303338343964643961373532636630353333343032376631353165633438356239 -36323365663366653630323364646465373861643637316538396433333463633934636162643562 -39366532666434313439383864656166323233353763383935333964313438333630636364363366 -39383261623864363633323666663033366564363664356231663032653639623362663061656632 -33373562663932346534393631376663666231303238303232363532663536663630636363366639 -62326631613034366266633834383966613632656664323965393631323665623831343437356363 -32313666633164386232643538663238323932336638396136386238313663313433343031353934 -36353238636539326337303161663135616433633764666462393662313662633466303335633866 -35313637336232353236616139306130326263313336326664313934626561313633346530353134 -35303765366233653635633034633764613861316533633437623261383633373261356135313731 -66316565666134356263393761303533623862613138333134383566326134656435346537353037 -33666635373233323430346565353937396237376232303561356237353632313835326535376631 -30636566386239643036353133393165363939626235323366393431363363303164353261303939 -34633135646132323234383766346263613934393434366535373634376139366233366134366433 -38363738396539393434663361346130383331646565306362343266323131303538323933313430 -64316134653634323962353136353661376466656566383630653963353831363038326535323165 -64383962343563306566613837653432363366313433646631303537316339623162363563373332 -65616239316135333464643730373061616162653833346131633033313633303539636262613763 -65633561623432316435373061633335616530353963313164313535366163623861613464623237 -32343663323636643933663539393538313765623939643331396166333836653730656236663536 -65303961396161386261386630363833633634613431656565326331333136323437326137356263 -34316362376238626333393136346437626535643639393937633532336461333237353765633966 -30666339656661336638376435373561346134383638363566373661333437646362386262646538 -61383232633337336438303761376666336338393133383034343139376264306330333135323030 -61376235663738636435643966306331366433316530396666353365646366316539323038613439 -35656434623163323661376130383061393038633532386563393465643834626630346132323461 -35633966623064623336376665343437613031616237613066336331326339646535363761346163 -37303533336561366133653633366263383132326438326632646661636333383436626535376264 -34363830646664653133363539666534366666653138346235623338363365373263663439396563 -36386331626665653662643164363566656239633564636633396562393037326663356266356339 -38653239616531376664643165633634396533643732613038313361356535616461373235623961 -36376132643932393130663061343366383436666437336366363562373639373465303537313166 -37346265653166306231313635653962363761303733626133633862356161316134326166346362 -32646633363964353937353730623938353061346364373235306132326532616634366330643631 -37353337306261343462373332343133323136363432616165356631356566656134313432363639 -31623066396466383465303262343265623235313261636163376238343861333132356339383663 -36383232383239656635386566666663323762323062636138656265353736323638393933616235 -63346165663930333065653066366532343332366262323662346565333332343532313563393438 -32626231343537313632303137376364626163666462326266646337303262303530323237613365 -38666231646237626238653038363135356531383132366635653163326537633630643063393661 -32323930366436336432633864646565633236616162303439343731306139386463396231313136 -61636434336364303230373432636233343131376163363138666538663763343330646330646465 -66393263313661396266623862393037396330666533643738623966336431633935373863306566 -63356430333232636339376662363463653631323162646666393262363930613166643334313537 -62313463393961336663363338353436366632386461313135653364643937616435363162636235 -39643231333363383531666131313439333331366264656362333439663264396636333263306363 -33363434353331656666363966396135323065363564393835646663643631346530353565326332 -34656431333936663163643238353565326537643839643336653535323432613536633737346332 -66346634613663366630336533633239613238306537376166326231363439333462643534343035 -63643666313765333465333164313332633664383163636238363966363039363662313831353733 -64373435666136303337653333353066643731363433656536666630313464643465313239623462 -39323930343461323037343064653666653738396631613030393034333032666231633936343732 -38396530313734303135303063613765663766303662373562663566303431633937643938313430 -38633061313337383438326134346665303561386431623334616166633036383063323137633239 -35373561353163666262306630353061613861353633616535636236653831373231386337386136 -62303631313538613330353635656562626362663032383236633233343431653237633034316264 -61353839623937366339353865343935313062623965386433633932356466346661393639663135 -65653938363661356562666663326234376330626161663161376135363565663535373562383231 -61333733333365663130313264396130316336656332343934353564653365353863366661666362 -34376161613464653461613830373061323330646130376631363235353935323835643461333065 -36386264653132316364646230313334353639656134396163393136316332613434313536376338 -65383839363432363835653131363963313965346231653137383937623464303439663533636539 -38623430653339353731393764616636376537666366653763346337623535393961313232376434 -36636236303262363737336433653362386633303135336465653764326662646338613537353931 -34336363393737313462646564663761383366316663303530643332326135333962616264643830 -32353162346239636665356339353436333232396635613138303065366534323261623736373633 -38623331663238336661333938383661323939363537356562323533373330336335343063613133 -63373162643738346566303732303531303530316230623432366532633234366262646234303837 -61373733353535343037326164373865313633656238373938396264663537656566643136633535 -65353634333765386562316138633531616437396163366630303931346434336230626138643234 -31666637373464633565326131666234663633376639393662373630383630393336356333366162 -65323630373230313439336565633465363361333661346262313037396131363535633637633530 -38396632393061623534333935366235356136643264363439383731633730306637623437316333 -39383936653031326532656661303361306232393134663231336263313939333233393832666134 -32363931323034366333643066383765386361666266623237623932666532633564323832666264 -39623364626331643063333930666166393533656263653436336265353433303761333861626566 -36633362333331663865366334353730636132643038346661333561363835393031356638393134 -38366565346430383065343532643331303831323566393138653135383338663439393662306563 -34353737376439633837353033626332346632396331643432306339366235616332316634353162 -61323162656666353666623333633238663933646132363338353365336632363937636532666264 -61323838323333353564373635633164383031663434326638653130346334303236326363343435 -35306664333233303965353166346131343136313966366232326535376435346534616431623337 -32353065323638336665613630306232666462613033633032633130633566396266396532393261 -36383831373733353633633963636161646130633763633034356137383038656461343139623430 -31653066386536333633323263666237316461626534623465636536393664643936366434646438 -36333933646263346534316539666132636664383365653939636630333435626532313366356630 -30663035356164376262373036633132636533373065326163313266333262666265616666326132 -36616530316530666639396330373935326438353733386235386664363465343232613236336130 -38333264323462386662393764333364386564303331356534373863343534356433383337353135 -33353961363034363865323331646532333838303135616464616337363935336236333964643632 -63643630343731323331393539613733363033303832323362343761313963366561306464346432 -63313332653037353365323631313230383132333736306338353239346162363931653163313932 -62613333396131323732646161303036623033333763383731306133656237343039313034353030 -34373538376162656266333231336365356562353766386261323566643962623133336465646337 -61373535643133373434633165383538333339346635383735643061343262643535633435396338 -62616234646534396339313636646464386366653235633861373730643361363938376631653563 -39613431343964393933373034363365653239643230363338623234666534343332303236373231 -34313833346263613832326562376563326461333861366139363638306432316438643164623234 -35383338376264306434363739383733313838663964333261333939383364343538396333313136 -63396536613135646235343966303634636636326236356634343930386631633663343134663739 -32313164323539343737663263636365663463313063623139363363383965656333353931623632 -37346161616233396534636563646436363033353839666635343532663965653663653061323934 -30663561353263393634376361373066386530323765343161646364303835666662306562393233 -31393235643536623433646136393732306538646330306163623835313135613762363933643037 -35303666336237373565323262376461393436326665636261323639386262366634336661313565 -39306331396364613939636164626532656438373862303838623438303064623739383639323637 -37386131663465343137383832363737303934633432353438343035623938326435663763656163 -32636337303366333865316131643135363833333562386562633365303266623861306266626330 -64373531346263316364353231383230393737346463303939336163386634313032313733633530 -66616534613237653436643363323237396631393339646534393533316334336364626662663038 -36386438653165383161626230393532656463663238643566303166656238393638343664643163 -62306634633364663166333761386434386635323034306531353562386164633137306462313339 -63333166643136383335346130383436376361373765636438663735393830306631333539343439 -63346464336564313434313538646438393865376562613733393739343239313864666635643832 -34616136613161643933343361633037613266333933363339363130363566623739636532386263 -64383331616161663561613830376430366663303931653534666539663165643061343339383138 -64336261333731393063316162313832633765653665633839613330343062316330623831353331 -62646333373166303538366439663535356661373632636539653333646239663630316138653161 -39376534373862336264393634303339313166383632613564616633396463653731623433323637 -63653433393531376639363037313963366231623161343239643538616534353437653137623738 -39323563633038386462323862636261383031663935353934323563663764343532323338393063 -61323165336530656366316533333432356331316534663131333239373432383830656561393836 -65383263356631323337363963346634633537353131386537303635623834653661393538343366 -65303466373132666536396261636361316365653561633731613539393630323063633761393538 -30356262653562666562643662383430346635326433316138663734303838383635616565326537 -36326330306630313430383538366165643337306262663166306462366139643438323932616635 -64303533373066376263356533376163376339316564316163313335343835663238316337306461 -35393765626338373032306663333337616130326439306164353132666331646635343039653732 -32653662353761656664366335353033643436376231373439323335646562373837306236323635 -39666134306365393762633766313538383635393864353835363366313562343537353163396337 -35376638303361323463313366386162626533323135313934343730396134336365613938643139 -66363435353838666464653833376636333961636235303433656463636132396266326339653566 -31383865323339323962333733323062323264626239653665346232346539363539353539333230 -65653137383831323539356163623465313964653964663234636433396631333165643134383435 -31353132346434393635653833313236393831396664386566613032386534343537306563636631 -36353861663530313534643962366537336139633436323136636530623165303865666435383065 -31653665353833366134386132363162396330353465373462333263393537653839323563373838 -35613166313537353565323766323864656361303165653737356264633634656235666331653634 -63636138656530656264333462613962633434656134353662373165666530623363623834633632 -62313434626131313362333430643432336564613130633366643330346533366633353237666233 -33353137383236383362653361623732356330333833316631343137666164396538323034323165 -66633838326665346531306534613237643938643866303034363137303664366665343634303237 -63646534626338326632303264313737636236393237643935396134656661326435363133653566 -64643562343235326432303532646665363431393063626664626335303438633639323635363766 -32343662343664313139333565326365333630323332646262316535613262353236363537633961 -37306137326139353337396466643932623539326331323736393038373261656665393732353134 -66303065666137336563333164396464653038303530326662613635383563623766353365393162 -31646635303632626233303131303237313438633462376262666463326430323031323165623933 -62613965656661343563383066343530333564626438326262323265326363656530643362326434 -39663337626137333533346434313465393432653266313835343663393936396162356533313034 -34313932363632623363363763376338303131656161326637666436333237633061313537623639 -65333637666432646231343538633865343239613434343839616563656261633562373066643364 -31633166643263393636346539303037666165343131656363633465653566323461623234386130 -62633164333830303633353464613637333031633630386163333531396534376530663330616234 -34356237313430646565346663636138363635623635346561353961316531363038663961343536 -61386532363064396663636236303938393166666439386638633933383633383561663763393062 -61646465326532336236303833353361353638653363376338316163653061616137613864626635 -61636135623139333434336537356663653137336464346565633161666132363562613732313166 -34663964633437393932613534336665366361656535333530613262653564623433393437353835 -32343831323932353163336364343230333962393165666262313736633234643661313837303965 -61623061316462316636366166656634353462343063343064616136643537386562336362373532 -64653631333634616566383637326161663935646266306563313339313339383138633139613136 -66623939666631343466383935613766646631393962633963336263383635383034333761366133 -63333234313731393837616635343634663161393634656165353535323765663331623266343937 -39303562383936323163633165666437383065336631333264646662333464303631386137306531 -66386339663739303230303531616439666137633961623666383935623230353334356432366338 -62633965613539373732653439313334643533383033323837613165653262396462343937626133 -65646432336630613736636233336136633562386233313631306231303132383632386533303734 -64306466323533656632313133633361316163386338303336646130653734343562323362653861 -31383261373432346266386235666261383733346464396163396466333331353634633062343738 -31396438643738303530383131666134366662646164343866383138346465653362663137376262 -35313838663334646235643861636335393038633431643565363632623966633463386532323939 -65393135323930303362373134313266356436323838326665346166346633333936376131313430 -30323361383865343530383536333164313530626363373335353166653066393831383134306464 -62653538373130316266396261356639666436343562383639353839633336613666616366666431 -63346161636134346433623439313635653831353531353536383439383037353534613465626532 -34373538633838646530663764666532643865623334366366323131343032643266376436663231 -37616363363339363734373165353864303365343633636466623734373736633963303839636632 -62663139616137393334346661353438623236326561626639383635343636656131396164343466 -38616233353038316139303739333461666337393631383834613938653166613766623034653839 -64666265383539303163373539616631323733356134663839643162303964633337656564346265 -62396532323139323166383135373637633639316432373738313666386230336133353737626331 -32373532333437343262636135623632636335653632623735306263393562613866653561316131 -65663133396161613131653738643039316533333739636437323966643936346336366365633963 -66333538643737383238343866623235626434346637633164646138336566636535613961666132 -38383932653861613036303562666531383039363031636336663063333662653733323130633966 -39373262363632343438343239666433366534363530333262326666663434373533646635356533 -61613935326664383634623530343636626135336637633837343138313861343462633438326362 -66353938383432326238316131663933326136633731326465346633353962613064323663353134 -32336436646162643934313138643037643333663835646464643863626134663963616230326535 -66323434323536616639633963393537623239613664633130343738663663336538343037386435 -61666332306161663334383736636638386237643230343433313830353734363238326334663266 -63353333666537626139306335323964633635303638356265396265386636613539393561653730 -33323265633035643364636365623566643739323634656461613063643639306539323634343261 -66326333666136306164643166336235313134373035346665653133623239373763653938626365 -32643162313662623935396363633236386561386531376365616662646332376235663334303561 -34653861303630623266333035613631643738353936623636393839343539323334386431396437 -38643338323963363964363332343731643365313835383961313637333038643738653366353663 -30343062303632663562303134326463333636313066343233333132353266313766343734373138 -61396561396635346539333164383964653539326465613362663836636333613462333731346437 -37656162636331363536636433313534613038383130616164623866653436323836323232393862 -66343266633231653734643630303437396134396631366336626663346662313861356362323866 -31646563323066353961366134336339356638363239363138386662376234663764353761396361 -62316434323564373338383464323265303866303561336133376239343636626665663561613366 -61656463643564336437343136646635386533663062623066323664326561643938663330313064 -36323361383230613263653735336361393532303664653332613663613830393864643830666633 -62633737303332623039613838323063343932386136343966663437313163623938656663366236 -36356364323936363864313237353861613962613862396365386339663562623365656132666463 -30666535333930386236323939343563633362333636393334343231663734663965333434336331 -35663138363264323438376138363630643062356631343437303662313864663030613534386334 -62326462316331626230313261633533373964633766643631313736383964393864343961636439 -65633064313938346562376132326362396337353435323362626665383331336631653033333132 -33313832663934326435313162393865623331346132646433646564356131663536356166376132 -61316138373134646236356261316535326135393131306533313861636436663036656530363265 -38393136303263313238356161303830326435336666383133373430653631623063366336326666 -36306161363337303532653637323264356665326130333832303533393463393531323737643362 -62303530646538646566616164336334323239313135353237303263386162363238653964633936 -35393264306635363933646537303462346234656631613261356666653439643164663232373061 -64313132656630353432643231376664376164306163373234326635613339343833633365373331 -66376134383062373461306537386530386431323261663261663939303866343832656433633937 -36616563383133346231376237363431386338363762646534653362393937363564303566356161 -36363331383932383736356561626234383662356461393939643832633365333230626461343735 -39393939316235343764376666356363616335633937346262633735656539343431373736346163 -39646634326463373738323133643232316433373831306637336437353033613836343431633063 -63386565393630616532313038386434633066343764313963316262323236323336316536313362 -34396262303539303837623335313934633130663730326364623935323835663061393134363637 -64313065326239336166313735343962653930656332626364396536396461653537393662386435 -30333638316334373235623337666266376439336163396533373231623535373761666535633933 -63616230383835386463616133306633336262646365396631653230303062653962343530353066 -64326538636234623530313539333834346239626263396365353766363639626537313966663836 -63656437303863346266356561613562663134306465623135626361643736616663646330353231 -34356464393535653163396264366164353435623031646562383263636132363533