aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpmikus <pmikus@cisco.com>2020-12-05 23:29:01 +0000
committerPeter Mikus <pmikus@cisco.com>2020-12-07 09:10:21 +0000
commit0f9b20775b4a656b67c7039e2dda4cf676af2b21 (patch)
treef602d1a220546bbbbd1f1ea5ad530d1762832481
parent36e59060f08d9978b1ae3dc4a4dd5da1caf6cd19 (diff)
Ansible: Enable consul TLS
Signed-off-by: pmikus <pmikus@cisco.com> Change-Id: Ia53acc4441087e93a51d87097adea0b220d10144
-rw-r--r--resources/tools/terraform/1n_nmd/prod_storage/prod-nginx.nomad22
-rw-r--r--resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.28.yaml6
-rw-r--r--resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.29.yaml6
-rw-r--r--resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.30.yaml6
-rw-r--r--resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.32.yaml6
-rw-r--r--resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.33.yaml6
-rw-r--r--resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.34.yaml6
-rw-r--r--resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.35.yaml6
-rw-r--r--resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.39.yaml6
-rw-r--r--resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.40.yaml6
-rw-r--r--resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.50.yaml6
-rw-r--r--resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.51.yaml6
-rw-r--r--resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.65.yaml6
-rw-r--r--resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.66.yaml6
-rw-r--r--resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.67.yaml6
-rw-r--r--resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.68.yaml6
-rw-r--r--resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.70.yaml6
-rw-r--r--resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.71.yaml6
-rw-r--r--resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.32.8.14.yaml6
-rw-r--r--resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.32.8.15.yaml6
-rw-r--r--resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.32.8.16.yaml6
-rw-r--r--resources/tools/testbed-setup/ansible/roles/consul/defaults/main.yaml6
-rw-r--r--resources/tools/testbed-setup/ansible/roles/consul/tasks/main.yaml2
-rw-r--r--resources/tools/testbed-setup/ansible/roles/consul/templates/base.hcl.j221
-rw-r--r--resources/tools/testbed-setup/ansible/vault.yml1289
25 files changed, 807 insertions, 653 deletions
diff --git a/resources/tools/terraform/1n_nmd/prod_storage/prod-nginx.nomad b/resources/tools/terraform/1n_nmd/prod_storage/prod-nginx.nomad
index 72d321d3b1..2af62a06c3 100644
--- a/resources/tools/terraform/1n_nmd/prod_storage/prod-nginx.nomad
+++ b/resources/tools/terraform/1n_nmd/prod_storage/prod-nginx.nomad
@@ -61,8 +61,13 @@ job "prod-nginx" {
canary = 0
}
+ # The reschedule stanza specifies the group's rescheduling strategy. If
+ # specified at the job level, the configuration will apply to all groups
+ # within the job. If the reschedule stanza is present on both the job and the
+ # group, they are merged with the group stanza taking the highest precedence
+ # and then the job.
reschedule {
- delay = "2m"
+ delay = "30s"
delay_function = "constant"
unlimited = true
}
@@ -83,6 +88,15 @@ job "prod-nginx" {
# to 1.
count = 1
+ # The restart stanza configures a tasks's behavior on task failure. Restarts
+ # happen on the client that is running the task.
+ restart {
+ interval = "10m"
+ attempts = 2
+ delay = "15s"
+ mode = "fail"
+ }
+
# All groups in this job should be scheduled on different hosts.
constraint {
operator = "distinct_hosts"
@@ -96,6 +110,12 @@ job "prod-nginx" {
weight = 100
}
+ # The volume stanza allows the group to specify that it requires a given
+ # volume from the cluster.
+ #
+ # For more information and examples on the "volume" stanza, please see
+ # the online documentation at:
+ #
# https://www.nomadproject.io/docs/job-specification/volume
volume "prod-volume1-storage" {
type = "host"
diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.28.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.28.yaml
index a302d21426..617304aef6 100644
--- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.28.yaml
+++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.28.yaml
@@ -40,11 +40,11 @@ nomad_servers: [ "10.30.51.32:4647", "10.30.51.33:4647" ]
# Consul settigs.
consul_nomad_integration: true
consul_certificates:
- - src: "{{ vault_nomad_v2_ca_file }}"
+ - src: "{{ vault_consul_v1_ca_file }}"
dest: "{{ consul_ca_file }}"
- - src: "{{ vault_nomad_v2_cert_file }}"
+ - src: "{{ vault_consul_v1_cert_file }}"
dest: "{{ consul_cert_file }}"
- - src: "{{ vault_nomad_v2_key_file }}"
+ - src: "{{ vault_consul_v1_key_file }}"
dest: "{{ consul_key_file }}"
consul_datacenter: "yul1"
consul_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ=="
diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.29.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.29.yaml
index fcd416678c..0cc15e23b7 100644
--- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.29.yaml
+++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.29.yaml
@@ -39,11 +39,11 @@ nomad_servers: [ "10.30.51.32:4647", "10.30.51.33:4647" ]
# Consul settigs.
consul_nomad_integration: true
consul_certificates:
- - src: "{{ vault_nomad_v1_ca_file }}"
+ - src: "{{ vault_consul_v1_ca_file }}"
dest: "{{ consul_ca_file }}"
- - src: "{{ vault_nomad_v1_cert_file }}"
+ - src: "{{ vault_consul_v1_cert_file }}"
dest: "{{ consul_cert_file }}"
- - src: "{{ vault_nomad_v1_key_file }}"
+ - src: "{{ vault_consul_v1_key_file }}"
dest: "{{ consul_key_file }}"
consul_datacenter: "yul1"
consul_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ=="
diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.30.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.30.yaml
index 12546a2b59..75f43beba2 100644
--- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.30.yaml
+++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.30.yaml
@@ -42,11 +42,11 @@ nomad_servers: [ "10.30.51.32:4647", "10.30.51.33:4647" ]
# Consul settigs.
consul_nomad_integration: true
consul_certificates:
- - src: "{{ vault_nomad_v2_ca_file }}"
+ - src: "{{ vault_consul_v1_ca_file }}"
dest: "{{ consul_ca_file }}"
- - src: "{{ vault_nomad_v2_cert_file }}"
+ - src: "{{ vault_consul_v1_cert_file }}"
dest: "{{ consul_cert_file }}"
- - src: "{{ vault_nomad_v2_key_file }}"
+ - src: "{{ vault_consul_v1_key_file }}"
dest: "{{ consul_key_file }}"
consul_datacenter: "yul1"
consul_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ=="
diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.32.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.32.yaml
index 51f447ead3..f8662eac43 100644
--- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.32.yaml
+++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.32.yaml
@@ -41,11 +41,11 @@ nomad_servers: [ "10.30.51.32:4647" ]
# Consul settigs.
consul_nomad_integration: true
consul_certificates:
- - src: "{{ vault_nomad_v2_ca_file }}"
+ - src: "{{ vault_consul_v1_ca_file }}"
dest: "{{ consul_ca_file }}"
- - src: "{{ vault_nomad_v2_cert_file }}"
+ - src: "{{ vault_consul_v1_cert_file }}"
dest: "{{ consul_cert_file }}"
- - src: "{{ vault_nomad_v2_key_file }}"
+ - src: "{{ vault_consul_v1_key_file }}"
dest: "{{ consul_key_file }}"
consul_datacenter: "yul1"
consul_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ=="
diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.33.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.33.yaml
index 19ec2c7ef4..ae47f9f23a 100644
--- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.33.yaml
+++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.33.yaml
@@ -41,11 +41,11 @@ nomad_servers: [ "10.30.51.33:4647" ]
# Consul settigs.
consul_nomad_integration: true
consul_certificates:
- - src: "{{ vault_nomad_v2_ca_file }}"
+ - src: "{{ vault_consul_v1_ca_file }}"
dest: "{{ consul_ca_file }}"
- - src: "{{ vault_nomad_v2_cert_file }}"
+ - src: "{{ vault_consul_v1_cert_file }}"
dest: "{{ consul_cert_file }}"
- - src: "{{ vault_nomad_v2_key_file }}"
+ - src: "{{ vault_consul_v1_key_file }}"
dest: "{{ consul_key_file }}"
consul_datacenter: "yul1"
consul_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ=="
diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.34.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.34.yaml
index d55a48ecfd..50981b8d2e 100644
--- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.34.yaml
+++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.34.yaml
@@ -41,11 +41,11 @@ nomad_servers: [ "10.30.51.33:4647" ]
# Consul settigs.
consul_nomad_integration: true
consul_certificates:
- - src: "{{ vault_nomad_v2_ca_file }}"
+ - src: "{{ vault_consul_v1_ca_file }}"
dest: "{{ consul_ca_file }}"
- - src: "{{ vault_nomad_v2_cert_file }}"
+ - src: "{{ vault_consul_v1_cert_file }}"
dest: "{{ consul_cert_file }}"
- - src: "{{ vault_nomad_v2_key_file }}"
+ - src: "{{ vault_consul_v1_key_file }}"
dest: "{{ consul_key_file }}"
consul_datacenter: "yul1"
consul_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ=="
diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.35.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.35.yaml
index 321c1597ac..48402542ce 100644
--- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.35.yaml
+++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.35.yaml
@@ -41,11 +41,11 @@ nomad_servers: [ "10.30.51.33:4647" ]
# Consul settigs.
consul_nomad_integration: true
consul_certificates:
- - src: "{{ vault_nomad_v2_ca_file }}"
+ - src: "{{ vault_consul_v1_ca_file }}"
dest: "{{ consul_ca_file }}"
- - src: "{{ vault_nomad_v2_cert_file }}"
+ - src: "{{ vault_consul_v1_cert_file }}"
dest: "{{ consul_cert_file }}"
- - src: "{{ vault_nomad_v2_key_file }}"
+ - src: "{{ vault_consul_v1_key_file }}"
dest: "{{ consul_key_file }}"
consul_datacenter: "yul1"
consul_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ=="
diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.39.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.39.yaml
index f5e1ad9636..aebc8b3907 100644
--- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.39.yaml
+++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.39.yaml
@@ -43,11 +43,11 @@ nomad_cpu_total_compute: "40000"
# Consul settigs.
consul_nomad_integration: true
consul_certificates:
- - src: "{{ vault_nomad_v1_ca_file }}"
+ - src: "{{ vault_consul_v1_ca_file }}"
dest: "{{ consul_ca_file }}"
- - src: "{{ vault_nomad_v1_cert_file }}"
+ - src: "{{ vault_consul_v1_cert_file }}"
dest: "{{ consul_cert_file }}"
- - src: "{{ vault_nomad_v1_key_file }}"
+ - src: "{{ vault_consul_v1_key_file }}"
dest: "{{ consul_key_file }}"
consul_datacenter: "yul1"
consul_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ=="
diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.40.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.40.yaml
index 8ce57502ca..5f82e294a6 100644
--- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.40.yaml
+++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.40.yaml
@@ -43,11 +43,11 @@ nomad_cpu_total_compute: "40000"
# Consul settigs.
consul_nomad_integration: true
consul_certificates:
- - src: "{{ vault_nomad_v1_ca_file }}"
+ - src: "{{ vault_consul_v1_ca_file }}"
dest: "{{ consul_ca_file }}"
- - src: "{{ vault_nomad_v1_cert_file }}"
+ - src: "{{ vault_consul_v1_cert_file }}"
dest: "{{ consul_cert_file }}"
- - src: "{{ vault_nomad_v1_key_file }}"
+ - src: "{{ vault_consul_v1_key_file }}"
dest: "{{ consul_key_file }}"
consul_datacenter: "yul1"
consul_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ=="
diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.50.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.50.yaml
index 23ebc52c1b..c2a7bd782c 100644
--- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.50.yaml
+++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.50.yaml
@@ -44,11 +44,11 @@ nomad_servers: [ "10.30.51.32:4647", "10.30.51.33:4647" ]
# Consul settigs.
consul_nomad_integration: true
consul_certificates:
- - src: "{{ vault_nomad_v1_ca_file }}"
+ - src: "{{ vault_consul_v1_ca_file }}"
dest: "{{ consul_ca_file }}"
- - src: "{{ vault_nomad_v1_cert_file }}"
+ - src: "{{ vault_consul_v1_cert_file }}"
dest: "{{ consul_cert_file }}"
- - src: "{{ vault_nomad_v1_key_file }}"
+ - src: "{{ vault_consul_v1_key_file }}"
dest: "{{ consul_key_file }}"
consul_datacenter: "yul1"
consul_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ=="
diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.51.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.51.yaml
index de6cdd0b2a..fb10e11c76 100644
--- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.51.yaml
+++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.51.yaml
@@ -44,11 +44,11 @@ nomad_servers: [ "10.30.51.32:4647", "10.30.51.33:4647" ]
# Consul settigs.
consul_nomad_integration: true
consul_certificates:
- - src: "{{ vault_nomad_v1_ca_file }}"
+ - src: "{{ vault_consul_v1_ca_file }}"
dest: "{{ consul_ca_file }}"
- - src: "{{ vault_nomad_v1_cert_file }}"
+ - src: "{{ vault_consul_v1_cert_file }}"
dest: "{{ consul_cert_file }}"
- - src: "{{ vault_nomad_v1_key_file }}"
+ - src: "{{ vault_consul_v1_key_file }}"
dest: "{{ consul_key_file }}"
consul_datacenter: "yul1"
consul_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ=="
diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.65.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.65.yaml
index eee8bc942b..5889b1e8b8 100644
--- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.65.yaml
+++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.65.yaml
@@ -43,11 +43,11 @@ nomad_cpu_total_compute: "40000"
# Consul settigs.
consul_nomad_integration: true
consul_certificates:
- - src: "{{ vault_nomad_v1_ca_file }}"
+ - src: "{{ vault_consul_v1_ca_file }}"
dest: "{{ consul_ca_file }}"
- - src: "{{ vault_nomad_v1_cert_file }}"
+ - src: "{{ vault_consul_v1_cert_file }}"
dest: "{{ consul_cert_file }}"
- - src: "{{ vault_nomad_v1_key_file }}"
+ - src: "{{ vault_consul_v1_key_file }}"
dest: "{{ consul_key_file }}"
consul_datacenter: "yul1"
consul_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ=="
diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.66.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.66.yaml
index 89ade2c689..419403890b 100644
--- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.66.yaml
+++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.66.yaml
@@ -43,11 +43,11 @@ nomad_cpu_total_compute: "40000"
# Consul settigs.
consul_nomad_integration: true
consul_certificates:
- - src: "{{ vault_nomad_v1_ca_file }}"
+ - src: "{{ vault_consul_v1_ca_file }}"
dest: "{{ consul_ca_file }}"
- - src: "{{ vault_nomad_v1_cert_file }}"
+ - src: "{{ vault_consul_v1_cert_file }}"
dest: "{{ consul_cert_file }}"
- - src: "{{ vault_nomad_v1_key_file }}"
+ - src: "{{ vault_consul_v1_key_file }}"
dest: "{{ consul_key_file }}"
consul_datacenter: "yul1"
consul_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ=="
diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.67.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.67.yaml
index a1f92eb71b..05e3b2a3af 100644
--- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.67.yaml
+++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.67.yaml
@@ -43,11 +43,11 @@ nomad_cpu_total_compute: "40000"
# Consul settigs.
consul_nomad_integration: true
consul_certificates:
- - src: "{{ vault_nomad_v1_ca_file }}"
+ - src: "{{ vault_consul_v1_ca_file }}"
dest: "{{ consul_ca_file }}"
- - src: "{{ vault_nomad_v1_cert_file }}"
+ - src: "{{ vault_consul_v1_cert_file }}"
dest: "{{ consul_cert_file }}"
- - src: "{{ vault_nomad_v1_key_file }}"
+ - src: "{{ vault_consul_v1_key_file }}"
dest: "{{ consul_key_file }}"
consul_datacenter: "yul1"
consul_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ=="
diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.68.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.68.yaml
index 50cb6c8cdb..b1df9cc69c 100644
--- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.68.yaml
+++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.68.yaml
@@ -43,11 +43,11 @@ nomad_cpu_total_compute: "40000"
# Consul settigs.
consul_nomad_integration: true
consul_certificates:
- - src: "{{ vault_nomad_v1_ca_file }}"
+ - src: "{{ vault_consul_v1_ca_file }}"
dest: "{{ consul_ca_file }}"
- - src: "{{ vault_nomad_v1_cert_file }}"
+ - src: "{{ vault_consul_v1_cert_file }}"
dest: "{{ consul_cert_file }}"
- - src: "{{ vault_nomad_v1_key_file }}"
+ - src: "{{ vault_consul_v1_key_file }}"
dest: "{{ consul_key_file }}"
consul_datacenter: "yul1"
consul_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ=="
diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.70.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.70.yaml
index 4c252ffc32..22107c4f1a 100644
--- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.70.yaml
+++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.70.yaml
@@ -48,11 +48,11 @@ nomad_cpu_total_compute: "40000"
# Consul settigs.
consul_nomad_integration: true
consul_certificates:
- - src: "{{ vault_nomad_v1_ca_file }}"
+ - src: "{{ vault_consul_v1_ca_file }}"
dest: "{{ consul_ca_file }}"
- - src: "{{ vault_nomad_v1_cert_file }}"
+ - src: "{{ vault_consul_v1_cert_file }}"
dest: "{{ consul_cert_file }}"
- - src: "{{ vault_nomad_v1_key_file }}"
+ - src: "{{ vault_consul_v1_key_file }}"
dest: "{{ consul_key_file }}"
consul_datacenter: "yul1"
consul_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ=="
diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.71.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.71.yaml
index e976c2c413..f8b7c92df4 100644
--- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.71.yaml
+++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.30.51.71.yaml
@@ -48,11 +48,11 @@ nomad_cpu_total_compute: "40000"
# Consul settigs.
consul_nomad_integration: true
consul_certificates:
- - src: "{{ vault_nomad_v1_ca_file }}"
+ - src: "{{ vault_consul_v1_ca_file }}"
dest: "{{ consul_ca_file }}"
- - src: "{{ vault_nomad_v1_cert_file }}"
+ - src: "{{ vault_consul_v1_cert_file }}"
dest: "{{ consul_cert_file }}"
- - src: "{{ vault_nomad_v1_key_file }}"
+ - src: "{{ vault_consul_v1_key_file }}"
dest: "{{ consul_key_file }}"
consul_datacenter: "yul1"
consul_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ=="
diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.32.8.14.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.32.8.14.yaml
index 2109090698..4849733e18 100644
--- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.32.8.14.yaml
+++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.32.8.14.yaml
@@ -46,11 +46,11 @@ nomad_volumes:
# Consul settigs.
consul_nomad_integration: true
consul_certificates:
- - src: "{{ vault_nomad_v3_ca_file }}"
+ - src: "{{ vault_consul_v1_ca_file }}"
dest: "{{ consul_ca_file }}"
- - src: "{{ vault_nomad_v3_cert_file }}"
+ - src: "{{ vault_consul_v1_cert_file }}"
dest: "{{ consul_cert_file }}"
- - src: "{{ vault_nomad_v3_key_file }}"
+ - src: "{{ vault_consul_v1_key_file }}"
dest: "{{ consul_key_file }}"
consul_datacenter: "yul1"
consul_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ=="
diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.32.8.15.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.32.8.15.yaml
index a00e97ebd7..e0058185cc 100644
--- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.32.8.15.yaml
+++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.32.8.15.yaml
@@ -46,11 +46,11 @@ nomad_volumes:
# Consul settigs.
consul_nomad_integration: true
consul_certificates:
- - src: "{{ vault_nomad_v3_ca_file }}"
+ - src: "{{ vault_consul_v1_ca_file }}"
dest: "{{ consul_ca_file }}"
- - src: "{{ vault_nomad_v3_cert_file }}"
+ - src: "{{ vault_consul_v1_cert_file }}"
dest: "{{ consul_cert_file }}"
- - src: "{{ vault_nomad_v3_key_file }}"
+ - src: "{{ vault_consul_v1_key_file }}"
dest: "{{ consul_key_file }}"
consul_datacenter: "yul1"
consul_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ=="
diff --git a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.32.8.16.yaml b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.32.8.16.yaml
index 7a97c9757c..893b33e5bd 100644
--- a/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.32.8.16.yaml
+++ b/resources/tools/testbed-setup/ansible/inventories/lf_inventory/host_vars/10.32.8.16.yaml
@@ -42,11 +42,11 @@ nomad_servers: [ "10.30.51.32:4647", "10.30.51.33:4647", "10.30.51.30:4647" ]
# Consul settigs.
consul_nomad_integration: true
consul_certificates:
- - src: "{{ vault_nomad_v3_ca_file }}"
+ - src: "{{ vault_consul_v1_ca_file }}"
dest: "{{ consul_ca_file }}"
- - src: "{{ vault_nomad_v3_cert_file }}"
+ - src: "{{ vault_consul_v1_cert_file }}"
dest: "{{ consul_cert_file }}"
- - src: "{{ vault_nomad_v3_key_file }}"
+ - src: "{{ vault_consul_v1_key_file }}"
dest: "{{ consul_key_file }}"
consul_datacenter: "yul1"
consul_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ=="
diff --git a/resources/tools/testbed-setup/ansible/roles/consul/defaults/main.yaml b/resources/tools/testbed-setup/ansible/roles/consul/defaults/main.yaml
index 89121fde2e..786554eb58 100644
--- a/resources/tools/testbed-setup/ansible/roles/consul/defaults/main.yaml
+++ b/resources/tools/testbed-setup/ansible/roles/consul/defaults/main.yaml
@@ -61,11 +61,11 @@ consul_user_state: "present"
# Conf - nomad.d/consul.hcl
consul_nomad_integration: true
consul_certificates:
- - src: "{{ vault_consul_ca_file }}"
+ - src: "{{ vault_consul_v1_ca_file }}"
dest: "{{ consul_ca_file }}"
- - src: "{{ vault_consul_cert_file }}"
+ - src: "{{ vault_consul_v1_cert_file }}"
dest: "{{ consul_cert_file }}"
- - src: "{{ vault_consul_key_file }}"
+ - src: "{{ vault_consul_v1_key_file }}"
dest: "{{ consul_key_file }}"
consul_auto_advertise: true
diff --git a/resources/tools/testbed-setup/ansible/roles/consul/tasks/main.yaml b/resources/tools/testbed-setup/ansible/roles/consul/tasks/main.yaml
index c40fab79e3..9d1ca1980d 100644
--- a/resources/tools/testbed-setup/ansible/roles/consul/tasks/main.yaml
+++ b/resources/tools/testbed-setup/ansible/roles/consul/tasks/main.yaml
@@ -158,7 +158,7 @@
mode: 0644
notify:
- "Restart Consul"
- - "Stop Systemd-resolved"
+# - "Stop Systemd-resolved"
# - "Restart Nomad"
tags:
- consul-conf
diff --git a/resources/tools/testbed-setup/ansible/roles/consul/templates/base.hcl.j2 b/resources/tools/testbed-setup/ansible/roles/consul/templates/base.hcl.j2
index 11743fa420..e220c8f687 100644
--- a/resources/tools/testbed-setup/ansible/roles/consul/templates/base.hcl.j2
+++ b/resources/tools/testbed-setup/ansible/roles/consul/templates/base.hcl.j2
@@ -14,6 +14,23 @@ server = {{ consul_node_server | bool | lower }}
encrypt = "{{ consul_encrypt }}"
{% if consul_node_server | bool == True %}
bootstrap_expect = {{ consul_bootstrap_expect }}
+verify_incoming = true
+verify_outgoing = true
+verify_server_hostname = true
+ca_file = "{{ consul_ca_file }}"
+cert_file = "{{ consul_cert_file }}"
+key_file = "{{ consul_key_file }}"
+auto_encrypt {
+ allow_tls = true
+}
+{% else %}
+verify_incoming = false
+verify_outgoing = true
+verify_server_hostname = true
+ca_file = "{{ consul_ca_file }}"
+auto_encrypt {
+ tls = true
+}
{% endif %}
{% if consul_retry_join | bool -%}
retry_join = [ {% for ip_port in consul_retry_servers -%} "{{ ip_port }}"{% if not loop.last %}, {% endif %}{%- endfor -%} ]
@@ -21,10 +38,6 @@ retry_join = [ {% for ip_port in consul_retry_servers -%} "{{ ip_port }}"{% if n
ui = {{ consul_ui | bool | lower }}
-ca_file = "{{ consul_ca_file }}"
-cert_file = "{{ consul_cert_file }}"
-key_file = "{{ consul_key_file }}"
-
{% if consul_recursors -%}
recursors = [ {% for server in consul_recursors -%} "{{ server }}"{% if not loop.last %}, {% endif %}{%- endfor -%} ]
{%- endif %} \ No newline at end of file
diff --git a/resources/tools/testbed-setup/ansible/vault.yml b/resources/tools/testbed-setup/ansible/vault.yml
index 0d583e42d7..2c10624d07 100644
--- a/resources/tools/testbed-setup/ansible/vault.yml
+++ b/resources/tools/testbed-setup/ansible/vault.yml
@@ -1,585 +1,706 @@
$ANSIBLE_VAULT;1.1;AES256
-35366235646131333339643161653631353030396430376631623938643038656362323461393163
-3739343632323734376236396538616434653436303165390a626664636637373439333238373964
-65383037626638343730646337643336636266306538323830363730623438336463353536636132
-6330396333616237330a653461353862323863646266643063646663316661303265383131383630
-39633133346639376331363332623037303131383634343635393463303839313638393566623763
-61376463333837313230633333363066326232326436653038616238653365356133363162623530
-38396463663265376564343935393163366136373665303862316165373532303534303563646333
-63623066386436386364636661393532313061303066643866313761636561303837623065623534
-63636639373764363937653161326662646633643532646536336532376666383934666666396261
-65656233326264653137353661656261353236386531643939633030356236336330343262303565
-61636462393830623730656263636661623936363232616135323534613836303336663336663964
-64323139633266616333346335643334653333626538623030626433333132326532373736366361
-32343266373530666234343361613632656530323364383066653562313363376132326632343031
-66613561333433663062343165343764633939343635343638343834346131313062396665626337
-34623966663832393964396335363137353639613262356663323430616464323435373936396339
-38616233303432643131363466373231363036626432303136613032303962663465656638396335
-61336630346232313733323539643038316161333030626236386230643032646565613030323832
-61393463363739646637623365343063303366373630623133386239636337663537353938666363
-63643765633739393530396266333533306637393265393339336137363035363331663930636532
-37313932343034346539313931633231633861343235656366613566373539363436323335633562
-30366536323838623130306434643439333731663331366137323330366435656533386633633234
-61646331373562366538653863316363633966373832366162633262636130666234386630376538
-35616662323862613938383566373536616134653664653763366161363563396262386264326639
-36303264386239333030616531323965636664336265646432653934643661663663303735326566
-64653638646133666662306234643336643038393766346261653035633630396135373438343265
-39643266373338326564326137376232633063316131383839666662666165303634333262336137
-36363561666230323931343236656261383930326433376562633233626363313662633733626261
-33333038356331386462343164303037346233323065313861623865613030613963663962303064
-62646438346566656334663537663933306238623839353665633835626466396661643338333461
-37356530636463636139663436643961353964313731333334323730663361373530633464323335
-37323465336430393337633532663632353365613264396636623233303935386535643361313162
-61336333626538636466373032636331326435613135373438343838343734663863373766366533
-31663434353764333636363161613732663761373235393334306331333361313763313730306564
-31303135613234373366396466626137396533666365393330636136303361633066333137623336
-38353939643763643163313732613730656635306435633664396536636665316635666166643065
-64626366663539616131303461373139653531666462393862383636656631626666356661396163
-63366232376363326639643936656432313464626539646330383433396161616231316430656365
-30343830333038356134353730383963313934343333316261336263333730656461613763653366
-39363137663264363534336365323666336663323334643163616362303038663637396636373263
-39383165323330323436393439316138393064353931366232643963356134643365346264313831
-66383831653032346538313961353532303435663966646665336232633064353762333133616234
-37393031656462336337353630333135306639393361333566393832303864646664313733353339
-30643966633363653333346465316665663233373165346534623763333931623630613533366238
-64396363613538313362393837316334363731623333313736653465333366623362343838396439
-37333663656563333562613337653363653439376666353338656638613463333336323936393830
-65626237306537666639636533326631633732616164383533383139373534333363623933386366
-64663464643663636433356237656266323534643536613332653834333738373335343431646162
-35616365323366653935666165373565643462326363343931663963363938653063373030306565
-66303665343964393365373361356466326333653534383062613135643632303763326633613763
-64336433356635333133653031316332383830376437376232623762343230356461623566656366
-35616366303036353735663439306461376537653734626130373537616435383132366135396430
-36663234613830633830343762333062666466373564386435613565333630653639343262656534
-36613464353331323731656361373963663832653739343635333637646633313434306130353537
-63333634323039663161373134336165393162633465333137316132646134383439623639323963
-34663033353134313966663265346462366538333966383864663934383565636136363861303235
-31336634646461363939653337616662356437373131333461613730386662393138653239633461
-38333763653065633965313839343662613836393830323538326439393061653534316361636134
-39613735653437613537306364313165636633663963323331383463616263303739336330613265
-39313538386231663731356263343335653461643766663764623036626266383164646165333237
-34303162393639666365326362393532313036636235366165616538623362373638623131393066
-62633931623865343362383464346637323735393363373530323131333730313965363236326364
-63656433663234663066646664363761313734343635613264316266653939303930646135356137
-63626538613239393237643366623732646638643535643161353861653432346535383134633764
-32636562623737313937633338343065333566656638623062636635383966386431353062623632
-36623634643362356435623030373632333736303232626166653833323131383732636631626338
-36373434326433303735316530656166303365343031303563373465623637353165323461646332
-31663832326332313734373333336634323237336437363330356533343361356536343365633762
-66396165343430613765323864663235343437383536613131313664386266613035366337616465
-64666463666564363035613737663933303263373365323464383661616264633662323465613166
-39636132626463303861343764656133353665396534303437613737306665616663323138613037
-38376166623130306632343633363032346364633061363233643863663736343336343539363730
-61646363663839393435383765373632303937396337313637643964663235393165623139623833
-65333165373736323361353339396433656262316137656264366365633762323533313466623866
-36316339333239633566386466636361376533303130663064386166306332333363376531376462
-32656334666432343433653936343466366161653839653962376637396532656331376164613362
-37653361396630653566336231373031336661386364626239376465326461306137656465373666
-39616365386533363464613936613263656431336131626662333563316533633538373339333561
-32346163386665633766656161616634373934333063656163336533386465363937636431653564
-62303064383161313037386130346630666134393834353763306432333934356430613232373835
-38396138626336666438396461356161333132363332343234333036323636373764366238643264
-39343964323736303038613164336564343431663339336533646337373662316264343337363536
-61623365396637623866623465373339316664643263393038333437313862656631653432393462
-37383234363837343931306464326634666433376434323532333136666534333836643338656437
-36383130363033363837366437323565376238626632643038366237656364636431376331623462
-61633039353761346638666466393966643031623061373839373538613832326561303835386239
-65626461343031633237336439623963623034353264633539633231363230636564333634643137
-32373537643035313664333464323039346163376134376433616262643965613537373637323935
-66353031343662626438623930373262356465316630383461656339646638656664383030643532
-66303263356234316334623635383338353031326164633035303162636131336235333831663630
-35613933643538363330633563663338316434326261363734333633303963386564643265343066
-61386266643338303065383130633065303037376362363030376337326238303339653861656233
-33346430353164626463653230613033373631666365396137623065323937616437383235373333
-66653037616134303765653139373465363465346130366536613831613431306131353938306263
-34316661663263353566663861383239396538616439633434323139323136623837663065383834
-61636137393662613035656264386466303331343833353332346430623361366163393636613163
-32366139646263323063323134303365333234363833326339343030656431616462336466313634
-35633264363939353133636164626634366430626131643035303761613630653132323930393139
-33333164333166353736373439626633363361623439323438653936313934663839386639303630
-66653431393331306361373033643535353137626235633861376232316332316430386365346163
-32303830353433323834333037616530343832643136646239373738376235643762366266626362
-30303035643237316430373261313832366366353536363032646330613965363736386130613162
-64386666356339386536313562333762616163653534373431396636373732663331613463306631
-66346439646630333637623531633062626531346533393065636638343337313838313836376131
-37653230313934393236393736653837393465666132633330646432393163353733353536383065
-36396331353933613835316132303032656632633737636464386233376139373263643664613636
-63303433346433333238306333333839306361306236333565393630373866373963326139393762
-63343933383835616333376337366331353534613361306230633564343538333131303366323662
-66313866653463376434623339346466643435313666616666373236633336396434316438613135
-36306335383739663431653235333062616633653635383234393363633937346632636162646233
-33653137336662653762303234303137336130336630663762353938303536383566613639366162
-39653232303135376632316139623664383032643133386534343738373365646165666231646563
-34326132386463626536313238623630646637333362326232633163626237326161643730623165
-37313437633932316137376435363064643834363133326436376139353663313562653935333061
-31336461396530316665353662613939313566326661613432383662656130633866393236303431
-30613866303933646236623834623936333466326437333338653837386435393162663764653732
-37653835366137333464383630313039646335643631393332316536656631613762653932646234
-61653832623737663534653164313764306433643063663564636665343266366439613934613037
-34613032356634646233653437646338373965356561343266653562653533633039326561353862
-62383739366335316536663735393430623738366130353135353038323737636432363935353231
-61623563646637616332626638643761646364366361353363666133333466343535666530643235
-31636237316630316634653432363461616661613935613163313331376463653261313535653730
-64336533633065306231613165396332343664626632653636346533366138343832393435333632
-35323962393163333333633734613364656562393039376131346333623731346636373761623134
-35623565353332383237383264396638306434623261313166363131363834623466663062303834
-64663961333338396438333566373562666534616464623630656133373836393433643165363934
-66653966316439646334616665653362633338313632666534643135393331353238316633613630
-39383961356266363230343634366631623032386237363637653030643738393361633839353163
-62366538653031393136313034333466613930363137663732666534353863643034653531343332
-64616661393030356531626137643538353939626461623633626435656331363963356466356631
-30333335643835343130363762626336646630373238303438326531343539643932326665653862
-34326436623732643735666463623561366333646665323666333663396234346136306635643464
-63343239336433626537353633366362646631323864363236336232303331333462303530363839
-30623038653835666131376639366165653965323435343338663662336237343130666136663066
-31363166373834373132386161306161393766663466383064313633383936653164663937643736
-30663233373139396438363336613361623133373830346333326135303635376362656139633464
-32383239353931663132393537663037616338353533663138373036353638333732356431616432
-35626530303361626432663732333539346461633963333730663038616563356266323061613431
-64383330363866326632316339333034626664356239626537373835633830333562636334336461
-37323830346136346633616433663961643137336439623763633936363430323034616538663134
-31623233346664643439356337326333363230326366636538313535666466306338643166353964
-33626336663035386564663965393065643562373664643661366638626265636236363961613965
-32636366333063613064313433333737373564346636333939393635656134643237623038343932
-65353134333234376634333637333438333737383738383461653436613266636161336231333365
-63653538663566383338656632653261653361633233636666643335616462386339383030366165
-36366338646332326439613834376562643966666434376238396663636630303835303031333438
-61623863643439646365303937356133666461356464323236346436353239633866393032626534
-62303561336536643265313636663639383164366233303966613364356262636266376131323662
-34336234666632363338393866326332306164313032623131623834666137663138353235316137
-38363363646136313335353834656430326531363864353430366433656261393936393364363966
-62666166373266633163636636353632663464616333393630626531306663323134646166656430
-31393436306336653237633538363461373139363131363633626263376161643933373439343333
-35343562616364326162623038616339323266313762326331623036383337326164353261383532
-66643166376330313634393065666638623831393161653561633135626462303566653836303434
-66376235313766616465393866653961393430646634613563303362353632373032656532613333
-34616439363237366332386161326331663237393439336433386466376462393139656634323230
-63323366633136633439636363396234393966333731393661323737616466316535316334613964
-33366433313865666335353663373363646232326333643833383664656333396634316630393539
-38623132613338396566656632623934343965323231363732373563643936636239303634306136
-35323230353837633765323532306239346539613833353936626561653261626462653436666533
-31313065613137613437303564643961646630653038303465316233373831623532613236633763
-38623131316431316563366532326532626538343635623762653536663733363462303162636130
-37363331623764656430633237333661663061343663366364373833313065333137393230363134
-65376234313231333964343365626361346561653233313665633062313837356363636235303762
-64636532383834613064663363323561306339353038323839356133613539666235376635393234
-36383436643533383438373762656338613835343864383431326466666536333137623636633938
-33326565356566396463643238626465376339616262346365646533656630306137663362636234
-33333238666131386531393939363662326138306563613139313964343665373636346461336434
-33393535393336626437613836366664356637623937646337363935666632336131336237316631
-62623365343337663336626631656466303762323162653735313965343936373631373963383538
-34623836383731386164386162303635386630623366316238663034643035623234303238353163
-36393664303431303034353065383163396666333036303437373364393432376330616330306538
-33626530373266613862353538653566316464666337323939393463303463663234653466623036
-31313561366633636532356366376639393138383931323439316139313236326630346565613965
-37633134646661626139666566613261346334656563633735366365313939356164333332356164
-61646637653561613630356438613462643762633732313132323331343931346164633430373335
-31616339353739643636613061383630313532306636356534326138383331326233333631663735
-38303636663439626139346532363536376362316363373963383765316663396134373266613664
-66303737323763653765353630616166656130383739383034663438346663373934613331313832
-37373535376665616237313765363866356439383465656537383761663465653266353264316231
-33623564383138356264396134386264366430363539396431666633613733303031336134313734
-63393633326534636631306535383236313135363962303665646536376364316464626139386462
-32643831323238363966646531613636616339316331666434383838396565626136376364363133
-39393661336539656364653361386366326164663330633130303635363664363038643831643339
-63316131373935343530333961363165393936653735346662363531666533343963383839656631
-31313463353731306563313562623364623363346266396234326264663630653361313666303337
-32366463313466646439613562333066383834666336383763396531633139393132616130336631
-61386532653738653631656435346235303962626162393164633935613532333830363866633563
-37396639393535343934663536346266353233316261366633626437636130626234363163383137
-32323832306266376464303931653731653965303962303533303736346263333732316337306333
-32303132353061396333313433656632373239356532396435333338653261653166316266613538
-31626334333138356338623038346333333564333732646664626232623134376132366634363032
-35363737303339303862336536653463633234656138643865663262386462363636363530376532
-38373363363331353437656666396139343732613730626661633736303264376639663964633036
-37366630343266323037363035353763633161376634636333303565636564646163646430633939
-39353563343464613964313630353434616336373531396438333831623432316430346132333139
-35643932343938663464316365616338343933363362393637376263313366303465626338653234
-34336465376338313039333733356264643761653535363165616261333262613132303534353736
-61313130363634356239653162613566366632373931363537376137393834396331383636343061
-62666136326465643330323631343732386434656362386630366462643433393334616636393538
-38363939336336643465323732316365616662336532356230323932663733343937353631633736
-33616534653235333639656264643266303130386330643332623739653531636332383339623065
-33623064643939383632346163323734343366663139326665336462303162653662336535653264
-36613865306635613530333966663462303736366432386634323136643631616132343233633834
-32656436376165356665386663333161303232326239643666313637373531626163636631386134
-61313134643735613336343736396532663561383561613566346432323332316232393139623434
-64393730616466323336303637353236393363326530623230663764653364373564323338303766
-30376130613766643530633266316238306433366239306164323266363430303834666564323463
-34626364633938396534633737396530613430366166383138303237616531666361363835313230
-33306138323534346265626665313962343766333138366338376637313034363061643133623431
-35626166363439363735653038616362393464656563343034333266363030643432386337633136
-62393934383835643534343932333962323062376561376630343762616461363134386365623331
-30393462313636653161656261303638373163373761636534323536346534383863383063383963
-61633333323565313366623832343764613930346134323263326163363531373631316136633838
-39373633333039313265653065343733383938663262363735333730623531633838643937363135
-62626234373066383831396637326134396562343933353666663531623762653333336231303265
-36643165343839623339643663366666613866346162363835336334386139383632396134366366
-64663566336532653438316133356466343061633239656666306366313232313936306433623461
-65623131376164353635353738623536656335393531326161333937613362353232373135306430
-31623435343330396639393834643535616632353634653236313030653539333035313266303466
-65303761376534343165313137396264326662313433396436633035366564373632373866653263
-66386134316336396135373030343031343135346133313735613939653865366533663666633531
-61623763396530386662393636376462366164666637303334653738383463646563623937633463
-30663363316563623434656665656334663832316238326233633461333161323630346138313065
-35376439383939326365363434373438353136303131323364356162393236653164613661663536
-61326164633661383762323962393164396331356634396639393736393166373432363336626630
-31346433353862313265643135373437636537643337383435343231373532363465373964333331
-33393135646465323763346130623737616631313131643666636465636430393664373363636162
-37653965313839303063656661666532326630393132356635626666376638376331326161393835
-33383731656537336438643463313337316334663834393266643065633335613565346239626337
-31663635666438656431613565363063353964376565623336316162653131633631653739343836
-39336531626434613130353564643061343333333861346131316463333531373234303736326532
-62353735393631393434343763373062343536636665663133333336326131373531306237616466
-63393361643865383965353663623863306131393464636533396263316135323433373362356532
-61333365313538313333343862336236313035306133313565663434326662666163386461656636
-63623936626464646135393430373236313865313761346539393931663262386433633431336334
-38623961613764633134323930303639626237323962376331303662613832333738303831643163
-61333534323663363032373738333135643338303761313966616333353232656535636138396665
-30323335333565303561373939306238306439373538303463343534616164353566393336623935
-32666463653739313165353439613930313566376532323563313835626237316332393134656638
-37623864326638306334386534623035633937356439306634653237393839333065623866653365
-35653964623636626665376237323338353961363535373363323239356237393835656538363436
-62366438653536633562353863613434363830636339323630333938353234613461396638306231
-31326133373235353563353863396266623432353536313831633261333265373935303531653632
-35316432666237656563626138376365383036633736336339356665653864636133336432343737
-37666130396439643834653838353264616162383837363039633433353732393534333163336562
-38353062346430633632356330633035613038313262353761613562623963303236663365363164
-64623637343838643565383938653536656235666162613439663061323134353539383337643239
-66396131343530366131373432656138396132336133666438343633373939343563356136633636
-64306266363531373535313962316635653261366634383735343438353337653232666466633237
-31643935646434356335303833343835646161373138316133633938643564616634396332363535
-30326231316264666264333436623366643337653833393735303166643730663833343366653634
-36343430313239353738316330303065626135356437643463663736363732663634383235623265
-33633865346561623738303066363438343934333337343538326162303264646238626331386165
-38366330393466646632326262343137383662623936653365636334363634323330643536353930
-38646363633666376566623562356161376236396336346566303463643965323935623363383034
-38323335343737303637303233633431613764363538666665313933623231383463636136356439
-63643361366536323637316461383365376232323634326135353936373962353732656334626163
-64346361666666336436636263336133313266353466346535306234353261633332353731646337
-37623063666339383662613663396630643330393234336664306330363033346363303230633635
-38643862616135623165616530313539373131616230626661306139356134303731653934313166
-32326366393066613062316663666537326238626139376166616363616236613564626534393633
-63303264326331393637323936623734353064393437353130626531356464363262666663623138
-66363736646364343938343666303338653930376266333832396438383236313130613765636530
-34663234303339386532633562623838393635373965366263653464353835313436666638323439
-63363630366661303163393830663134643563346633396266653239623337353836336436323462
-30363130386435323264666335313937653230643336613665623963646236356130613539373738
-30336234356564383662326636333034326334393061346133656161383364336365643262663565
-32333561323135663364643836646135356637333639376463336232643936396330383764326535
-39646233643832343561383339306437336566613838333235643935323635383865646236393962
-38616633376263303534363838663435346131306635363962633539313334333561333765613035
-33373536393533666237333237303636643261313762343031646465653361636461623030653034
-35346662343366353664393437393536323263386534323562323361373037653063386661643137
-37376335373730356131663263653265376262373233363635326636653931333332643761356363
-38393731663338396435626137323031316335326332663265653566636664333933656134663836
-31623661616331613135653932646666306165653061643061363237613263323232393837326334
-38646338616166326435323631323733343861373533656635666535666635343137316238303334
-33373439653231666562343135623862393066316331616563643566663061313162323364613562
-33393337653637306264343833653462356237623137303034303438613265313139663433303837
-34666261616532393430623261316537393633623430626130363938376561373933653333373461
-34656138353231396261346234323834323833323866376138396131636532616534623161336362
-30363866396465646266666366333866613431346335663333393434363662643662383566363239
-61313738393539366630666265626531393537383032663339353266303632656438383565656336
-64616366636537326461393632623562653430353362626466376233343263616333306531666163
-37343134336633393638653465613130326431643563313538666131346265313035313036343031
-65666634356363636566613265316164623862303038373536646136643065643432366665626438
-66373434316165636362306261313430376635363134373430333665386635383439363763383762
-34663261323761666637373665306337323639386634393439386131313565326535393234373339
-65636633663362353436306234303938633131373633343264323338626362663331633935643061
-39653661306465346661313164353335326336306534383631343761376438306332613065313538
-36343934353230313564613938383731663261623661643764636231316339373330633533323166
-38646262363863306566323162306536633362313131356132636639303032343464313764343335
-64323363336638383630613331393365353766616630303163636531623639663331393034373664
-39303336333031643332363430383937363432306561396661306232373262343533666435646264
-63613561346465346266356462396565626666353436346363643266656166313862393766373538
-33303964623130666638373937386238396235303332616266336163623538666438313638363136
-31396436636233663961363935313063613463363564323833303235363436323236396561316266
-37646563336464356231633633623564643339613135616561376665393865316664323636633633
-38306434393162616363656337363533373961626231323564366264383138613965383936616665
-31303939333166393331663362356631646234643732383633643061613161383830666432646337
-31363862396465333363663238383165643431356362396561303832376132343838656436663364
-37393731373732616431363839656361623037326436643539306136646261636435363433326538
-33376161306135353032623865383965666535653832373065643638633338393130353361333635
-65323730353962326161353864383763316466666332613736363935633239393164646432643763
-61653134356236363532383061323134643730333263316430613530616433336138353334303336
-30376233313832666461336439643538303132623337636437653036613763323533616230356631
-33313862363630353939303638646431656639393134656464666439323632323937326165366435
-39346561656335353534306434633639366336356635373830316266306164663235383164313835
-66343831303932353962396364616462353030303536396538396639393931363030363065636531
-61306533396264313338303439356164386638653836646633373939653734626266303838326239
-63346539643832373663643464313064623938326132633464623363653138636361653831326339
-39656234303433393939313831663832653564633564633332393265653561383936386133323461
-63363235653835316537396135666136633132373838636438313062353030613164636466363734
-64663530616634633938346534306435663931333061313831313565653137623830663435366532
-31303361626362646431636633313733363661623135306331313138323939636138613733323039
-66613938303963393666323164313632396635643364363639623339353233373536326431303931
-34333035333838336564373833636238623633316631306466366666643265643364626363333662
-31666463633134373534613961656565646465323164343330323438343936636463323561646435
-36316364363662393864373334383039643762366133363562323534643733333263333232393431
-33663732363539313235303364323936663733316234613334363263363434333135623862333737
-33383065343533383335303063303966326431333464303837363464323532623331316339393734
-32656536373332636534636235623039373162613131303333663164373366373735646531393434
-34623765376639343336653530356134633463313535303232653130326631376430323932636266
-66373635353062333736316561613762386138643364363465323130333266316562323732363330
-39356136613937333938656565613765303430613039313835623130333232366465323261626132
-61333138366630623262326337373666326664356535333133373931613730366665396235346538
-30313564376132653339373663333533373838633835666330353335643636316634653438393663
-64653864333938313237646465636233373266316563393861633036646562303030326139613731
-64366439343633333364343362343932343039626563326633303630316633383164623634333338
-36313637393430363937656536663562343562336231636366663135626261306236363834626162
-33356432366365613161636364383237363338393637646430373662356436363739356666343236
-39346235636538353536333364343930616637386231373762353661363830316239623833663734
-36613666393837663033646432363632356534383435333665643666626334346334306236373061
-32396630343933303361623530353361346538346639306465616533623039363634396161376430
-33616633613437353763343433633366633331343839333433666532646630383564613861363435
-62393738393532666633333565353834616463313632343161393239633631636264376334353239
-62366639313132636265613434633339653537343635623037383034393037363931326139376263
-30346665323335613363346262633833393265396462326439356631323936303339633664363564
-38393530386530666630663238366437333463623062336162313833616438383831353366353534
-35393364616438643566393731646261383335636436346438633630306266646464313464393138
-32613137653139376139323263396336353261663636363235353762333536343436306133373864
-66346231636537313763303435343032306535616139356362333536636339303965363663373137
-38303832643264336536396232336562366261643864643462343662336164336439623431313763
-62663039643636366361656239306563306562386637623666373838363365653137323965616434
-33363934333161313036396132386130663866316635623931393366653834613535373835636330
-62636464666561373337316536653539306564363435323038366135626231623634353133663663
-66373562386265306166663539323962393231393830663234663634656635316135396134623461
-33616136353666393938633363313562306261366465626666643936666331393161633631313964
-38363165363465356634303630373435626364306361653638643038363066663935363365326662
-64633661376338306463626130663165636463393035663362636531316665646234653430386435
-35353535343136376635353465363665666363353361333032663462316133633262633264613666
-36323231613532613864626237363033623862326163646462383666386230386464313737636331
-32386564393636613639663165663261323261376364363230323934373463336133376431393039
-31383532616531383637306433303131363431626566343066386538643339313030653839383532
-62643163626637623839373134373566666135633361663932643536663130623363623737303137
-33623532313430663634386264343336363534616536613832313263663037626132343530653732
-66623132636437303266313539653238346238633834363232323937623538653934373830663564
-35323732353734656433353433663164343662623936616637363262653431383938666639636433
-38626366643131393164346261666166643563383839653465396161656333353032353634633963
-30636434386661333639316131643861656264356663353063623163643462373630343535373535
-65623238633863373136386131663861316663376665653466626434636466303930666438383232
-38303234346331363163383637393763643534623932373931326632663661376333636365663662
-34663030623362383163613839343634663762313466383533306239336464626563353731353234
-31633934636335303962343461633565326139613139346463643865613766616435313866323335
-37613530306332633661623231666437383433366333336165633633326165393463313764356365
-61343137326562333039316338353033336331663636366339366236356434393865353838323934
-31666562373238666635656632383738386164393661383133636331333130623734326132626236
-35613731643466366464316531346663323662643961316438666563393036666332366230353466
-32643739643136313139383662353066326335613930386632306337353534613564613836343061
-35613862313730333637386262623530383465323138363032626639666639623932643934363532
-32356661656634316534383863313739613862363737356333386265653730346631313538356461
-66343337313736383733383964393066666539383031353531336234653131613763666138633961
-33383139646639373836336137626662346336383536396237393366303630626337323965373039
-35343466373931626330303031623333316462396534383364663461653136383162346366626265
-31653432393063383734393835643335393263393234393462623561663461363732626331633463
-38303536313738393430633839373765376261643266633865336662303339396163636532636137
-35376236396361376262303834326331336439353865323834366166616334663266306635376563
-37323236643732333434613436656633666462333631616330356234653236383362636461373437
-33393963656433316161333939663933636231353138663464306463323135333834326534393839
-38633332386237373765616534633239303461633833666464623465363835343130343164633938
-61343263333033633166343764316132303834333064373437313762306263363438323061613738
-31646463306136396436306238393831396362396131353264366162326432313633306362373164
-38306464663066386539316436666564356562363238616332306562323965366364633834316333
-65303264643937643432303638313931623631396536663161313332656563653465306365623731
-39306263333265633639343931366231306565316135363162323464336532653631363739663664
-39373261383337613631353436373838396637663635336661306630633530363337336336623037
-30323664303430313832336261396639323866303539616539336530663732333864656235626133
-64636261373036626664306365373663323134343665306233303835313766326366363631316535
-35616235353663646364613165356534396535333063396537643338333063623834623663626639
-38366633396531323931623366666463633531306435396233613033323065613235316235646166
-31366638623039366466363863386665613061663533613138373364363931663764653561363833
-30656234653633663835646136333733333562643263386563663634663862313939383139356163
-36646165393931336230393566656237303363353566356137373436313336316532656332656364
-30386339363066386564343737373834316235313961343962353634393766633031636264363732
-65623833363465636466313564373164353231306139663262326331663030373735643130333235
-65333337653233326166353863346236633062636134303562393939623462316631623536646436
-61373862336334373239616631656434643737346561353463376335663232326134303066656364
-61353666333164613466366466393966323666386234373430363266623134333034353933313633
-63313866393633336661303334653237396632343836623538306665636235316565363739396138
-63653265353765626563306266656263336432383465383232343039303234623331623962356463
-65623336333831323936333262623938636562616634373738373837306264323362396564376333
-32353535396266373939343863636131633134326135333132323066383965313134663031326638
-36356135663363333932376330363465323134636532373061346536353335313662336231633235
-30346261633132343733363631633065333839316238386539356565376335343531623033303961
-32333665633465373637393436666331353166666438366262623339663139333064343233353964
-61313433323532666537333237306237383539316631326364333635663033313061323561343362
-31383436366165613266376335313364373538613631306335646637393030366239623938316164
-61633938653837383837376634633532323130653963633366363035343532356537323230393331
-37396232396363626639353735643735346230633733633162333164663634613665303938383237
-62623432306237343833316636353137646236333131306563653639353633353830663434313035
-63646131363334643461373565333837346533643665626264373935633830663034333061383835
-31383736393234383534326237373538333738623265386333623936343034616139306534303531
-35346135373863653064343331613966333732366361643030636231306462633764333330623135
-37636634356337303463313062393061363836306638663063643465376262393930663034343339
-63383239616537323938386636663536653038323662313831626132343436313331653032613734
-62643364393366356137636261366238343566613139343639393038306530346133386266313833
-61353137636538663939663666666437336437333466663333653633626463666632356361313861
-32306439633934386331666139663062396531316530323332656663383434643131626138346662
-65303133323733653264623838636231633666633236646333303437613361373136613435643930
-32626135386466316537666536303234613364393965383539653561356335653462633162326134
-63613064363834373162346135613464356538613634323937383236336365363165336466393362
-33636466336464623262376166626438353361656465333335306264623961313231613562356264
-30356536306365373061306265653364323934656662313563333035663865376334313333653238
-65353634343565336535663332333632663036353633613331366337333665333434656235653261
-30396330356466386334343931363763313364646135306162633131333230313238646264613865
-65386666333035343336653461376335333033383935633037663462363837323964626361623031
-32326564643533303330336338316235363964316237313631393736333539376635386533333266
-39316637663536333162303332346438643864303232306132643234633931376336353937353032
-31323064383761643561343637646137346561623831383733626232303262383931323137303364
-34656462393337376438326666303837376330373065653261383433393464383030333537313136
-65323765346238363863623239396163656564653062333861633836656363306263303763663938
-36396661643239613834363233323530646338656136306461316633373164646261623332343437
-38663632323234393237306363393131303833663935376334336435633538376461386233353362
-37633536366161306130623863626465316530663964323734323464626335303331633937313537
-39343463636135666563353463323038383762333636376339363537353636316136373138633961
-61336666653964323033643239363761346530356461646263333739323831323364373835376230
-66336561643834313334633761613138376335373236626435366266373363353030663863616333
-61366132336637646161366438313764356131333733363031653238313666663431376437653333
-63333635363534376433356166306232323261316133633861336631643566303465346366393062
-66633734656261356363613238633134623163643864623633663230376336346262663961383931
-37666230306263393439623133656339633532633763363131626361626166653930306235336334
-31333135326631373462343032393765363336303035663638396132613732363934303731313731
-65346136633439656236616463633930633931373064623836353861336330393737333465393033
-62313437616564343365303134346466663032316635646433366435316264613632343765663234
-66613064613131393861373632353235613364306632373838643234313961633664383232613931
-37653561313465346335663362393634613531353933613365666166646236353462373062356263
-35306338363962303764303834656631613363653564613037626262666165636661376539386134
-30366433663761396562383931623839316461386466333139633031343765316539353138323865
-32356662323136656362323231643632333336346339393137316236623235363737333435326664
-33626466346230353261653937373663393135666638346264646334356366656164313763383532
-34363139306165316632613861363962613135666264363138303336326135393561316165323338
-36393766643161303730333431643466663330636661633237306662643534656338653465346664
-36333632633936366532363264343330373964326231313131376462623961393837346432623034
-36353863623534666661363964343761396231613161353633646431653530353832663334316566
-62303639393166663833653465613566623263633562656330613838376436376632373339386461
-37303639646661616534386537666330346661346461373631336335333664383965643762366338
-38636139373939663738643336353866633433323031306139376635373238303232343362386438
-66663136383161346635626261333862333637373763386462336131306165303766316438316532
-36643363373866313237376631386561633436366332313162306338366430643839666636663265
-64393262643530336230353836346131633239366236623666343162383731616663633237306336
-34343430623931393535333939653765656266323464323266646361633036656633343638623530
-61616136656162616265613331393830336638316237316264383034363462666161373465396565
-33353363626232643264643333316135386234303536386530336235393462363564633062656632
-62663166383931366531333934613964353430316232613966316134333263636333656364363062
-36633030383836663133386630306337313236303033373366633432373739643635633538646265
-61633761353064626637323662326162663662333936323330666536333936613631666562363935
-34666330313630396632666539613938373361376634313533396439396132363036656564316361
-63633863656232393730613162376237363435343837386336313462643934633833653137323461
-63346431313134623061323661373931386335393764383866383531303934633234363961633261
-65656535623935633466376335363966643830343365346632353538333837333030313338653464
-33663439666165366366643236323766356365336534336563376462663930646530623238323336
-31613934626334333266663965336164333035326639346136386538303631646230623862303466
-30633933653937326566653533366334613162653234653862643038326237306564366339376636
-31393634383230333938376662373630656330326332333838333062343330303135363734663338
-63363933323039333538623666383236386634643930646331626631393038613333616535303462
-61303236626531393764333734363038393332386532393033656161636563393039323163373737
-32313261663130373866633733313034373963313831353766343834383563303238336565303037
-33626134326330373063646334346537383430393135323466376164363737306161373331616336
-62646566626630623339333762613435626435643338626239303337336234333632623639313330
-32333135626464666133383733393336613066383235303337346431343462393230623062313132
-36653937373135643036653335303965323930316636373632623737363161643533373837623535
-37653931333238636236663935643938373032656264323136656263303364356537636135303466
-38333330366261663038346366366665383961666164363435643632663434313838626634646239
-33363965386565653266383939353330383438616562643331626334353530616231323566663139
-66323665386232323063306666303737646461383736396162363230636434346361383564363435
-39333538343736343262336238333435663665626235663664616438393139353463393632616362
-30373465316464643131316330623465666334383130386462633537663330626163353065396464
-39376265376634376263313462333266643961643761373565663337363732343832633234613833
-61636162643938333539306439613361376535616636643764653533393635366561646238326539
-63333564646461653534393465313135396239343861356435396436373032353036326461666134
-31646638643937633864346361313837323034343163373765336132663162323537303732323838
-31633630616437343237393031346665386561353834373566343164663930666364666339636233
-65313062353162383165343261346231386233633261323535633163333836353665316230323965
-63366361356462376166373236303635663765393664643030626464353834633536613735366463
-64653738613563393562636663396637396666343764613765366436316630303932663132636634
-32623566393361336431353233643563383564316433353432313633336562393635373530366462
-38623534386238386534343336363966363436343234326463656466386230643761633538316538
-66666237663763613933333563653563386237656335393232376235613139396366616237376332
-35383734363063376632636465386366343530646161663362356331373439366134633839323130
-37333261323136666632636537366634346561666437356563383834623064356531636665373764
-36633637393434346136336434356265613434656230616437306361303032633932383266653237
-61393239376666653939303638643136396536393332653839386231373636356561643536643234
-63393839373334303536383161303662343866326439633032333634353331633466653831396561
-65306366653164313333623433366236653437613334306364633139326362336461343037343366
-33346561656132396366363836633934666661343435643561306235366661356638643133643631
-65666462396532373165663434623939306136643938633834373133396630353933396365326637
-65613562643233353434653964616262383561613964626433393863386663623838646632656166
-34653038313261366236326137396537313534663738333966613737346466666231323737396164
-34316664613238386665386538353761653862613739626237643337323333303838363236613532
-35343238393731393538316635613130633839623863663237633064333530656361626465366233
-63326365663638633436613264643330613566646139353965623638373563656466346632333464
-61643862663030613463343431333234363164353030303233336263643139323937373832353539
-66393232386437633837376137323433333836323833636462376536306536343730366661633836
-36366531346235366636346436643061313263643833383765306633396564656334363835613062
-35623034333665313537373833646232616636613239653136366232313036323634383961306235
-36323736663434366462353034633964396261653130303861633362353865663731313430313330
-30343834633363383932343466343838623837613136396366613938653263373331653530336162
-30326234343937373464653039303536313363633434303639373763663337643935646162393066
-61626433303564646136343864356263616563323730366361383136646636663339366436343461
-63623336616136643433353964313735323131656535353236613165356166646231623135323530
-39636539346566396262376637303263373737646266666132363632616563393137383137326536
-33646264663633393665333838646634303630313466633231363831366362356534626634633162
-32323930343333373038643336336563626333386635636664306438643034303361323265613330
-38643632383433383635333264656661353461363230373238313164613735333962326638313334
-63313432656531653366373534616261366366316535636437343537343764393236393439333434
-38633637316364616664336463393231636134653634396361326464643438373539323538353661
-32656331346138356537313237303064383537656464336536343831306165353634323962653563
-65643736323531373436626638313938393934366633333062626439303437383364323166366136
-31313365653039386563656439306133313330313736663836666131653731326638616232613237
-63396166363434343565386366623733353031376461343263663666636632616437316362303235
-66333037663538393139393161306565633266616532643538633838616334333365343437643465
-33363434316632356631353265363236396234383366383636393661343864356166363636303965
-61306135653564323465363863666161313638633530396339653362346634666630326239373433
-38363137313465306162326330333336366562663730623163656338333538333439613136623232
-61373165373565653637356562336535663932356537616166633062336663373063613037626630
-31623638313661383362323233383364346236623230343261336132656639386337663739623736
-39313665636365343934323538663064626266356631376239613234633732396132376233376338
-62646563633363363165353937316632353038623030313737616130326137633538366633626530
-38313139616132306263313761343334376134333036353235323930353937643865636136346438
-39393836396637653934626362616566316231623537303431303364323034353436333834613666
-37613137623630663261313762643431386538373233643961326663666437636336326566306137
-65376131386436313565343439646234666665336166393963356166306638373631366466666166
-39323333326139383533626231633038323235636364376661336533623537366537333336376266
-65376634393137343037323533653866636235303837653635306430393338626631353665366633
-30343762313439386666656338386233376235333837376562363063366533633735326163323732
-32313331383963323363333362326235623839333263626462313731666134316534323665313034
-33383664373963353661656361366465336530303762646331656266663961366338396361626533
-32383265316137353237306433323631396437616634613331646265633236373261663038626338
-36336362663961353665363462653534383136353232643632656437323065663238383338363766
-32633331626337366566633534356366373638666563323864636164353061333538613963376234
-31653931353663363066333364306366326662303538626231336161393537326133353963393132
-63333230363238613437386131313636326238383137323034633465376462333364343962633266
-33333965386535313266343964643036623463643161313061353261353366316630323863383130
-30366630326136363536626635353166613034363038323532326263363833333362303831663661
-33356463666236663636313037646333353862343833333436646136363232396634643665366439
-61346639336635623465323361616233616161386664366365633862393264313964653536386631
-37303833313930386464396333386432313964613435333933623832313131633339356561663163
-32316462376430666338333661353935646662663662346362663636653236393161383662656363
-37356236623261346433633734646539336162333263666333626562616637636263646233653339
-32343334343166373130303961306233613932313165383438643634613733316534393966663761
-32336235313731393630366133346464666238323538353265663435356264393231633632636263
-36646563353364303662383866323431633132643934633437383162336539366538636363656165
-62393837633839353939373965353665393765643262306130336665333738393137353338353963
-66363133306136636333353665373439633663333436666431643636643066343035616562643638
-66623735343732626431303835313162653765663836383130353663646533356238353065373861
-64653264666564313263386234306634316339643133303361316165636661633439313731316564
-32613464663735306566383233623061633862323838383561356339653861376232666462356430
-39316464376231623838353066333666393238633135396339653233326132363163383635353536
-35366663623237653666396638656566353136326237646638656661346262623461373466643963
-33363539316337363239343664376233313136616564633731383863326262646264343837363562
-39393463353135366335306536643136363136343365316633646338623761313639623033653038
-65373632633731313539346339663465366531333266633461623235663631643264356265623866
-38666564393635313935636266613333613566393565653939353766363030363131623636316331
-39353162633837636561393530666336383531326538386239393261646261363934366335646335
-36386335623530313363373165356164636430643866313763636262613033623562353231333539
-63323138623432383235393637623633663331633739373633336335303438363537653736646239
-33313531336139666562366635383962373334333939383766363932616261353733616461663239
-66313739373334326337396363363339613536643464663962646637396439663534376436336161
-33626237366661653861643030376665393861643131333165353837396665353766323137373232
-37663363373639656562353761663161626164646366336162353630333134626631356530666465
-39336339663431313562333537323131336566366461333933613165376232386266653939626239
-66363761343864386165346531383162386434366636623363623331633131376339336462633535
-32373362323438633736623066636238343432303733633964353261663265323131636139333662
-61663461386136333734363130373637373636663763346165313137613232336665616633616262
-64376465643163323763
+39626435383866646264643632343836383132616162323536323732396265373539616464373932
+6237636263373339366163363739613139383330626437310a343862363835633663633164393464
+34653061656331363864323363663932306637613937383534343963316364636635313663343664
+3539373536313461350a626264363866306630656464646439303338383535323863393537346262
+61346533323162653766343763363934313937653237663437393133666463363962346331343836
+33393533313737626636356466623566393232303037636266353565653130646434323338376136
+32306537653134633062313732623830393166336135666263343933323138616436313632623533
+38646539623837626132346631393964663062386631313236353563393131376130316666343562
+35346632316461336564393264323632643232663136323334336336626339633365643565306436
+35333365356637316631666661356431396635636431383032643566373666363936363462616337
+62316234363963306338366638663064396365373264326635376134356333626130303834383534
+63356363373035623031666330626463613563313066303365303430643262346561633633666466
+63666661616139366431313832376665383638393835376261326465353938333963333264653236
+35613664656363643438316232306630353361343030353963386666656166373061666236326664
+63383033633733633361383061316232306566353062616163623563663032393734353963303361
+34323330336561323734373430323435393731323931343335613935396330663533323137323234
+39333132326364646336613362363365323331366430396535383138386261356534613832393863
+61363133356435303964353637346436613633366336386465326336313935323538643636313331
+39663832373337643865386164343764613764346331633261653039613136386636366431376565
+36373431303631323730343831363837303665353461303130326430636161623431613730356134
+66396632306139373732636165313834366339366363666566306461366266356338346566316363
+38386564313665306239646436386635396664643333383736396131353535336334383765653961
+31643833663361343036623634326662333935343332333066353732396132373561396631633265
+37643733393433336364353630666136616235656638343032333632373366616634343130313536
+64643834643236363731353664396636613266656263363664376539306539346639313838663738
+36623634396638313861636438306136613433313062306537653738316563613631363566623134
+62323161646464636131326661646535313436396534356335366564373165653662613536663561
+32366666356339326264326539393239666234633663366261623933366636636161343233383932
+34336638363864346436613164613161326363316431303963656233306663376332373731623437
+66353636336462663730316161313236393264633633363965653433306639643938383933373062
+30323331323735613139323963643335373335633265383235343835376363666132643431366665
+32396465313434343534343433633432396131323635356265663939616436343137393561633734
+36383961363964306431343939313837663166376133616365663939633161326338306561356666
+34663938613865383739376534306333653135383431316464613432366566623362393065306635
+64313737363065336234393463316138313864386163633966336662313366396431353632363365
+62313036656434616136626331333139343235333930363166313833306438616364393065333963
+36396137656634393066646330613365316562306164326133663365313938333337386137383864
+61376333346336396537613933323261663536353161643431383636316235393035313861326230
+31623566363138663866326231376561336534366435626134306463323032613630646361343165
+38663662653334316139313866346163623461656335616232353636636431636339313239346661
+33396133306132643732366232353166613263356165663866626465343936326461626336376462
+34376431643730616461376261356633356166313131623837343839323935343531356263336230
+62323236633339303031316165326362306535653064363862663330393034303964353437363565
+61616565656164313664306664663932333261333162383832326666393366353730306531343639
+64323530333466653534306130636161383463376632616232353361656661353831643966633639
+66336631396164663864653933623662343061316539306634393334653630393462376636346165
+33646635646633353263333838343534373838333836656536373639646636303033626537313464
+38323462396231653233333463313263313233353932356633366630623138376432383566363538
+38346336343765353830656139333564633533323538616166333865323439343361386135343130
+63343363303332313834313764356637643230386536613338623937393436613732383833366235
+64343862663234633232656333666438633464663463663737363431626361643532396664326661
+33383261643231313836326162373532626234383362653162656435366535643863316235656536
+62306334316566623732303834313864663636636334663130653230383365623031316164373161
+64326638636339303065386435303332333230666634323163393134613032326335313961306236
+37343666376235653637636136636133373966636136626137356331336234646366316364623134
+37633832386237346266376533663839343938623664653030636265303465643835666234383763
+36373439346566623739343361386562623962633539383134663237656662653939313938663938
+30653438306666613731326462633334313730363763666538666538356638633261353363393930
+37626261316565633162366636343539626238323861656565393162333662353563393139626261
+64663436336233636438326633303164333939633435373765333731666135366637653532396238
+61346538626662626463303965363061646261343232356639336366333065623765646335353638
+66616430343562366262333235323234383334343538633037643661623661306330343839333034
+62626533353238323064633862613736663666303666373262633533643539643962383333346264
+38346134363236633031393138313538666533643561373766613836636461393166306138333231
+63613735313636376538346230303662646633346363353535333232663033373036336564623766
+62316464363930366665663530626564346130316231313033323130323531396366303030616363
+36356431653435346561656132616632373834393833633865323762343037656439373331623664
+39633635306334646334386635356362346431366430326364303931336562333735613033346437
+37613636656261383034663633666138653537326364326430666632323633386636376635343232
+37643965663564376337616432623336326238626530333736313530386537383633653437356436
+66613230366666373734396538363362626531666331656362356364393230343132363033333061
+39396237316432663832343261393366306232363166313034383033313565373265353436666263
+38356564656331393733393333346164313233313937343330363662316431353233633063646438
+63386162363034363039663864636365666638343665386334383436353336313333653166343937
+35626138326333623362623639336461343737633730306630303963613465396464386534663763
+63383733643761613136386430646361363731343433656533653938366138373162313335373038
+63626639643634663962643130343566323730646432366136393335623134336238383761333733
+31633330343962316134333536376464663166316365386265393061316162363161376333393561
+31646361386332613837663634303134626133376630643730636466643961343462366566363737
+65373236323861343238343434316637663333346161633835306663313537383631303136323832
+30353862663462386262663461623432373034333631633133633563636336343831653934303033
+36303162323164663632393937643665643961313464623033383130663565333034636164643136
+62316639333662316133393533623561633435653036376637323739326339346632653837633637
+37663332386663396363653237353031343065366334333836343830363562383733653661323664
+61333633306531323639343931663061383031303937323261616165633163636133323130666133
+31353366386530323465646133343766663966663561616337313330353436303234346136326365
+64343561656532366538336662656261396337623763343966366136646638643739373037336361
+65336538373161396533613262326633343233653036656364636536636338623930316365353365
+61663435663333633435376535353963646566303130616364396539643366306635646538363464
+36623433663437363761313038666665306536353332633361316339666263306665636566393531
+66356565363839666130663866643134343632623837323630376638313131383036376464613331
+65366262663936623238303863303761313466656538343962326662646139363166616230323938
+35303265343132643938616330343833386261666432376666356532363933656461396633343831
+66623735623233363833656137626161643265633335396162626261633334613232363435613266
+39356663333532306662353538396565663666393063313630663133646365626461376363633735
+66343030306232396332313731313531333235636363383130373532633137383536316639626537
+33306330393737343563626234633531643334313363313466326564343530383337316238383362
+31306430313637613639356365343034393766313362613430646566643131646530313861383037
+31353636323963646236343866383166646633613539386333316164316532653036663236663039
+36306364613033616338643366303264343462393532393638316235303565333634396537353334
+36666361646237356430396636663032666264346561316533343438303238313537326263333766
+64313231303563626364663232363462643735346639373463376464383466636638663036353437
+64356338653862393637366233613366393635623637663332613961623733653362353234656130
+39383533626133313066646331343361303261376364356463383261356462333138643636306432
+34326135333137366339366561646337323134633033333365376666313763666630306261666263
+38386530356361633062663964333631393665343539366532316161616331383831396537323539
+66343138373463343434356465316662356233633861396337343762396366663361373161363838
+30363633313634623333383135623738343738396230343839316137633663396635643865373735
+64306238393833353065333731626131666134303264346662363433316161626632626430363861
+36656263313032643132383162386439613763333033396434613631656233653034353263386138
+35396465316664646339333630666432353064646461323463633237616338316362626538323234
+34343531633766396662306234356361646432393663303764323633333831636631323938396261
+65623064303234353861363261346139646633363965316337363962643430633864633061663462
+33393531613032386134303765373132306662633161383133376231636631643464393536636430
+32373238653166313231333733313865663862653537313736353338336634653032326465616565
+35626536386132363139303939623864613463633432643538383036616530323765376435643237
+65656463306533336661326462386636326630346664333838636332376530333432393235666332
+35663836313765363934313236333765386130623064653463323039666536646531646333633334
+32356439303333353536663638333138343965653663623465653938326565353535666662376364
+65613933323566313363366266343630396331366165306164663065343361666366616237316134
+31323236316163663030666265356531363266343337623561616163386336386266626634346436
+30303738626335313935303463363166313438663430363035336466346164373738306565653133
+30313134303563613835633739303137626562646533636263623336396233626266353130633262
+30396637613934616636643333316539653431323563616338343637303139373334386435626333
+37616265663435303130376137346361653463313934323837313331653662623261613962663833
+64386165343661663463643136643736333232346231396666383239313830386132356238343233
+65376535356238653663613336343632646234663633373238316363663162633535623962376135
+63396661373130383331623733343664653434336264343763303266303339626434316331336433
+32313066626262313438373631303337663232636538643863613939353266666463313733653830
+38666334663864373830313762346339653230393036653336663030346631333365613062633361
+36616538636336613930303065663637373433643937356461373030613733333434663736323864
+33376365323235333938353261653766663134313733393666623038646362666239373338336464
+38633433383938623463366335373439336331386336373631353232663662616261383831663339
+33663830653737306364633935393334306466383634326430326361613461316639393136373065
+34663234613434376430613365316438306162396239326531306638303132666266616238336538
+65393965646139383263366263376338396238393730643231616664323432653535613833363465
+38626166356463333938626131343638333635643661343162663931303937653835646364306164
+63663232653234383465353464616364656336653438313664313339313231633739303930316536
+32633037643561626362633231626634306335376333616562663039326466353165313962343434
+62613638313439663032366161666665663562623535643037646331323934616562623432323565
+35383939393134393931383030326237336535333862633637373730336339636239366439643863
+31626364306365303063346265343465623735346639386239616262393931643835393562326535
+62376536393965613035626664613034393533363961353864626666373639386133303634363034
+35323939323465366638386631656561636564303430643533323864333734386531376337353632
+38323161333865333663363239376133323063643931313464653464316161633637353165346233
+65373431663462656365326136346130663830313566313038303265366233626261356535633731
+65353666393935616634366335306363383831663462623034303434646431666138636231373336
+64366137336231376562313762343136646136353233326139346131336238343262623738336231
+35353031666632393237303834633536636161636561643463346339343164623732313537353433
+33343439373736336330383336303038393831386130323438633865623765623734316365313333
+33303265373562663734353938343762633230366564336137303134383661393638626465326561
+32633862393539316633616165666262623563333966353736363536656536343235303366633964
+61623434386335356435386464363035663162333761336361313263373138343965613538376435
+62646266346162363334363963653937353164653563343834346162323166386335383565353434
+30396434343465303538616463663532343938636135313739366632656332333733613737343536
+33323336356533663962386237333566323030306133666334366365373535333265333132353437
+35626435356234613539336232613335653662303365376163626535343163343036663631323031
+62393263396233316332373663613435356465616265363336393732666235373466306632383635
+64613962633435303834343231616264326666316366653433313232323835626238656439306361
+38326435363066366261363931333336613164353166353236373834316437303735623931613536
+31666335303330313664333566363063313337653163396531353137613562643039336338656164
+66663763313432386638323766323032386135643666313765313132393632323035643538313736
+38656439626261663636393034366466363437326561396261303636636265616237633537316139
+34353165303564343039656631313130316535336361393166656439623538313563343033373366
+63643862386464353330643537326331393133323765353436313136313435633261626534303736
+31346435343865396665663333323737333635343335346134343061613033393061343532623131
+66633864333838363937626135336231366434363634376635633566363536353461313866373836
+35356463313437313134323339366531633439353961346164626663613232656635666237363461
+62633832356433313934613763663433396666396435653433303733346639613762303534613939
+38343338663162346637633231626435333963376262353661313436623233616534373333313631
+34336433313964326339633466616533303031343935336266326663343937366331656539623535
+66383261303462346634626261363737386232633231616239633335303238383766643665663639
+35333731666432346665663736313435356231343132376532616439653963393934633037363366
+37363632333362333438646339336462396665373361616536306466306663623733626238646135
+37663863343339376162373065393130616538313939376137386566353361623937666330303538
+64653531653634636133353433353463323738316664666636643933646661353339326238316666
+64316137663236396234396130646533316438366337633437326539363130343765656639363334
+30663362393937393863633262323931336336343362646264656331343733386332356237653134
+62383966636130636231333539336465303838343365383135356464336139656637623233353236
+31643731326430313563613130626431353562383036373461353663363031663232353366393765
+64636261376666346132373161653430633934366165656139323232363463646461346336613964
+66313130636132323931316438613137356162313062343431393035303339306237343461326336
+38313261653231633836623739306438616439613730303332353434313934356431396565316238
+32306132646239336466663232386266656134633563646431613332393062633439646562303665
+65306665373532376362653737343061383036323535333330373831393635333663376237346565
+34646666633864363836626666623838333263633036656337656431616635353662613262336336
+62643965666364633865666432326137653864366435323332623536303465386661363162653064
+65393362336362313438366536613038316461376139376662356437343631636239633066306162
+38373638363233643531366338313434373034656635373731666230623663633430656266343933
+35663030316335646532393766306638346365396533326433646530313630636239356231646337
+62336163633162613862356138613863653432303064356638656135646264306363323664336263
+62323963333432376237626134323062626563623165386335313533356366333437353838363363
+64626230353262313138373535306538313765323435363732396437616134643931323232316463
+63396161653032653837613366346138366166313730656665623563333834653836656162393466
+65666436363465393934383732393963616236616263393366623130646134623730376462346532
+37373662306262366331323539323365356232323739333466383865653461313635356339633338
+61666330666338363533313462613739393863666439623033376336396364666365303432643137
+32663365376231333230663665326536333638303234663365303935626331626665663239323166
+64303966653566616630366432336264333639646236613038383134363336376363353961366435
+34313133346339306133303839313631663831353465376664656138616131653437626337343539
+33623834626263633939366238373232323165653236616361346533316463613063353064383633
+31366534303736316532306563366663363035636462323737633436326138306464313134323066
+33626538616536333338636664666334353832613135333832303862313061343363303362343461
+39316438396564613662356432346363336266356239303632323664393864343233633664636261
+35323831623133363937343639656637663133383637386635383137343165353932333665316434
+34393839633233396237643062623536393231373864396236613162323364663732666265633632
+32666134366137363463656131376630353130363538356334313239323939663263613863333161
+61386434306532313263326334623362623465336461326564313735333732333539653162343165
+34363861643532633137356466336430323961666133613031626631636631373464633832313035
+33343935643531383339326330303538333133666265313230373734303562366336363863353936
+33386566656633626239356334323765323435663233363265666231616363343537363438633766
+33613336366163653134333039333535303962366162613337356166393335366131643163316339
+31383132663331363762633662366462343663393062653866663766623830376135616263393839
+66326638316339633435306438663534356662336232303032376330383065336432623266383739
+64303866393235333561633434313763366333626631346563323662326537653339353834363961
+38393236333462343234663761336562383564613530323762626465643933386239396266313139
+31363138383138383236363464346163633166393232626634376533373862633039373964303331
+34323132636535663732646463656632333039333063356533663263633035666664343165623061
+64653637333637363632366562326431323932303233343433356431396564626632353334656631
+37623866633330313337653466353139393831373531656333313932376232363961663630353265
+31323864653664643030323531393736336165616632343766653032376665666263616438363064
+65646630613136343033343466643765656236393061613238356435383264383866363632333332
+61616437623065636135656330376262376130316336643263373362666336343331303534353965
+61316263633534396435373336363638326536363366383165353565373736353032633632646234
+31623233663333303232643163646630366432303933393131613461306264303932663038343435
+64376533363134343338643364626135386334316337373636653735373330386631336362623030
+32633562376164316637373639333230643065336436363163353263393630623065656263306231
+38366235366335326563323733303539383330383630613937326331303731396361653537373436
+62366333336131626138393839343463626436613664653137393731653332646661333136666232
+39383433643331383736356137663830396265336264316336393731343461356239393534313432
+37303838366264623034373538316234333536646436643661343363393161656633313530373465
+65313361656637623432393233326332373537383632316361333735663935363835646634396431
+36323335356637333530353366363661323762393131623737656238623036353937393730636333
+30613337386564383632333063396430306166396333346533333834343538356130353436323765
+38363664633330323163316233633864363262343732306363656237303534656466323231383130
+34636264343735316362643961386639353733336135613261303736313537333165323739343032
+65353363363161616531633462303539363734646661366464383334613734313137623731323939
+63323065366132623362333335663735306361393630326538613037383632663830356431373261
+33393063626436663933353864346264633535336532643136666363663237353030663761653933
+39623331366663373363356333373263643338653336343463333032646630323132636265333130
+64623765336336613161626336313361643265633735636436363037303432643265316465386335
+63316331363836626433393165356131396461333931646665613363313737613337333638306432
+33623063323065313865323732353362363333333331373766376465613638656465653035326531
+32366333363935666230666334653962623835303435336466663032623531616361643339666130
+31376265656165303864316239356339396665616461626362333862616364633432363135373332
+39313430303363623433623161643432643261613364393630633334303431366235393765653730
+38323639306161633434666161653564393436353031363131626336643664613232313463636431
+35633935393666376462656639363431333031363534383064333934663265396133373433616363
+39366461333034643631356264646362373439386161346337366165633639613939373930353562
+33643634646331376433373530623438373734353661623766623263616232376365656335636534
+35626665393636643830613466393061666338323464333230336666366135633661316537643764
+30653130356232646430653365303966303266336366373132636237623332363133323632646230
+33626361353464306566393438616465326266386262633566646134613166396635343733326635
+37363266386363633030356531643166333530313561303638346436376235623033363834316266
+36323363303636383334653533346335653939386237646436336437313161653932656331343064
+32646161623563303462386433356334306239646332383137613162363237613062323265616230
+38636334333762373138393833323231613062616535356664376239356433313264336163313138
+36353432613033333237353531656162616363353835376138666131306361623365323237353333
+64316364383866356338656237313539303434383064323831333832633063653264666261333032
+31336135613032366666613566303539626163313364303662356165643931353938356663636366
+38303063323337323661333464336339653833316163643235666133336438303930393766623931
+35386331323430333630616131663831653265396165323430333866626263356138323161303763
+37373233386562326462613364633138326535653238353662613864343835313031303362633131
+37373166363261313930316639646663396163646334623931313466663632393835633161393038
+39316363316330393266396564356338353037636632376133373231653864636365373638653438
+35326334386465623536343038336336643162616633343565383334373830656435363138636435
+36303764306235653534353161363162313764336138373332313338396134653134306338343561
+33346339646662636562333834313535316439303265306534353366353662623066363139663933
+39663165313666376362303838343765666162636337326565353761353132613737626539306163
+35383065336430396132663635663631393466663236653564366139663031326136383437383838
+32353239366232396235636132646531663563323661393332336361313738626437626335623463
+38316133646566653830633963613161303637333533363338663130663661656631646263323262
+64623032633866636237623665356436356165366165653666656161393865643931643730613664
+35663832363037653931313635313638343764316635633031616439626230323337303335623234
+32646330326632373738663465666236666565396162613361326464313965393830643237643865
+61653538333330613835623461353366633433336138653535336239343933643563633363656638
+38343966336630643030303665333563353661373064363934633566353363663334653939326263
+66623034633564383833653366323532386664633730376131656366613637363433376131356430
+64376337313930633030343230323662633762363538623331373035373166393432653836663836
+38303834313663383465376432656661343432373139653066323637643061323231383064356131
+32653065646636383534653462353534643931353035346432663266623431363066303064623435
+37613264616430386438616538643035623632336237656535343936376363616431633264303933
+34663465393337376539303431623666626339353237346338376637666331623762373132613866
+39353065653630373635383535316539303530353433376433653932636331623739633862616265
+63636163363765613730343061323930653735336364343239353633383461636133333065616632
+63396562333733306538353533646332353966396330616334636639373163323539353231623766
+35396261393066326232346330616133626634313964626531633234663637376238326666323561
+65383366373963323734366332633865623536623064643239366561623262633162353461326137
+38633862303932316362356366393861303366363335356134363638313533343434306161386261
+34323733666662313962613835613537393432623836633730306535366361336265646534353834
+64346461386630646130616663313035346232383533663863613364653461656564313834303961
+32346337346165313464326332393435356434653138343130363263396238343034646635343937
+30353361316435313634613930316237626162623562653036353966393362666438303637303333
+32383130323630336461323835373863396137343231306536613038393437623937636566376639
+36626634393035356136643831316664306662653061616464633237616566323437376634303634
+32633462383332663635623334353263313464613535323861313863343036653338343033303238
+39356239623163663330663131393334633961313066663266646631333464643366663637383434
+65323264376166666162346336383736666133666163356131326633336464613961653562663462
+63313935366166303061663066396532313830373936663865383132343466353233343165343961
+61343330616666323939643238636462353531343664343938366135323961366661323066663466
+35313635616637646336613830346165646664316464643266393665656465666263306662623062
+34306465636337633733643434373536393335363862316166373062353432626161353830336133
+37663531386463313334366634623533376131316138323337303738643238656661396633323838
+66663633306134353864643163363735303532373866323534333132373438383738366535353136
+66366262626636316435623436356263313037626431626133326339396164656535326563373932
+39373232306661356338333139313335323634636565303631356163383935663432303133346465
+37356234633362376633393265363736333132386432653961653536383136616236333263333263
+33356131396439393164633466303366343563643735343333336165636335616639663862656437
+37396262343131356665376638623236383634366532623064636636376638643133306666623733
+62343936653937663639646661353933306562643530393938313835313563343635333738303461
+38623534616363313862313366623762646531373262326666313736616461616232336537333037
+39643030333737643831333866656435663430313864656261333233336530326363653532376336
+63653532396539643966663230333435353533363239656561336531343231636362376538313037
+36633666316464376139643563313664343738373064393562633262393439393366393564666231
+34323731303839393266303465323766613864396461386465653739366634383461656537653732
+33313136366439623636636438363566333939303263346637353163613834396162303331663561
+35343237613031373065333636366336613732326662303463323461623839353439613132666563
+36646631393632613237663464373835636333366434356265363537653265383163653833663461
+31396665383334343966653166393762323837303735323366393335356230303033666232313361
+64383962636636643630326533393331313064346165313833333937303538343062653266303334
+66303063376265666538633565343166636562653639363533376637666631393764613438363333
+38636537363664643863613333633236663435323537303934613433386437666366333334363964
+34383738323339643836626562666566376336666262623736346535343639323737353163623439
+62633732353236373032646533633665313361653538396232616234623663663365396536633237
+61626366353062313665613836346233346631633131363061656662363864333065363234316230
+30613364343131366532356263313863333130653266623130636235303961353630376663396131
+32613633346434373630653663653536383933356133643666343966383532326236333537336135
+61633636653936303662646362333463653139366138373734356134326534656633316533393535
+66306337323164363334346663626663346535656137353534333731396537393835366261323233
+36633033613938386437386665366462323235656531656461313064333064393264366239346462
+38313737323962363465386435636539656432303162323665346531643139643438363630653538
+35636430336366353263396232316333396434616438613463313634633138616336306633643061
+63386335306261633739303532626261323566653762636262363430386134643735383937313136
+34643938356136623133623665363963623530363535353139653733393232333736383337383662
+35316237343935616538633861646238343438396131623061396232393331333038373432643465
+35643835396235323735636332383261303530653733613935646466626330333731323065303930
+33653061373765363439306464323761303464393136613864616665323837336664383238666634
+30396336303538313232633236326431313065663234323161653062363836323633363735366135
+35643562303534343832373632633962636636653562333666333563626166326435383732306332
+30383362393135646337616131633330393632613237333037353531323830363237643330643161
+66626563636635623464363533346466646133383538313730363538336637626538333830393164
+36343063346433633439313733303865383530336663636663643733396230333837353237313062
+30626330616234303039633736393161303863343234396262623436306136316366306432663930
+61346530633865396365396139613639326530353639333036313437383063633235366537626235
+62616365653761663566616133366536313338376162356662656432643532636633363838633637
+37643364643061656136323436626564363135636534383862613765616335323931643233393863
+61396463316564656136626365313065353038343936366134616136396461616265623331333633
+31613261656639333930653132633933336630663066613331386535373335333339313230616361
+33386535623363646631646262386463343031643138616464633961616137636633356238333864
+66633338343166323034333936396162663366373765353233393762373335656465656261343663
+63346330393161343236376665313639386136353265393431383563646665393462323336646263
+32616234376239386263613034626661383962656637363236323831633531313933386666313435
+39336539656530373137616138303361653331643637393066323665373132326162613461346434
+32616130386131663631396633353135323164333931393939386637356637303763663638376466
+35616230343862323037646139353838623031313361616265396136626561636338383063336238
+30393536373261396233373439633132303238323636396131386137306237643936636330353133
+38626135356238663536353733623337393061333465626531626232376430636231373162333463
+31666163316637303462663262313039663666383431373264323163663134636430663233346664
+36326636633038616531386334613762613736643038626335623835343864356366316266343131
+66383939636332613766363565346336386134306566616365336234383331383466356539306433
+64346138653536316336343931343538353235303565343663383866653139333132363035623465
+62363835303765643132643239376233386330383530373530386461663565613030303665396339
+39656262643563313064633832646565373236353235393032616532353733353630623566336265
+65653664303465393139303232636439663231326430393435336438633931303332633731393639
+30623430656465326136653361613734373835376661313135623032356562363830303139366337
+65636231323866366235313933643733313630376533343438643863386166656239336635393736
+34376232613362323839653139336261623034613334396234623432326563383737393562373939
+31653764393061656535663862333936643264613865366565386166663866666232366538373838
+65376534653866653864623237653337346431373730626335386630616137323164353464613463
+30336532386265376234663562306334313432623539336366653361653565643032643531633939
+30626165666134653264616639373830333130653263313534326337366466333032333939653263
+38636331653937353531646635653937376132313732313836353131343632353034663832383639
+36636338343563366566396166343734396636313866393938373266633832343832396664616266
+64613339616539303333656635636465313964383239376138643834393232323666386563303265
+64386437663539333234353461303763353930643861613461393865386638386633623633623937
+63663734306332313033646536616561316638643765623566616139653031336563383365636138
+65303930343461623535663834323132353533653333366630356431653733636566376336353464
+38376162636565323335343737376633653165396632323235663463323730326162316635346366
+39353736623262666462396338363765306264663232366463353966623239313666613839373530
+66613062633436333734383139323964326663323634373635636365663832303230636366333636
+65323737383633636338363066356135373166363936646262303236356166316533326437393735
+32363639303137623335643632323566373032656233363063313264396436626633313433636133
+35646464373665356136316536356530653966313935333931643639376537373735373331386537
+38646336356631623731653439613164303835643039346430353364653561626337333666616137
+33636434323938316661643939383937396533323661363365643164356538393765396134396433
+33343031633764643239643531373663633734646232656466643362383838393037363636323466
+31613433393132306364326430666639666561616664333035613863393335383034353039343265
+31633730363161646439373637643938356462343639383666636437623639653066323536653463
+39626239363130346539363961326331613764386531386436316564386135626335333439333539
+38353638653531353132323866663665663831353063623764346438323935643431326538336534
+30643934626236663762333062646363316635323735633336386339336366323861323438313137
+30356665663032653261356663373033326634623639396666396664363430303437303163376637
+61363866316434663433316565393363343938363131363635373934623233626463303731633662
+62663437616333363438366239323934656138663362376363353063633461333532356265336663
+66633366316433653038353734373566633330653737366363303164393536353232326465623063
+65333136306264326430393935306431646134383036626466663032643931633862323066363863
+32353231326334633031656562333266363436386535303465343437666431393234623662346137
+32626636656336653738333934383339646335316137326630373062663831636139383232343437
+66356138373465316431643937623432643965616130373239346661396330363433373834303932
+37363932623564303661323234376336323939646361636665386663653761353033666339303439
+66303261376263306566323135643835373365626463376262376666643331626236656139363134
+39373833393930363630663833633832613063333139326564633161346366326239623735376461
+34663063663232313138376336663836333136363639646539623661373635366264653965396431
+30633430333136656139613033353939653433393038323438313363346264333462653464346437
+37666532336136373762306533326633323135376538393932633165653932396334343530653166
+32323337623731366261376534616164613836333237323466323830313830396662633837313533
+32373238626339353031303136306139613639343437336566303936656435636531626464613366
+30636235356363306663366334396631613832613062363134313934646366303766636438653762
+64313931616563313939326365643635643730633562323834326433343238646362333631656630
+61643639316631303861633130326261613061353635333065656363653862366562663830366637
+33613938363538663736663934626464323538623831336664643935633866383562316637323132
+39393934656263633466636565316161376537343962383334323336643730323634326461303666
+33396364666339646135313039393538356436656338366536613934306431306664383532326331
+64623231363366313637613161316234336136613862633466363837653133343339376238393437
+36363638613635663564316138303365373165336239363935313631336533303562363165306366
+30363138666435653364633439303561626637333037663134633837303131376638613437643363
+39666139656636353630373631653631613664313965303335303138316634663139656337343064
+34653061333934326234336132303965303338383566613032396433393838333439656565633130
+63306564623635633835616264316138326630656532373235316538356230663966323730386164
+34623137626665613935646330383530326163316637306334323933643462623133363463626434
+38633730626432323732303361336462383361306433336335396162353838666233393364333932
+36626437613131303136633739386263363331646130346264333838646330326532646437353035
+32376231663466373439653531386230383565626465623938366637393866343566346135383935
+36623431636138383063333265636332633265646463353565636335363830616563356236343030
+64623365396237313138613163336239663765313831383765313538326539646437663732333031
+66343464646538633830326235643837366437313161666635643539393830656139356138343431
+61303734306161333235383532653935653133613333333531353265303136356362373932376135
+61623738336566363761316164353563376431623864623465343065663966616533333130623032
+30613661616232323430646564383466616630356461653866626666303165326364613861336639
+38333865663237343530643432613439626166633232303164663263323961643739363164343932
+39343330336530636364656336333539623732353431616334616333653665336361306431653535
+66393162653865383365313833373462356135343238623661333735393466396563316462306165
+31656136616539373834663430663266313564336639656137636538646538653735633761373534
+39303365303364326461653763333164353563613961396331653032363165316437356566646335
+30313262666230633533383966313437633235383232656133366165373434663264363266373466
+36333766366434343633656361326530383065616531363435313165343037353736653830373235
+36633534663738616436363330393136333066653935346466663234393563656266666362346564
+63396435303332626461643161646632623561313530396634336264633334313133636666323835
+66323634613864646566396562306661303438316135366138386662616361373432316237363166
+33656638316338373064656130613635653865636433383664663431393731376332656330613466
+64663636316166383663313861383136376234373863363135353733663166333638373364613435
+61366438346265643230623663303538623732623761376666383038656533343632303162633433
+37613238346237613666626430623262653764393664313633336536316535383765333562393362
+62326162343161623866386466633933613436383564666664346439333937623036656530666661
+37323331373464626637643065666230653165353735303634643966636630613335376162373231
+32306531333664653230613737363334656261326631633339383662636530316264353139343663
+63623662333336373563656236393034316263323438363361633835396238316362313561623236
+62353533383630333962323966663236316463633461366166333230356664646466363061633263
+61646666643735353230346433633765303931353466633837316161396336363161613664623861
+32663930373664376638386663343466663033626535643661303561353836346136333166613737
+39383164346463656137353237383662646263396366323838326165623037363736366664636462
+35663764333137656139376330353463363965626237366530663263656536336661613062646232
+32396131383436386539663935653061663263363161303765663966383035366137653265363463
+38383530383738306465396232336337646366666664666338663164363562626463326539393539
+30623838656238666639356239353535333637343439393233643136366337616431343165396563
+30633632653962623033306162633439643565333332626237663032383338396435633832383933
+39663336363934666638333839666463623763313638313735653137353734663432303963616232
+37386238353337356565633933383733373631356466616666613132633934626435643163346165
+31306234353866656430333566623761353531333930363431343233366362313032353365636163
+37623330356632626262373838376365626465373566666231663537666332356232313536613532
+66343265643536313436636563623933626232323431356164636265343464373536363837333837
+66663839393431653061396331303734353962373565653636366564396539303265393136356435
+65623138363463653330376431316330303334656538366461666364323137396265383663303262
+32393439343139386633643031666535623531316365653735323336353464383434643739356363
+63623364336364666535333134356535346136353461373839613639313964616131313235393736
+35613337326263633464383665333062356639626263306238306664396162343636316564616539
+65303730356266303361633939336637363930303865663632346535396238633934643332306434
+39383961653933376533383632653566343730613939393738393435663565633536363836376161
+61616466653662643963613765656336626535326166303962326133313562306134656266613863
+62356166353336333961313731363166396437663734353535663035663764356366396438326133
+39326264626235653132326363616165653835303731626630613166313361643364306466666463
+63363039343164636166626633326330656339623136653432333464376131663363636238343638
+63333433633861376131303136346335653033383361383963343839346137393538656364336134
+30386337306432313332626132383236333963366431333736363836326565336564353834373361
+35626535643266613334633736343061636365316539346330366431353134653264306162613332
+62323131316531333366303163373265653634396537613935326436343961633735323835356362
+64646137333065643830343131343565386566396238626461343165383363363430333737643635
+32666439633330303663653933633261333030626166643932613634653636323034386665613465
+65326461636265333563333730393730303238633666646463343531363131396234653134306531
+63633837313639336137663437353730356132313932666337643463383862376261356266656462
+31353936666331346463653363393036363032306566366562306138636234316265323538313364
+35303638663262613164313765306638306434333338626266663765306562366363376238666162
+31313964326431633736666466313066393736313662353436353665353136353136373038393162
+37333537336664616231323865666330336162383535373135613536656534666664663734336434
+34386365326133326165646563386366343264343435623461336434393962626330303065383732
+61323664336431303962313531303366616539616131363766656564313063303234386466633165
+62323337373664356138343236396361376137336564653930616263666236666233393531633563
+39653264626238636430373963643831643663363337373161376437653630323562313765373933
+35303165396132666134333832366264303164376536383065666431363039643336396332326233
+64373833303830313734616132666564653464656330323866346538623231303335363839613334
+34333236363866363039373238336431333666313536653433626435623337306364663939366261
+65383865653634316339643330626236376435623366633331343839643339333166353036653432
+31613161303339613531313536313539643430653666303432623933663637373734313366633930
+38393031313863343136326261316236373966373966356130643164313361396139343739356230
+36323465633262626430373531386164313365663233396332343965393934653135643832383230
+33653232366632373366366363636331316338386462333634666630393463333165653336323335
+65613361303663306430346630663762383134653130373134306338303038333365643064383765
+36636438663033643431616630346631393532626437626235306430306234326432353064663139
+64636662356630383138333935326165333235313764326436323864383938356638303331386666
+39326338343339633636623432343537633636626362616339656539326431306266636232613436
+34336534323363373331393962343730303161323538346335636463666635636461633234323465
+63343661343464336137343138343564616135333035636161646263326363363034383535303131
+64343062666635363133336135326565633738396332653663623432383134633265323739626438
+66313565333736306335653166306432326435346536323461313539393733653432366264666437
+31646438353361346166663733613835363338333032653261623830626532633665303631356134
+39613135373562663435303666363339346439386330636463313164383666313264656233313139
+63643639323964396130363637316230613734303035353165386661343737636363366137646539
+65306133393763323566343933663731363763313730376664326334613234666634643038636665
+36623636343566333666623963383365353231353137626236306636356631663433396238386364
+32316533343563616635393930396463353938346633633565356630353838303064346239346533
+31613231643039346339373032396163323161313133653237333966316665613132646662313935
+35316436616162373937383465363763663239366565323432393563326534646363646466316266
+30623166343636393331393232616335663862363264373038663035316261313938626334663964
+33326139613738346133663231356138653232633263643936393835396436383534326663303335
+62303537313730373536633334666130633765633339626631623966316661663538363437643430
+65363338653739623335313336626330666164613636366166356332363633343961643065646561
+65383466356463363566356230333939366535333335326333393838313331333862353030366364
+37383236663932323361653230373038366135383533633038613664353763373363393031616334
+30396138373163393262326238393363396364356533306166623432373165643938653561336664
+66383832383537356238653664323864616666623931396564656237333637376662346435663032
+32323261313561393662636139353438313036643135626634323465336139336162383066343765
+35633234623432366637323334616361333931306139323162343064643030393162303165633163
+64356235643037323365303836353634356336333635383031663438663536656233626465393361
+66633566336363333666613465613630623539316263613836386433303138333331396462333264
+65313362353736666234333563383039653832636165306264633966343266356239393761343934
+62363035373037396361303336356461303563323966663764643336393539623564373434383732
+65386631636137643636386430343165633837366333613038376135646637323031383533313937
+31376336313930376531643438323636323934303065643161653233616564376464313466643931
+31653433363233373731366261393066316531373365316166313531623230393062313832343438
+34643031613830653037643464393437636538663062376139386534343566393130643338346663
+32613134356134656333643434626163343938616234333861666234623233343732656165646161
+37316530323065356231376635656437346138666436313334303638653731643932643661656465
+63646263633035363066633561353134653336636464643231666233386339343232653239333864
+64663162653035353364656538336664356136333737373761333462376365626634333736306135
+36306337396131333564633438383963663036333935356262653533663031323066306164326366
+33666432353932393038316133636238633433303461323361666633386530326465633630383131
+62623035376232616639303864393566646630393063326463356666653535656438663538613066
+30343632303835336262396665356439343362626431303134313562663165323934303034386663
+30623530383936353965306563623161666535316231336232323031396239363764663635613231
+30306232646166393562626139363139356366383065626337663365633134386137343132636232
+64633139646130396364363037346262316635613461323763663163656435633165353131623436
+36363734383335353736346232326436623434626263323736356365653966333135663836623261
+38313461663838353165343563653361613735643435653638383265386536376266343534313636
+62663130613833306533386637333230363332386665633831643037393461386535323261396231
+31303733333938666634356633663734353432333764353136653730353565366638336538343938
+39326639346435313863663265633166393638343665393333353832353234316534356435363233
+38613035323861333662623662313462323762326533643632613866643633626632643039633234
+38346233333564343737363633366365383666633039323033373261303135613035373239343133
+38343961326661393838616165303438353832316334353966346666393233386631666163373662
+37373637613335616665623963323863343532666266383331393562383233336436373234396265
+66353766363631393366373563343034336266323164616262343863306136363766646430643263
+30323838393665333361636632313366323064376637626261616263616139613565656333353661
+63343263363930366565663537343538613130323537343462313365633763346635343935313964
+38356636643335666663373461306435636539396638336331653761323864373432303961396562
+31376131386363653366336331333232373833346331633536356632306638613036643834373833
+32333737353435633430663364383331383737623263303361356462303831623130343138643731
+65653439643839653263343632363837333337643732333165656438616563633030366334353965
+38386364393837363163306232323434646330323933323639313666636233326366313530653739
+37313964396161326336613238636133303136663434393336363963616265386436313835643234
+65343364663464356439363833383966383133613538333638303762366261353036323564623863
+65313030363138363362653538336235643832646262373163306634346164393634366261633964
+32353564396265303336323432353438656431643261663432323662376136326239376439393536
+39653833336662386364353161396539386534636464316433656662373836366534313136333430
+35303730353865333439316462366136663834626563323866663234313734666434393262333633
+61393636663062303337333432363931653761626632626336346462313863613931386536656435
+34666366616332366130343539383135613538366664343130333634316461636337633938383033
+65346234613863663561343234663535393930346634353530643231316536663834646266346338
+61353233356364336333646362336664366465646466363537396338343934383031666265666535
+38623163636135656562613666663166393866636364346366343733356339316465613330646538
+33646337633034343665656630316334366339626538373662616432323337313362333634643466
+63666235646432366535303438636662373830313864646639306362633463626437613932303161
+66393463346464666638333166326233613934303465386666633634633863363836616265383130
+65633334666330613363303039613562303739343961333863383763313938623337386634386238
+62656335663366303530346563353530656662303030356230383630386236393536346339643332
+35393766616534303934373136356461613461666332393632376537333864656666633835356463
+38616330383636313433653666396134343963663465393732363532613062656433663339353634
+65666530316434386165363535336637376266616662336431396533323838356534616536343732
+30326261323964636339356639356232383331666466323134333531346262363661663735656533
+34626162643834353862613731356130376132613063633830633135663238666231326338323365
+62363865616535623131383066653164336565333733336233613333613030313936363465393962
+30336331336336386564613564656639653037313238346137666234393431346563303434333638
+30366232386530386434613932333836316166653238313134356535393035663633393033613266
+64326566303565656438386532393665656338303832346133333031613761663838613864336565
+34353737363737366638653938346166356630373539353238316366363861313637623938326638
+30313432633532323539303936313462616635656232323832366561373331353331366630376663
+61343138363862613336303866373030333334306235626363616565623039373364656137666332
+34333735623964353464656131303533653031636339393335663739363234313134383865616365
+32313331323534383532663135353232643038373532626564373563383434303436636433366165
+34326465353737633336613038336534373166363636303165323035366533323939376238306235
+36386233356562356166303565366535376137636661313666623766393861666132363332333435
+33316234363137656564643639393739323736376434663132633864656161323261316534653063
+39666462343766623537336137373730636562313161666263613532333132316238643836323661
+39363562643039363562366663383737373737653439663930643466383938376664336436623337
+30376431633561656439393634633635636334363366383739613238636262316266313334373766
+39376133316331333937323131656230313734636532653437356634373935653365356339396236
+37613036666139623532656538393066313163303135396535356536303565616236646236366264
+62323233376235356462633034323639356465346136303138393234663164373834393565323062
+39383030613634396332643733313834366365313762636235306161313435313262616430633236
+34386332366262336231623732656431616630623235396538376663646262323761306663303539
+33366161303066653932333137326366363130373534306630626135313830326138343764373365
+66633462666666393461303265643239653531656631643930343730626336643037393232336163
+39376634326165623531633765666636383264613532323235663236353532336638313138666566
+63333632343161303630663431383037666265343564613636623238336564376239316665326461
+62613665353735633361383730663132356463336461653932313565306630323863663431336562
+34306537613530653934373434613463346636613465663761643065633235646365356266383761
+31303036613261376562333233623537333064313639636136306530393337373639663862356638
+30323365653136323535386134376335356531653133316530353061326666626536326239363366
+66623165623734386563316361313535393462633230646664626631396234303030376262616566
+33366234643065636633623338656331373761613432396530653839643836643537363863653139
+61643233393564393537356364613334633038633036343463383338653461623136383436353665
+34663136623332356434313664613434663032393737623039336631643133306661323432313663
+63316263353730613437393230633738346334653530663531306134316535663334316566623261
+66663539386363366335353265623939316636303938393131346434343565623266616637636332
+33616233636137613339343231386631636235346631386138356234386266326630346164343164
+37393063316633663863343830346466383636366234376466326366663239316438646366643635
+63326566616131333532353932643434386632616332333364613634376162323239633963303234
+33616132643031393039313933646434376232343862313736326639373436383466343336616535
+30323161343335646235663935636563336663306566316563356361386464373334313063656134
+35343866386234626565363866373534376364633431383062353439373566323266326662616263
+37376362366438353636636530353965646365316138303936373631623064666236616438373463
+65303431333738333236636336323037383739633839653663353463653638646635626265613430
+37616261386637643230636336303861616336646532306535326537623434383532623637666536
+37366566646466356432316461356538633834306364396338333931306231373530303462393465
+61326264616530636464343335623132376139653737636561313039353264376131636161633830
+39333737613433643962633862653434303165343232633765626335626338666232396264316530
+33373135633639366531366632643439306339393064343530666431336333643132623061306162
+30613438633232626163656134353739636463326538376338633164343166363631383336316266
+62653732643030353032353936646162626163636233616531646231636334323366626534636536
+65373033616139376466366662306566663363393164356638383431653437663366643866333263
+39306533306661363138303566656161633365386436623565376235313433356236636638633134
+63353233353030393833653363626663336561326437383161316531373364663666306330343063
+31323663636136396566643831633666323639303230636664393162366638626437343562643464
+39316239373338316136613839326663626462356138313839656239613835396638663037656232
+33393138363364353166663430663031383330356234376632333938353965376337346563393531
+63633065663332306535306466383165646663313938623434373831616431656237386363643637
+62313861643636353734626136366330376230636235663234303764656662373539333830653535
+31663030313334376531366631636636306265643235313635363736333334393239353262323238
+38326662363538636634303730303437336237666335666661366332333639663662383334313661
+30323836646630343062353562336334396235326235616536643835373163306235653562626532
+39373337333939666336333736366337653736633934343866393836316565373965613865386339
+35313762313436666162316534383462333961653932643666663866633961613961353962653962
+39326434646236393164383832613336386239663836396334653534616334346238343363393364
+66656330623839323134623939653761323561643632663234306333643662346364643834646362
+36346338656564633231303337333832663061303961396631653432346439623130623866356561
+34666465336362383833336262303637303964383636643231656565616361306666613732333734
+39303439336163383037663762316531343533343562383664626463623632626334303931626231
+35643665333161303564373662313462393732623663343530666430393636356166383636343761
+30613633383438613262646430623562363864363935353764613064636530616537613339616538
+65386262663236356237353834393331353633653462353034306164643334646364383533646632
+31636538376462303532633762373164383431613538663234396236313761323666613238646132
+62313832663335633430666632616466313930383236653231343035623233373538616562373834
+32323566353235613430643630313161353830623263313931323135633134393833376661353037
+36306234376532653232316133336434396463616536393738633439313036646364326133396633
+61393538636137376436636431356162366435626665326239646664363233383030353635333865
+31396161613062626561376337653262643861353061633863616633623737323134653334636663
+66376465386662656362313466356264323062366130336632323333373935626535303533633766
+65336636646338623039363764306634366438656137303238646361666132636464313338363262
+35613936386534656134633266356437663733346533653831386336343061336365373330363164
+39313038356163656233343834346632643435393764326166376639383563633637626464353131
+33653865326262626461653664616532343436376466666566313961343462666633653736626235
+30336135613338333166323339316363623339346566353132313165353436353465643438353238
+65646262666135616638323065316630646538383038663635646561343235366264643739373038
+33376361653438306137373632306130303733363535386664613332666662663565626266346239
+65333461653632343364323039613461336130383831376437363066656461386566363366316236
+31326630313339333732356634363162316261336666633766636665643463613061313263386261
+37376434616431383132633161633130306638643833366434323339353838303933363234663137
+62663666306534623731366333383963656638653836323864326431303334646535313532656137
+30636266353332626461636639353235303638656431653361366633356361623330393136643539
+33366635646438313432396235386630386537336235383637326632303463333664656634613661
+64323361666430343735623565623532353161653763313965666338636462313463346233666462
+65656161646531353134323832633936636533363761376131636536636661316433383837663065
+34653766636466636336643231636463623638373131633838343538383961383334613631303936
+37353734363132306534633531346261623239616338613034656335363033333164393938633430
+61663239316233643462333739626634303664353531656165303432353061306136333764373832
+63343438633063386464663734643064666330393036303333663764663736303664653239336237
+65353534633731366232333232613133633661653764303036363063323966353965343365366639
+39396161383966343264646362636632303235376165663137343436346134333930656161623632
+34636565306666376433353532396663383339333534343766333363303232343530663431386635
+30346637656665396163613232316365353537633062316532656661326362336230323331313230
+61633563353064333965636437643162613665316230633438666133663465663566373266353639
+36376264303666663431643963323731356531343234313337363533663862386366636565646231
+31346165663236336335623661356432373431366332633933313536633238353435376631396433
+31383835323934323434383965383531626366653437316135643036336339316635323534393137
+65366465346666313838383137346238646666383033346237386333626562313238333730323130
+65316530326639663661346362663862303862316161623463376536356265643462306466653138
+66306361353536386662343162353930383865666433623030313830623735353731363562623162
+39643463646237336638653136383663346131626264653861326164646336656363343639383064
+64313965636434663762646261386336626533643739343063323339343333313739343634613937
+34383839336338383736386561616166386634333533616530383635346262643239386161643136
+38323437643839323832623162636532376338346636666266663538653863633735613632386431
+65363462313538396335633033633966396339626632396430353461343864323463653162393666
+39643566613836616135323439636165626338333439373738313130666138343430386431353636
+33646134623134363462383765643365626435366433363830653836653731333731343161643166
+39653838373632636131656333306162633233313765316138613136336235343137343037656435
+62363065326330343663343766666165356662613133373634633036316435626562366165643035
+65636463356430666266343264396531636266363065303137636332626435616264353232383633
+61666635356531336632623338633230336166626261623635613439366162383035653437383130
+62386635653864306334613861383433353562363562306633653866633531663266356561363930
+35323163616162353163323330636330623865633636343264353939356137336531323964346261
+32363133613232656661653863306138393730386265353366393633373231323835303736306332
+62353039313539663936393530643063633936643162373933303665346337643133343866323831
+31386131646632323433613931623331316236353866363062343632613163363366383633393736
+35633830656366373030623431336138346237663336333733336136363735643962333261323135
+37356633653331343166323534393465316465383731633536343836653362663839376439343861
+39373661326336323535373534306362326533663464306462303533306137623434