diff options
13 files changed, 600 insertions, 459 deletions
diff --git a/docs/lab/testbed_specifications.md b/docs/lab/testbed_specifications.md index 0fced8ee7a..975dff12a1 100644 --- a/docs/lab/testbed_specifications.md +++ b/docs/lab/testbed_specifications.md @@ -234,9 +234,12 @@ Name | Comment 10.30.50.24 | t3-tg1 10.30.50.25 | t3-sut1 10.30.50.26 | t3-sut-2 -10.30.50.28 | t4-sut1 +10.30.50.28 | s41-nomad 10.30.50.29 | s39-nomad -10.30.50.30 | t4-sut3 +10.30.51.29 | s22-t35-sut1 screen -r /dev/ttyusb0 +10.30.50.30 | s40-nomad +10.30.51.30 | s23-t35-sut2 screen -r /dev/ttyusb1 +10.30.51.30 | s24-t35-sut3 screen -r /dev/ttyusb2 10.30.50.36 | s17-t33-sut1 10.30.50.37 | s18-t33-sut2 10.30.50.41 | s3-t21-sut1 @@ -259,16 +262,17 @@ Name | Comment 10.30.50.58 | s25-t25-sut1 10.30.50.59 | s26-t25-tg1 10.30.50.69 | s27-t13-sut +10.30.50.255 | Broadcast n/a | s20-t34-sut1 n/a | s21-t34-sut2 -10.30.51.29 | s22-t35-sut1 screen -r /dev/ttyUSB0 -10.30.51.30 | s23-t35-sut2 screen -r /dev/ttyUSB1 -10.30.51.30 | s24-t35-sut3 screen -r /dev/ttyUSB2 +10.30.55.0 | network +10.30.55.1 | Router 10.30.55.10 | s28-t26t35-tg1 10.30.55.11 | s29-t26-sut1 10.30.55.12 | s30-t35-sut1 10.30.55.13 | s31-t35-sut2 -10.30.50.255 | Broadcast +10.30.55.14 | server-type-c4-1 +10.30.55.15 | server-type-c4-2 10.30.55.17 | s32-t14-sut1 10.30.55.18 | s33-t27-sut1 10.30.55.19 | s34-t27-tg1 @@ -276,6 +280,7 @@ n/a | s21-t34-sut2 10.30.55.21 | s36-t28-tg1 10.30.55.22 | s37-t29-sut1 10.30.55.23 | s38-t29-tg1 +10.30.55.255 | Broadcast ### Management VLAN IP Addresses @@ -294,8 +299,8 @@ Name | Comment 10.30.51.10 | s23-t35-sut2 (netgate-2) 10.30.51.11 | s24-t35-sut3 (netgate-3) 10.30.51.12 | softiron-1 -10.30.51.13 | softiron-2 -10.30.51.14 | softiron-3 +10.30.51.13 | nomad1arm +10.30.51.14 | nomad2arm 10.30.51.15 | LF Reserved 10.30.51.16 | t1-tg1 10.30.51.17 | t1-sut1 @@ -306,12 +311,11 @@ Name | Comment 10.30.51.24 | t3-tg1 10.30.51.25 | t3-sut1 10.30.51.26 | t3-sut-2 -10.30.51.28 | t4-sut1 +10.30.51.28 | s41-nomad 10.30.51.29 | s39-nomad -10.30.51.29 | s22-t35-sut1 screen -r /dev/ttyUSB0, TO BE VERIFIED -10.30.51.30 | t4-sut3 -10.30.51.30 | s23-t35-sut2 screen -r /dev/ttyUSB1, TO BE VERIFIED -10.30.51.30 | s24-t35-sut3 screen -r /dev/ttyUSB2, TO BE VERIFIED +10.30.51.30 | s40-nomad +10.30.51.32 | nomad1 +10.30.51.33 | nomad2 10.30.51.36 | s17-t33-sut1 10.30.51.37 | s18-t33-sut2 10.30.51.41 | s20-t34-sut1 @@ -336,14 +340,18 @@ Name | Comment 10.30.51.61 | s25-t25-sut1 10.30.51.62 | s26-t25-tg1 10.30.51.69 | s27-t13-sut1 -10.30.51.70-10.30.51.105 | VIRL1 TO BE VERIFIED -10.30.51.106-10.30.51.180 | VIRL2 -10.30.51.181-10.30.51.254 | VIRL3 +10.30.51.70-10.30.51.105 | FREE +10.30.51.106-10.30.51.180 | FREE +10.30.51.181-10.30.51.254 | FREE 10.30.51.255 | Broadcast +10.32.8.0 | network +10.32.8.1 | Router 10.32.8.10 | s28-t26t35-tg1 10.32.8.11 | s29-t26-sut1 10.32.8.12 | s30-t35-sut1 10.32.8.13 | s31-t35-sut2 +10.32.8.14 | server-type-c4-1 +10.32.8.15 | server-type-c4-2 10.32.8.17 | s32-t14-sut1 10.32.8.18 | s33-t27-sut1 10.32.8.19 | s34-t27-tg1 @@ -351,6 +359,7 @@ Name | Comment 10.32.8.21 | s36-t28-tg1 10.32.8.22 | s37-t29-sut1 10.32.8.23 | s38-t29-tg1 +10.32.8.255 | Broadcast ## Server Specifications 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 aca60b645e..9aaf2077d2 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 @@ -3,7 +3,8 @@ hostname: "s41-nomad" inventory_cimc_hostname: '10.30.50.28' -# User managmeent. + +# User management. users: - username: localadmin groups: [adm, sudo] @@ -17,8 +18,15 @@ users: - "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAgObJFDIMmPwQhhkjAynvlbwpM5yeSewyaE7vTLaFf4uFz4vmsE2hFf6B2xXHUGLVwoVfk91UeK7LOGrdDpoDDHzvPZXj5NmZI+WiWax5y2pQZNkcSZws0ENCeEc4hPwc4veJ1JmhokF4Bsmu14HyFMaFUhM8897jtJwsh+9fLA/no0iPGaQqEtRUQhkV+P4jCEPoY0qdRZAzVw/rY4EGAMhsJe3EJmyj63OfrrkG3+hvSLFo5pDxHQr3pZd/c6ukI7xMef48PosAvGCm3oxzb/Gu9PZIGuHLczY+tCnzCkY7MO7E+IWgjXrUAfYwSWz8XmFmA9LLe26DT5jkcK8hGQ== pmikus@cisco.com" # Nomad settings. +nomad_certificates: + - src: "{{ vault_s41_nomad_ca_file }}" + dest: "{{ nomad_ca_file }}" + - src: "{{ vault_s41_nomad_cert_file }}" + dest: "{{ nomad_cert_file }}" + - src: "{{ vault_s41_nomad_key_file }}" + dest: "{{ nomad_key_file }}" nomad_datacenter: "yul1" -nomad_name: "s40-nomad-{{ ansible_architecture }}" +nomad_name: "s41-nomad-{{ ansible_architecture }}" nomad_node_role: "client" nomad_node_class: "builder" nomad_options: @@ -26,4 +34,5 @@ nomad_options: docker.cleanup.image: false docker.privileged.enabled: true driver.whitelist: "docker,raw_exec,exec" -nomad_servers: "\"10.30.51.32:4647\", \"10.30.51.33:4647\"" + fingerprint.network.disallow_link_local: true +nomad_servers: [ "10.30.51.32:4647", "10.30.51.33:4647" ] 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 2eb2dfc88c..ca2c7ff5a6 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 @@ -4,7 +4,7 @@ hostname: "s39-nomad" inventory_cimc_hostname: "10.30.50.29" -# User managmeent. +# User management. users: - username: localadmin groups: [adm, sudo] @@ -18,6 +18,13 @@ users: - "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAgObJFDIMmPwQhhkjAynvlbwpM5yeSewyaE7vTLaFf4uFz4vmsE2hFf6B2xXHUGLVwoVfk91UeK7LOGrdDpoDDHzvPZXj5NmZI+WiWax5y2pQZNkcSZws0ENCeEc4hPwc4veJ1JmhokF4Bsmu14HyFMaFUhM8897jtJwsh+9fLA/no0iPGaQqEtRUQhkV+P4jCEPoY0qdRZAzVw/rY4EGAMhsJe3EJmyj63OfrrkG3+hvSLFo5pDxHQr3pZd/c6ukI7xMef48PosAvGCm3oxzb/Gu9PZIGuHLczY+tCnzCkY7MO7E+IWgjXrUAfYwSWz8XmFmA9LLe26DT5jkcK8hGQ== pmikus@cisco.com" # Nomad settings. +nomad_certificates: + - src: "{{ vault_s39_nomad_ca_file }}" + dest: "{{ nomad_ca_file }}" + - src: "{{ vault_s39_nomad_cert_file }}" + dest: "{{ nomad_cert_file }}" + - src: "{{ vault_s39_nomad_key_file }}" + dest: "{{ nomad_key_file }}" nomad_datacenter: "yul1" nomad_name: "s39-nomad-{{ ansible_architecture }}" nomad_node_role: "client" @@ -27,4 +34,4 @@ nomad_options: docker.cleanup.image: false docker.privileged.enabled: true driver.whitelist: "docker,raw_exec,exec" -nomad_servers: "\"10.30.51.32:4647\", \"10.30.51.33:4647\"" +nomad_servers: [ "10.30.51.32:4647", "10.30.51.33:4647" ] 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 3aed1c8b52..fe96d08bc0 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 @@ -4,7 +4,7 @@ hostname: "s40-nomad" inventory_cimc_hostname: '10.30.50.30' -# User managmeent. +# User management. users: - username: localadmin groups: [adm, sudo] @@ -18,7 +18,15 @@ users: - "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAgObJFDIMmPwQhhkjAynvlbwpM5yeSewyaE7vTLaFf4uFz4vmsE2hFf6B2xXHUGLVwoVfk91UeK7LOGrdDpoDDHzvPZXj5NmZI+WiWax5y2pQZNkcSZws0ENCeEc4hPwc4veJ1JmhokF4Bsmu14HyFMaFUhM8897jtJwsh+9fLA/no0iPGaQqEtRUQhkV+P4jCEPoY0qdRZAzVw/rY4EGAMhsJe3EJmyj63OfrrkG3+hvSLFo5pDxHQr3pZd/c6ukI7xMef48PosAvGCm3oxzb/Gu9PZIGuHLczY+tCnzCkY7MO7E+IWgjXrUAfYwSWz8XmFmA9LLe26DT5jkcK8hGQ== pmikus@cisco.com" # Nomad settings. +nomad_certificates: + - src: "{{ vault_s40_nomad_ca_file }}" + dest: "{{ nomad_ca_file }}" + - src: "{{ vault_s40_nomad_cert_file }}" + dest: "{{ nomad_cert_file }}" + - src: "{{ vault_s40_nomad_key_file }}" + dest: "{{ nomad_key_file }}" nomad_datacenter: "yul1" +nomad_encrypt: "Y4T+5JGx1C3l2NFBBvkTWQ==" nomad_name: "s40-nomad-{{ ansible_architecture }}" nomad_node_role: "both" nomad_node_class: "builder" @@ -27,4 +35,8 @@ nomad_options: docker.cleanup.image: false docker.privileged.enabled: true driver.whitelist: "docker,raw_exec,exec" -nomad_servers: "\"10.30.51.32:4647\", \"10.30.51.33:4647\"" + fingerprint.network.disallow_link_local: true +nomad_retry_servers: [ "10.30.51.32", "10.30.51.33" ] +nomad_servers: [ "10.30.51.32:4647", "10.30.51.33:4647" ] + + diff --git a/resources/tools/testbed-setup/ansible/roles/nomad/defaults/main.yaml b/resources/tools/testbed-setup/ansible/roles/nomad/defaults/main.yaml index ad8b36ee66..0efbc6af5a 100644 --- a/resources/tools/testbed-setup/ansible/roles/nomad/defaults/main.yaml +++ b/resources/tools/testbed-setup/ansible/roles/nomad/defaults/main.yaml @@ -64,7 +64,7 @@ nomad_name: "{{ inventory_hostname }}" nomad_region: "global" nomad_syslog_enable: true -# Conf - base.hcl (TLS) +# Conf - tls.hcl nomad_ca_file: "{{ nomad_ssl_dir }}/ca.pem" nomad_cert_file: "{{ nomad_ssl_dir }}/nomad.pem" nomad_http: false @@ -84,20 +84,10 @@ nomad_no_host_uuid: true nomad_options: {} nomad_servers: [] +# Conf - server.hcl +nomad_bootstrap_expect: 2 +nomad_encrypt: "" +nomad_retry_join: true + # Conf - custom.hcl # empty - -# Conf - server.hcl -#nomad_retry_max: 0 -#nomad_retry_join: false -#nomad_retry_interval: "30s" -#nomad_rejoin_after_leave: false -#nomad_enabled_schedulers: -# - service -# - batch -# - system -#nomad_num_schedulers: "{{ ansible_processor_vcpus }}" -#nomad_node_gc_threshold: "24h" -#nomad_job_gc_threshold: "4h" -#nomad_eval_gc_threshold: "1h" -#nomad_encrypt: "" diff --git a/resources/tools/testbed-setup/ansible/roles/nomad/tasks/main.yaml b/resources/tools/testbed-setup/ansible/roles/nomad/tasks/main.yaml index 9093afd08e..fa95d645fd 100644 --- a/resources/tools/testbed-setup/ansible/roles/nomad/tasks/main.yaml +++ b/resources/tools/testbed-setup/ansible/roles/nomad/tasks/main.yaml @@ -127,6 +127,16 @@ tags: - nomad-conf +- name: Conf - TLS Configuration + template: + src: tls.hcl.j2 + dest: "{{ nomad_config_dir }}/tls.hcl" + owner: "{{ nomad_user }}" + group: "{{ nomad_group }}" + mode: 0644 + tags: + - nomad-conf + - name: Conf - Custom Configuration template: src: custom.json.j2 @@ -158,7 +168,7 @@ owner: "root" group: "root" mode: 0644 - notify: - - "Restart Nomad" +# notify: +# - "Restart Nomad" tags: - nomad-conf diff --git a/resources/tools/testbed-setup/ansible/roles/nomad/templates/base.hcl.j2 b/resources/tools/testbed-setup/ansible/roles/nomad/templates/base.hcl.j2 index 0e2b60c6d4..7badecf9e0 100644 --- a/resources/tools/testbed-setup/ansible/roles/nomad/templates/base.hcl.j2 +++ b/resources/tools/testbed-setup/ansible/roles/nomad/templates/base.hcl.j2 @@ -9,16 +9,3 @@ enable_syslog = {{ nomad_syslog_enable | bool | lower }} enable_debug = {{ nomad_enable_debug | bool | lower }} disable_update_check = {{ nomad_disable_update_check | bool | lower }} log_level = "{{ nomad_log_level }}" - -{% if ( nomad_ca_file ) and - ( nomad_cert_file ) and - ( nomad_key_file ) -%} -tls { - http = {{ nomad_http | bool | lower }} - rpc = {{ nomad_rpc | bool | lower }} - ca_file = "{{ nomad_ca_file }}" - cert_file = "{{ nomad_cert_file }}" - key_file = "{{ nomad_key_file }}" -} -{% endif %} diff --git a/resources/tools/testbed-setup/ansible/roles/nomad/templates/client.hcl.j2 b/resources/tools/testbed-setup/ansible/roles/nomad/templates/client.hcl.j2 index 91fd1c947f..c097d214a5 100644 --- a/resources/tools/testbed-setup/ansible/roles/nomad/templates/client.hcl.j2 +++ b/resources/tools/testbed-setup/ansible/roles/nomad/templates/client.hcl.j2 @@ -4,7 +4,7 @@ client { node_class = "{{ nomad_node_class }}" {% if nomad_servers -%} - servers = [ {{ nomad_servers }} ] + servers = [ {% for ip_port in nomad_servers -%} "{{ ip_port }}" {% if not loop.last %},{% endif %}{%- endfor -%} ] {% endif %} {% if nomad_options -%} diff --git a/resources/tools/testbed-setup/ansible/roles/nomad/templates/nomad_systemd.service.j2 b/resources/tools/testbed-setup/ansible/roles/nomad/templates/nomad_systemd.service.j2 index d0beed24b8..7652983417 100644 --- a/resources/tools/testbed-setup/ansible/roles/nomad/templates/nomad_systemd.service.j2 +++ b/resources/tools/testbed-setup/ansible/roles/nomad/templates/nomad_systemd.service.j2 @@ -1,5 +1,6 @@ [Unit] -Description=nomad agent +Description=Nomad Service +Documentation=https://www.nomadproject.io/docs/index.html Wants=network.target After=nomad.service diff --git a/resources/tools/testbed-setup/ansible/roles/nomad/templates/server.hcl.j2 b/resources/tools/testbed-setup/ansible/roles/nomad/templates/server.hcl.j2 index c28a43c5d2..b581de9ad0 100644 --- a/resources/tools/testbed-setup/ansible/roles/nomad/templates/server.hcl.j2 +++ b/resources/tools/testbed-setup/ansible/roles/nomad/templates/server.hcl.j2 @@ -1,4 +1,16 @@ server { - enabled = false - encrypt = "Y4T+5JGx1C3l2NFBBvkTWQ==" + enabled = {{ nomad_node_server | bool | lower }} + + {% if nomad_node_server | bool -%} + bootstrap_expect = {{ nomad_bootstrap_expect }} + {%- endif %} + + encrypt = "{{ nomad_encrypt }}" + + {% if nomad_retry_join | bool -%} + server_join { + retry_join = [ {% for ip_port in nomad_retry_servers -%} "{{ ip_port }}" {% if not loop.last %},{% endif %}{%- endfor -%} ] + } + {%- endif %} + } diff --git a/resources/tools/testbed-setup/ansible/roles/nomad/templates/tls.hcl.j2 b/resources/tools/testbed-setup/ansible/roles/nomad/templates/tls.hcl.j2 new file mode 100644 index 0000000000..650765f1b1 --- /dev/null +++ b/resources/tools/testbed-setup/ansible/roles/nomad/templates/tls.hcl.j2 @@ -0,0 +1,12 @@ +{% if ( nomad_ca_file ) and + ( nomad_cert_file ) and + ( nomad_key_file ) +%} +tls { + http = {{ nomad_http | bool | lower }} + rpc = {{ nomad_rpc | bool | lower }} + ca_file = "{{ nomad_ca_file }}" + cert_file = "{{ nomad_cert_file }}" + key_file = "{{ nomad_key_file }}" +} +{% endif %} diff --git a/resources/tools/testbed-setup/ansible/roles/user_add/tasks/main.yaml b/resources/tools/testbed-setup/ansible/roles/user_add/tasks/main.yaml index 8323284261..f980aff84d 100644 --- a/resources/tools/testbed-setup/ansible/roles/user_add/tasks/main.yaml +++ b/resources/tools/testbed-setup/ansible/roles/user_add/tasks/main.yaml @@ -6,7 +6,6 @@ append: "{{ item.append | default(omit) }}" createhome: "{{ 'yes' if users_create_homedirs else 'no' }}" generate_ssh_key: "{{ item.generate_ssh_key | default(omit) }}" - group: "{{ item.group | default(item.username) }}" groups: "{{ item.groups | join(',') if 'groups' in item else '' }}" name: "{{ item.username }}" password: "{{ item.password if item.password is defined else '!' }}" diff --git a/resources/tools/testbed-setup/ansible/vault.yml b/resources/tools/testbed-setup/ansible/vault.yml index c2dfbc9476..fd95965595 100644 --- a/resources/tools/testbed-setup/ansible/vault.yml +++ b/resources/tools/testbed-setup/ansible/vault.yml @@ -1,401 +1,494 @@ $ANSIBLE_VAULT;1.1;AES256 -37383464316330306537633837623331383864353039623636613630623538346261306366316563 -6566663934656231656464396231336633393361323332640a663864623739376637303066393665 -35343837306337653834396663666139363535313662376262366463316435666261303662316230 -3830336532363861330a306138313961343931383438363663323162356166636461306234303165 -64656563613034333139633234326165323231346366323030663137393330396231666531656539 -34326263666435656534643664396661366330383466653334323239653533346266363866633436 -30633134313436623631346139393737393266386139653665306261643732383165363364346264 -31336161633530653731633530366633663161356539663563643633666361626531333639303134 -65393665383265323632366335316166653935323632366662613133323130363665663835393236 -32316530663333353436376637336534333431303739653535623766313236373261316339646632 -66333735366363333934353464343366343661396632353932396564646435613033623030646331 -37346137663765616231376266373764613331663131643266336538386262643762383533666665 -36663237386363326234623266643465306366353863303564346632353237636462376663343938 -65643566396639646566626330376138663830643434636133363637616635623733383930663564 -38303863336339303861303339363433306331396466343434323763336165666434316633363731 -30336234343166643964663362363930363331336436393863646464346431663262623731333532 -34336130333861356238346565336338663339653461386566383036613139363562356532666562 -32303331626536386263653232623230316262633632626462323034343136636137666662313962 -65613462643932636363343635643534353664386333313363396261646563653836636638653134 -32303239643032626136373833643838613862646538633234333062653063643962373132653330 -37646633303337333561333832393661313333633139396662663036613565343365316431633162 -64373462656362373161356332383033666261333861333637323436666432363663396163373534 -61343630623637313937616137666363643933633261383163643535396139386336623235353261 -38373263653637393130303762383738386339633162303137643332333137363338306132383566 -65623839653739316538613961376138336437663466343836643762653762373036316234393564 -37613565303233626139336236646265356337383436363664613935333064643064663261356435 -61316663373939303038633434663833393638393732343836333334323634646430646361626139 -31636364613762363937663763333339353263333530643761376631313861646330633366623763 -38313633373736613939396635666232373163313239633336663636353261393731383364316265 -62386365303761646339383434663331306364666263666532353836613161393532646538333362 -34623963653866613365323632323332323432353437336362366238316239663563616535326264 -30363132613339613933356634366237303064653235633039656239313738346436383738353030 -62616237386536333663376538353839626137343338626334373634663339303864373564636435 -31316133643962306434323234316532376562363133333164663237313164633633663236373334 -33613131656239336338623636373334363130346363366436626237366662326263646630663564 -31353762373430626330353836643266383433393064636264623234636264306331306264623266 -38643737323263663836393261643962333762363932363832623531623866623766646166373565 -66306535366230633366366437393536356130636433613264326163303663316332663135323966 -35383662336537663464653135336638626530306139363665343631656565653161346634316132 -62336634336666383335303930623837643638666364633464303536623634666636373961326366 -37326234353336646533346631353166303132633835346361393337316433386330373931323962 -31663830643664613631663561333638336635333636663937323038313830303163393364383438 -32346434653732653630316531646334646664346330663762353135336462643431623665346633 -65633539333935633465653861316336343339346138383565373830626630326564366661393832 -30303930343735616463613166333636396665666262616332646135613731346330623139616666 -34623861643162393062613537643064633532313234653535643436623632326537343866616164 -66626631353539666438316663323765353035396666373236636235373566356561663331633334 -31646337343061663565373461613761663437313338303464313866643737353162303863333837 -31666535653137363461636331356331666535643339666135303232626631613132366230393333 -34653131626461393236666338363262376133353535323165303531653535653732336235386232 -61386238633064623230316465376233353236346465613731653437323835333136313165643262 -62633065356131396530383263343838303331383836303261343763396635343234666664636531 -65643138333831666432383937336265376566333862623363386163333464363961353430336239 -38633664623464326163656134393364656238323139343038356662363766633333613065346461 -65616565646262313766363064613333666135373263643566343435343032653964626566323962 -34623633623938373837653062376362373431663937643833633563663538386561343863366236 -35663033356265393465633934346436356561653136333835346339353236343638316430623434 -31616431366633393031353433303365656438343635363634366361383030633133346264356261 -61656530313932303434306532373930366135636633373736623664386639353763333634653531 -61613461373732616333383965323063313039383832616361323336643230633765353062376633 -32633735376534316262316265393465616231303634656539343261633533313263323262323536 -32353039613164323761386235623664353162653338313962303465663534623762353238653634 -36633734666532623436353033663030633437626131663639376364333364343263326163636437 -35343535336232613861363334653262633936383138313937346236343538313237323230626465 -32613439613464313432653861613564353838386137353964323761306636383061363532346232 -62643735633939343064333162303764353533353562363938353363313266613231653964303330 -36396533323435653765373564316661633066373363323633343234653165623266393730333032 -38353334353030396165616263336335643463343565343762646665326636656232656166373665 -30346165366331386430656637633063666663623362663633643564323933376633623733313038 -65303338313161316431636563623335366531613862363930396536616161636132353930303035 -36326532653966653766366338356562323036343637376362313133313039646533333264356663 -39343464616435666330316361613835626639643333376465393931653732636636326266316463 -63326233633362636666313730353030653531613266653734633163613937643462656138346537 -66646434313332336436363633346438313866373837623838303238633233653134363465623130 -37633838653061626430313934666561323361366365613766373232323663643337333735333631 -30653534616230306139343530666665663962326263323465363035363932323735376636633639 -64343136303366313465666363666435356139366537336231326665386130643532353864383663 -66316232633463333739663537343837653835633363653737386262316538306564353363366238 -61653665346139316137306136363666396461646561383233313436353065333864333162353765 -66663936376535326236336261326235343734626139376136373762306465396232313538393633 -39356137643433666461306534343030626235306366393662306232633930633735646335333538 -64613037303939333630636135316465666335316233323363623730323938313065626466363430 -64383037316234343066636337616466303261323166396665373466303465356136313861623163 -39396532323832613461383831663139656339393932323232663639643339373961613539646565 -38306162396163626531346265333066343462633161326666346430356662306665663539356632 -63346662396337363036353261343035646332303062366334353438303136366538613032643632 -34316335383537333165386561303536396630386535313231363537303533346133343964343135 -33653831323032653838306231323862613734396464663161363764346238646237643365643664 -65313065613330363161303864663164626563376331313165393236376531343962383139333830 -65613631656233383261613861373538633230653436353962333162663165313264636135323330 -64363461323730316634313766636533363131383238616363366431633330376333303737663966 -30316163336361626133373165346231613461626535333432653835616664313536653863386430 -34393238396366303438653831376634653839396531313936663230373336386137313934666563 -34383030623739656634386632303033316133333734656364613131353230343639373630313138 -39373830633161656265633032353538343331663535306535326134646664393736623563393563 -30663036643037636261613633636439646637333230383237653238373264353134333838333839 -35366239616339353031623565613237366230663732633530636266393965316130353036383064 -39623238626337366437396630653764376133323130323234376561303734313732303865323830 -64643161306233633766613231346365653766666132616466326534383862333162666437626237 -66623234616266373139633635333931313631356138386431663563633833316138346633383137 -35343334383337626635306664386239653764373138386563333061626435356338323761336331 -66393430636133396662326666303832336162366166326436353834613034663639323531393738 -65356137373334353837663234383338323634306162323533353930303762646639323639366231 -33336533393731313431306165653963303736393264323136616437386661396438623237373165 -32646337336539356431336530373566656631626161313864306138613933663436333966636236 -63373530343337363334656637363436323039393336633736653537366265626237343434313834 -62303537663436306538356638323330386265626563333638353661336530363136373236343033 -39363165383464336661626632313866383037643332393265316632313435383333626239356332 -66343863366634643836636432656630313639393764346639333236376232353436663362363761 -61626637323865656431333830343239636536653538313432393235323563656539666532306433 -66643730613237613936383863336638303064356437326536373764326230363439396332366136 -39623762326638623365383064313861643933373564663134636638343166643839393363626561 -62663466303732613932626236393131663730643166613964376639656433333835333130633830 -30363634323961383765656137343663383633666233393230353032633064393062326539306537 -38663365623263343262326238636331333034303533633931353335656363633866663162373735 -62376435336531653230653033636235623864303438626130623464653838663261353338366233 -66323865363436383861663735616335353337333462336265656134633036616130613031333139 -37346433653337303164376664643431636638333336623832376463373061386263346439366236 -65653163363964386663373836653566633632393632663931336332343330626539323963346332 -62623865383434326333373532383063313335316131353262653031626664323332363162383730 -61613463383263333264363466623836306233653064633637343736393437633733613434636261 -37393962633265623432636661323739326462313339326266313736636130376431656530356236 -36373531343964316661633164313164316231386366626462626164303361623833303937343961 -36353834323931323361393433313633333866623435303931346665306134623435616235343365 -65396462636237353832313562393831363733393566613233396661623434323763623930316137 -65316434313935393932326332373132313938633237326566636437623763616131343237383338 -64356164373737383436373733616461343035333130356362313334393861346166326532663539 -34636161323862636435343663366662306436316463333331326332326236323066343430396664 -31653363366330303737323063373939626662356433623139626432363866366465633165353832 -66616163313433633266373738643963323438313832316238616464373432353434663431653833 -37663734356539333735373666393836363332316538663330336136333262363262653961336536 -34313636336434646663366163666365386362363835376361653361333437323331313863663837 -30333832333435643630653438633465663033343662313236306632643435323332363663373339 -63613031653261636630383166393033396665363333393238333438323137613435336430626461 -34613434363733363933343431363864643562383932663162303361663965323035386135303134 -62303935396432343466656662393332396136323363633362666530383962366232366365646263 -66303766626565333037336364363934663965366565663839396530646132646239626165663563 -61353461373565333232343763653461353362383536383035616562643465346262333835303330 -38396363396662313734356337363535343562623163303532383361656565626465623633343538 -32626664333461326137393036313666353832623264333238663135643033343861313737613632 -35363832306363626535316564326330393032306531333836323361656462303137323765663737 -64613230356433366561333636363630663435366234313730376538613134393765303438316364 -33366535316366343833393238303239376662356231656138306664323930383139393434383836 -34613130363265366561633030613862376338373730653561623236636232333535626335346138 -63613638363565623837386261623838363539363062316336303335383836386565343963356439 -34343562353765316365336564323434666639313634393332633765613061636665383965303830 -34656466656165336662663231663361303166393736323461333031613433613532346433343565 -38366632653666643038633634366537346235303866386235356661336235646665306335303561 -34613561623336313739633764666661616130383537396566613433366166316130663735636265 -36376436346461346331383361353462376633623063313334363130653930663032373531323835 -63303564366536613330376136643130663762366231366162323538363432633834306365313333 -66636337623739623132373137643531356162353231636365386533643337366661316666653838 -35393635313036323233656136393231396633316531646265626562363964383464623532663437 -39336434373562363165363230323064393738656338383633366166623963366630663932343039 -32613866346563313835366534626433613633383132393763343037623066393965666634363366 -66333261363762303732626134366335363933303162373733653266316338626330613833366636 -31613832343836363038353433343338333262313164343034303738303661623964633830363462 -30303339636534633034323331303864373132353838613939643734346661636166346334653034 -39303063356634333332356638616364373362653034396139356139376566326338663236336332 -35376330623237386434633963306238346361323236336565393964373964633336333334316163 -37636636306531323131393334396537646662393334613766393837326566363964316434653838 -39383738356234383232613132316164656535393637623139656434363862366264366237396533 -30383161613439313335396531353264343066383662616239343165623236313736373861366465 -30626464303634393539353763633333386463316266643763313363326462306136343164313839 -61393963313433396663306435653134363038616161373632623732333939336261313464356161 -36326638343963613566646435653731643761346533333337353766323534616535346335313964 -34663330626532613432343362306630383663333531383961613562366334623836626361363966 -65353136393932343264323533356330383937303435303830336538653634666439323833303932 -35363431343339303961393237326130643861326134633466343537396638646139363034616661 -35613033383565303036306138663733653839376638333063306365393735353235626562373932 -30343964386633633731633038393834373233393562393933636634613832353631323831393062 -64303236326463373766653334663063333039633335613134353238386165656332353166666361 -37313063366333323730303664616530393962633036656462376463663034663566393934616430 -32303363303833643232353463663937633938383465653030333362306266616465363062343334 -37366664616333346134353839343136356266356135316336373361343166613963333631306130 -33663235356331616236383038363164326430323530663432666134353035623665626539363962 -64336164653661636139636263393264313437313739313763356135333766646335626539613738 -37656333343462376538323836663437306333636637396430373036303965323137653165343436 -37616533626431353764306633386331386637366464333437356134646262396535653837313561 -66303064366533353238663530353266636631363730623034633862306538396464353332613063 -30303336313435616430396361383166663433633137356539393265343833333535636565353466 -66333665646135616361636265366165653865346136306436303131376265306566666465303835 -33303237336134396562366434323862323762383139376561353865363866306538316238633435 -35366431316333396135373830636665386461643235393732623263636331643234666137336461 -63613462663836336161366364373437356232306134356432323162636565333837613733373536 -38303432313337346431376364303464333339623134343330313630666635313162303466316262 -35643236316465653538653261323131323739343032646339663463343365366235636338363763 -39666130383562333439306466653435313766663238386231383962626566636533333265376133 -30326464643232323262373732393663343930393265373532356139333230313637653531393338 -61383334656539353738393832316239306265313931383666363532363136386230613537336661 -35323234366639343730623732353433633137656563306161616463323432303061353365383632 -66643732363165653138633638323039306531646362353131336133663964396361323830623236 -33643733613436383331316136353462366166653236373632656162663138643337666436656530 -64633833393538393333623465396232653330613562323562636539313166613664336236646363 -62343236366466363633653766373364343762306439656262366430366139343937376637643538 -35336330383730393738333165313663323564333134333436316131633936643035303838386262 -37306632643732343734613334353463383362646364333861363935303262656634373737326431 -36386466663633646438383364336634306532656234356334393161623264383336663233386634 -36306636623035613532336562343461633166313262633434393636666362366566316566366532 -37616362653364376165373764656263316630343861326131343636383965386666613165346264 -38363338373334393536393165316337333230656664336332646635633237333835343837363263 -31623231336263363036336331383936613232356138313830336439353932326437373935306434 -33633138663631323566393130366632303033643236373134383838333432643736323265373434 -30336433383439353662653438393231316565393663656338633564346661343838366231336666 -65363735383663323732393639303834623962353230346530393532323761656634363131383230 -66306261663538633938313363643636616232366532366435323833626535396138353233306462 -66646434373835333631353932626436616665313163356235333165393432353864653262636466 -33313864363563623666363733316261303233623331353935303538336439336361383732383036 -62333830383966643964326339663437303664326266323266353331623364303231646161376638 -63346138343462313033663466613162343263383633343962383764316336343336636335653164 -66316363396336306330363937316362393863383934303837316561333138306139653333333434 -33356261613838383634633733326234303736366163316638363539653738383462393636646437 -62316236373439363735393566353065636633653534383665363433333235333833356138363566 -32363430393563346239396264343162663233326134643964626662386231316566363565313566 -62376462346166613934396238646263643431623132313566383538323336336162636439613135 -35643266313264356135373262363766613765653735333634313835393861383163353234663738 -32646237643664626266356331613932383034333038366230356266633231353930326161313537 -33666663616565346639396436326530356539356464383232333863393932306463333131336633 -36376530313865373062303638333364393964666662623062396636313234643937373332393061 -32663565313361386232643831373834346436373063633734623136613337336561346238333233 -61376562376234666639616662316237613965336539633438313833396632353166656664376630 -31353266386439376263656235643463396133343933656364646664373262643365353634363635 -65396663653961326463653833323263636363306666653632306637383531383431376364656530 -34346462373330336434326338346462323734366235656630373666383336396234363965343630 -30376330323562643137326562616338376537623334396462313764356363356337393834626632 -65363735383565626636306237343161653334656233653464306164376666353830303537386264 -63366430396635633639363031303464326435303138376561333338653564383065313865623664 -61346664646639353035643437626235643432656663323364343338323961623837326663396135 -39616265633933313465363331613137333563373434616236326231303331303735383330613532 -66343366666234313238626535633666363761666337653339616635643263623435386265643261 -38306239643230653836656134646263646265323936326462653337343066613163383062356336 -34356530646139636631656338613331353131353830626365633532653464386365323762326334 -63653531643763616162623431353535333665353733643935313737343638323565393735353637 -30616538343332343461343833343030336365333566623964333830343465383664316135643364 -65366230373837346130653864636237303464376537373632666236356539383736326166663461 -65626661616235653538653062326264666265623739336566316236643963656464653237326265 -34623537336337643266383438626233663733313435303736316163653536326436656638333431 -37316639313965306235346431613536383366613362636266363563373766633063633961616332 -61633138373939626234333264393438393337636364636233643932376466393661333532396333 -30373931613938623931613036623336636638316461643438613963643462663337383630643932 -66386366353239396234383736333331643961663136623438333164656565393537613765343161 -64633235396661363534643963393564323932616133623737396132613862373639383064393232 -65363363336132383966656635313033303034306532666230326234376437316239393035646663 -39386230623639353934326533303864633863356436626135613139346439336131396639396261 -63363664333866356163666637663732373237383431306634356166303732326132633463313063 -62386432336361663237333963636533633565613538633334306434633239383932343365656435 -35386161646637363234343739623230343765323131653861303438393466613635333535343465 -37313761663637303039343762653861396337363132633535363866376637313263326432643434 -66363932333735613462343331303939336539313530373730633835356466356561336339306564 -32383031383931613266643538313534643334613331623438313130353438383133336238373237 -33633561653865633931353664323865333965633363666531363931623737346336376636626133 -33373566663262363735353933396563356165663962663036373461333131636563306365363731 -37633339356263366335303930373530623938373232393365663433613836303837306330643634 -34313631623336633161313830306633616537333137313237363266383934646133633835353232 -36353935363765366262363061363131313063613930376631613435313339353662313632356564 -30313064336439663837376437393738643339643166366335383131656233353263633035383233 -66366161393232316361306332353435653764373064383462333137313532316166393339333435 -30343062386530363835386530316634633934323239326161376530616131663937646339353437 -36623334386438363839363161323166313338353037333234613939613762313762663761636530 -64643830353561653732303332376233343535353832333632373864616334313566626238656366 -65323233363661643339363133303930306432663861353264373435623237626130383232313434 -61356263303433373566373864616537616431383037306230356139666436633439376237626531 -34633362303566626261346237353036626261623964353563336566316266623664343866386238 -64353536326534613539396136366338303230306236373531383935323230633938303438376664 -30636238633430626563303031363665616433386162366331343439333034643537303135653532 -36636238366261313331663065656233353463643062373132376637353935626365633635363366 -64656635373233353131653430633131346132353265383334383230333630383338313365356331 -38383663313461303639613963356134366665356634346630626361653966396239376334356335 -65343530636230353061343063623162616661636430653234656433626161346133316138373033 -38383731376562633539396261626637653337373232626638643836613563326664333165653231 -36353466613937623832353038323034623935333438656661323232373031653834636539326632 -61393137636265343337336564323763383435343730666439623536323364613332343962393433 -30356264323461326565393437343037616630653237363434623831626437663937646235373066 -38396164643934356636323065393937393265613464393738303735376537646232333333373165 -34346535396634346338376564353239623434303835306230343730613335643235306534383565 -37666234363031363463633039366639616161343032653063303234336432343839336433323830 -38316237646632303761656633306665393361376330393839663432353439303730313335653365 -61343161646364393332316534353135366639313063393137303239383332376362303131353566 -61376130313739346566643433353362386164393034333161633834386538366563316534636436 -38636136306239633038393037643865363337393164633066326463613466383937663232306433 -36366136376235383935323761323362356561313731356262653364343265323938633464333134 -35623237343466306530313834356130376635396163373365613734373161663964633535663362 -39313338626662343231366462646633613136616464373736383339316561383765333463333436 -30363535336363386239626161663939346639643061663861346130373535313234616636323965 -37346465303532306434303662623164363830363633326238343565646331636636636437393536 -61633539376437623434616366346439616266343666653566633664646230316239313866333162 -37306665633434663064383430363361656432656361633431633931646637376561333164643165 -36303039323239363865323737626636343364323932306366626336363234346635656330643734 -64643133303539393061366236346436663966323265353539316166353861333635663530366563 -65646132333035666163303562356438333735663863613738653232613739323432633165333964 -65613834653865376332303566386237343334326438353138316532396232613031393764393139 -35323966636633323764356135613539393066326430353631353964636563643132326137653033 -65616339363861316132316338356230363538663765353063323334366465313362373139333233 -36396432376131626666653335336637396363633266323630636632363665366533636634623861 -66623736623433316138376364636463643063316532396533326137336564323933616363616338 -62323761383036383734303035656432663765303638656264373235313937653132366330636639 -62623437333838303536383437333237343562366237316534643336383161626532353262316461 -61383632326536343631666535396661613233346265373063376562333162666135393265343666 -32373532333465646233616237653561313739366462313832383431313430306134396533643737 -62356262626137646566396262643334343664613932663033366233313662313033323836343565 -34366534633739633131376330373431346232373739343634383836313233343936336366313035 -38376434613865616636376565343065343832313834343030653463386261323766303232313636 -39643935663063613865646131363531363533333365326635396161313334383230623266313162 -33333837373038623636313965623131383162303338623630343632616161333232306131383035 -66336165613862383235386330616334316139626336326262306264643461643261613038346333 -32636435353465653065326430353835333633643362303464383935353964363237616563663338 -34613361646437373939323633346233373735326363653861313661316362393832653133383162 -32323665653662616631346335386363646231616639653533363936653535346530373338663336 -31393236303761323335303038623939303434353865303830626436343237666535646161623866 -36323132376536336239306166363330313730626530313932316662373535313334393234346235 -33313564363434393537613261333831393133353662346631303738363430353565353666366235 -65353665363438356136393936646639353332623031616439303839613266373266663266373562 -65363134323962613837663435323966343965373738376330623039396663356336616664313139 -38373763333362633766303436396239633761323032393837376237313161643232373461313163 -62646531303066303138346136346536313264356330396332303366383963333834396535643136 -30623661643438383234393862353464313365313562393132626334633364613366656361316237 -34353335356433656538303538376337316436326461613130316630363132656534346462303330 -63356330376566363831386232626262313139326364353866643530656336623134336662393065 -33666636646462366635353630623065326161313831303933316362646137393538336537623161 -66353661303034373036386436383562323331666334396236346334313932346338343634633431 -39623330653765303231383439393434616338343739386536646435343764616366306335316338 -61396563306532306131663863316236346531623264376132643731613532613531333265666438 -30643134643837633966366139313138663334636438366433616466396561373731333763393436 -37643230623563303532333262333031626633396636353332323562303762346236653561356135 -62303637633466666130636431336230333733613061326263383338323664326662616561393033 -34303231343735643564636364373336666136336465393037663863366537663266343563643436 -33336432613839346266636366373463663563356336633538643963636431323261303361323834 -39616365396335303238666533366233663461393837646265396433626464323863373463366439 -63643930616361366632333462613731363065306366386234353335653563393131336339383633 -31656631633933616637643439393737643862303063363231326231633834376138613766373565 -65393161613733353039656162323136653565306438376166326639323030316366623065626134 -36303736346638323732663539336263616536346233376363383130333832616635666138376432 -34303437373837666133623963393836346165343736656539633736616531613936386264643137 -63663839363932633961386363383865643132386130636433306166343463383636396639316664 -35326462663132346261626231383365356339346466376133336664333164346434663162633735 -33663230336138306365636265373462313962393037363864313161343364306332313735663938 -64663164643563346532643335313862653438666330363839346362353236363430656465386164 -31373461316534323036383562353035363532616366356262323033613237323334623665356430 -64663537643861383636353336626563396338386436383837633566646530356633643938366364 -65356230316261363633363566343633663631316563636364633661383163353633623933613764 -31373031376165616332373239353065616663386136303639663034386334643265336435353332 -33363836356639343336636332363662633764353532353266386139626566373239666339376638 -38323037366536306634636366336438656565383162623236646331336565363065313136623539 -39643036616465663734306239373965656361303039663337356630313439636661346531363561 -38656266323230653166313164323066323632336433343336346234653061646663306531396132 -62636466306465386530353066336439336162663562356233366630383738623732323339653036 -39306536323531343961616164343636626266633763376662396138363130313038356539646561 -64633362356332656637643339373831373935306564356533626338643433646537313564336235 -33316366343834343332306633353363366432643138343839646335653536373238316339353335 -34633731363833346438666564333733333034363766633831346539343238623165356563353934 -38396539356461636536633366326231366364356666623965306234346238353834663233376236 -66366630376537653563316263346330616634316466373861393736303661373338393066326132 -32386337363064333462396535356662323161313437653232623932613265383530303330613535 -62616135363866363664616130663738613130303866373661396261346362323262623239333135 -63373330316535613166326538366664393565653761366536656266656362323838396261623261 -37393534333262643663313233666335623835333135306539353034333733626163393631333037 -61386665366233333032656331656264636539353034643634663533613038323364613233343034 -35346636373263336266303864306635343064663062313730383661376137613331316634383838 -64303461613961656631626236383330316663326231306261336563303638326163333064643738 -38396465643934653237323864633931653537366163353136313766323831323066643962306335 -62323965613466356632636530383838363935643236626362316631653839626461313736656138 -62393761393231366564386231323731313064396135343966373736353936333065636639623863 -39323431383635366237613661656437653937666631326366626539346234326435366464616231 -63613435373665353462653862646232316238393233386537623630396661623136326666303337 -34366237313761616162336139343935613537643164333465303865313361666432633565306130 -35613036343638643337366530373365393137396438396261656133393830636137343938326634 -30356662616330343864333032613037333062333538376263623933376339393465356534343339 -31663363633839363132303531653035383835393665636466653836313635386364386263623063 -39396133373439616434323631653534373163633261613432303035383235303739383138613465 -35303561633761616363663961613161663435303936313461396435376432343239613330616530 -39666534356437306536363462656535326337313433623334623963396337646530663961656464 -30646162653139336533623365343961316338326435653562316639326539333862373732346563 -31353265383738393531373539353039343339353134396439623636623738616564363934623063 -62363736326331633232376465363361636533313335373661613933313662383761616237633837 -61373364616462336530366264306665313565353134323538353332343261323863653834303832 -62616132386437386237356232373334356661383262386238613334613462343537333764326338 -35306464316630353837353462663061646139366533623036363461303232623830383633643534 -35336234326261656265623138356461396638356338373466366563393932633137623132303136 -33326336666439626233323961353563623764663332646165306335373938363738663939396132 -66636433313665333737306362326236366161343236643036636239333630373238353139373431 -39613235346632326133333465633138633531613233376430383030363764656538613831663331 -66396630363330366462633939623564366165396137373232373937313132313763626336373936 -63313262336465303634353066303864663035393435663863306366353365346435373862363738 -64316264366332363563306164343466646132616530636664643762386439646562373761656335 -37356239373265336630386636623733653537356662653066643338373735653339326231306230 -65353433363961363437303332373537343134356663383165623135393664373539633432636335 -61643831346234636661303833626265363831343762373933363337643635643532376635393766 -37326466376639663663616534633662336635633431396633313336643863646238373735636137 -64303861353763343463333530326432613533383565616536303035613133653566656262363739 -31383936666132613962333837353839316264376666313862626635313831346432373165326135 -39363231636634343765653039643933373161313965663130383165363835346137616432383937 -30363665633766636662343639636236376262333839383631643264333233393432616466633438 -66646238373933363435363362353730643763396662303534316266643130313332356163376631 -36663766636430356631613131656132396232313136646339393232623331623961313763343431 -38656239666465613566363037323963393931356239633130636666616139323462623835326537 -31353431323630623139356134663333333261333939343131633163306161653435323737613761 -64393466363039633632313533616338636335333134323230346364353139356533343135373765 -66343166393838643439306564663234623362313433613163323237353166626563363666373838 -36386432333335326665353435306132346434623230316234383537353263613638333935626431 -61663839663563303133 +36353431653863316330346433653430356332333666303435623562313930323864353038333331 +6135373262303030363431383134623539653933353630300a633662323839303764653833333062 +32366331333935323831396331313635663334663532613664633534633864646132313166333863 +6231306130336163660a383562643562343161336336303536633666353536646566306565626464 +65336337643437306664646231383530393836363061653639366665366361383163316235646230 +62316535353331623864386264646533393263326566626530353932323032313438363636393662 +62373937623162663235333430383334353035346333333135313864396263353631353563613238 +33623933366239343739323166323664626333313266633635633434383335303464353832336264 +36376235653465623430323634303135633833316565613161626638616463643462643662313830 +38653933353239393963396666313066396336613265303638633365626461373662623566636361 +37323762323663383561376233386639303639353835336335316539333638623438356364373061 +66303362653439383266373238643762376330396161636231386434653538353564633638313663 +38646539623438643934393562613138656262646539333735653932343530333863316339633465 +33336663633439363839393764306264343064613235333232616161366661646262383934623363 +36333937613034303131666636376137373536626665653737633130623331386265316536386134 +31376531303432643762663262383834343230633865343764636138326664393366396339343439 +31396437323836626138653137353537303836346563393938626265363164373732343635336435 +37666364643536333230663264313161363763353738323530373865396166643235313430346239 +38373637383631353232303561643238646636633032323039316464663864343264353638363464 +36313838383261303434363766333265376461616437356633383262636230333437336532323434 +32656665323430356338323866336332353237613638613330333130326665613135646238336234 +39646339646537646230623738356335343762303562396464383135386237363033626337353266 +36313939656161353737653630343636376137376637653834383537656235313438323636346463 +35383139376461346331373638313437653865613462646339626639633730666532313633326533 +32613965353838303835363463333363333735393765633237623964616365633264653730653563 +63373362336132313063356631646131663638383162646339306633356633396366383233363162 +64306364393833316132343063346531373265353333643263353130386232356364373366363465 +61363031356664343032363538323138663738353935323663323733313062303134363233326535 +31326461646463316561383832653731366165663837353266343935323665353065326137643066 +33636563386531326564333834386531643238303163336365306338333037326333353666643765 +35643365656630333164313936636432656531323564316266613161623739383937303464363239 +62336362643564656161386265303730643235343135323439656466383861646335373532383433 +66653661376631333436643239663730353532373837656630623665363734623132313138373939 +32346332633563636665343364623963623234373062346565333462306334363566666334656235 +30366430663264373330316565393434303966656430373633633336383339326635313539633532 +34663635383632396264333534653866303064303438316464646262333837343462633137363535 +34373465666362323130396633653036393834353232373833396435376535303037393133383563 +37633866353139653733366532666666373962306139366233323735383961306232356233393061 +36343163356339366634366562336236633937653039343062663032636530616666303739336535 +34366537326261623462623064373235656666386635623038616662343061646464333139633134 +36616361313630623438333861653535323464303533653961353631303031386136373965366334 +36646337373663366335636339643732303461343738396162663938343064353832323731643634 +39613862346531616164656332313466383133366162376235306565646238613637653335303463 +34326133353436646239643133316534623962323934363239383533373561343037623864666561 +30303063633431613830623434373135336561666135613032663662363738653464653138363330 +30653464313038363863323432353033633866616164346461653031313336306362393833656261 +34313436326561376330656462616431393637396632393165383630653437623562613863363161 +66303339376631313832353866323232666466633432326166376333313737656636313236336335 +64666139316338303630316635363330363234373663306234326535643838393933356235386330 +33383566393630636139646137386137633062663837656431313237666533336135636466356262 +64646161343162663735636131316635636463363735333661323939353765656134396338353132 +62393462313364386135373833663964623135343739633037336536373439353233316266333365 +63643065373762303965653661376334333135316362376430366166323635663966353630346163 +64633039356564666334383330653661383062346361653066363636383939363466646537623165 +62356436373430653530373630363736343139386434643364656164393938353666376535336336 +61346161333766363936303139393335346361613036393337646464386166396336383938303161 +31353030333466303865613066393237393837636265376333316666346139643565323839323931 +62363032646636653539653561343161336664373137643630303432653335353165313432303362 +39626138376335656630666438356235653135346437666166313964633762626234636632346130 +39363463376432653231613434633961343135313737666330613266346436323636633531373064 +62366665616561303839373837633538376466653133343037386563616530313161333937343066 +64633537393237666338663935366439353538613738316333663862646333666636633236396433 +35366465666261316130316537323034386565643432313264316264333863393163326561393562 +37313437386132623333623066663737623936373534373263326233623132316363383464663939 +62383637303830356234343864303161396135363233373332376238343630303539376131323362 +62633534643037303665643831323431633366373334376236316230653935396532313566323033 +30613061383331356461363933633762363439613138326632353065316465643461623762636439 +32366563643462353535373632353234383634636438653038626337313931633962316663366632 +38323162383234373232353964333730616239626463353233343361616231313138666265363238 +34333036333762633732343338373131313931653531303664323035613762626532313835363839 +34303530663639363965633234663861633139636534313163626165373337656330373666623561 +32653632613032333633336232383634616330656233383330303861373037643938323664613539 +37326132326566613266613838646235353537373438336431646433303262623036306133386533 +65376363653565353034346364633532366237643461653632356334656538666561366435656130 +37623937373863383830623766623462613638386161303338386466396564393039663361393838 +33326336623934643738396330643461386532393638373031646131333036653965303134393165 +31356632633638386233626562333266643035613061303164303236306664356633633630636634 +65353364353765346266623666326461396662316333363866383661333632303333623035373035 +66376237616265313034343337346563333461346338346266393933353034363662303533393134 +30376462396630333563633162363666393964333266366134643039343130633662343331636230 +33306437346637623731636361663931663762363263386230333237376234353837336265343465 +64343862613265653165633338373364353938336665393261316536663033643039376235653734 +64313361316536623762373864656336323730333230313536643930313038306539353063343530 +61333133313536303337643132363862346334323032336565313766623836633464376538656339 +31323365646430363230316139663937623837303031363766626334383766376462393234656535 +63303631373664393830323433326162306264373062366530346266393633646430373439346130 +65306265656238376239663337396533376337376438313736356365626566356566363466383762 +37373731393234393230626364383331323162333464383066623336306130343434383330636339 +65666633346266663962633564363862363737643733646433333239613837633531393564303232 +65316532643963613131366262316561396239323732383436376131363566663466306632306238 +66356566623761623664663066666466313238643031353433633135356238633366663536366563 +38303734383530663636326662626233373132313866613563366639303862313033313732646661 +62306462643065393563663938386537626133356263386365336663396165613664353461313465 +36303132653631646437303437393737383736316462613332656534646664613062623034363035 +64326265656166323966636163626230653738336366303237313139316338343530343461616561 +38623239616562656364633462623836313361383133393236373233356136353830633138656366 +61393238333931346436303735323534356331636366616531646632383237616131343963393430 +30333163353131643166643765656364623637646135323036613130303661326465373864333265 +31333030653437333130383939363532383336396166653136613665663338626136373463336632 +34613530646261616138646134363630303031616337653034613165623535343432393063633562 +62333938373730373762666164333533333964343833313165346162386566353162653530633163 +33356533303964646635646435346534363439373931643933653331393936323331353866363933 +32383139666161626430323132386263333438303731323636313362396133376438313839643763 +61643734333663626535666634366664663135613766616233663334303466336338373735306163 +35346533613332373261393835303935336232383331393937383666353736306365613439343034 +66613237653664303538653031393962346530623333666362643564646432633139346262643434 +66623837383932653262326266623435353939666334376465633938353335383534616363333534 +33643239636339366230343536613962343638613038313238336362346161346238373035396133 +38326332386361636563333234623737386166626466363936366533666361663631313165306639 +38336530363935343237356665623766653166373465356162373334316335623233613864356632 +33383132653066623734393638646163313634613736313364386331616565663037623064306334 +36326464336438623863396565653331323532343037333033386135373735666231326335383363 +63383238373930366436306563636138626262323937613538316639333530376337356565383436 +36653566363838663235663034643637363238393361323235633363393734623135316230633861 +36323337333837616661613139626362663064343530366530353266373865343136613961353361 +64336231623234643533356262343330396330333138316466656130306433323133306139393165 +63663135623531373732336439306363646263326663653431363662646566343135383336653933 +35346332373237373162613335623164333261663165653030383761633439636330613135636162 +36356236353266303435363238333539363735313933353131333638376533623937626334333033 +62373436663736353637363466303131316562653633386463653632356636303731376533373337 +62303763666535663832623837393662653533376234396337613262343762386163636636353231 +33336431656563333164653431326638613438623936646465616632633530643238373833353338 +61363364343962393238633863306363343331336436363835316163323838306433633366343032 +65376131323735343337666533396130343939303364363338343034656663303037353164663166 +38633834643033323635633263636433653265633862383539386637366536343335323136663164 +62326131636334323234643332663731656562363761623739346662383130336332636664353530 +64626430313936383963646531336633613531303032626437323531666363616339396135646664 +35353965616133666233633965316261383263613765626232326565353164326137643066316339 +32343162326536333830333832366631613861356361643434306262383264396563666135393735 +66623038396662646163363030336236626438366363376434653631376238383632326539633838 +33343134613164363238363133653038643133363038623962616634363563316236313961613435 +34363662666366346662366464326438396530313934656238393662376233366233646163323835 +34623762616138633439663038393631643839353563306335643037323937633862346630326563 +66616664636232393238343433333837313261666339366232613062313630326564316130333136 +64383963616637346130363738343564633833613837626431363334656665393038636534346663 +33353863663138336463386330323938356637393537376265616666616433353939306239323464 +31333132663461656561653165376533616131366165613564643263356132643030356134333733 +30366136633766363832393739626634313164303961356234656165623362353164343332663136 +33346535613933663931356134666131393762663932613234313931613239396261363766656466 +31316134356431313732313463666639393136353036376261666437613736383038333836636435 +31326634613063633063343431316265623961326163303437356136306234336533303633653966 +32376239343861663138633030653663316464623238333236336331346364393464323631383466 +39336338643838303564386261633662333833363430363434396532633335303162353837623036 +31316233343564386464336533646234656236626538323231373130656666346666336237656364 +39666234343261653235636534353538396465626264306437636366356666363736383461326166 +30646436613562326561346238643166663462623236356438376663646635326136346165373331 +32613332666638303939313761653336393765343835663162336165666630356665343865623531 +62323334643036383434633261393232316431643265613536636465303538343261363737656466 +66393766623539376163303364383665376365316131373831666239613361623463613636366433 +38383835653533366463666236393164623432323164623736626665376461383534393062386233 +37613261343433633963353733653838363836373261383163313238306565646536383262393132 +66343935323237333733316631633630303061376632353637653133346139643665663032633263 +35353662373066323239336366663164333833376163666265333831383763663033343461306265 +34383130653565313139626263373662633137353839666164613937323730616565336464663233 +38643064343264613938316632316261313237633661356439626338393335383463643739663036 +37316361626536316166643337613030353263643364643731353666346338633938356164363436 +64333133363738363132663234353930323263396437393265633634653436653661636666623361 +36626631383735333164343035633739666439656261393731323730613133343364343065633561 +39633733653562303962613130383765636231396434623835633065626533366130313234393765 +39626634396161333539653237656231396561636663346333636139303836356635663831326666 +34343038383962376230393438663238613430643031346636356136653763666435376634616538 +63386334653934353066626332613330383266653337393163373334343839613335313232386237 +33363665333963613063396232373931613064353339656632336462383334366432333239663032 +38616136323166326632616437326538373534353131383339626332383865313061623563663536 +33326363326138623032343330653439306461313436336131383835306461616234316536646263 +65623138616435383164646231663466313930326237336561623637626663353936386363613530 +65396534623363323235333566333331616133313231666232393938336561646239323438373737 +30653537663430313639333566663032336664613038363564633435633237353330613430366365 +64623064363231386631646463353566646537656439396139393632373939336237653337623461 +34376231643965653134316565626630636437376232366430376437333338393762356464623431 +33383965643537333436643137643339373237356435363066643732663866623239336530383837 +32346234373139636534613835363065303964656432373835356237376266386135353161326338 +33633934303665366565653764386565333966633739303235643339326130663635393135643533 +39313432383963306338353866393932633563613339616166383436613366336236663931323332 +37323831313061353062373963393035396330653165313136613862353364653136633132373035 +37633937633764383734313138643335393561313035376631363961333435636535323161346661 +64653339666364353066636366613333633336616239663838306230623663343737343862373062 +31373765366666363265376465336362643634356539366665343861356464393166396537383338 +36326361386437303231386332326539663030333134346437636630626162633863313461613639 +33643538373933613638383435326634313061653864343031653230626332326361333361646336 +62393839356366323632343065626361373134623133646161326632666435336163393932383939 +35313166333439656164346637376336613362303730366137383933366434646333393237663930 +37643665643364343331626335666233363564363664653966346133616531323938393136656132 +64353539333430636135316137636661356234383032613862623236653232333332336462323966 +64383662343339333834333462613635326331363037333630643232366336356463623734313335 +37653661613264626333393638336666303239653634393564363564643761396534393531323666 +38303630663636383134303534653839313265623635346536396536623266313637386537383135 +39663962393739663938366332653138303830393764633861363166343231336132643830316563 +61396366633937346139343063333661363865343638613734636363633134326537363961646538 +33353335613936626338353836373935656630373064626234633265393661366336323531346431 +33633963663665623539656130346262636464316666323261373163373531636135613936373364 +32323436353839653836343732303463333031313435333939373337393563653532383861366261 +66643934663938386562376534383534636566376163303831666437633733393838396233373166 +31653235343537653039353033346637326638393535306339306564616666613666373437393638 +63623335653137393037643964623837393666373532313666363638313733303837386166313765 +66363262333566333039343238323463313865313665343466626666333535303965353332666134 +37373134313439333231376361363136646138323439626265313463663936323637313663623564 +31393964663134386532316661316539376531336562626566323032343761393031653734346466 +39306334393433313333363434623032646532353166353031376532346233376364353039343339 +62303831356261396661653933643432383165356265336133633161626230653937663262386564 +61353033663837656563666265646237393234376134306461323934386537643761333138376531 +64666163303835376463346336353634663261653365336136323762323836336561663965303662 +36326333653734383961646232616131613434306239343931333334343039623937323334346337 +37323164636536356566643831363130396435613037333765316163633934383639313633363561 +31353162363234373133616133356661633666356530353564346338386464313035623363613838 +39363739656135626163616336303134393965333666373238366432666563306338393635393235 +31636331346433316635636437666533656238313031663730613566356634393431646235343939 +34383031326437663730306333653063333033656665383362346630346466323336353234376363 +63303937613963353562633531363330316662353766353934353230363632323039343166383239 +35373037313463306637343530323436616334653062326363363230333434393966313865623966 +36393332356638663963623130373263333737623734623339643665303232653034323663346438 +33653462373936303335383237323238646331643936353865363937323738376331333139373434 +33313734356539396338623438333136613430656632396333373536353364326631313530366461 +39303266333330626663303733383334386665366138646465633361316566366238323332333439 +66373361376463633538353665633161356634653265316136663736306562643366306663303564 +65363537303636646533333361333061623961633136633966373236326337393131663933383862 +35396230613538666632306434306364643736643265633564353438336465653433333630663631 +30626237653033643333323131316237353135363965353138396432316166326335326164303930 +62616466343665366363363861666539636439306537366231666165396239666539636531626432 +32393037386334666461316333306137363064366164336138633736623637613465376236333037 +37383732396232626430623233663739393738323433616531343765396234386365663837373366 +39353838326232363262396663396162646138306239303930313930386366363134373365313437 +62333431313233366161663731326165653537316331613761343831363231363161616231363530 +64373534363137353135323466663164333833336362643932383463326133656633323838323565 +36376331323537646234396366613264323934353632383936636332343130326335383730656435 +39306432326163613632363037376537353832613635353866376635613432636331336537356265 +63393830613461303239393131353631356139366431376665666238663038323737646164646262 +36366338623264613039326533303530353261363830663261666365646265393036636534636562 +33393939343539333837366464616261383638323139636136356137303338373938633764613463 +33623032643366343266323662666166386430343031373333346331336139386332373134636263 +64326634383130656361303535633332346631643262633961653632663931616165363239383231 +36396239663235643730366134353237323366613664623634386537633162316635323839323639 +33343039636332306630313532373137633664383962313361613763356535386665393637326165 +38376665653632313232656234393234643537326466373137326633646432396636313338303464 +62343965326537396533383935303436663838633863663064356639353830346136343031343831 +39656466643134336438663934636237306563333434323333326438633630353737393336663930 +61393138346438666239353339313462343135613133373466633965663836383765643562323461 +35623331633862623334666631386465366335373135626433623234663961613464346332633861 +37353562343265383438323039313362326234333736386665633265636466656233363763653630 +32636637663730663162613064306565623836376339643535353266363863363862363863623962 +37646536336663323532626634376366383764643330653861363161373538306135373838663764 +62366361616534383731353564306432396534386433653631303837386633626330363261383763 +30326162346137613732303634653533373363633763363762663037623139616535626566393964 +35363638386432393935656263336164386537616462653330343838646461363935353638313534 +36633237623234343638373562613939343736626465653938306364303232656261653234616139 +64663431633837636534353432323338313137353763623533363435343066666339623036323963 +38623739616464333335633362353936653937613735373033643463363532386561366532323338 +66643039623438323265663537353138353765623932343661643439313465313137666461366330 +33333836616235363430303934616232366330343239393538303762636662613234303834613261 +36383766663962356662646234663336373337333832393533373639376633366432303339333435 +33316430663234616334396634396533643739373536666636383365663933363731663634373935 +34343934306331323661386265626264636262326539383633303039386362303663623935646163 +65363537613462633438393864373764333838316430316463373230633866336236366536613130 +63333832326334383935363530353963626538613063663061313235396335353465346364336132 +65343832666237366138316463353232633336623030383061303836643561393038343233383434 +64346661373933623732356531643632616339306533383738666662396261626138643333383532 +66356235306333613765633037363162376564343766616139333534636333386332363261663933 +61613236636263303731386235356233656166396261313232333961663039383037613965343935 +31656332346539343830656634353539653636633333316564663432316339623866613165663762 +36333062633361323061623633366264326661396535636531663964393539613435643365376363 +64373432323630633832376135663066646130326436626162343534323133313066373062633866 +64313237363035623861343762333734313731643931396364643533653339363363326532376564 +34636334396365623732333037636435316339303538363836623861656436663831656266393334 +61383736613263373330396666373732386431396236616334663939343866663133336130386338 +61303634313032653961646437623166373637363562363866646431653539643738386634303131 +34363633333362333033653533663932373064313632613635613263356636383235613539376662 +34636230363738346637656561326465336631336264666338353331646439343330366262313338 +34656466653630323131323337383234343933383139646436386662353239633236623035646164 +61303737376634646435643439346435336561376632333065663863613964633230613834663336 +39393935643639643939636232643934613639656136636566313437333565313163333863666163 +31376339643133643334613238343261373066373566323262336363386231636537346634613362 +36383063323135313766383163393230663639656161376137376539356333643866303630323738 +38316361356666363534363936343163663766396634303663393063303139313661626138653634 +38643562633033343234626435656435646436633831646661343261643232613064633234626537 +66376639393533353064303538353863383638396333623363363535383566616334303034303332 +61366231386332376265373434356363303966313738356562366634323935396263633335313230 +34333361613066623664383534383163626339356539353666363265343065376236643636373263 +63313266316435323839333261366339386663346438656264316566336563623231613339333262 +38633266373831333136393166326332346538353339326661376137343965333338666437306134 +32323263323830626435663731643236366363616661386132353932353063336338353163626239 +33376363363532363631393231326633343666633832623839383934623739613539633332663366 +66396634316439323938666132616663643735346362653963323131343564346635323665653336 +31363235633566646138396431666461333037336437333962643963656461383835636139663662 +65373735656236356331323636306135626164353861396239633061326462393434653132323335 +65313663636130366436303632346235646363646531646239653134383431336562633064313230 +37353364663934363463396433623534366239333335613831633636323733666131613539633138 +36396138356465623230343362393061323362346533663433623636323963666630306131613463 +34643662333736636235633261663438653136336264356631363835366563303065353965346430 +31653566653733353263353430613135643038336133376263333562343861646366636465623935 +61633632623066353333623239366633363161336465343830376536653733616266643665613232 +36636436656366313961653465386365663165343531396536633037633865636133306364663539 +65386533376437656161663532653431666165633863623731643762356236333831343731373036 +35303164323035323439663963396361373063373536613363626334616138396430373964373933 +33636430306163643934666161386330383130633863386461663265653362326664356134623761 +34303864313930333265663031626563626138616334653836623231353835616562313366653462 +33363833663732376636386431303437363530323033346633336234646534663035326363313862 +64363133333834313836376362626632303333366331616262366538636662623633333334643532 +32636339396634643232363566633435323439623264643662303134303238303365353133366130 +34393937306235356637313538633130326434313231393362613965643263353431653830363363 +66666631616637383937376630343331363032623835616434643065356636373434343632343266 +38363763363364383830633538363031343632373136396261356666386635313237353935323539 +34613935633765386266373039366363663161373465396232353938336236393135306336363963 +64613134373834616637303435616139653531643736393937333163613831313864323837333332 +62663938356536656164306438346234636235343262323239636237366461353638663339336562 +36333232376565633436643261373638313034383634376632303832656535326636346531303037 +62656530646566303737373633373631376231316163376266666561303338343037336235643063 +64363462373663626137373531623539646536616133666631313837366364353763343463376637 +36626131383430333635616565613538613334363565613134373234326136633733356561626437 +63376634636339306661663933323637653138323638653731333332663634346633386537376634 +65353237393162643634316465333563653964343261373334643739356461363762656331373663 +35656463393965383964636362383339656261643933656130383262373763366230386466303738 +63663162656262626461663564346132353366303239653661343562333734343364626166336138 +66633631376439643831323566346132623734616134323562323531363138393162393232343661 +63376232323662306665396435386461363433303062313731373130663236353736316165353364 +39333933343465376538323164356339346463323765323064356433396233663031623261343664 +38346538663639313633393465343634333532333938316632663765613335616639653934653733 +37666338623437303266623931383363396330356237313139653230653462353931303636613166 +36343237306136616664303564656135343962633061643635333966616664373964646532313630 +37346166646431383737323165343434316330376431633831626266373163383065373466653039 +39313230616330353865303132373832643534633737363537646432346137653534623030373830 +36306339613534346666653964393861383831333633646161333832326531653731313563303230 +30313736353166303533653262333530646463626333316561346432663432316635613834646133 +39343331376331323461613864326338303165653464373132333237613234663531646565366634 +31623166396161353332636438623939613235353233343961653962373965373437616137643730 +64393139363264643738373036313838626631343763623964616136633437653736626334326336 +38643138383765663039353939303863643661333730323338333164633465393163376563323836 +34316239613765316631633861613665623430303662636330633239653132363964636663323462 +36363434316437643166373839626364376333353936376162363664633563363464363761313164 +61323534643964396463663135366630663866653935656161356165643132303962646564356164 +35626338663862666236326361663431376563613831663530323638313862323737343131626432 +65396533613430373066373537666233633936613632313234663730363535626538383530303733 +34646164386461346637316165613536663932616463363563663163316536383939626139383831 +35373965663733666634303430336239396235316463646133636139646166363234313632623163 +39303763656138643731303261393663333737633761376566373631663266633733663764623731 +65353865643932326433316339383932333964313462643835636531356435343130666566353631 +37353632323534363833626139663662383366383330643866336438333230323866323734666266 +61353831303837666339303362396432616665366461316266633036353961363261643133353065 +66323664373431643938343663666662633837353063356639653737373463386630663562323665 +61626335313231653830633366336264346539303630636334633037666264636164656366383661 +36353631356336643135636233316136333863393539313730623036303038626266313265363636 +63646365353232643965303931343033303236336532633236303834343663663135663339653030 +35633732333230383262663731656239346166316430376536356238383834393930373935373362 +36326530613338373466353331366561343636303038313037326431613262366566383135313832 +32653836633361386265663531656638373337663032323961346334333834393362326337336263 +61613666396565333235646634383330626134356532356133363531663731363331383533343738 +61653065326539393034393035363231626632363330616663383964653066373836363666333430 +61313865353464666435623031333063613465366637303065653762616664626163646436376561 +34623136646437643437323136366364343065316438346261323564356634616431363465623034 +30353238303436653738616232643634316631616466336333396438346133313961306236643139 +37373561363831393664376165636666396435386332303335636262306434353663366465313563 +66316663356264373530313136343531323261396634393438663162373734646466306339653562 +66333564656663333931396434336562663262383737613335366166383938643033366261616262 +33326537326433306161373062343637633331326638306666376336366463613864353565333062 +33633437363163633638373433343737386332386632333066366332623635653066326566313536 +31666236636462633133333335656435393534343335626636383730313462356262393962613630 +32333738366136366461663937366638313330343133366266366134346164353231663239333363 +37353166663932653365633635386263373363666530393439366430623864383630633539353232 +34366564383934323566663166616334616265653534303231613731356466393433643534653465 +63366330636361646263646563363963633362303139306564396666313864653064663764383331 +38653230613236636533636666346132613261623233333034346262613236353831656461346662 +65366636636537393331313531613964393263333566373331653232626530333332303232363761 +33633063613236333936326532316362306562653736303763323934396164363364613739323830 +38626233393563333232323931643564636434653036626266626365353135373439396563613033 +37306439363637336338636137663436653661306533386534323232653935663636326666356231 +38323761333238306565666362616635373339373430626564646264376262333733303861316661 +34366665626565656239643938666535303363373335316234303634323866373064313566396565 +61383366633264383237386236316463653534663834666234623638653233336565613830396263 +31396664646133393131646334393433633936396337333666323965373336323662646630306365 +38666361646333613462333031346434393035656437393932326231313739643337626131353462 +33373135336661343362386563643965616239653434653230323364386334396430323230396465 +36323030616535343833613534633933646135643265343763393039303664393336663665316631 +32626564646337326433616433656433626266323066626634643565396138353339303730303437 +64646331393339653130626132323136383132373763306461616433633735393338646165646261 +33643136656437303665373966356565363464623233353635633333393333623434646665313466 +61383836363439353064376363643464323230363336376438323437306562666336393766393434 +34656333316538313332393761353030376165353332396131666136376636323664313161316335 +30623330313635326437306366353234366231346364313235356161356233636561336564376166 +63613337643366666638383263306261396163386132386664626565323238623539653163373436 +34376562623536656137613466346237613735313239373439636338356637643162663633633832 +61303739626136383033306364653962333738393133656634393862323631646561646562643433 +66613862643137653731366363313439316232383364643038633230346264666432346334316362 +31393361373235636434326633393532646334333433306363303833383434376263636461363439 +34343733386165333365383737376465353631393333646461613030303561376662393833386263 +64346134633564353764306635303439393639313331613132613865613634623135623665343932 +61326433386230393830373838363534623333653535656365643335636239626463366335376439 +64373765626436353838663838663964623737363334323631356132366139646232323465333130 +64316130636663316537373962333539653637363165616237333837316330306534303731616337 +33336565353934363763306437646138656232366662613235353366343031663836613135396333 +37636130343531613536333462616163623435383336306437393139663464616165626464363331 +66386161383736393635396435383237313830373638353762393265376435356631333932303531 +62346234333764643539353465316363326632643034393739383736373532346438333536646534 +31303933313031373030313734333561646139353730303862386363663434646234383739333630 +35396338366536336631643439346264636361643065393730393062666431303534303130343139 +34656138626631396565333137366238396430643839353337313632396136313835306661613339 +62643666666532343031343538373462396537626335663461376265353762363331393636666562 +33366564323963333866343963333038313332396166636636323764623035303133613533393563 +35363930343035663865363130346234383532323930663736333835373135343138343531643636 +37353431333132613362383733363936613838613733326535326231393834353931616265623066 +65626539313831336464366462616263633066353736323531383163336532663536323435343030 +38373635643135333739376564396339316135343265646332653938396339626662653430313337 +37336630393263373232623735623162363661623864386361666237316330633031323836363034 +34376331646436313263626434376431393337353630626564616438623539323164373137623466 +63323265623962653731316663363135336430316562336537653730366665633039633538323933 +35643539663062643134373364653835393031393763303564346234393732313237616137363965 +63663832313438376462626437663138343762323436653732353932383834666134616665383463 +31363330306366663763323166663436643965306635663863333863333531353961623963636332 +34343933356361313166353932316432396665343739393238396663616462363865653034633464 +62633438326563346132376438356265353563303534303538666532313530303362636434643735 +35613136663239646230323435323365646232333862306130353831313766653735386333616566 +32363131323535643637663839343365363231343933613537373430633735663633303331663765 +37313165633163656136353764363336346363663030333061393939616539643233303966366566 +34343466646561323531623564633335663234313662623736633234636337663863303834656436 +32313234623364383932393239393261623961363537333734393434626234653562316130353530 +63303065636536666330313832623732373138353365666364303335396466343637323635316465 +38653962343037616665386334643932613531376461346536346362326633643036366465653036 +65316432373863633233653739653730393862653035376563383835393861326135363936333561 +36643435326465366431316332623534326134613632663536643262376464373339333233666161 +62326339313863633631626463636237663866653464356465336534616164316132386239316664 +31366331613732323132393966666463393132373735633634366666386233306639323933343335 +39353932353237346137633830623734633033626533313630356432663038646138313835626635 +32386562633566343065346439633838383631646132363762336631373934356431623365313337 +36633062653232303632316161393532633938323661653237646335393062666562663338663165 +39623230636264303337303861393863643864383936396161353630326531376237386265313031 +35663563633135393638626134353861346235313139383139616634633965616662646363333861 +38396466343232393639663164633939346630356534353030616233356139623362343563656437 +32356431356637356236376534336231333030626236383530383664613637656665313836653833 +38373461636234623332383864346231343430343961333062323538303461343739393638303534 +66333336326362363564343339343038326633653062626131336537376131643238613831616164 +36393931333166653131653339303139356330336237303630326331316265623737326337333266 +38373837633464313736646633353531613739653439626631616233363663326463323637643533 +66636562633461336630346162383838646332626365343337396463653863326666613338333030 +35376432613832303466376236366364326464376465633166613538303264353533626435343164 +32613539386533366336376363633634636233636332643237336564666161336332333939363939 +63613161373063303362613335393837373461623835396331303035383166366462633364633230 +66306430323033336361396163376262663134383161303062383963613832613631333363333537 +65666335633361343930303136383764353831343935653861626435323333346436653638656337 +35323161393436343964633164383831323333626136353239346664616434316262346133613535 +65373835646634376432363766333336653637313132663866383031356134636164346361336630 +62333130343365376364613739666634376639376362346665393033323061326135396132653333 +31656333616365646333326563626134333035323865633961633331643336376239333633613832 +34656134363035366431396165646663623465613633616234346336663364343566633530303339 +38663563626466656432323036363138656139373231643565333563306138366166656130616261 +37373937623634363861663861306533353265343037343037656339353361343733366131323362 +38353763376163663630363839353730313665633965643061373962363931393735643937303035 +64366531623234356364626466666266616331353839393666363666356333326331636338623430 +64613163613233333534333564376661376538373061633538356638653834336164323764633936 +37656162316163333761643938366263613933356135393364383864396165313934326631393432 +62306434376162396333343337333735396437333333363663363261656365363138623561373365 +38633733313135303035663639366338623831393639323939336363323835353932353837323366 +39353662633166623236663463636634333161323230633862303235623439346130333333333634 +37383262643763643062386336306636623234393837623039383033333638373438656631613037 +65323737616339656133313362386632653861663637373232373432316138646434353934323935 +33356239333833316332343264316664336563393461396664313136383434353361363764343534 +31616334346364616235653266626538336561373736636531386230343765646466643461383838 +32356536663237653564343934396461356238626336373965346437376433376332383332646262 +35643264333938323930383761353533333265623631636438366665643964396563653933636638 +35343736376630386331646237616663313135376134313135663936326463616230636230626336 +34393133643539653536386536633061363366396238346465316363343032656533396664396239 +62633438346366633864396437396663376361623766373333616665633061646664626236663665 +31313665383330366165336563663930376166643638373534663661613934393162356132383262 +31613066363335356561383638343136303965303234666131666136336432643766346337393930 +38373763656338343865653135343364656563383037616565396264323233303134656234366235 +65663164303134653639663062393530333135326561363438316166626238636338396264623538 +34306333326538373539633530363830666139666231386131653339393736306339363166343033 +61373765653762323739653764373062393137313036373634643331626237656162633436343239 +36323161356135323363303766323431633831303537653239636564373033663161303961626463 +62386564383365353563303666326535663965386363343434363863313936663937396130356534 +34633132613437323834393334666563346461613362653964313032313635623330396565333162 +63383531373638653464313035313435333861646635396562343866616266323033306338633361 +30646332363933313534333366313033303561373131323933393639353335343037653633633537 +64633835363931333638393032303566386336343563326230656537613539626330653230393465 +66373730356562316337613630653766353934353030373735383662636536333832626337613563 +63326635633666636563363339303863333837353863333666323266383065656564316462363432 +35653665396239373861323265303364393865353435623235636164636634346234653736346430 +31666661393565616161633933313666353034346235383566353639313733656461623831316465 +65343936306431666463396566653765323464353461343965393363613132383132356161333639 +36363134303765383630626238643439623430333236623665303366396662646535343233306130 +37663263356362636436306262633766636330363435646566353331643935393862343434343738 +38623637316239613030656434303739643262376230373464623561663366326564613931643632 +64326633366665396536616333303832633836303366353039386333636330353165343437386237 +33396333396434613832333265333136343134363261636565643637393962393265306437306236 +61643662643130316137313233366336633232333130346537366431363733633530316139356161 +62393233613034303938303637323036363166666130363665623931643532656231626339626664 +37396666353065333864373531386132323266333762633661343434633734353334666139343463 +30636432646665636130633337336636366234356631666361353163666432356666393263666162 +63303332333232383563636365663961613565323035366239383661336161373239306438613638 +64353461323435336362666331656337636133626630316531373561303863353431343162306537 +30623534363830643563336637373032633764616331303930653562323239336231333762326132 +38353339346564363430643063386132633161303037353331373866313366313665306232323231 +65386163393132626262343335353636663837386132643161656365626161343730623266616639 +31663533343266326437613165343838636535333137346366386138633561633537623066316239 +65613665306434343466393932643237616638356630613864363637646361363266643931663631 +66313463316266363833636136343934616339303634643134316563343666663031 |