| ofs | hex dump | ascii |
|---|
| 0000 | 44 45 43 52 59 50 54 00 00 00 00 00 00 00 23 21 2f 75 73 72 2f 62 69 6e 2f 65 6e 76 20 70 79 74 | DECRYPT.......#!/usr/bin/env.pyt |
| 0020 | 68 6f 6e 33 0a 66 72 6f 6d 20 43 72 79 70 74 6f 2e 43 69 70 68 65 72 20 69 6d 70 6f 72 74 20 41 | hon3.from.Crypto.Cipher.import.A |
| 0040 | 45 53 0a 66 72 6f 6d 20 63 68 61 6c 6c 65 6e 67 65 5f 73 65 63 72 65 74 73 20 69 6d 70 6f 72 74 | ES.from.challenge_secrets.import |
| 0060 | 20 41 45 53 5f 4b 45 59 2c 20 41 50 50 5f 4b 45 59 0a 66 72 6f 6d 20 63 72 63 6d 6f 64 2e 70 72 | .AES_KEY,.APP_KEY.from.crcmod.pr |
| 0080 | 65 64 65 66 69 6e 65 64 20 69 6d 70 6f 72 74 20 6d 6b 50 72 65 64 65 66 69 6e 65 64 43 72 63 46 | edefined.import.mkPredefinedCrcF |
| 00a0 | 75 6e 0a 66 72 6f 6d 20 66 6c 61 73 6b 20 69 6d 70 6f 72 74 20 46 6c 61 73 6b 2c 20 52 65 73 70 | un.from.flask.import.Flask,.Resp |
| 00c0 | 6f 6e 73 65 2c 20 66 6c 61 73 68 2c 20 67 2c 20 72 65 64 69 72 65 63 74 2c 20 72 65 6e 64 65 72 | onse,.flash,.g,.redirect,.render |
| 00e0 | 5f 74 65 6d 70 6c 61 74 65 5f 73 74 72 69 6e 67 2c 20 72 65 71 75 65 73 74 2c 20 73 65 73 73 69 | _template_string,.request,.sessi |
| 0100 | 6f 6e 0a 69 6d 70 6f 72 74 20 69 6f 0a 69 6d 70 6f 72 74 20 6c 6f 67 67 69 6e 67 0a 69 6d 70 6f | on.import.io.import.logging.impo |
| 0120 | 72 74 20 6c 6f 67 67 69 6e 67 2e 68 61 6e 64 6c 65 72 73 0a 69 6d 70 6f 72 74 20 6f 73 0a 69 6d | rt.logging.handlers.import.os.im |
| 0140 | 70 6f 72 74 20 73 69 67 6e 61 6c 0a 69 6d 70 6f 72 74 20 73 74 72 75 63 74 0a 69 6d 70 6f 72 74 | port.signal.import.struct.import |
| 0160 | 20 73 79 73 0a 0a 56 45 52 53 49 4f 4e 5f 4e 55 4d 20 3d 20 31 35 30 0a 56 45 52 53 49 4f 4e 5f | .sys..VERSION_NUM.=.150.VERSION_ |
| 0180 | 53 54 52 20 3d 20 22 31 2e 35 2e 30 22 0a 55 50 44 41 54 45 5f 46 49 4c 45 4e 41 4d 45 20 3d 20 | STR.=."1.5.0".UPDATE_FILENAME.=. |
| 01a0 | 22 62 75 6c 62 2d 75 70 64 61 74 65 2e 70 79 22 0a 4c 4f 47 5f 46 49 4c 45 4e 41 4d 45 20 3d 20 | "bulb-update.py".LOG_FILENAME.=. |
| 01c0 | 22 62 75 6c 62 2e 6c 6f 67 22 0a 0a 54 45 4d 50 4c 41 54 45 20 3d 20 6f 70 65 6e 28 22 2f 66 6c | "bulb.log"..TEMPLATE.=.open("/fl |
| 01e0 | 61 67 22 29 2e 72 65 61 64 28 29 0a 5f 20 3d 20 22 22 22 0a 7b 50 45 52 4d 55 54 45 7d 41 41 41 | ag").read()._.=.""".{PERMUTE}AAA |
| 0200 | 41 41 41 41 41 41 3c 2f 68 65 61 64 3e 0a 3c 62 6f 64 79 3e 0a 20 20 20 20 3c 64 69 76 20 73 74 | AAAAAA</head>.<body>.....<div.st |
| 0220 | 79 6c 65 3d 22 74 65 78 74 2d 61 6c 69 67 6e 3a 20 63 65 6e 74 65 72 3b 22 3e 0a 20 20 20 20 20 | yle="text-align:.center;">...... |
| 0240 | 20 20 20 3c 68 32 3e 53 6d 61 72 74 20 4c 69 67 68 74 62 75 6c 62 3c 2f 68 32 3e 0a 20 20 20 20 | ...<h2>Smart.Lightbulb</h2>..... |
| 0260 | 20 20 20 20 3c 69 6d 67 20 73 72 63 3d 22 73 74 61 74 69 63 2f 62 75 6c 62 2d 7b 7b 63 75 72 72 | ....<img.src="static/bulb-{{curr |
| 0280 | 65 6e 74 7d 7d 2e 70 6e 67 22 20 73 74 79 6c 65 3d 22 77 69 64 74 68 3a 20 31 35 30 70 78 3b 68 | ent}}.png".style="width:.150px;h |
| 02a0 | 65 69 67 68 74 3a 20 31 37 34 70 78 22 3e 0a 20 20 20 20 20 20 20 20 3c 66 6f 72 6d 3e 0a 20 20 | eight:.174px">.........<form>... |
| 02c0 | 20 20 20 20 20 20 20 20 20 20 3c 62 75 74 74 6f 6e 20 74 79 70 65 3d 22 73 75 62 6d 69 74 22 20 | ..........<button.type="submit". |
| 02e0 | 6e 61 6d 65 3d 22 76 61 6c 75 65 22 20 76 61 6c 75 65 3d 22 7b 7b 6e 65 78 74 7d 7d 22 20 66 6f | name="value".value="{{next}}".fo |
| 0300 | 72 6d 6d 65 74 68 6f 64 3d 22 70 6f 73 74 22 20 73 74 79 6c 65 3d 22 62 6f 72 64 65 72 3a 20 6f | rmmethod="post".style="border:.o |
| 0320 | 75 74 73 65 74 3b 22 3e 54 75 72 6e 20 7b 7b 6e 65 78 74 7d 7d 3c 2f 62 75 74 74 6f 6e 3e 0a 20 | utset;">Turn.{{next}}</button>.. |
| 0340 | 20 20 20 20 20 20 20 20 20 20 20 3c 62 75 74 74 6f 6e 20 74 79 70 65 3d 22 73 75 62 6d 69 74 22 | ...........<button.type="submit" |
| 0360 | 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22 20 76 61 6c 75 65 3d 22 63 6f 6c 6f 72 22 20 66 6f 72 6d | .name="value".value="color".form |
| 0380 | 6d 65 74 68 6f 64 3d 22 70 6f 73 74 22 20 73 74 79 6c 65 3d 22 62 6f 72 64 65 72 3a 20 6f 75 74 | method="post".style="border:.out |
| 03a0 | 73 65 74 3b 22 3e 43 68 61 6e 67 65 20 63 6f 6c 6f 72 3c 2f 62 75 74 74 6f 6e 3e 0a 20 20 20 20 | set;">Change.color</button>..... |
| 03c0 | 20 20 20 20 3c 2f 66 6f 72 6d 3e 0a 20 20 20 20 3c 2f 64 69 76 3e 0a 20 20 20 20 3c 64 69 76 3e | ....</form>.....</div>.....<div> |
| 03e0 | 0a 20 20 20 20 20 20 20 20 3c 66 6f 72 6d 20 73 74 79 6c 65 3d 22 70 6f 73 69 74 69 6f 6e 3a 20 | .........<form.style="position:. |
| 0400 | 61 62 73 6f 6c 75 74 65 3b 62 6f 74 74 6f 6d 3a 20 31 30 70 78 22 3e 0a 20 20 20 20 20 20 20 20 | absolute;bottom:.10px">......... |
| 0420 | 20 20 20 20 3c 62 75 74 74 6f 6e 20 74 79 70 65 3d 22 73 75 62 6d 69 74 22 20 66 6f 72 6d 61 63 | ....<button.type="submit".formac |
| 0440 | 74 69 6f 6e 3d 22 2f 75 70 64 61 74 65 22 20 73 74 79 6c 65 3d 22 62 6f 72 64 65 72 3a 20 6e 6f | tion="/update".style="border:.no |
| 0460 | 6e 65 3b 22 3e 55 70 64 61 74 65 3c 2f 62 75 74 74 6f 6e 3e 0a 20 20 20 20 20 20 20 20 3c 2f 66 | ne;">Update</button>.........</f |
| 0480 | 6f 72 6d 3e 0a 20 20 20 20 20 20 20 20 3c 73 70 61 6e 20 73 74 79 6c 65 3d 22 70 6f 73 69 74 69 | orm>.........<span.style="positi |
| 04a0 | 6f 6e 3a 20 61 62 73 6f 6c 75 74 65 3b 62 6f 74 74 6f 6d 3a 20 31 30 70 78 3b 72 69 67 68 74 3a | on:.absolute;bottom:.10px;right: |
| 04c0 | 20 31 30 70 78 22 3e 56 65 72 73 69 6f 6e 3a 20 7b 7b 76 65 72 73 69 6f 6e 7d 7d 3c 2f 73 70 61 | .10px">Version:.{{version}}</spa |
| 04e0 | 6e 3e 0a 20 20 20 20 3c 2f 64 69 76 3e 0a 3c 2f 62 6f 64 79 3e 0a 22 22 22 0a 0a 55 50 44 41 54 | n>.....</div>.</body>."""..UPDAT |
| 0500 | 45 5f 54 45 4d 50 4c 41 54 45 20 3d 20 22 22 22 0a 3c 21 44 4f 43 54 59 50 45 20 68 74 6d 6c 3e | E_TEMPLATE.=.""".<!DOCTYPE.html> |
| 0520 | 0a 3c 68 65 61 64 3e 0a 3c 74 69 74 6c 65 3e 55 70 64 61 74 65 3c 2f 74 69 74 6c 65 3e 0a 3c 73 | .<head>.<title>Update</title>.<s |
| 0540 | 74 79 6c 65 3e 0a 69 6e 70 75 74 5b 74 79 70 65 3d 22 73 75 62 6d 69 74 22 5d 2c 20 69 6e 70 75 | tyle>.input[type="submit"],.inpu |
| 0560 | 74 3a 3a 66 69 6c 65 2d 73 65 6c 65 63 74 6f 72 2d 62 75 74 74 6f 6e 20 7b 0a 20 20 20 20 62 61 | t::file-selector-button.{.....ba |
| 0580 | 63 6b 67 72 6f 75 6e 64 3a 20 68 73 6c 28 32 31 30 2c 20 39 38 25 2c 20 38 30 25 29 3b 0a 20 20 | ckground:.hsl(210,.98%,.80%);... |
| 05a0 | 20 20 62 6f 72 64 65 72 3a 20 6e 6f 6e 65 3b 0a 20 20 20 20 62 6f 72 64 65 72 2d 72 61 64 69 75 | ..border:.none;.....border-radiu |
| 05c0 | 73 3a 20 35 70 78 3b 0a 20 20 20 20 70 61 64 64 69 6e 67 3a 20 30 2e 38 35 65 6d 20 32 2e 35 65 | s:.5px;.....padding:.0.85em.2.5e |
| 05e0 | 6d 3b 0a 09 63 75 72 73 6f 72 3a 20 70 6f 69 6e 74 65 72 3b 0a 20 20 20 20 6d 61 72 67 69 6e 2d | m;..cursor:.pointer;.....margin- |
| 0600 | 74 6f 70 3a 20 30 2e 38 35 65 6d 3b 0a 20 20 20 20 6d 61 72 67 69 6e 2d 62 6f 74 74 6f 6d 3a 20 | top:.0.85em;.....margin-bottom:. |
| 0620 | 30 2e 38 35 65 6d 3b 0a 7d 0a 2e 66 6c 61 73 68 20 7b 0a 20 20 20 20 62 61 63 6b 67 72 6f 75 6e | 0.85em;.}..flash.{.....backgroun |
| 0640 | 64 3a 20 72 67 62 61 28 32 30 30 2c 20 35 30 2c 20 35 30 2c 20 30 2e 35 29 3b 0a 20 20 20 20 62 | d:.rgba(200,.50,.50,.0.5);.....b |
| 0660 | 6f 72 64 65 72 3a 20 62 6c 61 63 6b 20 73 6f 6c 69 64 3b 0a 20 20 20 20 64 69 73 70 6c 61 79 3a | order:.black.solid;.....display: |
| 0680 | 20 69 6e 6c 69 6e 65 2d 62 6c 6f 63 6b 3b 0a 20 20 20 20 62 6f 72 64 65 72 2d 72 61 64 69 75 73 | .inline-block;.....border-radius |
| 06a0 | 3a 20 35 70 78 3b 0a 20 20 20 20 70 61 64 64 69 6e 67 3a 20 31 30 70 78 3b 0a 7d 0a 3c 2f 73 74 | :.5px;.....padding:.10px;.}.</st |
| 06c0 | 79 6c 65 3e 0a 3c 2f 68 65 61 64 3e 0a 3c 62 6f 64 79 3e 0a 20 20 20 20 3c 64 69 76 20 73 74 79 | yle>.</head>.<body>.....<div.sty |
| 06e0 | 6c 65 3d 22 74 65 78 74 2d 61 6c 69 67 6e 3a 20 63 65 6e 74 65 72 3b 22 3e 0a 20 20 20 20 20 20 | le="text-align:.center;">....... |
| 0700 | 20 20 3c 68 32 3e 46 69 72 6d 77 61 72 65 20 55 70 64 61 74 65 3c 2f 68 32 3e 0a 20 20 20 20 20 | ..<h2>Firmware.Update</h2>...... |
| 0720 | 20 20 20 3c 70 3e 43 75 72 72 65 6e 74 20 76 65 72 73 69 6f 6e 3a 20 7b 7b 76 65 72 73 69 6f 6e | ...<p>Current.version:.{{version |
| 0740 | 7d 7d 3c 2f 70 3e 0a 20 20 20 20 20 20 20 20 7b 25 77 69 74 68 20 6d 65 73 73 61 67 65 73 20 3d | }}</p>.........{%with.messages.= |
| 0760 | 20 67 65 74 5f 66 6c 61 73 68 65 64 5f 6d 65 73 73 61 67 65 73 28 29 25 7d 0a 20 20 20 20 20 20 | .get_flashed_messages()%}....... |
| 0780 | 20 20 7b 25 69 66 20 6d 65 73 73 61 67 65 73 25 7d 0a 20 20 20 20 20 20 20 20 7b 25 66 6f 72 20 | ..{%if.messages%}.........{%for. |
| 07a0 | 6d 65 73 73 61 67 65 20 69 6e 20 6d 65 73 73 61 67 65 73 25 7d 0a 20 20 20 20 20 20 20 20 20 20 | message.in.messages%}........... |
| 07c0 | 20 20 3c 64 69 76 20 63 6c 61 73 73 3d 22 66 6c 61 73 68 22 3e 7b 7b 6d 65 73 73 61 67 65 7d 7d | ..<div.class="flash">{{message}} |
| 07e0 | 3c 2f 64 69 76 3e 3c 62 72 3e 0a 20 20 20 20 20 20 20 20 7b 25 65 6e 64 66 6f 72 25 7d 0a 20 20 | </div><br>.........{%endfor%}... |
| 0800 | 20 20 20 20 20 20 7b 25 65 6e 64 69 66 25 7d 0a 20 20 20 20 20 20 20 20 7b 25 65 6e 64 77 69 74 | ......{%endif%}.........{%endwit |
| 0820 | 68 25 7d 0a 20 20 20 20 20 20 20 20 3c 66 6f 72 6d 20 6d 65 74 68 6f 64 3d 70 6f 73 74 20 65 6e | h%}.........<form.method=post.en |
| 0840 | 63 74 79 70 65 3d 6d 75 6c 74 69 70 61 72 74 2f 66 6f 72 6d 2d 64 61 74 61 3e 0a 20 20 20 20 20 | ctype=multipart/form-data>...... |
| 0860 | 20 20 20 20 20 20 20 3c 6c 61 62 65 6c 20 66 6f 72 3d 22 66 69 6c 65 22 3e 53 65 6c 65 63 74 20 | .......<label.for="file">Select. |
| 0880 | 75 70 64 61 74 65 20 66 69 6c 65 3c 2f 6c 61 62 65 6c 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20 | update.file</label>............. |
| 08a0 | 3c 69 6e 70 75 74 20 74 79 70 65 3d 22 66 69 6c 65 22 20 6e 61 6d 65 3d 22 66 69 6c 65 22 3e 0a | <input.type="file".name="file">. |
| 08c0 | 20 20 20 20 20 20 20 20 20 20 20 20 3c 62 72 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20 3c 69 6e | ............<br>.............<in |
| 08e0 | 70 75 74 20 74 79 70 65 3d 22 73 75 62 6d 69 74 22 20 76 61 6c 75 65 3d 22 53 74 61 72 74 20 55 | put.type="submit".value="Start.U |
| 0900 | 70 64 61 74 65 22 3e 0a 20 20 20 20 20 20 20 20 3c 2f 66 6f 72 6d 3e 0a 20 20 20 20 20 20 20 20 | pdate">.........</form>......... |
| 0920 | 3c 62 72 3e 0a 20 20 20 20 20 20 20 20 3c 70 20 73 74 79 6c 65 3d 22 6d 61 78 2d 77 69 64 74 68 | <br>.........<p.style="max-width |
| 0940 | 3a 20 35 30 30 70 78 3b 6d 61 72 67 69 6e 3a 20 61 75 74 6f 3b 22 3e 49 66 20 79 6f 75 20 68 61 | :.500px;margin:.auto;">If.you.ha |
| 0960 | 76 65 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 20 77 69 74 68 20 74 68 65 20 6c 61 74 65 73 74 20 | ve.any.problems.with.the.latest. |
| 0980 | 76 65 72 73 69 6f 6e 20 70 6c 65 61 73 65 20 3c 61 20 68 72 65 66 3d 22 2f 6c 6f 67 73 22 3e 44 | version.please.<a.href="/logs">D |
| 09a0 | 6f 77 6e 6c 6f 61 64 3c 2f 61 3e 20 64 65 62 75 67 20 66 69 6c 65 73 20 61 6e 64 20 73 65 6e 64 | ownload</a>.debug.files.and.send |
| 09c0 | 20 74 68 65 6d 20 74 6f 20 63 75 73 6f 6d 65 72 20 73 75 70 70 6f 72 74 2e 0a 20 20 20 20 3c 2f | .them.to.cusomer.support......</ |
| 09e0 | 64 69 76 3e 0a 3c 2f 62 6f 64 79 3e 0a 22 22 22 0a 0a 6c 6f 67 5f 66 69 6c 65 20 3d 20 6c 6f 67 | div>.</body>."""..log_file.=.log |
| 0a00 | 67 69 6e 67 2e 68 61 6e 64 6c 65 72 73 2e 57 61 74 63 68 65 64 46 69 6c 65 48 61 6e 64 6c 65 72 | ging.handlers.WatchedFileHandler |
| 0a20 | 28 4c 4f 47 5f 46 49 4c 45 4e 41 4d 45 29 0a 6c 6f 67 5f 73 74 64 6f 75 74 20 3d 20 6c 6f 67 67 | (LOG_FILENAME).log_stdout.=.logg |
| 0a40 | 69 6e 67 2e 53 74 72 65 61 6d 48 61 6e 64 6c 65 72 28 73 79 73 2e 73 74 64 6f 75 74 29 0a 6c 6f | ing.StreamHandler(sys.stdout).lo |
| 0a60 | 67 67 69 6e 67 2e 62 61 73 69 63 43 6f 6e 66 69 67 28 68 61 6e 64 6c 65 72 73 3d 5b 6c 6f 67 5f | gging.basicConfig(handlers=[log_ |
| 0a80 | 73 74 64 6f 75 74 2c 20 6c 6f 67 5f 66 69 6c 65 5d 29 0a 6c 6f 67 67 65 72 5f 73 77 69 74 63 68 | stdout,.log_file]).logger_switch |
| 0aa0 | 20 3d 20 6c 6f 67 67 69 6e 67 2e 67 65 74 4c 6f 67 67 65 72 28 22 73 77 69 74 63 68 22 29 0a 6c | .=.logging.getLogger("switch").l |
| 0ac0 | 6f 67 67 65 72 5f 73 77 69 74 63 68 2e 73 65 74 4c 65 76 65 6c 28 6c 6f 67 67 69 6e 67 2e 44 45 | ogger_switch.setLevel(logging.DE |
| 0ae0 | 42 55 47 29 0a 6c 6f 67 67 65 72 5f 75 70 64 61 74 65 20 3d 20 6c 6f 67 67 69 6e 67 2e 67 65 74 | BUG).logger_update.=.logging.get |
| 0b00 | 4c 6f 67 67 65 72 28 22 75 70 64 61 74 65 22 29 0a 6c 6f 67 67 65 72 5f 75 70 64 61 74 65 2e 73 | Logger("update").logger_update.s |
| 0b20 | 65 74 4c 65 76 65 6c 28 6c 6f 67 67 69 6e 67 2e 44 45 42 55 47 29 0a 0a 61 70 70 20 3d 20 46 6c | etLevel(logging.DEBUG)..app.=.Fl |
| 0b40 | 61 73 6b 28 5f 5f 6e 61 6d 65 5f 5f 29 0a 61 70 70 2e 63 6f 6e 66 69 67 5b 22 53 45 4e 44 5f 46 | ask(__name__).app.config["SEND_F |
| 0b60 | 49 4c 45 5f 4d 41 58 5f 41 47 45 5f 44 45 46 41 55 4c 54 22 5d 20 3d 20 33 30 30 0a 61 70 70 2e | ILE_MAX_AGE_DEFAULT"].=.300.app. |
| 0b80 | 73 65 63 72 65 74 5f 6b 65 79 20 3d 20 41 50 50 5f 4b 45 59 0a 0a 0a 40 61 70 70 2e 72 6f 75 74 | secret_key.=.APP_KEY...@app.rout |
| 0ba0 | 65 28 22 2f 22 2c 20 6d 65 74 68 6f 64 73 3d 5b 22 47 45 54 22 2c 20 22 50 4f 53 54 22 5d 29 0a | e("/",.methods=["GET",."POST"]). |
| 0bc0 | 64 65 66 20 69 6e 64 65 78 28 29 3a 0a 20 20 20 20 69 66 20 72 65 71 75 65 73 74 2e 6d 65 74 68 | def.index():.....if.request.meth |
| 0be0 | 6f 64 20 3d 3d 20 22 50 4f 53 54 22 3a 0a 20 20 20 20 20 20 20 20 6d 61 74 63 68 20 72 65 71 75 | od.==."POST":.........match.requ |
| 0c00 | 65 73 74 2e 66 6f 72 6d 2e 67 65 74 28 22 76 61 6c 75 65 22 29 3a 0a 20 20 20 20 20 20 20 20 20 | est.form.get("value"):.......... |
| 0c20 | 20 20 20 63 61 73 65 20 22 6f 6e 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 | ...case."on":.................se |
| 0c40 | 73 73 69 6f 6e 5b 22 73 77 69 74 63 68 22 5d 20 3d 20 54 72 75 65 0a 20 20 20 20 20 20 20 20 20 | ssion["switch"].=.True.......... |
| 0c60 | 20 20 20 20 20 20 20 6c 6f 67 67 65 72 5f 73 77 69 74 63 68 2e 69 6e 66 6f 28 22 53 77 69 74 63 | .......logger_switch.info("Switc |
| 0c80 | 68 20 4f 6e 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 22 6f 66 66 22 3a 0a 20 | h.On").............case."off":.. |
| 0ca0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 73 73 69 6f 6e 5b 22 73 77 69 74 63 68 22 5d | ...............session["switch"] |
| 0cc0 | 20 3d 20 46 61 6c 73 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 67 67 65 72 5f | .=.False.................logger_ |
| 0ce0 | 73 77 69 74 63 68 2e 69 6e 66 6f 28 22 53 77 69 74 63 68 20 4f 66 66 22 29 0a 20 20 20 20 20 20 | switch.info("Switch.Off")....... |
| 0d00 | 20 20 20 20 20 20 63 61 73 65 20 22 63 6f 6c 6f 72 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 | ......case."color":............. |
| 0d20 | 20 20 20 20 73 65 73 73 69 6f 6e 5b 22 63 6f 6c 6f 72 22 5d 20 3d 20 6e 6f 74 20 73 65 73 73 69 | ....session["color"].=.not.sessi |
| 0d40 | 6f 6e 2e 67 65 74 28 22 63 6f 6c 6f 72 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | on.get("color")................. |
| 0d60 | 73 65 73 73 69 6f 6e 5b 22 73 77 69 74 63 68 22 5d 20 3d 20 54 72 75 65 0a 20 20 20 20 20 20 20 | session["switch"].=.True........ |
| 0d80 | 20 20 20 20 20 20 20 20 20 6c 6f 67 67 65 72 5f 73 77 69 74 63 68 2e 69 6e 66 6f 28 22 53 77 69 | .........logger_switch.info("Swi |
| 0da0 | 74 63 68 20 43 6f 6c 6f 72 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 5f 3a 0a | tch.Color").............case._:. |
| 0dc0 | 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 73 73 69 6f 6e 5b 22 73 77 69 74 63 68 22 | ................session["switch" |
| 0de0 | 5d 20 3d 20 54 72 75 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 73 73 0a 20 20 | ].=.True.................pass... |
| 0e00 | 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 64 69 72 65 63 74 28 22 2f 22 29 0a 20 20 20 20 6d | ......return.redirect("/").....m |
| 0e20 | 61 74 63 68 20 73 65 73 73 69 6f 6e 2e 67 65 74 28 22 73 77 69 74 63 68 22 2c 20 46 61 6c 73 65 | atch.session.get("switch",.False |
| 0e40 | 29 2c 20 73 65 73 73 69 6f 6e 2e 67 65 74 28 22 63 6f 6c 6f 72 22 2c 20 46 61 6c 73 65 29 3a 0a | ),.session.get("color",.False):. |
| 0e60 | 20 20 20 20 20 20 20 20 63 61 73 65 20 5b 54 72 75 65 2c 20 54 72 75 65 5d 3a 0a 20 20 20 20 20 | ........case.[True,.True]:...... |
| 0e80 | 20 20 20 20 20 20 20 63 5f 76 61 6c 2c 20 6e 5f 76 61 6c 20 3d 20 22 63 6f 6c 6f 72 22 2c 20 22 | .......c_val,.n_val.=."color",." |
| 0ea0 | 6f 66 66 22 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 5b 54 72 75 65 2c 20 46 61 6c 73 65 5d 3a | off".........case.[True,.False]: |
| 0ec0 | 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 5f 76 61 6c 2c 20 6e 5f 76 61 6c 20 3d 20 22 6f 6e 22 | .............c_val,.n_val.=."on" |
| 0ee0 | 2c 20 22 6f 66 66 22 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 5b 46 61 6c 73 65 2c 20 5f 5d 3a | ,."off".........case.[False,._]: |
| 0f00 | 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 5f 76 61 6c 2c 20 6e 5f 76 61 6c 20 3d 20 22 6f 66 66 | .............c_val,.n_val.=."off |
| 0f20 | 22 2c 20 22 6f 6e 22 0a 20 20 20 20 72 65 74 75 72 6e 20 72 65 6e 64 65 72 5f 74 65 6d 70 6c 61 | ",."on".....return.render_templa |
| 0f40 | 74 65 5f 73 74 72 69 6e 67 28 54 45 4d 50 4c 41 54 45 2c 20 63 75 72 72 65 6e 74 3d 63 5f 76 61 | te_string(TEMPLATE,.current=c_va |
| 0f60 | 6c 2c 20 6e 65 78 74 3d 6e 5f 76 61 6c 2c 20 76 65 72 73 69 6f 6e 3d 56 45 52 53 49 4f 4e 5f 53 | l,.next=n_val,.version=VERSION_S |
| 0f80 | 54 52 29 0a 0a 0a 63 72 63 31 36 20 3d 20 6d 6b 50 72 65 64 65 66 69 6e 65 64 43 72 63 46 75 6e | TR)...crc16.=.mkPredefinedCrcFun |
| 0fa0 | 28 22 78 2d 32 35 22 29 0a 0a 0a 64 65 66 20 64 6f 5f 75 70 64 61 74 65 28 66 69 6c 65 29 3a 0a | ("x-25")...def.do_update(file):. |
| 0fc0 | 20 20 20 20 64 61 74 61 20 3d 20 66 69 6c 65 2e 72 65 61 64 28 29 0a 20 20 20 20 69 66 20 6c 65 | ....data.=.file.read().....if.le |
| 0fe0 | 6e 28 64 61 74 61 29 20 21 3d 20 38 32 37 32 3a 0a 20 20 20 20 20 20 20 20 6c 6f 67 67 65 72 5f | n(data).!=.8272:.........logger_ |
| 1000 | 75 70 64 61 74 65 2e 69 6e 66 6f 28 22 55 70 64 61 74 65 20 66 69 6c 65 20 68 61 73 20 77 72 6f | update.info("Update.file.has.wro |
| 1020 | 6e 67 20 6c 65 6e 67 74 68 22 29 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 46 61 6c 73 65 | ng.length").........return.False |
| 1040 | 0a 20 20 20 20 6d 61 67 69 63 2c 20 76 65 72 73 69 6f 6e 2c 20 73 69 67 6e 65 64 2c 20 76 65 6e | .....magic,.version,.signed,.ven |
| 1060 | 64 6f 72 2c 20 70 72 6f 64 75 63 74 2c 20 69 76 2c 20 64 61 74 61 20 3d 20 73 74 72 75 63 74 2e | dor,.product,.iv,.data.=.struct. |
| 1080 | 75 6e 70 61 63 6b 28 22 3c 38 73 49 3f 33 78 31 36 73 31 36 73 31 36 73 38 32 30 38 73 22 2c 20 | unpack("<8sI?3x16s16s16s8208s",. |
| 10a0 | 64 61 74 61 29 0a 20 20 20 20 69 66 20 6d 61 67 69 63 20 21 3d 20 62 22 55 70 64 61 74 65 5c 78 | data).....if.magic.!=.b"Update\x |
| 10c0 | 30 30 5c 78 30 30 22 3a 0a 20 20 20 20 20 20 20 20 6c 6f 67 67 65 72 5f 75 70 64 61 74 65 2e 69 | 00\x00":.........logger_update.i |
| 10e0 | 6e 66 6f 28 22 47 6f 74 20 77 72 6f 6e 67 20 6d 61 67 69 63 20 76 61 6c 75 65 20 25 73 22 2c 20 | nfo("Got.wrong.magic.value.%s",. |
| 1100 | 6d 61 67 69 63 29 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 46 61 6c 73 65 0a 20 20 20 20 | magic).........return.False..... |
| 1120 | 69 66 20 76 65 72 73 69 6f 6e 20 3c 3d 20 56 45 52 53 49 4f 4e 5f 4e 55 4d 3a 0a 20 20 20 20 20 | if.version.<=.VERSION_NUM:...... |
| 1140 | 20 20 20 6c 6f 67 67 65 72 5f 75 70 64 61 74 65 2e 69 6e 66 6f 28 22 44 69 73 61 6c 6c 6f 77 65 | ...logger_update.info("Disallowe |
| 1160 | 64 20 64 6f 77 6e 67 72 61 64 65 20 66 72 6f 6d 20 63 75 72 72 65 6e 74 20 76 65 72 73 69 6f 6e | d.downgrade.from.current.version |
| 1180 | 20 25 64 20 74 6f 20 25 64 22 2c 20 56 45 52 53 49 4f 4e 5f 4e 55 4d 2c 20 76 65 72 73 69 6f 6e | .%d.to.%d",.VERSION_NUM,.version |
| 11a0 | 29 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 46 61 6c 73 65 0a 20 20 20 20 6c 6f 67 67 65 | ).........return.False.....logge |
| 11c0 | 72 5f 75 70 64 61 74 65 2e 69 6e 66 6f 28 22 56 61 6c 69 64 20 75 70 64 61 74 65 20 68 65 61 64 | r_update.info("Valid.update.head |
| 11e0 | 65 72 20 66 6f 72 20 25 73 20 25 73 20 74 6f 20 76 65 72 73 69 6f 6e 20 25 64 22 2c 20 76 65 6e | er.for.%s.%s.to.version.%d",.ven |
| 1200 | 64 6f 72 2c 20 70 72 6f 64 75 63 74 2c 20 76 65 72 73 69 6f 6e 29 0a 20 20 20 20 6c 6f 67 67 65 | dor,.product,.version).....logge |
| 1220 | 72 5f 75 70 64 61 74 65 2e 69 6e 66 6f 28 22 44 65 63 72 79 70 74 69 6e 67 20 75 70 64 61 74 65 | r_update.info("Decrypting.update |
| 1240 | 20 63 6f 6e 74 65 6e 74 22 29 0a 20 20 20 20 63 69 70 68 65 72 20 3d 20 41 45 53 2e 6e 65 77 28 | .content").....cipher.=.AES.new( |
| 1260 | 41 45 53 5f 4b 45 59 2c 20 41 45 53 2e 4d 4f 44 45 5f 43 42 43 2c 20 69 76 29 0a 20 20 20 20 64 | AES_KEY,.AES.MODE_CBC,.iv).....d |
| 1280 | 61 74 61 20 3d 20 63 69 70 68 65 72 2e 64 65 63 72 79 70 74 28 64 61 74 61 29 0a 20 20 20 20 6c | ata.=.cipher.decrypt(data).....l |
| 12a0 | 6f 67 67 65 72 5f 75 70 64 61 74 65 2e 64 65 62 75 67 28 22 44 65 63 72 79 70 74 65 64 20 63 6f | ogger_update.debug("Decrypted.co |
| 12c0 | 6e 74 65 6e 74 3a 20 25 73 22 2c 20 64 61 74 61 29 0a 20 20 20 20 6d 61 67 69 63 2c 20 66 69 72 | ntent:.%s",.data).....magic,.fir |
| 12e0 | 6d 77 61 72 65 2c 20 63 68 65 63 6b 5f 63 72 63 20 3d 20 73 74 72 75 63 74 2e 75 6e 70 61 63 6b | mware,.check_crc.=.struct.unpack |
| 1300 | 28 22 3c 38 73 36 78 38 31 39 32 73 48 22 2c 20 64 61 74 61 29 0a 20 20 20 20 69 66 20 6d 61 67 | ("<8s6x8192sH",.data).....if.mag |
| 1320 | 69 63 20 21 3d 20 62 22 44 45 43 52 59 50 54 5c 78 30 30 22 3a 0a 20 20 20 20 20 20 20 20 6c 6f | ic.!=.b"DECRYPT\x00":.........lo |
| 1340 | 67 67 65 72 5f 75 70 64 61 74 65 2e 69 6e 66 6f 28 22 57 72 6f 6e 67 20 6d 61 67 69 63 20 6f 6e | gger_update.info("Wrong.magic.on |
| 1360 | 20 75 70 64 61 74 65 20 63 6f 6e 74 65 6e 74 20 25 73 22 2c 20 6d 61 67 69 63 29 0a 20 20 20 20 | .update.content.%s",.magic)..... |
| 1380 | 20 20 20 20 72 65 74 75 72 6e 20 46 61 6c 73 65 0a 20 20 20 20 63 61 6c 63 5f 63 72 63 20 3d 20 | ....return.False.....calc_crc.=. |
| 13a0 | 63 72 63 31 36 28 64 61 74 61 5b 3a 2d 32 5d 29 0a 20 20 20 20 69 66 20 63 61 6c 63 5f 63 72 63 | crc16(data[:-2]).....if.calc_crc |
| 13c0 | 20 21 3d 20 63 68 65 63 6b 5f 63 72 63 3a 0a 20 20 20 20 20 20 20 20 6c 6f 67 67 65 72 5f 75 70 | .!=.check_crc:.........logger_up |
| 13e0 | 64 61 74 65 2e 69 6e 66 6f 28 22 43 52 43 20 63 68 65 63 6b 20 66 61 69 6c 65 64 2e 20 67 69 76 | date.info("CRC.check.failed..giv |
| 1400 | 65 6e 3a 20 25 64 2c 20 63 61 6c 63 75 6c 61 74 65 64 3a 20 25 64 22 2c 20 63 68 65 63 6b 5f 63 | en:.%d,.calculated:.%d",.check_c |
| 1420 | 72 63 2c 20 63 61 6c 63 5f 63 72 63 29 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 46 61 6c | rc,.calc_crc).........return.Fal |
| 1440 | 73 65 0a 20 20 20 20 69 66 20 73 69 67 6e 65 64 3a 0a 20 20 20 20 20 20 20 20 23 20 77 65 20 64 | se.....if.signed:.........#.we.d |
| 1460 | 6f 6e 27 74 20 6e 65 65 64 20 74 68 69 73 20 61 73 20 64 61 74 61 20 69 73 20 65 6e 63 72 79 70 | on't.need.this.as.data.is.encryp |
| 1480 | 74 65 64 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 46 61 6c 73 65 0a 20 20 20 20 6c 6f 67 | ted.........return.False.....log |
| 14a0 | 67 65 72 5f 75 70 64 61 74 65 2e 69 6e 66 6f 28 22 41 6c 6c 20 63 68 65 63 6b 73 20 70 61 73 73 | ger_update.info("All.checks.pass |
| 14c0 | 65 64 2c 20 77 72 69 74 69 6e 67 20 6e 65 77 20 66 69 72 6d 77 61 72 65 20 66 69 6c 65 22 29 0a | ed,.writing.new.firmware.file"). |
| 14e0 | 20 20 20 20 6f 70 65 6e 28 55 50 44 41 54 45 5f 46 49 4c 45 4e 41 4d 45 2c 20 22 77 62 22 29 2e | ....open(UPDATE_FILENAME,."wb"). |
| 1500 | 77 72 69 74 65 28 66 69 72 6d 77 61 72 65 2e 73 74 72 69 70 28 62 22 5c 78 30 30 22 29 29 0a 20 | write(firmware.strip(b"\x00")).. |
| 1520 | 20 20 20 6f 73 2e 63 68 6d 6f 64 28 55 50 44 41 54 45 5f 46 49 4c 45 4e 41 4d 45 2c 20 30 6f 37 | ...os.chmod(UPDATE_FILENAME,.0o7 |
| 1540 | 37 37 29 0a 20 20 20 20 6c 6f 67 67 65 72 5f 75 70 64 61 74 65 2e 69 6e 66 6f 28 22 46 69 72 6d | 77).....logger_update.info("Firm |
| 1560 | 77 61 72 65 20 68 61 73 20 62 65 65 6e 20 77 72 69 74 74 65 6e 22 29 0a 20 20 20 20 72 65 74 75 | ware.has.been.written").....retu |
| 1580 | 72 6e 20 54 72 75 65 0a 0a 0a 40 61 70 70 2e 72 6f 75 74 65 28 22 2f 75 70 64 61 74 65 22 2c 20 | rn.True...@app.route("/update",. |
| 15a0 | 6d 65 74 68 6f 64 73 3d 5b 22 47 45 54 22 2c 20 22 50 4f 53 54 22 5d 29 0a 64 65 66 20 75 70 64 | methods=["GET",."POST"]).def.upd |
| 15c0 | 61 74 65 28 29 3a 0a 20 20 20 20 69 66 20 72 65 71 75 65 73 74 2e 6d 65 74 68 6f 64 20 3d 3d 20 | ate():.....if.request.method.==. |
| 15e0 | 22 50 4f 53 54 22 3a 0a 20 20 20 20 20 20 20 20 69 66 20 22 66 69 6c 65 22 20 6e 6f 74 20 69 6e | "POST":.........if."file".not.in |
| 1600 | 20 72 65 71 75 65 73 74 2e 66 69 6c 65 73 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6c 61 73 | .request.files:.............flas |
| 1620 | 68 28 22 53 6f 6d 65 74 68 69 6e 67 20 77 65 6e 74 20 77 72 6f 6e 67 22 29 0a 20 20 20 20 20 20 | h("Something.went.wrong")....... |
| 1640 | 20 20 65 6c 69 66 20 72 65 71 75 65 73 74 2e 66 69 6c 65 73 5b 22 66 69 6c 65 22 5d 2e 66 69 6c | ..elif.request.files["file"].fil |
| 1660 | 65 6e 61 6d 65 20 3d 3d 20 22 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6c 61 73 68 28 22 | ename.==."":.............flash(" |
| 1680 | 4e 6f 20 66 69 6c 65 20 73 65 6c 65 63 74 65 64 22 29 0a 20 20 20 20 20 20 20 20 65 6c 69 66 20 | No.file.selected").........elif. |
| 16a0 | 64 6f 5f 75 70 64 61 74 65 28 72 65 71 75 65 73 74 2e 66 69 6c 65 73 5b 22 66 69 6c 65 22 5d 29 | do_update(request.files["file"]) |
| 16c0 | 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 67 67 65 72 5f 75 70 64 61 74 65 2e 69 6e 66 6f | :.............logger_update.info |
| 16e0 | 28 22 55 70 64 61 74 65 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2e 20 52 65 62 6f 6f 74 69 | ("Update.was.successful..Rebooti |
| 1700 | 6e 67 2e 2e 2e 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 22 53 45 52 56 45 52 5f 53 | ng...").............if."SERVER_S |
| 1720 | 4f 46 54 57 41 52 45 22 20 69 6e 20 6f 73 2e 65 6e 76 69 72 6f 6e 3a 0a 20 20 20 20 20 20 20 20 | OFTWARE".in.os.environ:......... |
| 1740 | 20 20 20 20 20 20 20 20 23 20 72 75 6e 6e 69 6e 67 20 75 6e 64 65 72 20 67 75 6e 69 63 6f 72 6e | ........#.running.under.gunicorn |
| 1760 | 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 73 2e 6b 69 6c 6c 28 6f 73 2e 67 65 74 70 | .................os.kill(os.getp |
| 1780 | 70 69 64 28 29 2c 20 73 69 67 6e 61 6c 2e 53 49 47 54 45 52 4d 29 0a 20 20 20 20 20 20 20 20 20 | pid(),.signal.SIGTERM).......... |
| 17a0 | 20 20 20 65 6c 73 65 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 73 2e 6b 69 6c 6c | ...else:.................os.kill |
| 17c0 | 28 6f 73 2e 67 65 74 70 69 64 28 29 2c 20 73 69 67 6e 61 6c 2e 53 49 47 49 4e 54 29 0a 20 20 20 | (os.getpid(),.signal.SIGINT).... |
| 17e0 | 20 20 20 20 20 20 20 20 20 66 6c 61 73 68 28 22 55 70 64 61 74 65 20 73 75 63 63 65 73 73 66 75 | .........flash("Update.successfu |
| 1800 | 6c 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 22 0a 20 20 20 20 20 | l").............return."""...... |
| 1820 | 20 20 20 20 20 20 20 3c 21 44 4f 43 54 59 50 45 20 68 74 6d 6c 3e 0a 20 20 20 20 20 20 20 20 20 | .......<!DOCTYPE.html>.......... |
| 1840 | 20 20 20 3c 6d 65 74 61 20 68 74 74 70 2d 65 71 75 69 76 3d 22 72 65 66 72 65 73 68 22 20 63 6f | ...<meta.http-equiv="refresh".co |
| 1860 | 6e 74 65 6e 74 3d 22 33 22 3e 0a 20 20 20 20 20 20 20 20 20 20 20 20 55 70 64 61 74 65 20 72 75 | ntent="3">.............Update.ru |
| 1880 | 6e 6e 69 6e 67 20 70 6c 65 61 73 65 20 77 61 69 74 2e 2e 2e 0a 20 20 20 20 20 20 20 20 20 20 20 | nning.please.wait............... |
| 18a0 | 20 22 22 22 0a 20 20 20 20 20 20 20 20 65 6c 73 65 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 | .""".........else:.............f |
| 18c0 | 6c 61 73 68 28 22 49 6e 76 61 6c 69 64 20 75 70 64 61 74 65 20 66 69 6c 65 22 29 0a 20 20 20 20 | lash("Invalid.update.file")..... |
| 18e0 | 20 20 20 20 72 65 74 75 72 6e 20 72 65 64 69 72 65 63 74 28 22 2f 75 70 64 61 74 65 22 29 0a 20 | ....return.redirect("/update").. |
| 1900 | 20 20 20 72 65 74 75 72 6e 20 72 65 6e 64 65 72 5f 74 65 6d 70 6c 61 74 65 5f 73 74 72 69 6e 67 | ...return.render_template_string |
| 1920 | 28 55 50 44 41 54 45 5f 54 45 4d 50 4c 41 54 45 2c 20 76 65 72 73 69 6f 6e 3d 56 45 52 53 49 4f | (UPDATE_TEMPLATE,.version=VERSIO |
| 1940 | 4e 5f 53 54 52 29 0a 0a 0a 40 61 70 70 2e 72 6f 75 74 65 28 22 2f 6c 6f 67 73 22 29 0a 64 65 66 | N_STR)...@app.route("/logs").def |
| 1960 | 20 6c 6f 67 73 28 29 3a 0a 20 20 20 20 74 72 79 3a 0a 20 20 20 20 20 20 20 20 6c 6f 67 73 20 3d | .logs():.....try:.........logs.= |
| 1980 | 20 6f 70 65 6e 28 4c 4f 47 5f 46 49 4c 45 4e 41 4d 45 2c 20 22 72 62 22 29 2e 72 65 61 64 28 29 | .open(LOG_FILENAME,."rb").read() |
| 19a0 | 0a 20 20 20 20 20 20 20 20 6f 73 2e 75 6e 6c 69 6e 6b 28 4c 4f 47 5f 46 49 4c 45 4e 41 4d 45 29 | .........os.unlink(LOG_FILENAME) |
| 19c0 | 0a 20 20 20 20 20 20 20 20 6c 6f 67 67 65 72 5f 73 77 69 74 63 68 2e 69 6e 66 6f 28 22 4c 6f 67 | .........logger_switch.info("Log |
| 19e0 | 20 66 69 6c 65 20 64 6f 77 6e 6c 6f 61 64 65 64 2c 20 72 65 6d 6f 76 69 6e 67 20 6f 6c 64 20 6c | .file.downloaded,.removing.old.l |
| 1a00 | 6f 67 22 29 0a 20 20 20 20 65 78 63 65 70 74 20 46 69 6c 65 4e 6f 74 46 6f 75 6e 64 45 72 72 6f | og").....except.FileNotFoundErro |
| 1a20 | 72 3a 0a 20 20 20 20 20 20 20 20 6c 6f 67 73 20 3d 20 62 22 22 0a 20 20 20 20 72 65 74 75 72 6e | r:.........logs.=.b"".....return |
| 1a40 | 20 52 65 73 70 6f 6e 73 65 28 6c 6f 67 73 2c 20 6d 69 6d 65 74 79 70 65 3d 22 74 65 78 74 2f 70 | .Response(logs,.mimetype="text/p |
| 1a60 | 6c 61 69 6e 22 2c 20 68 65 61 64 65 72 73 3d 7b 22 43 6f 6e 74 65 6e 74 2d 64 69 73 70 6f 73 69 | lain",.headers={"Content-disposi |
| 1a80 | 74 69 6f 6e 22 3a 20 22 61 74 74 61 63 68 6d 65 6e 74 22 7d 29 0a 0a 0a 69 66 20 5f 5f 6e 61 6d | tion":."attachment"})...if.__nam |
| 1aa0 | 65 5f 5f 20 3d 3d 20 22 5f 5f 6d 61 69 6e 5f 5f 22 3a 0a 20 20 20 20 61 70 70 2e 72 75 6e 28 64 | e__.==."__main__":.....app.run(d |
| 1ac0 | 65 62 75 67 3d 46 61 6c 73 65 29 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ebug=False)..................... |
| 1ae0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 1b00 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 1b20 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 1b40 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 1b60 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 1b80 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 1ba0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 1bc0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 1be0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 1c00 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 1c20 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 1c40 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 1c60 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 1c80 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 1ca0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 1cc0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 1ce0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 1d00 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 1d20 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 1d40 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 1d60 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 1d80 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 1da0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 1dc0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 1de0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 1e00 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 1e20 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 1e40 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 1e60 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 1e80 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 1ea0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 1ec0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 1ee0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 1f00 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 1f20 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 1f40 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 1f60 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 1f80 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 1fa0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 1fc0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 1fe0 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................................ |
| 2000 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 de 09 0a | ................. |