├── tasks ├── modules_prepare │ ├── ipv6_module.yml │ ├── naxsi_module.yml │ ├── http_echo_module.yml │ ├── http_perl_module.yml │ ├── http_ssl_module.yml │ ├── headers_more_module.yml │ ├── http_realip_module.yml │ ├── ngx_http_sub_module.yml │ ├── ngx_pagespeed_module.yml │ ├── upload_progress_module.yml │ ├── google_perftools_module.yml │ ├── http_auth_request_module.yml │ ├── http_gzip_static_module.yml │ ├── http_stub_status_module.yml │ └── passenger_module.yml ├── modules_configure │ ├── http_ssl_module.yml │ ├── ipv6_module.yml │ ├── headers_more_module.yml │ ├── http_echo_module.yml │ ├── http_perl_module.yml │ ├── ngx_http_sub_module.yml │ ├── ngx_pagespeed_module.yml │ ├── google_perftools_module.yml │ ├── http_auth_request_module.yml │ ├── _authorized_ips.yml │ ├── naxsi_module.yml │ ├── passenger_module.yml │ ├── upload_progress_module.yml │ ├── http_realip_module.yml │ ├── http_gzip_static_module.yml │ ├── http_stub_status_module.yml │ └── geoip_module.yml ├── modules_install │ ├── passenger_module.yml │ ├── http_realip_module.yml │ ├── http_gzip_static_module.yml │ ├── http_stub_status_module.yml │ ├── ipv6_module.yml │ ├── http_perl_module.yml │ ├── ngx_http_sub_module.yml │ ├── http_ssl_module.yml │ ├── google_perftools_module.yml │ ├── upload_progress_module.yml │ ├── http_echo_module.yml │ ├── naxsi_module.yml │ ├── headers_more_module.yml │ ├── http_auth_request_module.yml │ ├── geoip_module.yml │ └── ngx_pagespeed_module.yml ├── main.yml ├── example.yml ├── modules_configure.yml ├── modules_prepare.yml ├── modules_install.yml ├── prepare.yml ├── configure.yml └── install.yml ├── .gitignore ├── templates ├── modules │ ├── http_gzip_static.conf.j2 │ ├── geoip_conf.j2 │ ├── authorized_ips.j2 │ ├── upload_progress.j2 │ ├── http_realip.conf.j2 │ ├── nginx_status.j2 │ ├── geoip_update.j2 │ └── passenger_conf.j2 ├── etc_monit_conf.d_nginx.j2 ├── nxdissite.j2 ├── nginx.service.systemd.j2 ├── nxensite.j2 ├── nginx.init.j2 ├── nginx.conf.j2 └── site.j2 ├── files ├── error │ ├── 401.html │ ├── 404.html │ ├── 400.html │ ├── 405.html │ ├── 408.html │ ├── 500.html │ ├── 501.html │ ├── 502.html │ ├── 402.html │ ├── 403.html │ ├── 503.html │ ├── 504.html │ └── 505.html ├── naxsi.rules ├── mime.types ├── naxsi_core.rules └── example_page_index.html ├── handlers └── main.yml ├── meta └── main.yml ├── vars └── main.yml ├── LICENSE ├── defaults └── main.yml └── README.md /tasks/modules_prepare/ipv6_module.yml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tasks/modules_prepare/naxsi_module.yml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tasks/modules_configure/http_ssl_module.yml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tasks/modules_configure/ipv6_module.yml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tasks/modules_install/passenger_module.yml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tasks/modules_prepare/http_echo_module.yml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tasks/modules_prepare/http_perl_module.yml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tasks/modules_prepare/http_ssl_module.yml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tasks/modules_configure/headers_more_module.yml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tasks/modules_configure/http_echo_module.yml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tasks/modules_configure/http_perl_module.yml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tasks/modules_configure/ngx_http_sub_module.yml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tasks/modules_configure/ngx_pagespeed_module.yml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tasks/modules_install/http_realip_module.yml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tasks/modules_prepare/headers_more_module.yml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tasks/modules_prepare/http_realip_module.yml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tasks/modules_prepare/ngx_http_sub_module.yml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tasks/modules_prepare/ngx_pagespeed_module.yml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tasks/modules_prepare/upload_progress_module.yml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tasks/modules_configure/google_perftools_module.yml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tasks/modules_configure/http_auth_request_module.yml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tasks/modules_install/http_gzip_static_module.yml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tasks/modules_install/http_stub_status_module.yml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tasks/modules_prepare/google_perftools_module.yml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tasks/modules_prepare/http_auth_request_module.yml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tasks/modules_prepare/http_gzip_static_module.yml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tasks/modules_prepare/http_stub_status_module.yml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.sw[op] 2 | .DS_Store 3 | .AppleDouble 4 | .LSOverride 5 | -------------------------------------------------------------------------------- /templates/modules/http_gzip_static.conf.j2: -------------------------------------------------------------------------------- 1 | gzip_static {{nginx_gzip_static}}; 2 | -------------------------------------------------------------------------------- /templates/modules/geoip_conf.j2: -------------------------------------------------------------------------------- 1 | geoip_country {{nginx_dir}}/geoip/GeoIP.dat ; 2 | geoip_city {{nginx_dir}}/geoip/GeoLiteCity.dat ; 3 | -------------------------------------------------------------------------------- /tasks/modules_install/ipv6_module.yml: -------------------------------------------------------------------------------- 1 | # file: roles/nginx/tasks/modules/ipv6_module.yml 2 | # configure flag: --with-ipv6 3 | 4 | # no contents 5 | -------------------------------------------------------------------------------- /tasks/modules_install/http_perl_module.yml: -------------------------------------------------------------------------------- 1 | # file: nginx/tasks/modules/http_perl_module.yml 2 | # configure flag: --with-http_perl_module 3 | 4 | # no contents 5 | -------------------------------------------------------------------------------- /tasks/modules_install/ngx_http_sub_module.yml: -------------------------------------------------------------------------------- 1 | # file: nginx/tasks/modules/ngx_http_sub_module.yml 2 | # configure flag: --with-http_sub_module 3 | 4 | # no contents 5 | -------------------------------------------------------------------------------- /templates/modules/authorized_ips.j2: -------------------------------------------------------------------------------- 1 | geo ${{nginx_remote_ip_var}} $authorized_ip { 2 | default no; 3 | {% for ip in nginx_authorized_ips %} 4 | {{ip}} yes; 5 | {% endfor %} 6 | } 7 | -------------------------------------------------------------------------------- /templates/modules/upload_progress.j2: -------------------------------------------------------------------------------- 1 | upload_progress {{nginx_upload_progress_zone_name}} {{nginx_upload_progress_zone_size}}; 2 | {% if nginx_upload_progress_javascript_output %} 3 | upload_progress_java_output; 4 | {% endif %} 5 | -------------------------------------------------------------------------------- /templates/modules/http_realip.conf.j2: -------------------------------------------------------------------------------- 1 | {% for address in nginx_realip_addresses %} 2 | set_real_ip_from {{address}}; 3 | {% endfor %} 4 | real_ip_header {{nginx_realip_header}}; 5 | real_ip_recursive {{nginx_realip_real_ip_recursive}}; 6 | -------------------------------------------------------------------------------- /templates/modules/nginx_status.j2: -------------------------------------------------------------------------------- 1 | include authorized_ips; 2 | 3 | server { 4 | listen 8090; 5 | server_name _; 6 | 7 | location /nginx_status { 8 | if ($authorized_ip = no) { 9 | return 404; 10 | } 11 | stub_status on; 12 | access_log off; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /files/error/401.html: -------------------------------------------------------------------------------- 1 | 2 |
3 |
9 | Your pass is bad, you are done.
10 |
11 | Unauthorized: four-oh-one
12 |
9 | Nothing here, forevermore,
10 |
11 | Page not found: four-oh-four
12 |
9 | That makes no sense, you have blundered.
10 |
11 | Bad Request: four-hundred
12 |
9 | That's not ok, that won't arrive,
10 |
11 | Method Not Allowed: four-oh-five
12 |
9 | It's been too long, we won't wait,
10 |
11 | Request Timeout: four-oh-eight
12 |
9 | We screwed up, our face is colored,
10 |
11 | Internal Error: five-hundred
12 |
9 | We don't do that, it's not fun
10 |
11 | Method not implemented: five-oh-one
12 |
9 | It's not my fault this won't go through,
10 |
11 | Bad Gateway: five-oh-two
12 |
9 | Give us money or you can't go through,
10 |
11 | Payment Required: four-oh-two
12 |
9 | You can't go there, make like a tree
10 |
11 | Access Forbidden: four-oh-three
12 |
9 | You ask too much, you must now see,
10 |
11 | Service Unavailable: five-oh-three
12 |
9 | Things took too long and we will wait no more,
10 |
11 | Gateway Timeout: five-oh-four
12 |
9 | That stuff is old, it didn't survive
10 |
11 | Unsupported HTTP Version: five-oh-five
12 |
Ansible has successfully configured your web server.
9 |Please disregard the pink brontosaurus.
10 |Move along, nothing to see here...
11 |12 | 13 | 14 | 15 | ,:;'+:' 16 | +#@@#####@#@@##; 17 | ;#@#####+;;,,;:#####@#@#: 18 | ,######:;;;;;;;;;;;;;;;;,##@@; 19 | '######;;;;;;;;;;;;;;;;;;;##'+++. 20 | +#####;;;;;;####,;;;;;;;;;#+ ;+.'#: 21 | :####;;;;;,##:;;:#+;;;;;;;;#+ @@..## 22 | ####.;;;;;##; #@.,#,;;;;;;;##. '###: 23 | ###+;;;;;;#+ :##;;#.;;;;;;;.@#++##++@##' 24 | ####;;;;;;;+#. ;;#.;;;;;;;;;;,:;;;;,#@####. 25 | ####;;;;;;;;##+;;##+;;;;;;;;;;;;;;;;;;;;''####. 26 | ,###:;;;;;;;;;,::.:;;;;;;;;;;;;;;;;;;;;;;;;;;##@ 27 | ####;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;@#. 28 | ###;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+#; 29 | ###,;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.#:;;;;;;;;;+#; 30 | ;###;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;###;;;;;;++;##; 31 | '##';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+#';;;;;.@@.:#+ 32 | @@#.;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.##,## 33 | :###;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:## 34 | ;:##';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.##; 35 | #@#;;;;;;;;;;;;;;;;;;;::.##+',+++#@#,;.;;.,;;+#@@ 36 | ;###;;;;;;;;;;;;;;;;;,##@#@@#:+@@####@#########@+; 37 | +###;;;;;;;;;;;;;;;;,##;;;;;;;;;;;;;;;;;;.####. 38 | ####;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.##+ 39 | ;###;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;###; 40 | ;###.;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;'#@@ 41 | ####;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;'+@##@; 42 | #@#:;;;;;;;;;;;;;;;;;;;;;;;;;;,+###@###@#. 43 | ###;;;;;;;;;;;;;;;;;;;;;;;;;;.#####@#+; 44 | +##@;;;;;;;;;;;;;;;;;;;;;;;;;;#@#+. 45 | ###';;;;;;;;;;;;;;;;;;;;;;;;;;##+ 46 | ####;;;;;;;;;;;;;;;;;;;;;;;;;.@@ 47 | ###@;;;;;;;;;;;;;;;;;;;;;;;;;;#@@; 48 | +###;;;;;;;;;;;;;;;;;;;;;;;;;;#@+; 49 | ###+;;;;;;;;;;;;;;;;;;;;;;;;;;##'; 50 | ###,;;;;;;;;;;;;;;;;;;;;;;;;;,##+ 51 | :###;;;;;;;;;;;;;;;;;;;;;;;;;;;##; 52 | :##+;;;;;;;;;;;;;;;;;;;;;;;;;;;@#: 53 | +##:;;;;;;;;;;;;;;;;;;;;;;;;;;;@@ 54 | ###;;;;;;;;;;;;;;;;;;;;;;;;;;;#@# 55 | ###;;;;;;;;;;;;;;;;;;;;;;;;;;;##@ 56 | .###.;;;;;;;;;;;;;;;;;;;;;;;;;;'@@; 57 | :##+.;;;;;;;;;;;;;;;;;;;;;;;;;;+##. 58 | :###;;;;;;;;;;;;;;;;;;;;;;;;;;;###; 59 | '@##;;;;;;;;;;;;;;;;;;;;;;;;;;;:## 60 | ####;;;;;;;;;;;;;;;;;;;;;;;;;;;##+ 61 | .###.;;;;;;;;;;;;;;;;;;;;;;;;;;;##; 62 | ,@##;;;;;;;;;;;;;;;;;;;;;;;;;;;.@@ 63 | +###.;;;;;;;;;;;;;;;;;;;;;;;;;;,##: 64 | ,###;;;;;;;;;;;;;;;;;;;;;;;;;;;,##; 65 | ;@##;;;;;;;;;;;;;;;;;;;;;;;;;;;.## 66 | ###:;;;;;;;;;;;;;;;;;;;;;;;;;;;:## 67 | ;###;;;;;;;;;;;;;;;;;;;;;;;;;;;;+## 68 | ;@#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+#; 69 | ,@@';;;;;;;;;;;;;;;;;;;;;;;;;;;;+# 70 | ,@@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+# 71 | :@@';;;;;;;;;;;;;;;;;;;;;;;;;;;;## 72 | ###;;;;;;;;;;;;;;;;;;;;;;;;;;;;;## 73 | .###;;;;;;;;;;;;;;;;;;;;;;;;;;;;.## 74 | ,@##;;;;;;;;;;;;;;;;;;;;;;;;;;;;;@# 75 | :###;;;;;;;;;;;;;;;;;;;;;;;;;;;;#@+ 76 | +##';;;;;;;;;;;;;;;;;;;;;;;;;;;;#@@ 77 | ####;;;;;;;;;;;;;;;;;;;;;;;;;;;;#@# 78 | .###+;;;;;;;;;;;;;;;;;;;;;;;;;;;.+@+ 79 | ,###;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+@+ 80 | .###;;;;;;;;;;;;;;;;;;;;;;;;;;;;,+## 81 | ####;;;;;;;;;;;;;;;;;;;;;;;;;;;;;### 82 | .###+;;;;;;;;;;;;;;;;;;;;;;;;;;;;,### 83 | :###;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;##, 84 | ;###;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#@# 85 | ;####;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#@@ 86 | ;###:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;##@ 87 | :###:;;;;;;;;;;;;;;;;;;;;;;;;;;;;:@#; 88 | ,###;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#@@ 89 | .####;;;;;;;;;;;;;;;;;;;;;;;;;;;;;##@ 90 | ####;;;;;;;;;;;;;;;;;;;;;;;;;;;;;,##+ 91 | .####;;;;;;;;;;;;;;;;;;;;;;;;;;;;;### 92 | . ; ;####;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;##@ 93 | ; .,,+######@###@@###'., #####.;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;###. 94 | ####@@###@####+#+'####@@######@###'; ######;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;'### 95 | ;.'@#########:.;;;.;;;;;;;;;;;;,'######@@###@#:':+@######';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;###, 96 | +#########+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:###@@####@######;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;,###, 97 | ;#######;,;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.;.;.+.;;,;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+### 98 | ;:####+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;##@; 99 | +@@#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#### 100 | ;##@,;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;###, 101 | ;###;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;###; 102 | :###:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+### 103 | ;###;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#@@: 104 | ###';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:#@ 105 | :#@#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;@##; 106 | ;###.;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:@@; 107 | ###;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:#@; 108 | :@##;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;##@; 109 | ###.;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;,###. 110 | +##:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;### 111 | ;@#+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;###; 112 | +@#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;##@, 113 | .#@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.###; 114 | @@#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;##+ 115 | ###.;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;,##; 116 | ###;;;;.;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;### 117 | :##:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;### 118 | ###;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:@#: 119 | ;##';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;### 120 | @##;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;@## 121 | .#@#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;,@@# 122 | +##,;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;'@@+ 123 | #@#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.###: 124 | @@.;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;'### 125 | :@#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;###' 126 | @@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;###; 127 | ;##;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;###; 128 | @@:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;###. 129 | #@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;###' 130 | :##;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;### 131 | ##:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;,@##. 132 | ##;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;### 133 | +##;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;##@; 134 | ##,;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;,###; 135 | +@#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.###+ 136 | #@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;####; 137 | '@#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;######' 138 | ,@@.;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;,;;;;;;;;;;;@@+.###: 139 | +@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;';;;;;;;;;;+@@;;;+##: 140 | ,#+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;''.;;;;;;;###;;;;###; 141 | :@#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;##.;;;;;;##;;;;;;;##: 142 | @#:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;+@@,;;;;;;#@#: 143 | ;##+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;'';;;'@@';;;;;;;;###: 144 | +###;;;;;;;;;;;;;;;;;;;;.;;;;;;;;;;;;;;;;;;;;;;;;;..;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#';:#@#,;;;;;;;;;+@# 145 | ;####;;;;;;;;;;;;;;;;;;;;;',;;;;;;;;;;;;;;;;;;;;;;;.+';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;######;;;;;;;;;;;#@#: 146 | +###+;;;;;;;;;;;;;;;;;;;;;;;+;;;;;;;;;;;;;;;;;;;;;;;##;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;####.;;;;;;;;;;;;'##; 147 | ;###';;;;;;;;;;;;;;;;;;;;;;;++;;;;;;;;;;;;;;;;;;;;;;.#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.##';;;;;;;;;;;;;;;### 148 | ;####';;;;;;;;;;;;;;;;;;;;;;;;;#.;;;;;;;;;;;;;;;;;;;;;##;;;;;;;;;;;;;;;#,;;;;;;;;;;;;;;;;;;;;;;;;@#+;;;;;;;;;;;;;;;#### 149 | ####.;;;;;;;;;;;;;;;;;;;;;;;;;:+';;;;;;;;;;;;;;;;;;;;;##;;;;;;;;;;;;;;;+#.;;;;;;;;;;;;;;;;;;;;;;;#@.;;;;;;;;;;;;;;;;###' 150 | ;##@';;;;;;;;;;;;;;;;;;;;;;;;;;;@#.;;;;;;;;;;;;;;;;;;;;.+##+;;;;;;;;;;;;;;##;;;;;;;;;;;;;;;;;;;;;;;,#;;;;;;;;;;;;;;;;;.@@ 151 | #@##.;;;;;;;;;;;;;;;;;;;;;;;;;;;;#+,;;;;;;;;;;;;;;;;;;;;;#########:;;;;;;;;##;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;### 152 | @@@,;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+@#.;;;;;;;;;;;;;;;;;;;;:###########@@##+#####;;;;;;;;;;;;;;;;;;;;;;#@+;;;;;;;;;;;;;;;+'### 153 | :###;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.####.;;;;;;;;;;;;;;;;;;;;,##;;;;;#########@@###.;;;;;;;;;;;;;;;;;;;;;.@@;;;;;;;;;;;;;..;;##, 154 | :#@;;;;;;;;;;;;;;;;;;;;;;;;;;;;;,######;;;;;;;;;;;;;;;;;;;;;.##;;;;;;;;..#####+###;;;;;;;;;;;;;;;;;;;;;;;@@.;;;;;;;;;;;;;;#### 155 | +@#.;;;;;;;;;;;;;;;;;;;;;;;;;;;;#@#+'+@+;;;;;;;;;;;;;;;;;;;;;;#+';;;;;;;;;.##; ;###;;;;;;;;;;;;;;;;;;;;;;+@+;;;;;;;;;;;++++;#' 156 | ###+;;;;;;;;;;;;;;;;;;;;;;;;;:##@@# +@@;;;;;;;;;;;;;;;;;;;;;;##';;;;;;;;;;##; '##;;;;;;;;;;;;;;;;;;;;;;.@@;;;;;;;;;;;;;;;'## 157 | '###;;;;;;;;;;;;;;;;;;;;;;;;.##@##: '@@;;;;;;;;;;;;;;;;;;;;;;##;;;;;;;;;;;#@' :##;;;;;;;;;;;;;;;;;;;;;;;+#;;;;;;;;;;;.;+###' 158 | @##+;;;;;;;;;;;;;;;;;;;;;;,####: +@@;;;;;;;;;;;;;;;;;;;;;;##';;;;;;;;;;.#@ .##;;;;;;;;;;;;;;;;;;;;;;;#@;;;;;;;;;;;.;,### 159 | ###+;;;;;;;;;;;;;;;;..;;.#@### :@@;;;;;;;;;;;;;;;;;;;;;;;##;;;;;;;;;;;@@ '#@;;;;;;;;;;;;;;;;;;;;;,###';;;;;;;;;;;;;,##' 160 | ####;;;;;;;;;;;;;;;;++#@@@@' ##+;;;;;;;;;;;;;;;;;;;;;;;.##;;;;;;++###' ,'#+;;;;;;;;;;;;;;;;;;;...,##;;;;;;;;;;;;;;### 161 | @###;;;;;;;;;;;;:+######: ;##:;;;;;;;;;;;;;;;;;;;;;;;;##;;;;;;:++##, ;##+;;;;;;;;;;;;;;;;;;;::##@;;;;;;;;;;;;;;;,##+ 162 | '####.;;;;;,+#@####@##; #@.;;;;;;;;;;;;;;;;;;;;;;+###;;;;;;:;:##+ :@@+;;;;;;;;;;;;;;;;;':+;'##;;;;;;;;;;;;;;;:###: 163 | '#@####@@#######,.; .@@:;;;;;;;;;;;;;;;;;;;;;;;.##;;;;;;,++##+ ;#@;;;;;;;;;;;;;;;;;;;;;.'##;;;;;;;;;;;;;######@# 164 | :++#'++++, ,@@;;;;;;;;;;;;;;;;;;;;;;;,##+;;;;;;.'###, ,@@;;;;;;;;;;;;;;;;;;.++@@#.:;;;;;;;;;;,####@+:+@' 165 | :@#;;;;;;;;;;;;;;;;;;;;;,+##+;;;;;;;,+###. ;##;;;;;;;;;;;;;;;;;;;;;@@#;.;;;;;;;;,@### .#++@# 166 | ;@';;;;;;;;;;;;;;;;;;;;;'+##;;;;;;;;;;:#@; ;##:;;;;;;;;;;;;;;;;;;;;,@#;;;;;;;;;#@@##+ ;###: 167 | @@.;;;;;;;;;;;;;;;;;;;;;###;;;;;;;;;;;'###; @@#;;;;;;;;;;;;;;;;;;;;;,@#;;;;;;;;## ##' #@+ 168 | :##;;;;;;;;;;;;;;;;;;;;;;:#;;;;;;;;;.;######,:###;;;;;;;;;;;;;;;;;;;;;;@@;;;;;;;;# ## '## 169 | ###;;;;;;;;;;;;;;;;;;;;;;,@';;;;'+,###@##+:#+;@@;;;;;;;;;;;;;;;;;;;;;;;##'+;.,:### ##@#@# 170 | @@#;;;;;;;;;;;;;;;;;;;;;;,@+;;.#', ## ##+#''##,;;;;;;;;;;;;;;;;;;;;;;:####@##### ##@@# 171 | ,@@#;;;;;;;;;;;;;;;;;;;;';######+ ,# ###@;'##;;;;;;;;;;;;;;;;;;;;;;;;###########+#+@#, 172 | ;@@#;;;;;;;;;;;.###@####@######@ #;;'@@+ ;###;;;;;;;;;;;;;;;;;;;;;;;,####' ##@#@#; 173 | ;@##+;;;;;;;;+##@#@###+.;##++###@;+@@#@@'; ###.;;;;;;;;;;;;;;.;;;;.+@@##+## ;;.. 174 | #@##+;.;;;,#@+ .## .++'###@+++; ####+.;;;;;;;;;;,########@###;##: 175 | .+@##@@###@# .@# ,#### ;#####+,;;;;;;;#@: ;@@. .#@## 176 | ;'####@@# @@ ,##+ .####@###,.;#@' ;#; +## 177 | .:'##@#::###;.;.;#+ ,'##@@#####: ##.;'@@; 178 | ;@@++@##@@@@#@ ;.,'####+ ##@@@@; 179 | ':+#, #######@#+'+ 180 | .#####'; 181 | 182 | 183 | 184 |185 |