228 Commits

Author SHA1 Message Date
mco-system
a23f7b89e6 feat: outline ahref hover only 2023-04-23 21:28:17 +11:00
mco-system
868f34a378 feat: outline ahref hover only 2023-04-23 21:28:12 +11:00
mco-system
1aa5ac3c8b feat: outline ahref 2023-04-23 21:23:41 +11:00
mco-system
30893d3f34 fix: strong font for bio/abstract 2023-04-23 20:26:27 +11:00
mco-system
a895d12a09 fix: colored links in bio/desc/abstract 2023-04-23 19:45:09 +11:00
mco-system
007889e48c fix: markup safe for astract 2023-04-23 19:25:46 +11:00
mco-system
404e2c05bd fix: markup safe for description and biography 2023-04-23 19:15:17 +11:00
mco-system
f94bd81da7 doc: more doc 2023-04-23 19:10:20 +11:00
mco-system
19ed58f579 toto 2023-04-23 18:51:48 +11:00
mco-system
e2b3d8600c fix: valeur travail 2023-04-23 18:18:07 +11:00
mco-system
9ffd380755 wtf ! 2023-04-23 18:03:11 +11:00
mco-system
8dca642d0f fix: add extra hosts 2023-04-23 17:59:34 +11:00
mco-system
0386b3313e fix: add extra hosts 2023-04-23 17:57:53 +11:00
mco-system
a1d95603a0 fix: add extra hosts 2023-04-23 17:57:37 +11:00
mco-system
ecb2df60f4 doc: refresh 2023-04-22 18:54:57 +11:00
mco-system
4542ed1303 doc: refresh 2023-04-22 18:53:55 +11:00
mco-system
5bd0596281 build: Docker version 2023-04-22 17:07:56 +11:00
mco-system
db7fcbfc3c chore: do not log UnknownSpeakerError 2023-04-21 23:03:27 +11:00
mco-system
9050304a30 typo 2023-04-21 01:25:44 +11:00
mco-system
e15beb74d1 Merge branch 'beta' 2023-04-21 00:40:49 +11:00
mco-system
7883ac1ae6 chore: DEBUG LOG LEVEL 2023-04-21 00:34:49 +11:00
mco-system
0028302b5a chore: INFO log level 2023-04-21 00:18:27 +11:00
ee43e98385 beta (#4)
Co-authored-by: mco-system <michael.costa@mcos.nc>
Reviewed-on: #4
2023-04-20 15:09:57 +02:00
mco-system
ecc56281bb Prod ready 2023-04-21 00:07:47 +11:00
mco-system
9ffdeaa036 add space 2023-04-20 21:48:10 +11:00
mco-system
97435bb8a2 add space 2023-04-20 21:44:13 +11:00
mco-system
fce78f0def add space 2023-04-20 21:42:08 +11:00
mco-system
fb153a6309 add space 2023-04-20 21:37:16 +11:00
mco-system
09a4deb0d1 chore: planning wip 2023-04-19 21:29:39 +11:00
mco-system
4435f33e0b chore: planning 0.10 2023-04-19 21:18:27 +11:00
mco-system
f6decb14ed chore: planning 0.10 2023-04-19 21:01:44 +11:00
mco-system
1fc2062eb5 feat: THSF logo as favicon 2023-04-19 20:56:00 +11:00
mco-system
95d1cdf741 fix: same speaker in multiple slots 2023-04-16 22:59:45 +11:00
mco-system
9d52c03cc8 refactor: planning 2023-04-16 18:38:01 +11:00
mco-system
45ea9077a4 fix/feat: various 2023-04-13 06:26:51 +11:00
mco-system
529c12ded6 fix/feat: various 2023-04-12 22:31:33 +11:00
mco-system
86b2e8e21e feat: We Make Porn 2023-04-11 21:41:36 +11:00
mco-system
84d8fe3e3e feat: We Make Porn 2023-04-11 21:40:11 +11:00
mco-system
38b99f4147 feat: We Make Porn 2023-04-11 21:38:48 +11:00
mco-system
efdf661a78 feat: We Make Porn 2023-04-11 21:37:21 +11:00
mco-system
f7fdb2c2cf feat: We Make Porn 2023-04-11 21:35:58 +11:00
mco-system
98825cc9b6 feat: We Make Porn 2023-04-11 21:34:34 +11:00
mco-system
cc65354e3a feat: We Make Porn 2023-04-11 21:30:12 +11:00
mco-system
b7b1fe8e93 feat: We Make Porn 2023-04-11 21:28:51 +11:00
mco-system
a0f5abe478 feat: We Make Porn 2023-04-11 21:27:50 +11:00
mco-system
f39f23f6f0 feat: We Make Porn 2023-04-11 21:26:16 +11:00
mco-system
9b65f908f7 feat: We Make Porn 2023-04-11 21:23:27 +11:00
mco-system
e087eb3de6 fix: portrait mode for mobile 2023-04-11 20:38:44 +11:00
mco-system
ad0f334fd4 fix: portrait mode for mobile 2023-04-11 20:29:27 +11:00
mco-system
961d5d00ea fix: portrait mode for mobile 2023-04-11 20:14:14 +11:00
mco-system
5cd1151d46 fix: portrait mode for mobile 2023-04-11 20:06:18 +11:00
mco-system
cf2fb60676 fix: portrait mode for mobile 2023-04-11 20:04:42 +11:00
mco-system
07f81bc2c1 fix: portrait mode for mobile 2023-04-11 20:02:04 +11:00
mco-system
8df229268e fix: portrait mode for mobile 2023-04-11 19:52:51 +11:00
mco-system
a58257e495 fix: portrait mode for mobile 2023-04-11 19:48:59 +11:00
mco-system
3022868867 fix: portrait mode for mobile 2023-04-11 19:46:44 +11:00
mco-system
dc20172029 fix: portrait mode for mobile 2023-04-11 19:46:25 +11:00
mco-system
a0558b9330 fix: portrait mode for mobile 2023-04-11 19:45:18 +11:00
mco-system
a114a15d85 fix: portrait mode for mobile 2023-04-11 19:42:06 +11:00
mco-system
2300744f8d fix: portrait mode for mobile 2023-04-11 19:32:45 +11:00
mco-system
7d1c3fe870 fix: target='_new' for hrefs 2023-04-11 19:17:00 +11:00
mco-system
885f4e0512 fix: target='_new' for hrefs 2023-04-11 19:10:25 +11:00
mco-system
09d501686c fix: target='_new' for hrefs 2023-04-11 19:06:45 +11:00
mco-system
f0ee8e8de3 fix: target='_new' for hrefs 2023-04-11 19:05:13 +11:00
mco-system
26f9fa1c45 fix: target='_new' for hrefs 2023-04-11 18:33:56 +11:00
mco-system
09d0ac69d1 fix: target='_new' for hrefs 2023-04-11 18:32:36 +11:00
mco-system
c9124de1c4 fix: target='_new' for hrefs 2023-04-11 18:29:14 +11:00
mco-system
201517071f fix: target='_new' for hrefs 2023-04-11 18:27:43 +11:00
mco-system
cb3e07578d fix: target='_new' for hrefs 2023-04-11 18:25:41 +11:00
mco-system
74adf37ab3 fix: target='_new' for hrefs 2023-04-11 18:24:26 +11:00
mco-system
632c631c9f fix: target='_new' for hrefs 2023-04-11 18:21:10 +11:00
mco-system
8eda15bf62 fix: target='_new' for hrefs 2023-04-11 06:58:26 +11:00
mco-system
c011693ad6 feat: black background for tooltips 2023-04-11 06:54:51 +11:00
mco-system
06a6f08da7 feat: black background for tooltips 2023-04-11 06:49:29 +11:00
mco-system
a8b8b2615d wip: programme 2023-04-10 11:12:26 +11:00
mco-system
7d9586a6f2 wip: programme 2023-04-10 10:50:02 +11:00
mco-system
6b352135cf wip: programme 2023-04-10 10:45:10 +11:00
mco-system
a9db4b982a wip: programme 2023-04-10 10:32:35 +11:00
mco-system
d35ae29014 wip: programme 2023-04-10 08:56:56 +11:00
mco-system
2dc354707f wip: programme 2023-04-09 23:43:18 +11:00
mco-system
d204ca3135 wip: programme 2023-04-09 23:41:59 +11:00
mco-system
4f70139eb8 wip: programme 2023-04-09 22:45:28 +11:00
mco-system
170458b014 wip: programme 2023-04-09 22:13:29 +11:00
mco-system
a1a9ce97ac wip: programme 2023-04-09 21:40:55 +11:00
mco-system
6fee2c2be5 wip: programme 2023-04-09 21:37:50 +11:00
mco-system
61d16815fc wip: programme 2023-04-09 21:22:53 +11:00
mco-system
12f1097214 wip: programme 2023-04-09 21:19:55 +11:00
mco-system
3726814e11 wip: programme 2023-04-09 19:04:35 +11:00
mco-system
e04e12e8f9 wip: programme 2023-04-09 18:50:21 +11:00
mco-system
164385f3e8 wip: programme 2023-04-09 18:49:07 +11:00
mco-system
64c91ea57a wip: programme 2023-04-09 18:46:53 +11:00
mco-system
a475a809d0 wip: programme 2023-04-09 18:43:46 +11:00
mco-system
25234e9c08 wip: programme 2023-04-09 18:40:48 +11:00
mco-system
75e44fa9fd wip: programme 2023-04-09 17:29:44 +11:00
mco-system
b27a73e95c wip: programme 2023-04-09 13:42:19 +11:00
mco-system
9fe3cfec42 wip: programme 2023-04-09 13:40:59 +11:00
mco-system
fb14588521 wip: programme 2023-04-09 13:38:07 +11:00
mco-system
33a1cc2e7f wip: programme 2023-04-09 11:51:41 +11:00
mco-system
ffa1ba62ea wip: programme 2023-04-09 11:42:18 +11:00
mco-system
2b666756a5 wip: programme 2023-04-09 11:40:25 +11:00
mco-system
99d69e6af8 wip: programme 2023-04-09 11:12:29 +11:00
Michael Costa
a76b8e034a wip: planning 2023-04-09 06:17:34 +11:00
Michael Costa
27a6205595 wip: backend 2023-04-08 14:31:17 +11:00
Michael Costa
d61c48e084 wip: backend 2023-04-08 14:20:08 +11:00
Michael Costa
a93e39d984 wip: backend 2023-04-08 14:17:49 +11:00
Michael Costa
8a9df4871f wip: colors 2023-04-08 12:21:20 +11:00
Michael Costa
0eda537713 wip: colors 2023-04-08 12:03:53 +11:00
Michael Costa
6379e65e0e wip: colors 2023-04-08 12:02:02 +11:00
Michael Costa
09a5ca76ef wip: colors 2023-04-08 11:59:46 +11:00
Michael Costa
47901cea2d wip: colors 2023-04-08 11:57:47 +11:00
Michael Costa
14adfbe5fb wip: colors 2023-04-08 11:45:59 +11:00
Michael Costa
69e4f10fa0 wip: colors 2023-04-08 11:31:14 +11:00
Michael Costa
bb377c3846 wip: colors 2023-04-08 11:29:15 +11:00
Michael Costa
106a4595b8 wip: colors 2023-04-08 11:26:11 +11:00
Michael Costa
56724dd166 wip: colors 2023-04-08 11:20:04 +11:00
Michael Costa
e592f6cd17 wip: colors 2023-04-08 11:18:06 +11:00
Michael Costa
af4794bc14 wip: colors 2023-04-08 11:16:04 +11:00
Michael Costa
68d3b31645 wip: colors 2023-04-08 11:14:14 +11:00
Michael Costa
36659f1674 wip: colors 2023-04-08 11:07:18 +11:00
Michael Costa
ae93b5a708 wip: colors 2023-04-08 11:04:54 +11:00
Michael Costa
d1d02c194f wip: colors 2023-04-08 11:02:37 +11:00
Michael Costa
ab50435291 wip: colors 2023-04-08 10:59:07 +11:00
Michael Costa
8001dd34f3 wip: colors 2023-04-08 10:56:24 +11:00
Michael Costa
abe98b67d4 wip: colors 2023-04-08 10:54:54 +11:00
Michael Costa
d6a4098fc9 wip: colors 2023-04-08 10:52:18 +11:00
Michael Costa
8a82fab4f5 wip: colors 2023-04-08 10:45:26 +11:00
Michael Costa
c992116269 wip: colors 2023-04-08 10:41:43 +11:00
Michael Costa
a885c6c8fb wip: colors 2023-04-08 10:34:37 +11:00
Michael Costa
0ed957ac27 wip: colors 2023-04-08 10:32:11 +11:00
mco-system
f063ad1eb0 wip beta 2023-04-07 20:01:20 +11:00
mco-system
3665e66245 wip beta 2023-04-07 19:59:49 +11:00
mco-system
64e0cc290c wip beta 2023-04-07 19:58:51 +11:00
mco-system
2c625d0eff wip beta 2023-04-07 19:57:23 +11:00
mco-system
cde179783d wip beta 2023-04-07 19:54:35 +11:00
mco-system
617a049307 wip beta 2023-04-07 19:52:43 +11:00
mco-system
75c21087f3 wip beta 2023-04-07 19:44:57 +11:00
mco-system
ec00736a2d wip beta 2023-04-07 19:44:17 +11:00
mco-system
1d44a3a2ac wip beta 2023-04-07 19:41:23 +11:00
mco-system
6313043715 wip beta 2023-04-07 19:39:55 +11:00
mco-system
1dae0b9e0f wip beta 2023-04-07 19:37:56 +11:00
mco-system
9cb0860f48 wip beta 2023-04-07 19:35:12 +11:00
mco-system
d6936514ef wip beta 2023-04-07 19:34:03 +11:00
mco-system
069fc6853c wip beta 2023-04-07 19:31:00 +11:00
mco-system
1fd751171e wip beta 2023-04-07 19:29:11 +11:00
mco-system
4bd5075613 wip beta 2023-04-07 19:26:25 +11:00
mco-system
897d0c0045 wip beta 2023-04-07 19:21:27 +11:00
mco-system
6cea3e4941 wip beta 2023-04-07 19:19:52 +11:00
mco-system
43e142a1d4 wip beta 2023-04-07 19:19:06 +11:00
mco-system
c2333fa042 wip beta 2023-04-07 19:18:26 +11:00
mco-system
c40231c102 wip beta 2023-04-07 19:14:09 +11:00
mco-system
ff3fe1c626 wip beta 2023-04-07 19:13:03 +11:00
mco-system
74ac231fbe wip beta 2023-04-07 19:12:24 +11:00
mco-system
93ce255deb wip beta 2023-04-07 19:11:39 +11:00
mco-system
9844c179ab wip beta 2023-04-07 19:07:39 +11:00
mco-system
9b7492c6f1 wip beta 2023-04-07 19:07:00 +11:00
mco-system
18643b2bf1 wip beta 2023-04-07 19:03:57 +11:00
mco-system
63a97fbee3 wip beta 2023-04-07 19:01:06 +11:00
mco-system
e59f43d190 wip beta 2023-04-07 19:00:12 +11:00
mco-system
12f4bb6210 wip beta 2023-04-07 18:59:16 +11:00
mco-system
a78ffee688 wip beta 2023-04-07 18:57:43 +11:00
mco-system
cabdaca639 wip beta 2023-04-07 18:56:42 +11:00
mco-system
fdc32df32a wip beta 2023-04-07 18:53:55 +11:00
mco-system
22b2bb771d wip beta 2023-04-07 18:53:07 +11:00
mco-system
d6f11317db wip beta 2023-04-07 18:51:12 +11:00
mco-system
f3bf59d66f wip beta 2023-04-07 18:49:58 +11:00
mco-system
b24b55e455 wip beta 2023-04-06 23:20:15 +11:00
mco-system
ea764dc07d wip beta 2023-04-06 23:17:23 +11:00
mco-system
a9d03b63fe wip beta 2023-04-06 23:12:03 +11:00
mco-system
ab5c6cf3fb wip beta 2023-04-06 22:41:56 +11:00
mco-system
40d372c22b wip beta 2023-04-06 22:26:21 +11:00
mco-system
88dd8cc849 wip beta 2023-04-06 22:22:49 +11:00
mco-system
b71fa47cde wip beta 2023-04-06 22:09:02 +11:00
mco-system
a888fdbe6d wip beta 2023-04-06 22:07:27 +11:00
mco-system
d420488652 wip beta 2023-04-06 22:05:50 +11:00
mco-system
db9272f2c5 wip beta 2023-04-06 22:04:46 +11:00
mco-system
fd5382f7c4 wip beta 2023-04-06 22:02:03 +11:00
mco-system
c8a431a060 wip beta 2023-04-06 21:59:56 +11:00
mco-system
26109e98f1 wip beta 2023-04-06 21:58:58 +11:00
mco-system
8abfd2df41 wip beta 2023-04-06 21:57:59 +11:00
mco-system
442321a103 wip beta 2023-04-06 21:55:49 +11:00
mco-system
ed50944ce7 wip beta 2023-04-06 21:53:10 +11:00
mco-system
4f767445d8 wip beta 2023-04-06 21:49:18 +11:00
mco-system
53c7e8ea1b wip beta 2023-04-06 21:17:18 +11:00
mco-system
692af60d52 wip beta 2023-04-06 21:11:40 +11:00
mco-system
3ccb8e8030 wip beta 2023-04-06 21:10:40 +11:00
mco-system
e5ffdf2af4 wip beta 2023-04-06 20:47:07 +11:00
mco-system
c600f71159 wip beta 2023-04-06 01:20:09 +11:00
mco-system
429ee57ffd wip beta 2023-04-06 01:17:40 +11:00
mco-system
9ebcbbac56 wip beta 2023-04-06 01:14:50 +11:00
mco-system
e72f8f4e64 wip: planning 2023-04-04 22:46:02 +11:00
mco-system
f6c0e97ed4 wip: planning 2023-04-04 22:45:37 +11:00
mco-system
bfd56cf769 wip: planning 2023-04-04 22:01:30 +11:00
mco-system
4dee90c643 wip: planning 2023-04-04 21:26:15 +11:00
mco-system
90ee4b4009 wip: planning 2023-04-04 21:25:42 +11:00
mco-system
0bf79cb0c8 wip: planning 2023-04-04 21:24:25 +11:00
mco-system
567bb0f5e8 wip: planning 2023-04-04 21:23:47 +11:00
mco-system
783262182f wip: planning 2023-04-04 21:23:17 +11:00
mco-system
6bd941ec4e wip: planning 2023-04-04 21:22:38 +11:00
mco-system
e3e1a4fcec wip: planning 2023-04-04 21:22:09 +11:00
mco-system
1b9176a325 wip: planning 2023-04-04 21:21:43 +11:00
mco-system
bf5cc2a492 wip: planning 2023-04-04 21:20:20 +11:00
mco-system
4abf92e5c4 wip: planning 2023-04-04 21:16:53 +11:00
mco-system
2433eb4bc3 wip: planning 2023-04-04 21:14:47 +11:00
mco-system
9363b63bf7 wip: planning 2023-04-04 21:10:32 +11:00
mco-system
350cd85a43 wip: planning 2023-04-04 21:09:20 +11:00
mco-system
ec5f837d7d wip: planning 2023-04-04 21:08:27 +11:00
mco-system
457c184c7c wip: planning 2023-04-04 21:07:57 +11:00
mco-system
b25e5dd1ee wip: planning 2023-04-04 21:07:33 +11:00
mco-system
c5db3e4177 wip: planning 2023-04-04 21:07:10 +11:00
mco-system
90f04bd96b wip: planning 2023-04-04 21:06:38 +11:00
mco-system
33504e121a wip: planning 2023-04-04 21:04:54 +11:00
mco-system
d0a0d5ca13 wip: planning 2023-04-04 20:58:41 +11:00
mco-system
164085243e wip: planning 2023-04-04 20:57:22 +11:00
mco-system
f40c325e3b wip: planning 2023-04-04 20:55:44 +11:00
mco-system
8baf0aef8e wip: planning 2023-04-04 20:53:42 +11:00
mco-system
8e51237e41 wip: planning 2023-04-04 20:52:05 +11:00
mco-system
eb6cbc492b wip: planning 2023-04-04 20:50:56 +11:00
mco-system
60ef499c6e wip: planning 2023-04-04 20:48:42 +11:00
mco-system
fcfccda5e6 wip: planning 2023-04-04 20:26:15 +11:00
mco-system
a636620ba2 wip: planning 2023-04-04 20:24:43 +11:00
mco-system
61d4054340 wip: planning 2023-04-04 20:19:06 +11:00
mco-system
3013b69280 wip: planning 2023-04-04 19:59:27 +11:00
mco-system
126b1b0ed4 wip: planning 2023-04-04 19:58:26 +11:00
mco-system
9c56f1ec79 wip: planning 2023-04-04 19:40:28 +11:00
mco-system
374920ce0b wip: planning 2023-04-04 19:34:40 +11:00
mco-system
c619287338 wip: planning 2023-04-04 19:33:41 +11:00
mco-system
33596e5976 wip: planning 2023-04-04 19:22:26 +11:00
4c32d8b7a5 Merge pull request 'affiche thsf' (#3) from doug into master
Reviewed-on: #3
2023-03-25 08:19:56 +01:00
60 changed files with 2368 additions and 201 deletions

5
.gitignore vendored
View File

@@ -1,3 +1,8 @@
*.un~
*.swp
*.sh
thsf.log
thsf_venv
build/
src/thsf.egg-info/
thsf.pid

6
.prettierrc Normal file
View File

@@ -0,0 +1,6 @@
{
"arrowParens": "always",
"singleQuote": true,
"trailingComma": "es5",
"bracketSpacing": false
}

2
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,2 @@
{
}

6
MANIFEST.in Normal file
View File

@@ -0,0 +1,6 @@
global-exclude *.pyc
global-exclude build
global-exclude __pycache__
include src/thsf/templates/*.*
include src/thsf/static/**/*.*

View File

@@ -1,4 +1,50 @@
.PHONY: install
.PHONY: clean distclean install run stop all docker-build docker-run docker-stop docker-all
install:
echo "We Make P0RN"
set -e ;\
python -m venv thsf_venv; \
. thsf_venv/bin/activate; \
pip install -r requirements.txt ;\
pip install . ;\
pip install gunicorn;
run:
set -e ;\
THSF_DIR=$$(pwd); \
. thsf_venv/bin/activate; \
thsf_venv/bin/gunicorn -p thsf.pid -w 4 -b 0.0.0.0:8042 'thsf:app'
debug:
set -e ;\
THSF_DIR=$$(pwd); \
. thsf_venv/bin/activate; \
thsf_venv/bin/gunicorn -p thsf.pid -w 4 -b 0.0.0.0:8042 'thsf:app'
stop:
-set -e;\
THSF_DIR=$$(pwd); \
kill -15 $$(cat $$THSF_DIR/thsf.pid); \
rm thsf.pid
clean:
-set -e ;\
THSF_DIR=$$(pwd); \
rm -Rf ./build ./src/thsf.egg-info ./thsf.pid ./thsf.log; \
. thsf_venv/bin/activate; \
pip uninstall thsf -y
distclean: clean
rm -Rf thsf_venv/
all: stop clean install run
docker-build:
docker-compose build
docker-run:
docker-compose up -d
docker-stop:
-docker-compose down
docker-all: docker-stop docker-build docker-run

84
NOTE.md Normal file
View File

@@ -0,0 +1,84 @@
# API
## Récupérer l'évènement
```bash
curl -s -X GET -H "Authorization: Token <TOKEN>" https://23.thsf.net/api/events/
```
Réponse:
```json
[{"name":{"en":"Toulouse HackerSpace Factory","fr":"Toulouse HackerSpace Factory"},"slug":"thsf-2023","is_public":true,"date_from":"2023-05-26","date_to":"2023-05-28","timezone":"Europe/Paris","urls":{"base":"https://23.thsf.net/thsf-2023/","schedule":"https://23.thsf.net/thsf-2023/schedule/","login":"https://23.thsf.net/thsf-2023/login/","feed":"https://23.thsf.net/thsf-2023/schedule/feed.xml"}}]
```
## Récupérer la liste des intervenants
```bash
curl -s -X GET -H "Authorization: Token <TOKEN>" https://23.thsf.net/api/speakes/
```
## Récupérer la liste des salles
curl -s -X GET -H "Authorization: Token <TOKEN>" https://23.thsf.net/api/events/thsf-2023/rooms/
## Récupérer les versions des plannings de l'évènement
```bash
curl -s -X GET -H "Authorization: Token <TOKEN>" https://23.thsf.net/api/events/<EVENT>/schedules/
```
Réponse:
```json
{"count":6,"next":null,"previous":null,"results":[{"version":"wip","published":null},{"version":"0.5","published":"2023-04-03T12:14:39.675671+02:00"},{"version":"0.4","published":"2023-04-03T10:07:41.632059+02:00"},{"version":"0.3","published":"2023-03-25T12:34:17.704819+01:00"},{"version":"0.2","published":"2023-03-25T12:21:23.464899+01:00"},{"version":"0.1","published":"2023-03-25T12:14:10.460100+01:00"}]}
```
### Récupérer un planning spécifique
```bash
curl -s -X GET -H "Authorization: Token <TOKEN>" https://23.thsf.net/api/events/thsf-2023/schedules/<version>/
```
Reponse:
```json
{
"slots": [
{
"code": "JHCFVE",
"speakers": [
{
"code": "BT9CDU",
"name": "Youssr Youssef",
"biography": "",
"avatar": "https://23.thsf.net/media/avatars/YoussrYoussef_408QSEG.jpeg"
}
],
"title": "René Carmille, un hacker sous l'Occupation",
"submission_type": {
"en": "Screening",
"fr": "Projection"
},
"track": null,
"state": "confirmed",
"abstract": "Entre collaboration et résistance, confronté aux premiers enjeux modernes de la collecte de données en masse, la trajectoire étonnante de René Carmille n'a encore jamais été racontée... Son héritage est pourtant majeur, les questions qu'il soulève le sont tout autant. \r\nSous lOccupation, le polytechnicien René Carmille est le précurseur de l'usage massif des données en France : c'est lui qui a mis en place et dirigé le Service national de statistiques (SNS) qui deviendra plus tard l'INSEE, c'est aussi lui qui a inventé notre numéro de sécurité sociale.\r\n\r\nLa projection du documentaire sera suivie d'une rencontre en visioconférence avec la réalisatrice.",
"description": "",
"duration": 80,
"slot_count": 1,
"do_not_record": false,
"is_featured": true,
"content_locale": "fr",
"slot": {
"room": {
"en": "Salle 1 Cinema",
"fr": "Salle 1 Cinema"
},
"start": "2023-05-27T11:30:00+02:00",
"end": "2023-05-27T12:50:00+02:00"
},
"image": "https://23.thsf.net/media/thsf-2023/submissions/JHCFVE/Carmille-1-scaled_p0gxA6D.jpeg",
"resources": []
},
...
```

View File

@@ -1,36 +1,66 @@
# THSF.NET
Le site du THSF
Le site du **THSF**
## Modifier le site
## Fonctionnement du site
Il n'est **pas possible** de pousser directement des modifcations sur la branche `master`.
Le site du **THSF** est une application *Python Flask* configurée à partir du fichier `config.yml` situé à la racine du dépôt.
Il n'est généralement pas nécessaire de modifier ce fichier de configuration, cependant il ets possible d'augmenter le niveau de *log* en modifiant la clef de configuration `log::root::level` en la passant à `DEBUG` (valeur en production: `INFO`).
### Conteneur
Un fichier `thsf.Dockerfile` ainsi que le fichier `docker-compose.yml` correspondant permettront de rapidement démarrer localement une instance du site du **THSF**.
### Démarrer une instance du site du **THSF**
Assurez vous d'avoir l'environnement de conteneurisation adéquat (i.e: *docker* + *docker-compose*) puis exécuter directement les commandes suivantes depuis la racine du dépôt:
```shell
docker-compose build
docker-compose up -d
```
Le site du **THSF** écoutera alors sur le port *TCP/8042*:
`http://127.0.0.1:8042`
### Arrêter une instance du site du **THSF**
```shell
docker-compose down
```
## Apporter des modifications au site
**Important**: Avant d'apporter la moindre modification, pensez à créer une nouvelle branche à l'aide de la commande suivante en remplaçant `ma_branche` par le nom de votre branche:
```shell
git checkout -b ma_branche
```
Le code de l'application *Python Flask* se situe dans le répertoire `src` et une fois votre branche créée, vous pouvez apporter toutes les modification souhaitées.
### Créer un patch contenant toutes vos modifications
Une fois satisfaits de vos modifications vous pouvez créer un *patch* regroupant l'ensemble de vos modifications à l'aide la commande suivante
```shell
git diff -u --patch master..ma_branche > mes_modifications.patch
```
Vous pouvez faire parvenir votre fichier de *patch* à **contact@tetalab.org** pour que vos modifications soient incorporées au site après vérification.
### Publication automatisée des modifications
**Note**: Cette partie ne concerne que les personnes ayant un accès en écriture sur le dépôt *Git*.
Il n'est **pas possible** de pousser directement des modifications sur la branche `master`.
Pour modifier le site, il est nécessaire de créer une branche spécifique et d'y pousser vos modifications.
## Publication du site
Lorsque vous êtes satisfaits de vos modifications, vous pouvez créer [une demande d'ajout](https://git.tetalab.org/tetalab/thsf.net/pulls) de votre branche sur la branche `master`.
Lorsque la demande de fusion sera acceptée (vous pouvez auto-accepter vos demandes de fusion), vos modifications seront automatiquement publiées sur [le site du THSF](https://www.thsf.net).
Lorsque la demande de fusion sera acceptée, vos modifications seront automatiquement publiées sur [le site du THSF](https://www.thsf.net).
### Personnalisation de la publication
Afin de rendre le processus plus souple, il est possible de personnaliser la livraison en plaçant **à la racine du dépôt** un fichier `Makefile` contenant une cible `install` qui sera systématiquement executée.
C'est dans cette cible `install` que vous pourrez mettre toutes vos commandes personnalisées, typiquement l'installation de modules `npm`.
Le processus de publication est le suivant:
1. Le site actuellement en production est **supprimé**
2. La branche `master` du présent dépôt est cloné sur le serveur hébergeant le site du **THSF**
3. Si un fichier `Makefile` se trouve **à la racine du dépôt**, la cible `install` (i.e: `make install`) est automatiquement exécutée.
## Contrôle de qualité et tests
Aucun contrôle de qualité ou de tests n'est mis en place. Vous êtes seuls sur le coup.
Soyez responsable et **testez vos modifications sur votre machine locale avant de fusionner votre branche** sur la branche `master`.
Vous pouvez auto-accepter vos demandes de fusion si vous faites partie des développeurs autorisés.

65
config.yml Normal file
View File

@@ -0,0 +1,65 @@
---
log:
version: 1
formatters:
default:
format: '[%(asctime)-20s][%(levelname)-8s][%(funcName)-20s]: %(message)s'
handlers:
wsgi:
class: logging.FileHandler
filename: thsf.log
formatter: default
loggers:
thsf:
handlers: [wsgi]
propagate: no
root:
level: INFO
handlers: [wsgi]
app:
secret_key: xxx
languages:
- fr
name: THSF
real_url: https://www.thsf.net
pretalx:
url: https://23.thsf.net
apiprefix: api
apikey: bb770a53b15467dfb67c03d178004aca9e4819d6
event: thsf-2023
schedule: wip
navbar:
items:
- name: Home
classes: fa-solid fa-house
url: /
- name: Programme
classes: fa-regular fa-calendar
url: /planning
- name: Lieu
classes: fa-solid fa-map-location-dot
url: /place
- name: Restauration
classes: fa-solid fa-burger
url: /food
- name: Goodies
classes: fa-solid fa-shirt
url: /goodies
- name: Concerts & DJ Sets
classes: fa-solid fa-guitar
url: /concerts
- name: Ateliers
classes: fa-solid fa-screwdriver-wrench
url: /workshops
- name: Projections
classes: fa-solid fa-film
url: /screenings
- name: Tables rondes
classes: fa-solid fa-users-line
url: /discussions
- name: Installation
classes: fa-solid fa-palette
url: /exhibitions
- name: Présentations
classes: fa-solid fa-person-chalkboard
url: /talks

12
docker-compose.yml Normal file
View File

@@ -0,0 +1,12 @@
version: "2"
services:
thsf:
build:
dockerfile: thsf.Dockerfile
context: .
extra_hosts:
- "23.thsf.net:192.168.122.26"
ports:
- "127.0.0.1:8042:8042"
image: thsf:latest
container_name: thsf

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

View File

@@ -1,34 +0,0 @@
<!DOCTYPE html>
<html lang='zxx'>
<head>
<title>THSF 2023: Extractivisme</title>
<meta name="viewport" content="initial-scale=1.0" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="./styles/main.css" />
<link rel="icon" type="image/png" href="/images/favicon.png" />
</head>
<body>
<ul>
<li></li>
<li></li>
<li></li>
<li>Extraction in progress...</li>
<li></li>
<li></li>
<li></li>
<li>Extraction in progress...</li>
<li></li>
<li></li>
<li></li>
<li>Extraction in progress...</li>
<li></li>
<li></li>
<li></li>
<li>Extraction in progress...</li>
<li></li>
<li></li>
<li></li>
</ul>
</body>
</html>

10
pyproject.toml Normal file
View File

@@ -0,0 +1,10 @@
[build-system]
requires = ["setuptools>=62",
"build",
"wheel"]
build-backend = "setuptools.build_meta"
[tool.pytest.ini_options]
pythonpath = [
"src"
]

7
requirements.txt Normal file
View File

@@ -0,0 +1,7 @@
build
wheel
flask
Flask-Minify
gunicorn
pyYAML
requests

View File

@@ -0,0 +1,611 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 27.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 756 611.76" style="enable-background:new 0 0 756 611.76;" xml:space="preserve">
<style type="text/css">
.st0{fill:#E5006D;}
.st1{fill:#FFFFFF;}
.st2{fill:url(#SVGID_1_);}
.st3{fill:url(#SVGID_00000080208031039852088860000012736015428469503665_);}
</style>
<g id="Calque_2_00000062903287396250667820000015008425281140850568_">
<rect x="-10.25" y="-9.84" class="st0" width="776.35" height="632.15"/>
</g>
<g id="Calque_1_00000168107049754406420960000008902215559746130366_">
<g>
<path d="M366.84,248.03c0,0-1.98-15.18-13.55-29.89l-19.59,33.94c6.6,3.81,12.93,8.09,18.92,12.76
C356.17,261.41,363.92,253.08,366.84,248.03z"/>
<path d="M315.4,219.95c0,0-9.31-12.16-26.68-19.11v39.19c7.62,0,15.25,0.54,22.77,1.59C312.84,236.87,315.4,225.78,315.4,219.95z"
/>
<path d="M256.81,221.35c0,0-14.14-5.88-32.66-3.21l19.59,33.94c6.6-3.81,13.47-7.16,20.51-10.01
C263.06,237.28,259.73,226.4,256.81,221.35z"/>
<path d="M206.77,251.86c0,0-15.18,1.98-29.89,13.55L210.82,285c3.81-6.6,8.09-12.93,12.76-18.92
C220.15,262.53,211.82,254.78,206.77,251.86z"/>
<path d="M178.69,303.3c0,0-12.16,9.31-19.11,26.68h39.19c0-7.62,0.54-15.25,1.59-22.77C195.61,305.86,184.52,303.3,178.69,303.3z"
/>
<path d="M180.09,361.89c0,0-5.88,14.14-3.21,32.66l33.94-19.59c-3.81-6.6-7.16-13.47-10.01-20.51
C196.03,355.64,185.14,358.97,180.09,361.89z"/>
<path d="M210.6,411.93c0,0,1.98,15.18,13.55,29.89l19.59-33.94c-6.6-3.81-12.93-8.09-18.92-12.76
C221.28,398.55,213.52,406.88,210.6,411.93z"/>
<path d="M262.04,440.01c0,0,9.31,12.16,26.68,19.11v-39.19c-7.62,0-15.25-0.54-22.77-1.59
C264.6,423.09,262.04,434.18,262.04,440.01z"/>
<path d="M320.63,438.61c0,0,14.14,5.88,32.66,3.21l-19.59-33.94c-6.6,3.81-13.47,7.16-20.51,10.01
C314.38,422.67,317.72,433.56,320.63,438.61z"/>
</g>
<g>
<path d="M554.34,395.12c-5.99,4.67-12.32,8.95-18.92,12.76l19.59,33.94c11.57-14.7,13.55-29.89,13.55-29.89
C565.65,406.88,557.89,398.55,554.34,395.12z"/>
<path d="M513.21,418.34c-7.52,1.05-15.14,1.59-22.77,1.59v39.19c17.37-6.95,26.68-19.11,26.68-19.11
C517.12,434.18,514.57,423.09,513.21,418.34z"/>
<path d="M465.98,417.88c-7.04-2.85-13.91-6.19-20.51-10.01l-19.59,33.94c18.52,2.67,32.66-3.21,32.66-3.21
C461.45,433.56,464.78,422.67,465.98,417.88z"/>
<path d="M426.55,264.84c5.99-4.67,12.32-8.95,18.92-12.76l-19.59-33.94c-11.57,14.7-13.55,29.89-13.55,29.89
C415.24,253.08,423,261.41,426.55,264.84z"/>
<path d="M467.68,241.62c7.52-1.05,15.14-1.59,22.77-1.59v-39.19c-17.37,6.95-26.68,19.11-26.68,19.11
C463.77,225.78,466.32,236.87,467.68,241.62z"/>
<path d="M514.91,242.07c7.04,2.85,13.91,6.19,20.51,10.01l19.59-33.94c-18.52-2.67-32.66,3.21-32.66,3.21
C519.44,226.4,516.11,237.28,514.91,242.07z"/>
<path d="M555.58,266.08c4.67,5.99,8.95,12.32,12.76,18.92l33.94-19.59c-14.7-11.57-29.89-13.55-29.89-13.55
C567.34,254.78,559.02,262.53,555.58,266.08z"/>
<path d="M578.8,307.21c1.05,7.52,1.59,15.14,1.59,22.77h39.19c-6.95-17.37-19.11-26.68-19.11-26.68
C594.64,303.3,583.55,305.86,578.8,307.21z"/>
<path d="M578.35,354.44c-2.85,7.04-6.19,13.91-10.01,20.51l33.94,19.59c2.67-18.52-3.21-32.66-3.21-32.66
C594.02,358.97,583.14,355.64,578.35,354.44z"/>
</g>
<path class="st0" d="M490.45,424.51c-6.39,0-12.79-0.65-19.03-1.92c-6.08-1.24-12.06-3.1-17.78-5.52
c-5.6-2.37-11.01-5.3-16.07-8.72c-5-3.38-9.7-7.26-13.97-11.53l-34.02-34.02l-34.02,34.02c-4.27,4.27-8.97,8.15-13.97,11.53
c-5.06,3.42-10.46,6.35-16.07,8.72c-5.72,2.42-11.7,4.27-17.78,5.52c-6.23,1.27-12.63,1.92-19.03,1.92s-12.79-0.65-19.03-1.92
c-6.08-1.24-12.06-3.1-17.78-5.52c-5.6-2.37-11.01-5.3-16.07-8.72c-5-3.38-9.7-7.26-13.97-11.53s-8.15-8.97-11.53-13.98
c-3.41-5.05-6.35-10.46-8.72-16.07c-2.42-5.71-4.27-11.69-5.52-17.78c-1.27-6.23-1.92-12.63-1.92-19.03c0-0.03,0-0.05,0-0.08
c0.01-6.38,0.65-12.75,1.92-18.95c1.25-6.08,3.1-12.06,5.52-17.78c2.37-5.6,5.3-11.01,8.72-16.07c3.38-5,7.26-9.7,11.53-13.97
s8.97-8.15,13.97-11.53c5.06-3.42,10.46-6.35,16.07-8.72c5.72-2.42,11.7-4.27,17.78-5.52c6.2-1.27,12.6-1.91,19.03-1.91
s12.83,0.64,19.03,1.91c6.08,1.24,12.06,3.1,17.78,5.52c5.61,2.37,11.01,5.31,16.07,8.72c5,3.38,9.7,7.26,13.97,11.53
c0,0,24.25,24.25,34.02,34.02l34.02-34.02c4.27-4.27,8.97-8.15,13.97-11.53c5.06-3.42,10.46-6.35,16.07-8.72
c5.72-2.42,11.7-4.27,17.78-5.52c6.23-1.27,12.63-1.92,19.03-1.92s12.8,0.65,19.03,1.92c6.08,1.24,12.06,3.1,17.78,5.52
c5.61,2.37,11.01,5.3,16.07,8.72c5,3.38,9.7,7.26,13.97,11.53c4.27,4.27,8.15,8.98,11.53,13.97c3.41,5.05,6.35,10.46,8.72,16.07
c2.42,5.71,4.27,11.69,5.52,17.78c1.27,6.23,1.92,12.63,1.92,19.02c0,6.4-0.65,12.8-1.92,19.03c-1.25,6.09-3.1,12.07-5.52,17.78
c-2.38,5.61-5.31,11.02-8.72,16.07c-3.38,5-7.26,9.7-11.53,13.97s-8.97,8.15-13.97,11.53c-5.06,3.42-10.46,6.35-16.07,8.72
c-5.72,2.42-11.7,4.27-17.78,5.52C503.24,423.86,496.84,424.51,490.45,424.51z M288.72,281.87c-3.28,0-6.55,0.33-9.72,0.98
c-3.08,0.63-6.11,1.57-9,2.79c-2.84,1.2-5.59,2.69-8.16,4.43c-2.55,1.72-4.95,3.71-7.14,5.89c-2.18,2.18-4.16,4.58-5.89,7.14
c-1.74,2.57-3.23,5.31-4.43,8.16c-1.22,2.89-2.16,5.92-2.79,9c-0.65,3.17-0.98,6.44-0.98,9.72s0.33,6.55,0.98,9.72
c0.63,3.08,1.57,6.11,2.79,9c1.2,2.85,2.69,5.59,4.43,8.16c1.72,2.55,3.71,4.95,5.89,7.14c2.18,2.18,4.58,4.16,7.14,5.89
c2.57,1.74,5.32,3.23,8.16,4.43c2.89,1.22,5.92,2.16,9,2.79c3.15,0.65,6.42,0.97,9.72,0.97s6.57-0.33,9.72-0.97
c3.08-0.63,6.11-1.57,9-2.79c2.85-1.2,5.59-2.7,8.16-4.43c1.69-1.14,4.97-3.91,7.22-5.98l33.93-33.93l-34.02-34.02
c-2.18-2.18-4.58-4.16-7.14-5.89c-2.57-1.74-5.32-3.23-8.16-4.43c-2.89-1.22-5.92-2.16-9-2.79
C295.27,282.2,292,281.87,288.72,281.87z M456.43,364c2.18,2.18,4.58,4.16,7.14,5.89c2.57,1.74,5.32,3.23,8.16,4.43
c2.89,1.22,5.92,2.16,9,2.79c3.16,0.65,6.43,0.97,9.72,0.97s6.57-0.33,9.72-0.97c3.08-0.63,6.1-1.57,9-2.79
c2.84-1.2,5.59-2.69,8.17-4.43c2.55-1.73,4.95-3.71,7.13-5.89c2.18-2.18,4.17-4.58,5.89-7.14c1.74-2.57,3.23-5.32,4.43-8.16
c1.22-2.9,2.16-5.92,2.79-9c0.65-3.17,0.98-6.44,0.98-9.72s-0.33-6.55-0.98-9.72c-0.63-3.07-1.57-6.1-2.79-9
c-1.2-2.85-2.7-5.59-4.43-8.16c-1.73-2.56-3.71-4.96-5.89-7.14c-2.18-2.18-4.58-4.17-7.14-5.89c-2.57-1.74-5.32-3.23-8.16-4.43
c-2.89-1.22-5.92-2.16-9-2.79c-3.16-0.65-6.43-0.97-9.72-0.97s-6.57,0.33-9.72,0.97c-3.08,0.63-6.1,1.57-9,2.79
c-2.85,1.2-5.59,2.69-8.16,4.43c-2.54,1.72-4.94,3.7-7.13,5.88l-34.03,34.03L456.43,364z"/>
<g>
<g>
<g>
<path class="st1" d="M410.96,43.04c-2.16,0-3.88,0.88-5.14,2.63c-1.27,1.75-1.9,4.57-1.9,8.46l-5.69-1.05
c0-4.97,1.06-8.79,3.17-11.47c2.11-2.68,5.35-4.04,9.7-4.11c4.54,0,7.79,1.32,9.75,3.97s2.94,6.14,2.94,10.48
c0,2.81-0.27,5.41-0.79,7.8c-0.53,2.39-1.42,4.8-2.66,7.23l-15.67,32.25h18.66v5.35h-25v-5.26l17.35-35.64
c0.87-1.85,1.45-3.74,1.73-5.69c0.28-1.94,0.42-3.97,0.42-6.07c0-1.08-0.08-2.16-0.23-3.25c-0.15-1.08-0.48-2.04-0.97-2.87
c-0.49-0.83-1.19-1.5-2.08-2.01C413.63,43.3,412.44,43.04,410.96,43.04z"/>
<path class="st1" d="M457.56,93.02c0,2.04-0.34,3.82-1.02,5.35s-1.6,2.8-2.74,3.82c-1.15,1.02-2.48,1.78-4,2.29
s-3.11,0.76-4.79,0.76s-3.27-0.26-4.79-0.76c-1.52-0.51-2.85-1.27-4-2.29c-1.15-1.02-2.06-2.29-2.74-3.82s-1.02-3.31-1.02-5.35
V49.83c0-1.97,0.34-3.74,1.02-5.3c0.68-1.56,1.6-2.85,2.74-3.87c1.15-1.02,2.48-1.8,4-2.34s3.11-0.81,4.79-0.81
c3.53,0,6.51,1.05,8.92,3.15c2.42,2.1,3.63,5.16,3.63,9.17L457.56,93.02L457.56,93.02z M451.87,49.65c0-2.04-0.63-3.65-1.9-4.83
s-2.89-1.77-4.86-1.77c-2.04,0-3.71,0.59-5,1.77c-1.3,1.18-1.95,2.79-1.95,4.83V93.3c0,2.04,0.65,3.65,1.95,4.83
c1.3,1.18,2.96,1.77,5,1.77c1.98,0,3.6-0.59,4.86-1.77c1.27-1.18,1.9-2.79,1.9-4.83V49.65z"/>
<path class="st1" d="M479.44,43.04c-2.16,0-3.88,0.88-5.14,2.63c-1.27,1.75-1.9,4.57-1.9,8.46l-5.69-1.05
c0-4.97,1.06-8.79,3.17-11.47c2.11-2.68,5.35-4.04,9.7-4.11c4.54,0,7.79,1.32,9.75,3.97s2.94,6.14,2.94,10.48
c0,2.81-0.27,5.41-0.79,7.8c-0.53,2.39-1.42,4.8-2.66,7.23l-15.67,32.25h18.66v5.35h-25v-5.26l17.35-35.64
c0.87-1.85,1.45-3.74,1.73-5.69c0.28-1.94,0.42-3.97,0.42-6.07c0-1.08-0.08-2.16-0.23-3.25c-0.15-1.08-0.48-2.04-0.97-2.87
c-0.49-0.83-1.19-1.5-2.08-2.01C482.11,43.3,480.92,43.04,479.44,43.04z"/>
<path class="st1" d="M525.95,91.66c0,4.59-1.17,8.01-3.5,10.24c-2.33,2.23-5.43,3.35-9.28,3.35c-4.29,0-7.46-1.21-9.52-3.63
c-2.05-2.42-3.02-5.92-2.89-10.51l5.69-1.15c-0.13,3.06,0.33,5.48,1.35,7.26c1.03,1.78,2.88,2.68,5.55,2.68
c1.99,0,3.65-0.61,4.99-1.82c1.34-1.22,2.01-3.26,2.01-6.14V81.3c0-3.07-0.61-5.26-1.82-6.57s-3-1.97-5.36-1.97h-2.71v-5.35
h2.89c2.24,0,3.97-0.6,5.18-1.81s1.82-3.27,1.82-6.19v-8.95c0-1.02-0.11-1.97-0.33-2.85c-0.22-0.89-0.59-1.67-1.12-2.33
c-0.53-0.67-1.21-1.2-2.05-1.62c-0.84-0.41-1.88-0.62-3.13-0.62c-2.55,0-4.4,0.91-5.55,2.72c-1.15,1.82-1.73,4.16-1.73,7.02
c-0.19-0.06-0.55-0.13-1.07-0.19c-0.53-0.06-1.12-0.14-1.77-0.24c-0.65-0.1-1.25-0.19-1.77-0.29c-0.53-0.1-0.89-0.14-1.07-0.14
c0.06-2.1,0.37-4.03,0.93-5.78s1.4-3.26,2.52-4.54c1.12-1.27,2.5-2.28,4.15-3.01s3.56-1.1,5.74-1.1c2.24,0,4.12,0.33,5.64,1
s2.75,1.59,3.69,2.77c0.93,1.18,1.6,2.56,2.01,4.15c0.4,1.59,0.61,3.31,0.61,5.15v7.73c0,1.21-0.06,2.39-0.19,3.53
c-0.13,1.15-0.39,2.21-0.79,3.2c-0.41,0.99-0.98,1.89-1.73,2.72s-1.74,1.53-2.99,2.1v0.19c1.31,0.51,2.33,1.16,3.08,1.96
c0.75,0.8,1.32,1.72,1.73,2.78c0.4,1.05,0.65,2.22,0.75,3.49c0.09,1.28,0.14,2.65,0.14,4.11L525.95,91.66z"/>
</g>
<g>
<path class="st1" d="M250.72,114.74v21.1h-1.35v-21.1h-4.14v-1.25h9.62v1.25H250.72z"/>
<path class="st1" d="M259.74,119.91c1.15,0,2.03,0.22,2.64,0.67c0.61,0.45,1.03,1.02,1.26,1.7c0.1,0.28,0.18,0.65,0.24,1.11
c0.05,0.46,0.09,0.96,0.13,1.51c0.03,0.55,0.05,1.1,0.05,1.67s0,1.1,0,1.59v0.48c0,0.56-0.01,1.12-0.02,1.7
c-0.01,0.58-0.05,1.21-0.11,1.89c-0.06,0.75-0.24,1.37-0.52,1.86s-0.63,0.88-1.04,1.17s-0.85,0.49-1.34,0.61
c-0.48,0.12-0.95,0.18-1.42,0.18c-1.26,0-2.2-0.26-2.82-0.79s-1.04-1.19-1.27-2.01c-0.06-0.26-0.12-0.58-0.16-0.98
c-0.04-0.4-0.07-0.83-0.09-1.3c-0.02-0.47-0.03-0.95-0.03-1.45c0-0.49,0-0.95,0-1.38c0-0.58,0-1.15,0.02-1.72
c0.01-0.57,0.03-1.11,0.06-1.62s0.08-0.98,0.14-1.4s0.14-0.75,0.22-1.01c0.27-0.75,0.73-1.35,1.38-1.81
C257.71,120.14,258.61,119.91,259.74,119.91z M259.68,121.16c-0.55,0-1.07,0.11-1.58,0.34c-0.5,0.22-0.88,0.66-1.13,1.3
c-0.17,0.43-0.27,1.1-0.32,2.01c-0.04,0.91-0.06,1.96-0.06,3.16v0.8c0,1.03,0.02,1.89,0.05,2.6s0.11,1.25,0.24,1.64
c0.19,0.58,0.51,1.02,0.96,1.33c0.45,0.31,1.07,0.47,1.84,0.47c0.69,0,1.29-0.19,1.8-0.58c0.5-0.39,0.84-0.92,1.01-1.61
c0.08-0.36,0.14-0.94,0.17-1.73s0.05-1.64,0.05-2.54c0-0.47-0.01-0.97-0.02-1.51c-0.01-0.53-0.02-1.05-0.03-1.54
s-0.04-0.94-0.08-1.33s-0.09-0.7-0.16-0.92c-0.19-0.64-0.53-1.12-1.02-1.43C260.9,121.32,260.33,121.16,259.68,121.16z"/>
<path class="st1" d="M273.77,134.07h-0.09c-0.36,0.62-0.83,1.11-1.41,1.46c-0.59,0.35-1.24,0.53-1.98,0.53
c-0.71,0-1.31-0.11-1.79-0.34c-0.48-0.22-0.86-0.53-1.14-0.92c-0.28-0.39-0.49-0.83-0.61-1.35s-0.19-1.06-0.19-1.64V120.1h1.35
v11.27c0,0.49,0.04,0.94,0.13,1.35c0.08,0.41,0.23,0.75,0.43,1.04c0.2,0.29,0.48,0.52,0.83,0.69c0.36,0.17,0.81,0.26,1.36,0.26
c0.48,0,0.92-0.1,1.31-0.3s0.71-0.47,0.98-0.8c0.26-0.33,0.47-0.71,0.61-1.14c0.15-0.43,0.22-0.87,0.22-1.32V120.1h1.35v15.73
h-1.35L273.77,134.07L273.77,134.07z"/>
<path class="st1" d="M278.03,112.52h1.35v19.62c0,0.81,0.13,1.46,0.39,1.94s0.79,0.72,1.58,0.72h0.38v1.25h-0.47
c-1.05,0-1.84-0.26-2.4-0.77c-0.55-0.51-0.83-1.46-0.83-2.83L278.03,112.52L278.03,112.52z"/>
<path class="st1" d="M287.36,119.91c1.15,0,2.03,0.22,2.64,0.67c0.61,0.45,1.03,1.02,1.26,1.7c0.1,0.28,0.18,0.65,0.24,1.11
c0.05,0.46,0.09,0.96,0.13,1.51c0.03,0.55,0.05,1.1,0.05,1.67s0,1.1,0,1.59v0.48c0,0.56-0.01,1.12-0.02,1.7
c-0.01,0.58-0.05,1.21-0.11,1.89c-0.06,0.75-0.24,1.37-0.52,1.86s-0.63,0.88-1.04,1.17s-0.85,0.49-1.34,0.61
c-0.48,0.12-0.95,0.18-1.42,0.18c-1.26,0-2.2-0.26-2.82-0.79s-1.04-1.19-1.27-2.01c-0.06-0.26-0.12-0.58-0.16-0.98
s-0.07-0.83-0.09-1.3s-0.03-0.95-0.03-1.45c0-0.49,0-0.95,0-1.38c0-0.58,0-1.15,0.02-1.72c0.01-0.57,0.03-1.11,0.06-1.62
s0.08-0.98,0.14-1.4c0.06-0.42,0.14-0.75,0.22-1.01c0.27-0.75,0.73-1.35,1.38-1.81C285.33,120.14,286.23,119.91,287.36,119.91z
M287.3,121.16c-0.55,0-1.07,0.11-1.58,0.34c-0.5,0.22-0.88,0.66-1.13,1.3c-0.17,0.43-0.27,1.1-0.32,2.01
c-0.04,0.91-0.06,1.96-0.06,3.16v0.8c0,1.03,0.02,1.89,0.05,2.6s0.11,1.25,0.24,1.64c0.19,0.58,0.51,1.02,0.96,1.33
c0.45,0.31,1.07,0.47,1.84,0.47c0.69,0,1.29-0.19,1.8-0.58c0.5-0.39,0.84-0.92,1.01-1.61c0.08-0.36,0.14-0.94,0.17-1.73
s0.05-1.64,0.05-2.54c0-0.47-0.01-0.97-0.02-1.51c-0.01-0.53-0.02-1.05-0.03-1.54s-0.04-0.94-0.08-1.33s-0.09-0.7-0.16-0.92
c-0.19-0.64-0.53-1.12-1.02-1.43C288.52,121.32,287.95,121.16,287.3,121.16z"/>
<path class="st1" d="M301.39,134.07h-0.09c-0.36,0.62-0.83,1.11-1.41,1.46c-0.59,0.35-1.24,0.53-1.98,0.53
c-0.71,0-1.31-0.11-1.79-0.34c-0.48-0.22-0.86-0.53-1.14-0.92c-0.28-0.39-0.49-0.83-0.61-1.35s-0.19-1.06-0.19-1.64V120.1h1.35
v11.27c0,0.49,0.04,0.94,0.13,1.35c0.08,0.41,0.23,0.75,0.43,1.04c0.2,0.29,0.48,0.52,0.83,0.69c0.36,0.17,0.81,0.26,1.36,0.26
c0.48,0,0.92-0.1,1.31-0.3s0.71-0.47,0.98-0.8c0.26-0.33,0.47-0.71,0.61-1.14c0.15-0.43,0.22-0.87,0.22-1.32V120.1h1.35v15.73
h-1.35L301.39,134.07L301.39,134.07z"/>
<path class="st1" d="M306.25,131.85c0,0.9,0.25,1.62,0.74,2.15c0.49,0.54,1.18,0.8,2.06,0.8c1.11,0,1.88-0.27,2.3-0.8
c0.42-0.54,0.63-1.29,0.63-2.25c0-0.47-0.04-0.87-0.11-1.21c-0.07-0.33-0.21-0.63-0.42-0.9c-0.21-0.27-0.5-0.51-0.88-0.74
c-0.38-0.22-0.88-0.46-1.5-0.69c-0.81-0.32-1.48-0.64-2.01-0.97c-0.52-0.32-0.92-0.66-1.21-1.01c-0.28-0.35-0.48-0.72-0.58-1.11
c-0.1-0.39-0.16-0.79-0.16-1.22c0-1.18,0.33-2.14,1-2.9s1.72-1.13,3.17-1.13c1.32,0,2.34,0.34,3.06,1.03
c0.72,0.68,1.08,1.68,1.08,2.99l-1.41,0.23c0-0.96-0.25-1.7-0.74-2.22s-1.18-0.77-2.06-0.77c-0.55,0-1,0.08-1.36,0.24
c-0.36,0.16-0.64,0.37-0.84,0.63c-0.2,0.26-0.34,0.55-0.43,0.87c-0.08,0.32-0.13,0.65-0.13,1c0,0.34,0.04,0.65,0.13,0.93
c0.08,0.28,0.25,0.54,0.49,0.79s0.59,0.49,1.03,0.72c0.44,0.24,1.01,0.48,1.71,0.74c0.8,0.3,1.43,0.61,1.9,0.93
c0.46,0.32,0.82,0.67,1.06,1.05c0.24,0.38,0.4,0.78,0.47,1.22s0.11,0.92,0.11,1.43c0,0.64-0.07,1.23-0.22,1.77
s-0.39,1-0.72,1.38c-0.34,0.39-0.77,0.69-1.31,0.9c-0.54,0.21-1.19,0.32-1.97,0.32c-1.34,0-2.38-0.33-3.1-0.98
s-1.11-1.65-1.15-3L306.25,131.85z"/>
<path class="st1" d="M319.71,119.91c1.25,0,2.22,0.33,2.92,0.98s1.08,1.59,1.14,2.81c0.02,0.24,0.03,0.47,0.03,0.69
s0,0.46,0,0.69v3.11h-7.15v1.03c0,0.68,0.02,1.4,0.05,2.13s0.11,1.29,0.24,1.65c0.19,0.56,0.49,1,0.91,1.32s0.98,0.48,1.69,0.48
c0.94,0,1.64-0.28,2.08-0.83c0.45-0.56,0.71-1.24,0.77-2.05l1.35,0.26c-0.1,1.26-0.53,2.23-1.28,2.89s-1.72,1-2.9,1
c-0.62,0-1.17-0.08-1.64-0.24s-0.86-0.37-1.17-0.63c-0.31-0.26-0.56-0.55-0.75-0.88s-0.32-0.68-0.41-1.04
c-0.06-0.26-0.11-0.59-0.16-1c-0.04-0.41-0.07-0.84-0.08-1.3c-0.01-0.46-0.02-0.94-0.03-1.43c-0.01-0.49-0.02-0.95-0.02-1.38
c0-0.58,0-1.16,0.02-1.73c0.01-0.58,0.03-1.12,0.06-1.64c0.03-0.51,0.08-0.98,0.14-1.41c0.06-0.43,0.14-0.77,0.22-1.03
c0.27-0.75,0.72-1.34,1.34-1.78C317.71,120.13,318.59,119.91,319.71,119.91z M317,122.84c-0.15,0.37-0.24,0.91-0.27,1.63
c-0.03,0.72-0.06,1.58-0.08,2.57h5.83v-1.97c0-0.5-0.03-0.98-0.08-1.45s-0.18-0.89-0.38-1.26s-0.49-0.66-0.87-0.87
s-0.88-0.32-1.51-0.32c-0.53,0-1.03,0.12-1.51,0.35C317.65,121.75,317.28,122.2,317,122.84z"/>
<path class="st1" d="M340.45,135.84v-10.82h-6.96v10.82h-1.35v-22.35h1.35v10.28h6.96v-10.28h1.35v22.35H340.45z"/>
<path class="st1" d="M344.69,122.51c0.29-0.81,0.78-1.45,1.47-1.91c0.69-0.46,1.58-0.69,2.67-0.69c1.32,0,2.33,0.31,3.04,0.92
c0.71,0.61,1.07,1.7,1.07,3.26v11.75h-1.35v-1.41h-0.03c-0.5,0.71-1.07,1.15-1.71,1.33s-1.26,0.27-1.87,0.27
c-0.69,0-1.27-0.12-1.74-0.37s-0.85-0.57-1.14-0.98c-0.29-0.41-0.51-0.87-0.64-1.4c-0.14-0.52-0.2-1.08-0.2-1.65
c0-0.6,0.07-1.19,0.2-1.78c0.14-0.59,0.37-1.12,0.71-1.61c0.33-0.48,0.78-0.87,1.33-1.17c0.55-0.3,1.25-0.45,2.08-0.45h3.01
v-2.52c0-0.43-0.04-0.82-0.13-1.18c-0.08-0.35-0.23-0.66-0.44-0.92c-0.21-0.26-0.5-0.46-0.86-0.61
c-0.37-0.15-0.83-0.23-1.4-0.23c-0.61,0-1.18,0.15-1.72,0.45c-0.54,0.3-0.9,0.75-1.07,1.35L344.69,122.51z M348.86,127.87
c-0.46,0-0.89,0.06-1.29,0.19s-0.74,0.34-1.03,0.65c-0.29,0.3-0.52,0.69-0.69,1.18c-0.17,0.48-0.25,1.07-0.25,1.76
c0,0.86,0.21,1.6,0.64,2.21c0.43,0.61,1.18,0.92,2.24,0.92c0.9,0,1.64-0.25,2.23-0.76c0.58-0.51,0.88-1.25,0.88-2.24v-3.9
L348.86,127.87L348.86,127.87z"/>
<path class="st1" d="M359.78,119.91c1.31,0,2.31,0.35,3,1.06s1.03,1.73,1.03,3.08c-0.23,0.04-0.45,0.08-0.67,0.11
c-0.23,0.03-0.45,0.07-0.67,0.11c0.02-0.98-0.21-1.75-0.69-2.3s-1.17-0.82-2.07-0.82c-0.56,0-1.07,0.13-1.52,0.38
c-0.45,0.26-0.81,0.7-1.08,1.32c-0.17,0.41-0.27,1.1-0.31,2.09c-0.04,0.98-0.06,2.12-0.06,3.4v0.42c0,0.39,0,0.78,0.02,1.19
c0.01,0.41,0.03,0.8,0.05,1.19s0.05,0.74,0.08,1.06c0.03,0.32,0.08,0.58,0.14,0.77c0.19,0.58,0.5,1.03,0.94,1.35
s1,0.48,1.69,0.48c0.86,0,1.54-0.24,2.05-0.72s0.77-1.26,0.77-2.33l1.35,0.26c-0.04,1.35-0.43,2.36-1.16,3.03
s-1.74,1.01-3.03,1.01c-0.63,0-1.17-0.08-1.64-0.24s-0.86-0.37-1.17-0.63s-0.56-0.55-0.75-0.88s-0.32-0.68-0.41-1.04
c-0.06-0.26-0.11-0.59-0.16-1c-0.04-0.41-0.07-0.84-0.08-1.32c-0.01-0.47-0.02-0.95-0.03-1.43s-0.02-0.94-0.02-1.36
c0-0.58,0-1.16,0.02-1.73c0.01-0.58,0.03-1.12,0.06-1.64c0.03-0.51,0.08-0.98,0.14-1.4c0.06-0.42,0.14-0.75,0.22-1.01
c0.27-0.75,0.72-1.35,1.34-1.8C357.78,120.13,358.66,119.91,359.78,119.91z"/>
<path class="st1" d="M367.35,129.41h0.03l5.67-9.25h1.5l-3.57,5.78l4.42,9.89h-1.5l-3.76-8.61l-2.79,4.53v4.08H366v-23.31h1.35
V129.41z"/>
<path class="st1" d="M381.04,119.91c1.25,0,2.22,0.33,2.92,0.98s1.08,1.59,1.14,2.81c0.02,0.24,0.03,0.47,0.03,0.69
s0,0.46,0,0.69v3.11h-7.15v1.03c0,0.68,0.02,1.4,0.05,2.13s0.11,1.29,0.24,1.65c0.19,0.56,0.49,1,0.91,1.32s0.98,0.48,1.69,0.48
c0.94,0,1.63-0.28,2.09-0.83c0.45-0.56,0.71-1.24,0.77-2.05l1.35,0.26c-0.1,1.26-0.53,2.23-1.28,2.89s-1.72,1-2.9,1
c-0.62,0-1.17-0.08-1.64-0.24s-0.86-0.37-1.17-0.63s-0.56-0.55-0.75-0.88s-0.32-0.68-0.41-1.04c-0.06-0.26-0.11-0.59-0.16-1
c-0.04-0.41-0.07-0.84-0.08-1.3c-0.01-0.46-0.02-0.94-0.03-1.43c-0.01-0.49-0.02-0.95-0.02-1.38c0-0.58,0-1.16,0.02-1.73
c0.01-0.58,0.03-1.12,0.06-1.64c0.03-0.51,0.08-0.98,0.14-1.41c0.06-0.43,0.14-0.77,0.22-1.03c0.27-0.75,0.72-1.34,1.34-1.78
C379.04,120.13,379.91,119.91,381.04,119.91z M378.33,122.84c-0.15,0.37-0.24,0.91-0.27,1.63c-0.03,0.72-0.06,1.58-0.08,2.57
h5.83v-1.97c0-0.5-0.03-0.98-0.08-1.45c-0.05-0.47-0.18-0.89-0.38-1.26s-0.49-0.66-0.87-0.87s-0.88-0.32-1.51-0.32
c-0.53,0-1.03,0.12-1.51,0.35C378.98,121.75,378.6,122.2,378.33,122.84z"/>
<path class="st1" d="M393.53,121.51c-0.13-0.02-0.26-0.04-0.39-0.05c-0.14-0.01-0.27-0.02-0.39-0.02
c-1.04,0-1.85,0.36-2.43,1.09c-0.58,0.73-0.86,1.77-0.86,3.12v10.18h-1.35v-15.7h1.35v2.15h0.06c0.33-0.83,0.78-1.44,1.35-1.81
c0.56-0.38,1.24-0.56,2.04-0.56c0.1,0,0.21,0,0.31,0s0.21,0.01,0.31,0.03V121.51z"/>
<path class="st1" d="M410.08,129.99c0,0.92-0.08,1.75-0.25,2.5s-0.44,1.39-0.81,1.91s-0.88,0.93-1.5,1.22s-1.41,0.43-2.34,0.43
c-0.88,0-1.62-0.12-2.23-0.37c-0.62-0.25-1.12-0.58-1.52-1.01s-0.68-0.93-0.86-1.51s-0.28-1.21-0.3-1.89l1.35-0.29
c0,0.49,0.06,0.97,0.19,1.43c0.13,0.46,0.33,0.86,0.61,1.2s0.65,0.62,1.1,0.82c0.45,0.2,1,0.3,1.65,0.3
c0.78,0,1.4-0.13,1.87-0.39s0.83-0.6,1.09-1.03c0.25-0.43,0.42-0.93,0.49-1.51s0.11-1.18,0.11-1.8c0-0.75-0.04-1.38-0.11-1.88
c-0.07-0.5-0.23-0.94-0.47-1.32c-0.24-0.37-0.6-0.72-1.07-1.03s-1.11-0.65-1.93-1.01c-1.05-0.47-1.88-0.93-2.51-1.38
s-1.1-0.9-1.43-1.36c-0.32-0.46-0.53-0.95-0.63-1.46c-0.09-0.51-0.14-1.08-0.14-1.7c0-0.81,0.09-1.56,0.28-2.25
c0.19-0.68,0.48-1.27,0.88-1.77c0.4-0.49,0.9-0.88,1.5-1.16c0.6-0.28,1.33-0.42,2.19-0.42c0.94,0,1.71,0.14,2.33,0.42
c0.61,0.28,1.1,0.64,1.47,1.09c0.36,0.45,0.62,0.95,0.77,1.49c0.15,0.55,0.22,1.09,0.22,1.62l-1.35,0.35
c0-0.51-0.06-0.99-0.17-1.43c-0.12-0.44-0.31-0.82-0.58-1.16c-0.27-0.33-0.64-0.59-1.09-0.79s-1-0.29-1.65-0.29
c-0.71,0-1.3,0.13-1.75,0.4c-0.45,0.27-0.8,0.61-1.06,1.03c-0.25,0.42-0.42,0.87-0.5,1.37c-0.08,0.49-0.13,0.97-0.13,1.44
c0,0.56,0.05,1.04,0.16,1.46c0.1,0.42,0.3,0.81,0.6,1.17c0.29,0.36,0.71,0.72,1.25,1.06s1.28,0.72,2.2,1.12
c0.94,0.41,1.68,0.82,2.23,1.24c0.54,0.42,0.95,0.87,1.22,1.35s0.44,1.03,0.52,1.64C410.05,128.5,410.08,129.2,410.08,129.99z"
/>
<path class="st1" d="M417.06,119.94c0.37,0,0.77,0.05,1.19,0.16s0.8,0.3,1.16,0.58c0.35,0.28,0.66,0.66,0.92,1.14
c0.26,0.48,0.42,1.1,0.48,1.85c0.06,0.69,0.1,1.34,0.11,1.97c0.01,0.63,0.02,1.25,0.02,1.85v0.45c0,1.22-0.02,2.31-0.06,3.28
c-0.04,0.96-0.18,1.79-0.41,2.47c-0.23,0.66-0.62,1.23-1.17,1.69c-0.55,0.46-1.37,0.69-2.45,0.69c-0.83,0-1.52-0.2-2.06-0.59
s-0.89-0.79-1.06-1.17h-0.06v7.77h-1.35v-21.9h1.35v1.48h0.06c0.35-0.54,0.79-0.95,1.29-1.25S416.21,119.94,417.06,119.94z
M416.75,121.26c-0.94,0-1.68,0.31-2.25,0.93s-0.84,1.43-0.84,2.44v6.49c0,0.47,0.06,0.93,0.19,1.36
c0.12,0.44,0.31,0.82,0.56,1.16c0.25,0.33,0.56,0.6,0.94,0.8c0.37,0.2,0.81,0.3,1.31,0.3c0.62,0,1.17-0.17,1.65-0.51
c0.48-0.34,0.8-0.85,0.97-1.51c0.06-0.21,0.11-0.51,0.14-0.88c0.03-0.37,0.06-0.79,0.08-1.25s0.03-0.94,0.03-1.45
c0-0.5,0-1,0-1.49c0-1.01-0.02-1.9-0.05-2.68s-0.1-1.35-0.2-1.72c-0.21-0.75-0.52-1.27-0.94-1.56
C417.92,121.4,417.39,121.26,416.75,121.26z"/>
<path class="st1" d="M423.35,122.51c0.29-0.81,0.78-1.45,1.47-1.91c0.69-0.46,1.58-0.69,2.67-0.69c1.32,0,2.33,0.31,3.04,0.92
c0.71,0.61,1.07,1.7,1.07,3.26v11.75h-1.35v-1.41h-0.03c-0.5,0.71-1.07,1.15-1.71,1.33s-1.26,0.27-1.87,0.27
c-0.69,0-1.27-0.12-1.74-0.37s-0.85-0.57-1.14-0.98c-0.29-0.41-0.51-0.87-0.64-1.4s-0.2-1.08-0.2-1.65c0-0.6,0.07-1.19,0.2-1.78
s0.37-1.12,0.71-1.61c0.33-0.48,0.78-0.87,1.33-1.17s1.25-0.45,2.08-0.45h3.01v-2.52c0-0.43-0.04-0.82-0.12-1.18
c-0.08-0.35-0.23-0.66-0.44-0.92c-0.21-0.26-0.5-0.46-0.86-0.61s-0.83-0.23-1.39-0.23c-0.61,0-1.18,0.15-1.72,0.45
c-0.54,0.3-0.9,0.75-1.07,1.35L423.35,122.51z M427.52,127.87c-0.46,0-0.89,0.06-1.29,0.19s-0.74,0.34-1.04,0.65
c-0.29,0.3-0.52,0.69-0.69,1.18c-0.17,0.48-0.25,1.07-0.25,1.76c0,0.86,0.21,1.6,0.64,2.21s1.18,0.92,2.24,0.92
c0.9,0,1.64-0.25,2.23-0.76s0.88-1.25,0.88-2.24v-3.9L427.52,127.87L427.52,127.87z"/>
<path class="st1" d="M438.44,119.91c1.31,0,2.31,0.35,3,1.06s1.03,1.73,1.03,3.08c-0.22,0.04-0.45,0.08-0.67,0.11
s-0.45,0.07-0.67,0.11c0.02-0.98-0.21-1.75-0.69-2.3s-1.17-0.82-2.07-0.82c-0.56,0-1.07,0.13-1.52,0.38
c-0.45,0.26-0.81,0.7-1.08,1.32c-0.17,0.41-0.27,1.1-0.31,2.09s-0.06,2.12-0.06,3.4v0.42c0,0.39,0,0.78,0.02,1.19
c0.01,0.41,0.03,0.8,0.05,1.19s0.05,0.74,0.08,1.06c0.03,0.32,0.08,0.58,0.14,0.77c0.19,0.58,0.5,1.03,0.94,1.35
s1,0.48,1.69,0.48c0.86,0,1.54-0.24,2.05-0.72c0.51-0.48,0.77-1.26,0.77-2.33l1.35,0.26c-0.04,1.35-0.43,2.36-1.16,3.03
s-1.74,1.01-3.03,1.01c-0.62,0-1.17-0.08-1.64-0.24s-0.86-0.37-1.17-0.63s-0.56-0.55-0.75-0.88s-0.32-0.68-0.41-1.04
c-0.06-0.26-0.12-0.59-0.16-1s-0.07-0.84-0.08-1.32c-0.01-0.47-0.02-0.95-0.03-1.43s-0.02-0.94-0.02-1.36
c0-0.58,0-1.16,0.02-1.73c0.01-0.58,0.03-1.12,0.06-1.64s0.08-0.98,0.14-1.4c0.06-0.42,0.14-0.75,0.22-1.01
c0.27-0.75,0.72-1.35,1.34-1.8C436.44,120.13,437.32,119.91,438.44,119.91z"/>
<path class="st1" d="M448.79,119.91c1.25,0,2.22,0.33,2.92,0.98s1.08,1.59,1.14,2.81c0.02,0.24,0.03,0.47,0.03,0.69
s0,0.46,0,0.69v3.11h-7.15v1.03c0,0.68,0.02,1.4,0.05,2.13s0.11,1.29,0.24,1.65c0.19,0.56,0.49,1,0.91,1.32s0.98,0.48,1.69,0.48
c0.94,0,1.63-0.28,2.08-0.83c0.45-0.56,0.71-1.24,0.77-2.05l1.35,0.26c-0.1,1.26-0.53,2.23-1.28,2.89s-1.72,1-2.9,1
c-0.62,0-1.17-0.08-1.64-0.24s-0.86-0.37-1.17-0.63s-0.56-0.55-0.75-0.88s-0.32-0.68-0.41-1.04c-0.06-0.26-0.11-0.59-0.16-1
c-0.04-0.41-0.07-0.84-0.08-1.3c-0.01-0.46-0.02-0.94-0.03-1.43c-0.01-0.49-0.02-0.95-0.02-1.38c0-0.58,0-1.16,0.02-1.73
c0.01-0.58,0.03-1.12,0.06-1.64s0.08-0.98,0.14-1.41c0.06-0.43,0.14-0.77,0.22-1.03c0.27-0.75,0.72-1.34,1.34-1.78
C446.79,120.13,447.66,119.91,448.79,119.91z M446.08,122.84c-0.15,0.37-0.24,0.91-0.27,1.63c-0.03,0.72-0.06,1.58-0.08,2.57
h5.83v-1.97c0-0.5-0.03-0.98-0.08-1.45c-0.05-0.47-0.18-0.89-0.38-1.26s-0.49-0.66-0.87-0.87s-0.88-0.32-1.51-0.32
c-0.53,0-1.03,0.12-1.51,0.35C446.73,121.75,446.35,122.2,446.08,122.84z"/>
<path class="st1" d="M461.25,135.84v-22.35h8.87v1.25h-7.52v8.99h6.65v1.25h-6.65v10.85L461.25,135.84L461.25,135.84z"/>
<path class="st1" d="M470.97,122.51c0.29-0.81,0.78-1.45,1.47-1.91c0.69-0.46,1.58-0.69,2.67-0.69c1.32,0,2.33,0.31,3.04,0.92
c0.71,0.61,1.07,1.7,1.07,3.26v11.75h-1.35v-1.41h-0.03c-0.5,0.71-1.07,1.15-1.71,1.33s-1.26,0.27-1.87,0.27
c-0.69,0-1.27-0.12-1.74-0.37s-0.85-0.57-1.14-0.98c-0.29-0.41-0.51-0.87-0.64-1.4s-0.2-1.08-0.2-1.65c0-0.6,0.07-1.19,0.2-1.78
s0.37-1.12,0.71-1.61c0.33-0.48,0.78-0.87,1.33-1.17s1.25-0.45,2.08-0.45h3.01v-2.52c0-0.43-0.04-0.82-0.12-1.18
c-0.08-0.35-0.23-0.66-0.44-0.92c-0.21-0.26-0.5-0.46-0.86-0.61s-0.83-0.23-1.39-0.23c-0.61,0-1.18,0.15-1.72,0.45
c-0.54,0.3-0.9,0.75-1.07,1.35L470.97,122.51z M475.14,127.87c-0.46,0-0.89,0.06-1.29,0.19s-0.74,0.34-1.04,0.65
c-0.29,0.3-0.52,0.69-0.69,1.18c-0.17,0.48-0.25,1.07-0.25,1.76c0,0.86,0.21,1.6,0.64,2.21s1.18,0.92,2.24,0.92
c0.9,0,1.64-0.25,2.23-0.76s0.88-1.25,0.88-2.24v-3.9L475.14,127.87L475.14,127.87z"/>
<path class="st1" d="M486.07,119.91c1.31,0,2.31,0.35,3,1.06s1.03,1.73,1.03,3.08c-0.22,0.04-0.45,0.08-0.67,0.11
s-0.45,0.07-0.67,0.11c0.02-0.98-0.21-1.75-0.69-2.3s-1.17-0.82-2.07-0.82c-0.56,0-1.07,0.13-1.52,0.38
c-0.45,0.26-0.81,0.7-1.08,1.32c-0.17,0.41-0.27,1.1-0.31,2.09s-0.06,2.12-0.06,3.4v0.42c0,0.39,0,0.78,0.02,1.19
c0.01,0.41,0.03,0.8,0.05,1.19s0.05,0.74,0.08,1.06c0.03,0.32,0.08,0.58,0.14,0.77c0.19,0.58,0.5,1.03,0.94,1.35
s1,0.48,1.69,0.48c0.86,0,1.54-0.24,2.05-0.72c0.51-0.48,0.77-1.26,0.77-2.33l1.35,0.26c-0.04,1.35-0.43,2.36-1.16,3.03
s-1.74,1.01-3.03,1.01c-0.62,0-1.17-0.08-1.64-0.24s-0.86-0.37-1.17-0.63s-0.56-0.55-0.75-0.88s-0.32-0.68-0.41-1.04
c-0.06-0.26-0.12-0.59-0.16-1s-0.07-0.84-0.08-1.32c-0.01-0.47-0.02-0.95-0.03-1.43s-0.02-0.94-0.02-1.36
c0-0.58,0-1.16,0.02-1.73c0.01-0.58,0.03-1.12,0.06-1.64s0.08-0.98,0.14-1.4c0.06-0.42,0.14-0.75,0.22-1.01
c0.27-0.75,0.72-1.35,1.34-1.8C484.07,120.13,484.94,119.91,486.07,119.91z"/>
<path class="st1" d="M491.54,120.13h1.76v-4.3h1.35v4.3h2.32v1.16h-2.32v10.86c0,0.79,0.16,1.39,0.49,1.81
c0.32,0.42,0.87,0.62,1.65,0.62h0.35v1.25h-0.6c-2.15,0-3.23-1.17-3.23-3.52v-11.02h-1.76L491.54,120.13L491.54,120.13z"/>
<path class="st1" d="M503.44,119.91c1.15,0,2.03,0.22,2.64,0.67c0.61,0.45,1.03,1.02,1.26,1.7c0.1,0.28,0.18,0.65,0.24,1.11
c0.05,0.46,0.09,0.96,0.13,1.51s0.05,1.1,0.05,1.67s0,1.1,0,1.59v0.48c0,0.56-0.01,1.12-0.02,1.7
c-0.01,0.58-0.05,1.21-0.11,1.89c-0.06,0.75-0.24,1.37-0.52,1.86s-0.63,0.88-1.04,1.17s-0.85,0.49-1.34,0.61
c-0.48,0.12-0.95,0.18-1.42,0.18c-1.26,0-2.2-0.26-2.82-0.79c-0.62-0.52-1.04-1.19-1.27-2.01c-0.06-0.26-0.12-0.58-0.16-0.98
s-0.07-0.83-0.09-1.3s-0.03-0.95-0.03-1.45c0-0.49,0-0.95,0-1.38c0-0.58,0-1.15,0.02-1.72c0.01-0.57,0.03-1.11,0.06-1.62
s0.08-0.98,0.14-1.4c0.06-0.42,0.14-0.75,0.22-1.01c0.27-0.75,0.73-1.35,1.38-1.81C501.41,120.14,502.3,119.91,503.44,119.91z
M503.37,121.16c-0.55,0-1.07,0.11-1.58,0.34c-0.5,0.22-0.88,0.66-1.13,1.3c-0.17,0.43-0.27,1.1-0.32,2.01s-0.06,1.96-0.06,3.16
v0.8c0,1.03,0.02,1.89,0.05,2.6s0.11,1.25,0.24,1.64c0.19,0.58,0.51,1.02,0.96,1.33c0.45,0.31,1.07,0.47,1.84,0.47
c0.69,0,1.29-0.19,1.8-0.58c0.5-0.39,0.84-0.92,1.01-1.61c0.08-0.36,0.14-0.94,0.17-1.73s0.05-1.64,0.05-2.54
c0-0.47,0-0.97-0.02-1.51c-0.01-0.53-0.02-1.05-0.03-1.54s-0.04-0.94-0.08-1.33s-0.09-0.7-0.16-0.92
c-0.19-0.64-0.53-1.12-1.02-1.43C504.6,121.32,504.02,121.16,503.37,121.16z"/>
<path class="st1" d="M516.06,121.51c-0.13-0.02-0.26-0.04-0.39-0.05c-0.14-0.01-0.27-0.02-0.39-0.02
c-1.04,0-1.85,0.36-2.43,1.09c-0.58,0.73-0.86,1.77-0.86,3.12v10.18h-1.35v-15.7h1.35v2.15h0.06c0.33-0.83,0.78-1.44,1.35-1.81
c0.56-0.38,1.24-0.56,2.04-0.56c0.1,0,0.21,0,0.31,0s0.21,0.01,0.31,0.03L516.06,121.51L516.06,121.51z"/>
<path class="st1" d="M521.26,133.65c0.29-1.09,0.57-2.22,0.85-3.39c0.27-1.17,0.54-2.31,0.82-3.42l1.72-6.71h1.38l-4.61,17.63
c-0.17,0.68-0.36,1.32-0.56,1.89c-0.23,0.73-0.6,1.33-1.11,1.81s-1.2,0.72-2.05,0.72h-0.47v-1.25h0.38
c0.67,0,1.18-0.25,1.54-0.74s0.64-1.18,0.85-2.05c0.1-0.41,0.2-0.81,0.3-1.2c0.09-0.4,0.19-0.8,0.3-1.2
c-0.69-2.61-1.37-5.21-2.05-7.79c-0.68-2.59-1.35-5.19-2.02-7.82h1.44l1.63,6.74l1.63,6.78H521.26z"/>
</g>
<g>
<path d="M250.36,148.01c-0.38,0-0.72,0.15-1,0.44c-0.29,0.29-0.43,0.79-0.43,1.48l-0.71-0.12c0.02-0.83,0.22-1.45,0.6-1.85
c0.38-0.4,0.9-0.61,1.57-0.61c0.77,0,1.32,0.23,1.65,0.68s0.5,1.05,0.5,1.79c0,0.54-0.05,1-0.15,1.4s-0.25,0.8-0.46,1.21
L249,158.5h3.43v0.66h-4.22v-0.67l3.15-6.5c0.17-0.36,0.29-0.71,0.34-1.06c0.05-0.35,0.08-0.72,0.08-1.11
c0-0.22-0.02-0.45-0.06-0.67s-0.11-0.41-0.21-0.58s-0.25-0.3-0.43-0.41C250.91,148.06,250.67,148.01,250.36,148.01z"/>
<path d="M256.22,153.01c0.12-0.12,0.28-0.23,0.48-0.31s0.4-0.13,0.6-0.13c0.59,0,1.06,0.18,1.41,0.53s0.53,0.85,0.53,1.49v2.65
c0,0.35-0.06,0.65-0.17,0.9c-0.11,0.25-0.27,0.46-0.46,0.63s-0.42,0.29-0.67,0.38c-0.26,0.08-0.53,0.13-0.81,0.13
c-0.29,0-0.56-0.04-0.81-0.13s-0.48-0.21-0.67-0.38s-0.35-0.38-0.46-0.63s-0.17-0.55-0.17-0.9v-2.17c0-0.37,0.02-0.69,0.07-0.95
s0.12-0.51,0.21-0.73l2.22-5.92h0.71c-0.08,0.19-0.18,0.46-0.3,0.8c-0.13,0.34-0.26,0.72-0.41,1.12s-0.3,0.82-0.45,1.23
c-0.15,0.42-0.29,0.8-0.42,1.14s-0.23,0.63-0.31,0.86s-0.13,0.36-0.14,0.38L256.22,153.01z M258.54,154.56
c0-0.42-0.13-0.74-0.39-0.98c-0.26-0.24-0.6-0.35-1.01-0.35c-0.23,0-0.43,0.05-0.61,0.14c-0.18,0.1-0.33,0.22-0.45,0.37
c-0.12,0.15-0.21,0.33-0.27,0.52s-0.09,0.4-0.09,0.6v2.42c0,0.42,0.13,0.74,0.4,0.98c0.27,0.24,0.61,0.35,1.02,0.35
s0.75-0.12,1.01-0.35c0.26-0.24,0.39-0.56,0.39-0.98V154.56z"/>
<path d="M267.74,148.01c-0.38,0-0.72,0.15-1,0.44c-0.29,0.29-0.43,0.79-0.43,1.48l-0.71-0.12c0.02-0.83,0.22-1.45,0.6-1.85
c0.38-0.4,0.9-0.61,1.57-0.61c0.77,0,1.32,0.23,1.65,0.68s0.5,1.05,0.5,1.79c0,0.54-0.05,1-0.15,1.4s-0.25,0.8-0.46,1.21
l-2.93,6.07h3.43v0.66h-4.22v-0.67l3.15-6.5c0.17-0.36,0.29-0.71,0.34-1.06c0.05-0.35,0.08-0.72,0.08-1.11
c0-0.22-0.02-0.45-0.06-0.67s-0.11-0.41-0.21-0.58s-0.25-0.3-0.43-0.41C268.29,148.06,268.05,148.01,267.74,148.01z"/>
<path d="M276.63,151.31c0,0.45-0.09,0.82-0.28,1.11s-0.42,0.52-0.71,0.67c0.28,0.16,0.52,0.38,0.71,0.67s0.28,0.66,0.28,1.09
v2.39c0,0.35-0.06,0.65-0.17,0.9c-0.11,0.25-0.27,0.46-0.46,0.63s-0.42,0.29-0.67,0.38s-0.53,0.13-0.81,0.13
c-0.29,0-0.56-0.04-0.81-0.13s-0.48-0.21-0.67-0.38s-0.35-0.38-0.46-0.63s-0.17-0.55-0.17-0.9v-2.39c0-0.44,0.09-0.8,0.27-1.09
s0.42-0.52,0.71-0.67c-0.3-0.16-0.53-0.38-0.71-0.67s-0.27-0.66-0.27-1.11v-1.92c0-0.34,0.06-0.63,0.17-0.88
c0.12-0.25,0.27-0.46,0.46-0.64c0.19-0.17,0.42-0.3,0.67-0.39s0.53-0.13,0.81-0.13s0.56,0.04,0.81,0.13s0.48,0.21,0.67,0.39
c0.19,0.17,0.35,0.39,0.46,0.64c0.12,0.25,0.17,0.55,0.17,0.88V151.31z M275.92,149.34c0-0.42-0.13-0.74-0.39-0.98
s-0.6-0.35-1.01-0.35s-0.75,0.12-1.02,0.35c-0.27,0.24-0.4,0.56-0.4,0.98v2.05c0,0.42,0.13,0.74,0.4,0.98
c0.27,0.24,0.61,0.36,1.02,0.36s0.75-0.12,1.01-0.36s0.39-0.57,0.39-0.98V149.34z M275.92,154.76c0-0.41-0.13-0.73-0.39-0.98
s-0.6-0.38-1.01-0.39c-0.41,0-0.75,0.12-1.02,0.37s-0.4,0.58-0.4,1v2.53c0,0.42,0.13,0.74,0.4,0.98
c0.27,0.24,0.61,0.35,1.02,0.35s0.75-0.12,1.01-0.35s0.39-0.56,0.39-0.98V154.76z"/>
<path d="M289.34,149.49c-0.2,0.57-0.4,1.14-0.61,1.69s-0.42,1.12-0.62,1.69l-1.33,3.57h-0.49c-0.22-0.59-0.44-1.18-0.65-1.77
c-0.21-0.58-0.43-1.17-0.65-1.75l-1.2-3.35h-0.07v9.59h-0.71v-11.71h0.72c0.25,0.67,0.5,1.34,0.73,1.99
c0.24,0.66,0.47,1.32,0.72,1.99l1.33,3.75h0.05l1.36-3.77c0.03-0.08,0.09-0.22,0.16-0.43c0.08-0.21,0.16-0.44,0.25-0.71
c0.09-0.26,0.19-0.55,0.3-0.85s0.21-0.59,0.31-0.85c0.1-0.26,0.18-0.5,0.25-0.71s0.12-0.35,0.16-0.43h0.72v11.71h-0.71v-9.68
h-0.02L289.34,149.49L289.34,149.49z"/>
<path d="M297.26,159.17l-0.66-3.06h-3.19l-0.66,3.06h-0.67l2.51-11.71h0.81l2.56,11.71H297.26z M294.99,148.52l-0.61,2.93
l-0.85,4h2.94l-0.85-4.04l-0.59-2.89H294.99z"/>
<path d="M300.15,159.17v-11.71h0.71v11.71H300.15z"/>
<path d="M309.67,148.01c-0.38,0-0.72,0.15-1,0.44c-0.29,0.29-0.43,0.79-0.43,1.48l-0.71-0.12c0.02-0.83,0.22-1.45,0.6-1.85
c0.38-0.4,0.9-0.61,1.57-0.61c0.77,0,1.32,0.23,1.65,0.68s0.5,1.05,0.5,1.79c0,0.54-0.05,1-0.15,1.4s-0.25,0.8-0.46,1.21
l-2.93,6.07h3.43v0.66h-4.22v-0.67l3.15-6.5c0.17-0.36,0.29-0.71,0.34-1.06c0.05-0.35,0.08-0.72,0.08-1.11
c0-0.22-0.02-0.45-0.06-0.67s-0.11-0.41-0.21-0.58s-0.25-0.3-0.43-0.41C310.22,148.06,309.98,148.01,309.67,148.01z"/>
<path d="M318.55,157.25c0,0.35-0.06,0.65-0.17,0.9c-0.11,0.25-0.27,0.46-0.46,0.63s-0.42,0.29-0.67,0.38
c-0.26,0.08-0.53,0.13-0.81,0.13c-0.29,0-0.56-0.04-0.81-0.13c-0.26-0.08-0.48-0.21-0.67-0.38s-0.35-0.38-0.46-0.63
s-0.17-0.55-0.17-0.9v-7.86c0-0.34,0.06-0.63,0.17-0.88c0.12-0.25,0.27-0.46,0.46-0.64c0.19-0.17,0.42-0.3,0.67-0.39
s0.53-0.13,0.81-0.13c0.3,0,0.57,0.04,0.83,0.13s0.48,0.21,0.67,0.39c0.19,0.17,0.34,0.39,0.45,0.64
c0.11,0.25,0.16,0.55,0.16,0.88V157.25z M317.85,149.36c0-0.42-0.13-0.75-0.39-0.99s-0.6-0.36-1.01-0.36s-0.75,0.12-1.02,0.36
s-0.4,0.57-0.4,0.99v7.92c0,0.42,0.13,0.75,0.4,0.99s0.61,0.36,1.02,0.36s0.75-0.12,1.01-0.36s0.39-0.57,0.39-0.99V149.36z"/>
<path d="M323.24,148.01c-0.38,0-0.72,0.15-1,0.44c-0.29,0.29-0.43,0.79-0.43,1.48l-0.71-0.12c0.02-0.83,0.22-1.45,0.6-1.85
c0.38-0.4,0.9-0.61,1.57-0.61c0.77,0,1.32,0.23,1.65,0.68s0.5,1.05,0.5,1.79c0,0.54-0.05,1-0.15,1.4s-0.25,0.8-0.46,1.21
l-2.93,6.07h3.43v0.66h-4.22v-0.67l3.15-6.5c0.17-0.36,0.29-0.71,0.34-1.06c0.05-0.35,0.08-0.72,0.08-1.11
c0-0.22-0.02-0.45-0.06-0.67s-0.11-0.41-0.21-0.58s-0.25-0.3-0.43-0.41C323.79,148.06,323.55,148.01,323.24,148.01z"/>
<path d="M330.06,147.36c0.4,0,0.73,0.05,0.99,0.16c0.26,0.11,0.48,0.26,0.63,0.45c0.16,0.2,0.27,0.43,0.34,0.71
c0.07,0.27,0.1,0.57,0.1,0.9v1.55c-0.01,0.2-0.03,0.4-0.06,0.59s-0.08,0.37-0.16,0.55c-0.08,0.17-0.18,0.33-0.31,0.46
s-0.31,0.24-0.53,0.32v0.02c0.24,0.09,0.43,0.21,0.58,0.35c0.14,0.15,0.25,0.32,0.32,0.51s0.12,0.41,0.13,0.65
c0.02,0.24,0.02,0.48,0.02,0.72v1.73c0,0.71-0.18,1.26-0.54,1.66c-0.36,0.4-0.9,0.6-1.62,0.6c-0.62,0-1.12-0.18-1.51-0.55
c-0.39-0.37-0.59-0.95-0.59-1.76l0.71-0.2c0,0.57,0.1,1.02,0.3,1.35s0.57,0.5,1.09,0.5c0.42,0,0.76-0.12,1.03-0.35
s0.41-0.64,0.41-1.22v-1.96c0-0.63-0.13-1.07-0.39-1.32s-0.58-0.37-0.98-0.37h-0.44v-0.69h0.48c0.38,0,0.7-0.12,0.95-0.35
c0.25-0.23,0.38-0.64,0.38-1.24v-1.67c0-0.42-0.11-0.76-0.33-1.03s-0.58-0.4-1.08-0.4s-0.87,0.17-1.09,0.5
c-0.22,0.34-0.34,0.76-0.34,1.28c-0.12-0.02-0.24-0.04-0.35-0.06c-0.12-0.02-0.23-0.04-0.35-0.06c0.01-0.71,0.2-1.28,0.56-1.71
C328.79,147.57,329.34,147.36,330.06,147.36z"/>
<path d="M338.5,154.69V154h3.84v0.69H338.5z"/>
</g>
<g>
<path class="st1" d="M354.1,147.36c0.47,0,0.88,0.07,1.22,0.2c0.34,0.13,0.62,0.32,0.85,0.56c0.22,0.24,0.39,0.52,0.49,0.85
c0.1,0.33,0.16,0.69,0.16,1.08l-1.73,0.45c0-0.43-0.08-0.77-0.24-1.04c-0.16-0.27-0.41-0.4-0.76-0.4
c-0.21,0-0.38,0.04-0.51,0.13s-0.23,0.21-0.3,0.35c-0.07,0.14-0.12,0.29-0.15,0.46c-0.03,0.16-0.04,0.32-0.04,0.46v5.95
c0,0.11,0.01,0.24,0.03,0.37c0.02,0.13,0.07,0.26,0.14,0.38s0.17,0.22,0.29,0.29c0.12,0.08,0.29,0.12,0.48,0.12
c0.65,0,0.98-0.48,0.99-1.45c0.3,0.06,0.59,0.1,0.89,0.14c0.3,0.04,0.59,0.08,0.89,0.13c-0.02,0.89-0.26,1.59-0.71,2.1
c-0.45,0.52-1.13,0.77-2.01,0.77c-0.94,0-1.64-0.24-2.09-0.73s-0.67-1.2-0.67-2.15v-5.84c0-0.44,0.05-0.85,0.14-1.24
c0.09-0.39,0.25-0.73,0.47-1.02c0.22-0.29,0.51-0.52,0.86-0.69C353.15,147.44,353.58,147.36,354.1,147.36z"/>
<path class="st1" d="M359.11,159.17v-11.71h1.77v11.71H359.11z"/>
<path class="st1" d="M365.35,152.35v6.81h-1.77v-11.71h1.59l1.38,3.48c0.11,0.29,0.22,0.58,0.33,0.86s0.22,0.57,0.35,0.86
l0.58,1.62c0.02,0,0.04,0,0.04-0.01c0.01,0,0.02-0.01,0.04-0.01v-6.8h1.74v11.71h-1.55l-1.38-3.47
c-0.22-0.57-0.43-1.13-0.65-1.68c-0.21-0.55-0.42-1.1-0.63-1.67L365.35,152.35L365.35,152.35z"/>
<path class="st1" d="M372.27,159.17v-11.71h5.08v1.7h-3.3v3.2h2.88v1.73h-2.88v3.38h3.3v1.7L372.27,159.17L372.27,159.17z
M373.5,146.21l2.53-2.04l1.05,1.26l-2.94,1.65L373.5,146.21z"/>
<path class="st1" d="M382.83,156.61l-0.82-2.17l-0.7-2.05h-0.08v6.78h-1.77v-11.71h1.73l1.24,3.33l0.9,2.54h0.08l0.92-2.61
l1.23-3.26h1.71v11.71h-1.77v-6.75h-0.07l-0.72,2.09l-0.8,2.1H382.83z"/>
<path class="st1" d="M394,159.17l-0.44-2.44h-2.1c-0.08,0.4-0.15,0.81-0.22,1.22s-0.14,0.82-0.21,1.22h-1.81
c0.38-1.96,0.77-3.92,1.15-5.86s0.77-3.89,1.15-5.86h1.97l2.32,11.71L394,159.17L394,159.17z M392.46,150.17
c-0.11,0.81-0.22,1.61-0.34,2.42c-0.12,0.8-0.25,1.62-0.39,2.45h1.56l-0.74-4.86L392.46,150.17L392.46,150.17z"/>
<path class="st1" d="M407.64,147.47v8.7c0,1.02-0.22,1.79-0.66,2.31s-1.14,0.78-2.11,0.78s-1.66-0.25-2.1-0.75
s-0.66-1.22-0.66-2.16v-8.88h1.77v8.92c0,0.3,0.07,0.58,0.22,0.82s0.4,0.36,0.76,0.36s0.62-0.13,0.77-0.38s0.23-0.56,0.23-0.92
v-8.8L407.64,147.47L407.64,147.47z"/>
<path class="st1" d="M413.08,149.16v10.01h-1.77v-10.01h-1.84v-1.7h5.46v1.7H413.08z"/>
<path class="st1" d="M422.28,156.17c0,1.02-0.22,1.79-0.67,2.31s-1.15,0.78-2.11,0.78s-1.66-0.25-2.1-0.75s-0.66-1.22-0.66-2.16
v-5.89c0-0.46,0.05-0.88,0.16-1.26c0.1-0.38,0.26-0.71,0.48-0.98c0.22-0.27,0.5-0.49,0.86-0.64c0.35-0.15,0.78-0.23,1.27-0.23
c0.52,0,0.96,0.07,1.32,0.21c0.36,0.14,0.64,0.35,0.85,0.61c0.21,0.27,0.37,0.59,0.46,0.98c0.09,0.38,0.14,0.81,0.14,1.29
V156.17z M420.51,150.32c0-0.33-0.07-0.62-0.21-0.88c-0.14-0.26-0.4-0.39-0.78-0.39c-0.21,0-0.38,0.05-0.51,0.14
s-0.23,0.21-0.3,0.35c-0.07,0.14-0.12,0.3-0.15,0.47s-0.04,0.33-0.04,0.48v5.89c0,0.3,0.07,0.58,0.22,0.82s0.4,0.36,0.76,0.36
c0.36,0,0.62-0.13,0.77-0.38s0.23-0.56,0.23-0.92L420.51,150.32L420.51,150.32z"/>
<path class="st1" d="M427.42,147.46c1.05,0,1.82,0.28,2.31,0.84s0.73,1.46,0.73,2.71c0,0.55-0.05,1.05-0.15,1.5
s-0.27,0.83-0.51,1.15c-0.24,0.32-0.56,0.57-0.94,0.75s-0.88,0.27-1.47,0.27h-0.72v4.49h-1.77v-11.71H427.42z M426.67,149.16
v3.79h0.62c0.55,0,0.93-0.16,1.14-0.48c0.21-0.32,0.32-0.8,0.32-1.45c0-0.57-0.1-1.03-0.3-1.36c-0.2-0.33-0.58-0.5-1.12-0.5
H426.67z"/>
<path class="st1" d="M432.68,159.17v-11.71h1.77v11.71H432.68z"/>
<path class="st1" d="M441.31,159.17l-0.44-2.44h-2.1c-0.08,0.4-0.15,0.81-0.22,1.22s-0.14,0.82-0.21,1.22h-1.81
c0.38-1.96,0.77-3.92,1.15-5.86s0.77-3.89,1.15-5.86h1.97l2.32,11.71L441.31,159.17L441.31,159.17z M439.76,150.17
c-0.11,0.81-0.22,1.61-0.34,2.42c-0.12,0.8-0.25,1.62-0.39,2.45h1.56l-0.74-4.86L439.76,150.17L439.76,150.17z"/>
<path class="st1" d="M453.63,153.04c0.5,0.17,0.85,0.49,1.04,0.96s0.28,1.01,0.28,1.62c0,1.22-0.25,2.12-0.76,2.69
s-1.29,0.86-2.34,0.86h-2.37v-11.71h2.5c1.01,0,1.74,0.27,2.19,0.82c0.46,0.54,0.68,1.33,0.68,2.36c0,0.54-0.09,1.01-0.27,1.41
c-0.18,0.4-0.5,0.71-0.95,0.91V153.04z M453.15,150.67c0-0.54-0.1-0.92-0.31-1.16s-0.55-0.35-1.04-0.35h-0.56v3.03h0.58
c0.46,0,0.8-0.13,1.01-0.39S453.15,151.17,453.15,150.67z M453.25,155.47c0-0.55-0.1-0.96-0.29-1.23
c-0.2-0.27-0.54-0.4-1.04-0.4h-0.67v3.63h0.71c0.29,0,0.51-0.05,0.68-0.16c0.17-0.11,0.3-0.25,0.39-0.43
c0.09-0.18,0.15-0.39,0.18-0.64S453.25,155.74,453.25,155.47z"/>
<path class="st1" d="M462.96,156.17c0,1.02-0.22,1.79-0.67,2.31s-1.15,0.78-2.11,0.78s-1.66-0.25-2.1-0.75s-0.66-1.22-0.66-2.16
v-5.89c0-0.46,0.05-0.88,0.16-1.26c0.1-0.38,0.26-0.71,0.48-0.98c0.22-0.27,0.5-0.49,0.86-0.64c0.35-0.15,0.78-0.23,1.27-0.23
c0.52,0,0.96,0.07,1.32,0.21c0.36,0.14,0.64,0.35,0.85,0.61c0.21,0.27,0.37,0.59,0.46,0.98c0.09,0.38,0.14,0.81,0.14,1.29
V156.17z M461.19,150.32c0-0.33-0.07-0.62-0.21-0.88c-0.14-0.26-0.4-0.39-0.78-0.39c-0.21,0-0.38,0.05-0.51,0.14
s-0.23,0.21-0.3,0.35c-0.07,0.14-0.12,0.3-0.15,0.47s-0.04,0.33-0.04,0.48v5.89c0,0.3,0.07,0.58,0.22,0.82s0.4,0.36,0.76,0.36
c0.36,0,0.62-0.13,0.77-0.38s0.23-0.56,0.23-0.92L461.19,150.32L461.19,150.32z"/>
<path class="st1" d="M468.18,147.46c0.93,0,1.66,0.27,2.19,0.8s0.79,1.4,0.79,2.6c0,0.74-0.1,1.37-0.3,1.88
c-0.2,0.51-0.56,0.91-1.08,1.2l1.69,5.23h-1.81l-1.48-4.85h-0.84v4.85h-1.77v-11.71H468.18z M467.35,149.16v3.43h0.72
c0.46,0,0.8-0.14,1.02-0.41c0.22-0.28,0.33-0.72,0.33-1.32c0-0.54-0.11-0.96-0.32-1.25c-0.21-0.3-0.57-0.45-1.06-0.45
L467.35,149.16L467.35,149.16z"/>
<path class="st1" d="M476.46,147.46c0.68,0,1.21,0.12,1.61,0.36c0.39,0.24,0.67,0.65,0.82,1.22c0.12,0.42,0.18,0.98,0.19,1.71
s0.01,1.57,0.01,2.55c0,0.97-0.01,1.79-0.02,2.49c-0.01,0.7-0.08,1.25-0.21,1.65c-0.21,0.66-0.54,1.12-0.99,1.36
s-0.97,0.37-1.55,0.37h-2.69v-11.71H476.46z M477.3,150.53c0-0.43-0.08-0.76-0.24-1s-0.46-0.36-0.91-0.36h-0.76v8.31h0.76
c0.44,0,0.74-0.12,0.9-0.36s0.25-0.58,0.25-1.03V150.53z"/>
<path class="st1" d="M481.75,159.17v-11.71h5.08v1.7h-3.3v3.2h2.88v1.73h-2.88v3.38h3.3v1.7L481.75,159.17L481.75,159.17z"/>
<path class="st1" d="M491.6,147.46c0.93,0,1.66,0.27,2.19,0.8s0.79,1.4,0.79,2.6c0,0.74-0.1,1.37-0.3,1.88
c-0.2,0.51-0.56,0.91-1.08,1.2l1.69,5.23h-1.81l-1.48-4.85h-0.84v4.85h-1.77v-11.71H491.6z M490.76,149.16v3.43h0.72
c0.46,0,0.8-0.14,1.02-0.41c0.22-0.28,0.33-0.72,0.33-1.32c0-0.54-0.11-0.96-0.32-1.25c-0.21-0.3-0.57-0.45-1.06-0.45
L490.76,149.16L490.76,149.16z"/>
<path class="st1" d="M502.47,156.17c0,1.02-0.22,1.79-0.67,2.31s-1.15,0.78-2.11,0.78s-1.66-0.25-2.1-0.75s-0.66-1.22-0.66-2.16
v-5.89c0-0.46,0.05-0.88,0.16-1.26c0.1-0.38,0.26-0.71,0.48-0.98c0.22-0.27,0.5-0.49,0.86-0.64c0.35-0.15,0.78-0.23,1.27-0.23
c0.52,0,0.96,0.07,1.32,0.21c0.36,0.14,0.64,0.35,0.85,0.61c0.21,0.27,0.37,0.59,0.46,0.98c0.09,0.38,0.14,0.81,0.14,1.29
V156.17z M500.7,150.32c0-0.33-0.07-0.62-0.21-0.88c-0.14-0.26-0.4-0.39-0.78-0.39c-0.21,0-0.38,0.05-0.51,0.14
s-0.23,0.21-0.3,0.35c-0.07,0.14-0.12,0.3-0.15,0.47s-0.04,0.33-0.04,0.48v5.89c0,0.3,0.07,0.58,0.22,0.82s0.4,0.36,0.76,0.36
c0.36,0,0.62-0.13,0.77-0.38s0.23-0.56,0.23-0.92L500.7,150.32L500.7,150.32z"/>
<path class="st1" d="M510.56,147.47v8.7c0,1.02-0.22,1.79-0.66,2.31s-1.14,0.78-2.11,0.78s-1.66-0.25-2.1-0.75
s-0.66-1.22-0.66-2.16v-8.88h1.77v8.92c0,0.3,0.07,0.58,0.22,0.82s0.4,0.36,0.76,0.36s0.62-0.13,0.77-0.38s0.23-0.56,0.23-0.92
v-8.8L510.56,147.47L510.56,147.47z"/>
<path class="st1" d="M515.93,159.27c-0.94,0-1.64-0.24-2.09-0.73s-0.67-1.2-0.67-2.15v-5.84c0-0.44,0.05-0.85,0.15-1.24
c0.1-0.39,0.26-0.73,0.49-1.02s0.51-0.52,0.86-0.69s0.78-0.25,1.28-0.25c0.93,0,1.62,0.24,2.05,0.73
c0.44,0.49,0.66,1.13,0.66,1.92v0.13l-1.74,0.35c0-0.43-0.08-0.77-0.23-1.04c-0.16-0.27-0.41-0.4-0.75-0.4
c-0.21,0-0.37,0.04-0.5,0.13c-0.13,0.09-0.23,0.21-0.3,0.35s-0.12,0.29-0.15,0.46c-0.03,0.16-0.04,0.32-0.04,0.46v5.95
c0,0.12,0.02,0.24,0.05,0.35c0.03,0.2,0.11,0.39,0.23,0.56s0.34,0.25,0.65,0.25s0.56-0.08,0.75-0.25s0.28-0.4,0.28-0.69v-2.3
h-1.04v-1.58h2.81v3.74c0,0.92-0.25,1.62-0.76,2.09C517.41,159.03,516.75,159.27,515.93,159.27z"/>
<path class="st1" d="M521.19,159.17v-11.71h5.08v1.7h-3.3v3.2h2.88v1.73h-2.88v3.38h3.3v1.7L521.19,159.17L521.19,159.17z"/>
</g>
</g>
<g>
<path d="M263.69,50.5v54.08H251V50.5h-9.98V38.08h32.65V50.5H263.69z"/>
<path d="M299.8,104.58V77.06h-8.12v27.52h-12.69v-66.5h12.69v26.37h8.12V38.08h12.69v66.5H299.8z"/>
<path d="M354.1,84.99c0,3.06-0.27,5.83-0.79,8.31c-0.53,2.48-1.43,4.6-2.71,6.35s-3,3.11-5.18,4.06
c-2.18,0.96-4.91,1.43-8.21,1.43c-2.99,0-5.55-0.45-7.7-1.35c-2.15-0.9-3.89-2.13-5.22-3.71c-1.34-1.57-2.32-3.4-2.94-5.48
s-0.93-4.3-0.93-6.66l12.78-2.48c0.12,2.42,0.48,4.24,1.06,5.45s1.67,1.82,3.28,1.82c0.92,0,1.64-0.22,2.17-0.67
c0.52-0.44,0.92-1.02,1.2-1.72c0.28-0.7,0.46-1.53,0.55-2.48c0.09-0.95,0.14-1.91,0.14-2.86c0-1.33-0.09-2.45-0.28-3.34
s-0.51-1.65-0.98-2.29s-1.1-1.19-1.91-1.67c-0.81-0.48-1.8-0.97-2.99-1.48c-3.17-1.33-5.72-2.72-7.65-4.15s-3.41-2.96-4.43-4.58
c-1.03-1.62-1.7-3.34-2.01-5.15c-0.31-1.81-0.47-3.8-0.47-5.96c0-2.73,0.31-5.26,0.93-7.58s1.6-4.31,2.94-5.96
c1.34-1.65,3.08-2.96,5.22-3.91c2.15-0.95,4.74-1.43,7.79-1.43c3.23,0,5.91,0.53,8.02,1.58c2.11,1.05,3.78,2.39,4.99,4.01
s2.07,3.43,2.57,5.4c0.5,1.98,0.75,3.89,0.75,5.73L341.6,57c0-0.96-0.05-1.85-0.14-2.68c-0.09-0.83-0.29-1.58-0.6-2.25
s-0.72-1.19-1.24-1.58c-0.52-0.38-1.25-0.57-2.17-0.57c-0.86,0-1.54,0.21-2.03,0.62s-0.88,0.92-1.15,1.53
c-0.28,0.61-0.46,1.29-0.55,2.05s-0.14,1.5-0.14,2.2c0,0.89,0.06,1.69,0.18,2.39s0.43,1.37,0.93,2.01s1.22,1.26,2.18,1.86
c0.96,0.61,2.31,1.26,4.04,1.96c2.97,1.21,5.32,2.48,7.06,3.82c1.73,1.34,3.05,2.8,3.95,4.4c0.9,1.59,1.49,3.39,1.76,5.4
S354.1,82.45,354.1,84.99z"/>
<path d="M374.34,50.5v14.14h14.93v12.42h-14.93v27.52h-12.69v-66.5h29.76V50.5H374.34z"/>
</g>
</g>
<g>
<path d="M364.78,329.98l24.81-24.81l-38.03-38.03c-4.02-4.02-8.44-7.66-13.14-10.84c-4.75-3.21-9.83-5.97-15.1-8.2
c-5.37-2.27-10.99-4.02-16.7-5.19c-11.71-2.4-24.07-2.4-35.78,0c-5.71,1.17-11.33,2.91-16.7,5.19c-5.27,2.23-10.35,4.99-15.1,8.2
c-4.7,3.18-9.12,6.82-13.14,10.84s-7.66,8.44-10.84,13.14c-3.21,4.75-5.97,9.83-8.2,15.1c-2.27,5.37-4.02,10.99-5.19,16.7
c-1.2,5.85-1.81,11.87-1.81,17.89c0,0.01,0,0.01,0,0.02c0,4.92,0.55,9.72,1.6,14.35c1.05,4.64,2.59,9.12,4.58,13.39
c1.99,4.27,4.42,8.32,7.25,12.11c2.82,3.79,6.04,7.33,9.6,10.56c3.56,3.23,7.45,6.15,11.63,8.71c4.18,2.56,8.65,4.77,13.35,6.58
s9.64,3.21,14.75,4.16c5.12,0.95,10.41,1.45,15.84,1.45c5.92,0,11.7-0.48,17.29-1.38s10.97-2.24,16.1-3.96s10.01-3.82,14.57-6.26
s8.81-5.22,12.69-8.29l113.32-89.46c-0.56,0.51,0.53-0.54,0,0c2.44-2.44,5.12-4.65,7.97-6.58c2.88-1.94,5.95-3.61,9.13-4.96
c3.24-1.37,6.63-2.42,10.07-3.13c7.09-1.45,14.63-1.45,21.71,0c3.44,0.7,6.83,1.76,10.07,3.13c3.18,1.35,6.25,3.01,9.13,4.96
c2.85,1.93,5.53,4.14,7.97,6.58c2.44,2.44,4.65,5.12,6.58,7.97c1.94,2.87,3.61,5.95,4.96,9.13c1.37,3.24,2.42,6.63,3.13,10.07
c0.72,3.54,1.09,7.2,1.09,10.86c0,3.66-0.37,7.31-1.09,10.86c-0.71,3.45-1.76,6.83-3.13,10.07c-1.35,3.18-3.01,6.26-4.96,9.13
c-1.93,2.85-4.14,5.53-6.58,7.97s-5.12,4.65-7.97,6.58c-2.87,1.94-5.95,3.61-9.13,4.96c-3.24,1.37-6.63,2.42-10.07,3.13
c-7.09,1.45-14.62,1.45-21.71,0c-3.44-0.7-6.83-1.76-10.07-3.13c-3.18-1.35-6.25-3.01-9.13-4.95c-2.85-1.93-5.53-4.14-7.97-6.58
l-38.03-38.03l0,0l-24.81,24.81l0,0l38.03,38.03c4.02,4.02,8.44,7.66,13.14,10.84c4.75,3.21,9.83,5.97,15.1,8.2
c5.37,2.27,10.99,4.02,16.7,5.19c5.85,1.2,11.87,1.81,17.89,1.81s12.04-0.61,17.89-1.81c5.71-1.17,11.33-2.91,16.7-5.19
c5.27-2.23,10.35-4.99,15.1-8.2c4.7-3.18,9.12-6.82,13.14-10.84s7.66-8.44,10.84-13.14c3.21-4.75,5.97-9.83,8.2-15.1
c2.27-5.37,4.02-10.99,5.19-16.7c1.2-5.85,1.8-11.87,1.8-17.89l0,0c0-4.92-0.55-9.73-1.6-14.37c-1.05-4.64-2.59-9.12-4.58-13.39
c-1.99-4.27-4.42-8.32-7.25-12.11c-2.82-3.79-6.04-7.33-9.6-10.56s-7.45-6.15-11.63-8.71s-8.65-4.77-13.35-6.58
c-4.7-1.8-9.64-3.21-14.75-4.16c-5.12-0.95-10.41-1.45-15.84-1.45c-5.92,0-11.7,0.47-17.29,1.38c-5.58,0.9-10.97,2.24-16.1,3.96
s-10.01,3.82-14.57,6.26s-8.81,5.22-12.69,8.29l-113.32,89.46c-1.98,1.82-5.75,5.07-7.97,6.58c-2.87,1.94-5.95,3.61-9.13,4.96
c-3.24,1.37-6.63,2.42-10.07,3.13c-7.09,1.45-14.62,1.45-21.71,0c-3.44-0.71-6.83-1.76-10.07-3.13c-3.18-1.35-6.25-3.01-9.13-4.96
c-2.85-1.93-5.53-4.14-7.97-6.58c-2.44-2.44-4.65-5.12-6.58-7.97c-1.94-2.87-3.61-5.95-4.96-9.13c-1.37-3.24-2.42-6.63-3.13-10.07
c-0.73-3.54-1.09-7.2-1.09-10.86c0-3.66,0.37-7.31,1.09-10.86c0.7-3.44,1.76-6.83,3.13-10.07c1.35-3.18,3.01-6.25,4.95-9.13
c1.93-2.85,4.14-5.53,6.58-7.97s5.12-4.65,7.97-6.58c2.88-1.94,5.95-3.61,9.13-4.96c3.24-1.37,6.63-2.42,10.07-3.13
c3.54-0.73,7.2-1.09,10.86-1.09c3.66,0,7.31,0.37,10.86,1.09c3.44,0.7,6.83,1.76,10.07,3.13c3.18,1.35,6.25,3.01,9.13,4.96
c2.85,1.93,5.53,4.14,7.97,6.58L364.78,329.98L364.78,329.98z"/>
<g>
<g>
<g>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="604.435" y1="427.5899" x2="392.7685" y2="639.2565" gradientTransform="matrix(1 0 0 1 0 -230)">
<stop offset="0.1074" style="stop-color:#E5006D"/>
<stop offset="1" style="stop-color:#000000"/>
</linearGradient>
<path class="st2" d="M452.77,270.26c4.56-2.44,9.44-4.54,14.57-6.26s10.52-3.05,16.1-3.96c5.58-0.9,11.36-1.38,17.29-1.38
c5.43,0,10.72,0.5,15.84,1.45s10.05,2.35,14.75,4.16c4.7,1.8,9.17,4.01,13.35,6.58c4.18,2.56,8.08,5.48,11.63,8.71
c3.56,3.23,6.77,6.76,9.6,10.56c2.82,3.79,5.26,7.85,7.25,12.11c1.99,4.27,3.53,8.74,4.58,13.39c1.05,4.64,1.6,9.45,1.6,14.37
c0-6.02-0.61-12.04-1.8-17.89c-1.17-5.71-2.91-11.33-5.19-16.7c-2.23-5.27-4.99-10.35-8.2-15.1
c-3.18-4.7-6.82-9.12-10.84-13.14c-4.02-4.02-8.44-7.66-13.14-10.84c-4.75-3.21-9.83-5.97-15.1-8.2
c-5.37-2.27-10.99-4.02-16.7-5.19c-5.85-1.2-11.87-1.81-17.89-1.81c-6.02,0-12.04,0.61-17.89,1.81
c-5.71,1.17-11.33,2.91-16.7,5.19c-5.27,2.23-10.35,4.98-15.1,8.2c-4.7,3.18-9.12,6.82-13.14,10.84l-38.03,38.03L364.8,330
l-38.03,38.03c-0.54,0.54-1.09,1.05-1.64,1.57l114.97-91.03C443.95,275.48,448.2,272.7,452.77,270.26z"/>
</g>
</g>
<g>
<linearGradient id="SVGID_00000049196946087679940990000002865169276270721946_" gradientUnits="userSpaceOnUse" x1="631.6329" y1="-164.8441" x2="419.9663" y2="46.8224" gradientTransform="matrix(-1 0 0 -1 806.3674 297.5265)">
<stop offset="0.1074" style="stop-color:#E5006D"/>
<stop offset="1" style="stop-color:#000000"/>
</linearGradient>
<path style="fill:url(#SVGID_00000049196946087679940990000002865169276270721946_);" d="M326.4,389.7
c-4.56,2.44-9.44,4.54-14.57,6.26s-10.52,3.05-16.1,3.96c-5.58,0.9-11.36,1.38-17.29,1.38c-5.43,0-10.72-0.5-15.84-1.45
s-10.05-2.35-14.75-4.16c-4.7-1.8-9.17-4.01-13.35-6.58c-4.18-2.56-8.08-5.48-11.63-8.71c-3.56-3.23-6.77-6.76-9.6-10.56
c-2.82-3.79-5.26-7.85-7.25-12.11c-1.99-4.27-3.53-8.74-4.58-13.39c-1.05-4.64-1.6-9.45-1.6-14.37c0,6.02,0.61,12.04,1.8,17.89
c1.17,5.71,2.91,11.33,5.19,16.7c2.23,5.27,4.99,10.35,8.2,15.1c3.18,4.7,6.82,9.12,10.84,13.14
c4.02,4.02,8.44,7.66,13.14,10.84c4.75,3.21,9.83,5.97,15.1,8.2c5.37,2.27,10.99,4.02,16.7,5.19c5.85,1.2,11.87,1.81,17.89,1.81
s12.04-0.61,17.89-1.81c5.71-1.17,11.33-2.91,16.7-5.19c5.27-2.23,10.35-4.98,15.1-8.2c4.7-3.18,9.12-6.82,13.14-10.84
l38.03-38.03l24.81-24.81l38.03-38.03c0.54-0.54,1.09-1.05,1.64-1.57l-114.97,91.03C335.21,384.48,330.96,387.26,326.4,389.7z"
/>
</g>
</g>
</g>
<g>
<path d="M411.61,538.22c1.81-2.21,4.52-3.65,7.6-3.65c3.08,0,5.79,1.44,7.6,3.65c-2.33,1-4.9,1.56-7.6,1.56
C416.51,539.77,413.94,539.22,411.61,538.22z M409.47,537.12l3.07-4.86c1.73-2.73,1.17-6.32-1.29-8.4l-4.02-3.39h5.66
c3.24,0,6.14-2.42,6.31-5.66c0.18-3.45-2.56-6.3-5.97-6.3h-9.16l0,0c-0.91,1.16-1.67,2.43-2.32,3.76
c-0.06,0.13-0.12,0.25-0.18,0.38c-0.14,0.31-0.26,0.63-0.39,0.96c-0.09,0.24-0.18,0.47-0.26,0.71c-0.1,0.29-0.19,0.58-0.27,0.87
c-0.08,0.3-0.16,0.59-0.23,0.9c-0.06,0.26-0.12,0.53-0.17,0.79c-0.07,0.37-0.12,0.74-0.17,1.12c-0.03,0.22-0.06,0.43-0.08,0.65
c-0.06,0.6-0.09,1.21-0.09,1.83C399.9,527.57,403.75,533.77,409.47,537.12z M423.85,522.68c0,2.49,2.02,4.52,4.52,4.52h1.61v6.74
c0,0.78,0.21,1.5,0.56,2.14c4.83-3.51,7.98-9.19,7.98-15.61c0-0.78-0.06-1.54-0.15-2.3h-10
C425.87,518.17,423.85,520.19,423.85,522.68z M427.58,516.43h2.78h7.73c-0.73-3.44-2.39-6.54-4.69-9.03h-5.82
c-2.49,0-4.52,2.02-4.52,4.52S425.08,516.43,427.58,516.43z M430.48,504.81c-3.17-2.29-7.06-3.66-11.28-3.66s-8.1,1.37-11.28,3.66
H430.48z"/>
<g>
<path d="M480.41,519.99l-1.17-2.83l-1.17-2.83l-1.17-2.83l-1.17-2.83l0,0c-0.14-0.33-0.34-0.63-0.59-0.88s-0.55-0.45-0.88-0.59
c-0.33-0.14-0.69-0.22-1.07-0.22h-1.6h-1.6h-1.6h-1.6c-0.38,0-0.74,0.08-1.07,0.22c-0.33,0.14-0.63,0.34-0.88,0.59
s-0.45,0.55-0.59,0.88l0,0l-1.17,2.83l-1.17,2.83l-1.17,2.83l-1.17,2.83c-0.05,0.12-0.07,0.24-0.07,0.36s0.03,0.24,0.07,0.35
c0.05,0.11,0.11,0.21,0.19,0.3c0.08,0.08,0.19,0.15,0.3,0.2l0.2,0.08l0.2,0.08l0.2,0.08l0.2,0.08c0.12,0.05,0.24,0.07,0.36,0.07
s0.24-0.03,0.35-0.07c0.11-0.05,0.21-0.11,0.3-0.2c0.09-0.08,0.16-0.19,0.2-0.3l1.17-2.83l1.17-2.83l1.07-2.59
c0.22,0.12,0.43,0.26,0.61,0.43c0.22,0.22,0.4,0.48,0.52,0.78c0.11,0.26,0.17,0.54,0.18,0.84v3.43l-4.11,22.88h2.93l4.38-17.47
l4.38,17.47h2.93l-4.11-22.88v-3.43c0.01-0.3,0.07-0.58,0.18-0.84c0.12-0.29,0.3-0.55,0.52-0.78c0.18-0.18,0.39-0.32,0.61-0.43
l1.07,2.59l1.17,2.83l1.17,2.83c0.05,0.12,0.12,0.22,0.2,0.3c0.09,0.08,0.19,0.15,0.3,0.2s0.23,0.07,0.35,0.07
s0.24-0.02,0.36-0.07l0.2-0.08l0.2-0.08l0.2-0.08l0.2-0.08c0.12-0.05,0.22-0.12,0.3-0.2c0.08-0.09,0.15-0.19,0.2-0.3
c0.04-0.11,0.07-0.23,0.07-0.35C480.48,520.23,480.46,520.11,480.41,519.99z"/>
<path d="M470.06,505.61c2.29,0,4.15-1.86,4.15-4.15s-1.86-4.15-4.15-4.15s-4.15,1.86-4.15,4.15
C465.9,503.75,467.76,505.61,470.06,505.61z"/>
</g>
<path d="M261.64,503.71v-0.75c0-1.65-1.35-2.99-2.99-2.99h-3.99c-1.65,0-2.99,1.35-2.99,2.99v0.75c-1.65,0-2.99,1.35-2.99,2.99
v31.4c0,1.65,1.35,2.99,2.99,2.99h9.98c1.65,0,2.99-1.35,2.99-2.99v-31.4C264.63,505.05,263.29,503.71,261.64,503.71z
M261.99,536.57c0,1.1-0.9,2-2,2h-6.67c-1.1,0-2-0.9-2-2v-7.25h10.67V536.57z M261.21,510.99c-0.25,0.25-0.6,0.41-0.99,0.41h-2.17
v2.18c0,0.39-0.16,0.74-0.41,0.99s-0.6,0.41-0.99,0.41c-0.39,0-0.74-0.16-0.99-0.41s-0.41-0.61-0.41-0.99v-2.18h-2.18
c-0.39,0-0.74-0.16-0.99-0.41s-0.41-0.6-0.41-0.99c0-0.39,0.16-0.74,0.41-0.99s0.6-0.41,0.99-0.41h2.18v-2.17
c0-0.39,0.16-0.74,0.41-0.99s0.6-0.41,0.99-0.41s0.74,0.16,0.99,0.41s0.41,0.61,0.41,0.99v2.17h2.17c0.39,0,0.74,0.16,0.99,0.41
s0.41,0.6,0.41,0.99S261.47,510.74,261.21,510.99z M259.91,532.52c0.25,0.25,0.41,0.61,0.41,0.99s-0.16,0.74-0.41,0.99
s-0.6,0.41-0.99,0.41h-2.27h-2.27c-0.39,0-0.74-0.16-0.99-0.41s-0.41-0.6-0.41-0.99s0.16-0.74,0.41-0.99s0.6-0.41,0.99-0.41h2.27
h2.27C259.31,532.11,259.66,532.27,259.91,532.52z"/>
<g>
<path d="M298.48,505.8c2.29,0,4.15-1.86,4.15-4.15s-1.86-4.15-4.15-4.15s-4.15,1.86-4.15,4.15
C294.32,503.94,296.18,505.8,298.48,505.8z"/>
<path d="M308.91,519.83c0,0-0.44-1.06-0.78-1.89l0,0c-0.21-0.52-0.39-0.94-0.39-0.94l-1.17-2.83l-1.17-2.83l-1.17-2.83l0,0
c-0.14-0.33-0.34-0.63-0.59-0.88s-0.55-0.45-0.88-0.59c-0.33-0.14-0.69-0.22-1.07-0.22h-1.6h-1.6h-1.6h-1.6
c-0.38,0-0.74,0.08-1.07,0.22c-0.33,0.14-0.63,0.34-0.88,0.59s-0.45,0.55-0.59,0.88l0,0l-1.17,2.83l-1.17,2.83l-1.17,2.83
l-1.17,2.83c-0.05,0.12-0.07,0.24-0.07,0.36s0.03,0.24,0.07,0.35s0.11,0.21,0.2,0.3c0.08,0.08,0.19,0.15,0.3,0.2l0.2,0.08
l0.2,0.08l0.2,0.08l0.2,0.08c0.12,0.05,0.24,0.07,0.36,0.07s0.24-0.03,0.35-0.07c0.11-0.05,0.21-0.11,0.3-0.2
c0.09-0.08,0.16-0.19,0.2-0.3l1.17-2.83l1.17-2.83l1.17-2.83l0.04-0.1c0.28,0.14,0.54,0.31,0.75,0.52
c0.25,0.25,0.46,0.55,0.6,0.88s0.22,0.69,0.22,1.08v1.84l-2.83,10.13c-0.28,0.89,0.11,1.62,0.89,1.62h1.88l1.41,12.62h2.93
l1.41-12.62h1.91c0.77,0,1.17-0.73,0.89-1.62l-2.86-10.13v-1.84c0-0.38,0.08-0.74,0.22-1.08c0.14-0.33,0.34-0.63,0.6-0.88
c0.22-0.22,0.47-0.39,0.75-0.52l0.04,0.1l1.17,2.83l1.17,2.83l1.17,2.83c0.05,0.12,0.12,0.22,0.2,0.3
c0.09,0.08,0.19,0.15,0.3,0.2s0.23,0.07,0.35,0.07s0.24-0.02,0.36-0.07l0.2-0.08l0.2-0.08l0.2-0.08l0.2-0.08
c0.12-0.05,0.22-0.12,0.3-0.2c0.08-0.09,0.15-0.19,0.2-0.3c0.05-0.11,0.07-0.23,0.07-0.35
C308.98,520.06,308.96,519.94,308.91,519.83z"/>
</g>
<path d="M501.08,524.93c0.38-0.38,0.92-0.62,1.5-0.62h23.71c0.15,0,0.29,0.01,0.43,0.04c0.97,0.2,1.7,1.05,1.7,2.08l0,0
c0,1.03-0.73,1.88-1.7,2.08c-0.14,0.03-0.28,0.04-0.43,0.04v5.17l-23.71,2.75v-7.92c-0.59,0-1.12-0.24-1.5-0.62
c-0.19-0.19-0.35-0.42-0.46-0.68c-0.05-0.13-0.1-0.26-0.12-0.4c-0.03-0.14-0.04-0.28-0.04-0.43l0,0
C500.46,525.85,500.7,525.31,501.08,524.93z M528.42,514.26c0-1.03-0.73-1.88-1.7-2.08c-0.14-0.03-0.28-0.04-0.43-0.04h-23.71
c-0.88,0-1.64,0.54-1.96,1.3c-0.11,0.25-0.17,0.53-0.17,0.83c0,1.17,0.95,2.12,2.12,2.12v7.92l23.71-2.75v-5.17
c0.15,0,0.29-0.01,0.43-0.04C527.69,516.14,528.42,515.29,528.42,514.26z M500.62,537.78c-0.11,0.25-0.17,0.53-0.17,0.83
c0,0.29,0.06,0.57,0.17,0.83c0.32,0.76,1.08,1.3,1.96,1.3h23.71c0.15,0,0.29-0.01,0.43-0.04c0.97-0.2,1.7-1.05,1.7-2.08
s-0.73-1.88-1.7-2.08c-0.14-0.03-0.28-0.04-0.43-0.04h-23.71C501.7,536.48,500.95,537.01,500.62,537.78z M526.29,504.21
c0.15,0,0.29-0.01,0.43-0.04c0.97-0.2,1.7-1.05,1.7-2.08s-0.73-1.88-1.7-2.08c-0.14-0.03-0.28-0.04-0.43-0.04h-23.71
c-0.88,0-1.64,0.54-1.96,1.3c-0.11,0.25-0.17,0.53-0.17,0.83s0.06,0.57,0.17,0.83c0.32,0.76,1.08,1.3,1.96,1.3v7.92l23.71-2.75
V504.21z"/>
<path d="M359.68,535.12h4.63v2.27H343.9v-2.27h4.63v-3.96h11.15V535.12z M354.26,515.8c-0.82,0-1.49,0.67-1.49,1.49
s0.67,1.49,1.49,1.49c0.82,0,1.49-0.67,1.49-1.49C355.76,516.47,355.09,515.8,354.26,515.8z M374.51,505.68v23.22h-40.5v-23.22
L374.51,505.68L374.51,505.68z M361.1,517.29c0-3.77-3.07-6.83-6.83-6.83c-3.77,0-6.83,3.06-6.83,6.83c0,3.77,3.07,6.83,6.83,6.83
c1.35,0,2.65-0.39,3.78-1.14l-0.84-1.26c-0.87,0.58-1.89,0.89-2.94,0.89c-2.93,0-5.32-2.39-5.32-5.32s2.39-5.32,5.32-5.32
s5.32,2.39,5.32,5.32c0,0.51-0.07,1.01-0.22,1.49h-2.51c0.26-0.44,0.41-0.95,0.41-1.49c0-1.66-1.35-3.01-3.01-3.01
s-3.01,1.35-3.01,3.01c0,1.66,1.35,3.01,3.01,3.01h6.15l0.19-0.48C360.93,519.01,361.1,518.16,361.1,517.29z"/>
</g>
<g>
<path d="M257.18,326.38c-0.64-0.33-1.28-0.57-1.94-0.73s-1.35-0.24-2.08-0.24c-2.1,0-3.15,0.38-3.15,1.12
c0,0.26,0.1,0.45,0.31,0.58c0.21,0.13,0.5,0.22,0.88,0.29s0.84,0.11,1.38,0.14c0.54,0.03,1.16,0.08,1.85,0.15
c0.74,0.07,1.38,0.17,1.94,0.3c0.55,0.13,1.01,0.3,1.38,0.52c0.36,0.22,0.64,0.5,0.82,0.82c0.18,0.33,0.27,0.73,0.27,1.2
c0,1.02-0.45,1.8-1.35,2.35s-2.22,0.83-3.96,0.83c-2.43,0-4.38-0.55-5.83-1.66l1-1.31c0.65,0.45,1.37,0.79,2.17,1.02
c0.8,0.23,1.68,0.35,2.63,0.35c1.1,0,1.93-0.14,2.5-0.41c0.57-0.27,0.85-0.63,0.85-1.08c0-0.51-0.36-0.87-1.08-1.06
c-0.52-0.14-1.14-0.22-1.85-0.23s-1.52-0.06-2.42-0.14c-1.17-0.11-2.03-0.36-2.58-0.75s-0.83-0.96-0.83-1.72
c0-0.9,0.44-1.62,1.31-2.15s2.12-0.79,3.75-0.79c2.13,0,3.86,0.46,5.18,1.38L257.18,326.38z"/>
<path d="M279.64,333.66h-2.11l7.14-11.29h2.09L279.64,333.66z"/>
<path class="st1" d="M306.39,333.5v-9.46h9.83v1.66h-7.98v2.06h5.55v1.66h-5.55v2.42h8.34v1.66L306.39,333.5L306.39,333.5z"/>
<path class="st1" d="M346.07,333.5l-3.77-3.71l-3.77,3.71h-2.32l4.92-4.8l-4.75-4.66h2.32l3.6,3.57l3.6-3.57h2.32l-4.75,4.66
l4.92,4.8H346.07z"/>
<path class="st1" d="M373.81,325.7v7.8h-1.85v-7.8h-4.52v-1.66h10.89v1.66H373.81z"/>
<path class="st1" d="M407.66,333.5l-2.48-3.48h-4.69v3.48h-1.85v-9.46h7.65c0.5,0,0.96,0.07,1.36,0.22s0.75,0.35,1.04,0.61
s0.51,0.58,0.66,0.95c0.15,0.37,0.23,0.78,0.23,1.23c0,0.77-0.2,1.4-0.6,1.88c-0.4,0.49-0.98,0.82-1.75,0.99l2.55,3.58H407.66z
M406.01,328.37c1.12,0,1.68-0.43,1.68-1.29c0-0.48-0.14-0.83-0.43-1.04c-0.29-0.22-0.74-0.33-1.35-0.33h-5.42v2.66H406.01z"/>
<path class="st1" d="M439.64,333.5l-1.09-2.03h-6.35l-1.09,2.03h-2.03l5.15-9.46h2.29l5.15,9.46H439.64z M435.38,325.63
l-2.26,4.18h4.51L435.38,325.63z"/>
<path class="st1" d="M461.83,333.5v-9.46h1.85v9.46H461.83z"/>
<path class="st1" d="M494.38,333.5l-2.48-3.48h-4.69v3.48h-1.85v-9.46h7.65c0.5,0,0.96,0.07,1.36,0.22s0.75,0.35,1.04,0.61
s0.51,0.58,0.66,0.95c0.15,0.37,0.23,0.78,0.23,1.23c0,0.77-0.2,1.4-0.6,1.88c-0.4,0.49-0.98,0.82-1.75,0.99l2.55,3.58H494.38z
M492.74,328.37c1.12,0,1.68-0.43,1.68-1.29c0-0.48-0.14-0.83-0.43-1.04c-0.29-0.22-0.74-0.33-1.35-0.33h-5.42v2.66H492.74z"/>
<path class="st1" d="M517.58,333.5v-9.46h9.83v1.66h-7.98v2.06h5.55v1.66h-5.55v2.42h8.34v1.66L517.58,333.5L517.58,333.5z"/>
</g>
<path d="M359.68,535.12h4.63v2.27H343.9v-2.27h4.63v-3.96h11.15V535.12z M354.26,515.8c-0.82,0-1.49,0.67-1.49,1.49
s0.67,1.49,1.49,1.49c0.82,0,1.49-0.67,1.49-1.49C355.76,516.47,355.09,515.8,354.26,515.8z M374.51,505.68v23.22h-40.5v-23.22
L374.51,505.68L374.51,505.68z M361.1,517.29c0-3.77-3.07-6.83-6.83-6.83c-3.77,0-6.83,3.06-6.83,6.83c0,3.77,3.07,6.83,6.83,6.83
c1.35,0,2.65-0.39,3.78-1.14l-0.84-1.26c-0.87,0.58-1.89,0.89-2.94,0.89c-2.93,0-5.32-2.39-5.32-5.32s2.39-5.32,5.32-5.32
s5.32,2.39,5.32,5.32c0,0.51-0.07,1.01-0.22,1.49h-2.51c0.26-0.44,0.41-0.95,0.41-1.49c0-1.66-1.35-3.01-3.01-3.01
s-3.01,1.35-3.01,3.01c0,1.66,1.35,3.01,3.01,3.01h6.15l0.19-0.48C360.93,519.01,361.1,518.16,361.1,517.29z"/>
<g>
<g>
<polygon points="361.86,564.75 346.67,564.75 354.26,557.07 354.26,557.07 "/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 59 KiB

50
setup.cfg Normal file
View File

@@ -0,0 +1,50 @@
[metadata]
version = 0.0.1
classifiers =
Programming Language :: Python :: 3
License :: OSI Approved :: MIT License
Operating System :: OS Independent
url = https://git.tetalab.org/tetalab/thsf.net
description = "THSF website"
name = thsf
long_description = file: README.md
long_description_content_type = text/markdown
author = Doug Le Tough
author_email = doug@redatomik.org
[options]
package_dir =
= src
packages = find:
include_package_data = True
python_requires = >=3.7
install_requires =
flask
Flask-Minify
gunicorn
pyYAML
requests
[options.packages.find]
where = src
[options.extras_require]
dev =
twine
build
wheel>=0.37.0
flake8>=4.0.1
flake8-breakpoint>=1.1.0
flake8-builtins>=1.5.3
flake8-print>=4.0.0
flake8-return>=1.1.3
pep8-naming>=0.8.2
setuptools>=60.9.2
pylint>=2.12.2
[flake8]
ignore = E111
exclude = .git,__pycache__,build,dist, thot-cli-venv
max-line-length = 160
use-flake8-tabs = true
tab-width = 2

3
setup.py Normal file
View File

@@ -0,0 +1,3 @@
import setuptools
setuptools.setup()

203
src/thsf/__init__.py Normal file
View File

@@ -0,0 +1,203 @@
import re
import sys
import json
import logging
from logging import config
import yaml
from flask import Flask, render_template, redirect, request, url_for
from flask_minify import minify
from thsf.backend import Backend
from thsf.schedule import Schedule
from thsf.navbar import Navbar
# ------------------------------------------------------------------------------
# -- Configuration
# ------------------------------------------------------------------------------
class AppConfig:
""" Flask application config """
CONFIG_FILENAME = "config.yml"
# ------------------------------------------------------------------------------
# -- Application
# ------------------------------------------------------------------------------
logger = logging.getLogger('wsgi')
app = Flask(__name__)
# ------------------------------------------------------------------------------
# -- Local configuration
# ------------------------------------------------------------------------------
app.config.from_object(__name__ + '.AppConfig')
try:
with open(app.config["CONFIG_FILENAME"], mode="r", encoding="utf-8") as local_config_file:
app.local_config = yaml.load(local_config_file, Loader=yaml.SafeLoader)
app.config["SECRET_KEY"] = app.local_config["app"]["secret_key"]
app.config["LANGUAGES"] = app.local_config["app"]["languages"]
config.dictConfig(app.local_config["log"])
backend = Backend(url=app.local_config["pretalx"]["url"],
apiprefix=app.local_config["pretalx"]["apiprefix"],
apikey=app.local_config["pretalx"]["apikey"])
schedule = Schedule()
navbar = Navbar(config=app.local_config["navbar"])
except Exception as err:
logger.critical("[{}] {}".format(err.__class__, str(err)))
sys.exit(1)
if app.local_config["log"]["root"]["level"] != "DEBUG":
minify(app=app, html=True, js=True, cssless=True)
# ------------------------------------------------------------------------------
# -- Tools
# ------------------------------------------------------------------------------
@app.errorhandler(404)
def page_not_found(err):
return redirect(url_for('index'))
def get_slots():
return backend.get(endpoint=f"events/{app.local_config['pretalx']['event']}/schedules/{app.local_config['pretalx']['schedule']}/").json()
def get_speaker_biography(name):
try:
speaker_info = backend.get(endpoint=f"events/{app.local_config['pretalx']['event']}/speakers/", params={"q": name}).json()
logger.debug(speaker_info)
return speaker_info["results"][0]["biography"].strip()
except Exception as err:
logger.warning(f"UnknownSpeakerError: {name}")
return None
# ------------------------------------------------------------------------------
# -- Custom filters
# ------------------------------------------------------------------------------
@app.template_filter('date2dmyhm')
def date2dmyhm(date):
splitted_date = date.split("-")
splitted_time = splitted_date[2].split("T")[1].split(":")
year, month, day = (splitted_date[0],
splitted_date[1],
splitted_date[2].split("T")[0])
hour, minutes = (splitted_time[0], splitted_time[1].split("+")[0])
return f"{day}/{month} {hour}:{minutes}"
@app.template_filter('date2dayclass')
def date2dayclass(date):
classes = {"26/05": "bg1",
"27/05": "bg2",
"28/05": "bg3",}
splitted_date = date.split("-")
month, day = (splitted_date[1],
splitted_date[2].split("T")[0])
return classes[f"{day}/{month}"]
@app.template_filter('toicon')
def date2dmyhm(slot_type):
slot_types = {"Projection": "fa-solid fa-film",
"Presentation Courte": "fa-solid fa-person-chalkboard",
"DJ Set": "fa-solid fa-guitar",
"Concert": "fa-solid fa-guitar",
"Présentation": "fa-solid fa-person-chalkboard",
"Table Ronde": "fa-solid fa-users-line",
"Atelier": "fa-solid fa-screwdriver-wrench",
"Installation": "fa-solid fa-palette"}
return slot_types[slot_type]
# ------------------------------------------------------------------------------
# -- Routes
# ------------------------------------------------------------------------------
@app.route('/favicon.ico', methods=['GET'])
def favicon():
return redirect(url_for('static', filename='images/favicon.png'))
@app.route('/', methods=['GET'])
def index():
return render_template("index.html",
navbar=navbar.get_from_page(page="/"))
@app.route('/planning', methods=['GET'])
def planning():
slots = get_slots()
for slot in slots.get("slots"):
for speaker in slot.get("speakers"):
speaker["biography"] = get_speaker_biography(speaker.get("name"))
return render_template("planning.html",
slots=sorted(slots.get("slots"),
key=lambda slot: slot.get("slot").get("start")),
navbar=navbar.get_from_page(page="/planning"),
filter=["concert", "dj set", "panel discussion", "talk", "screening"])
@app.route('/place', methods=['GET'])
def place():
return render_template("place.html",
navbar=navbar.get_from_page(page="/place"))
@app.route('/food', methods=['GET'])
def food():
return render_template("food.html",
navbar=navbar.get_from_page(page="/food"))
@app.route('/goodies', methods=['GET'])
def goodies():
return render_template("goodies.html",
navbar=navbar.get_from_page(page="/goodies"))
@app.route('/concerts', methods=['GET'])
def concerts():
slots = get_slots()
return render_template("planning.html",
slots=sorted(slots.get("slots"),
key=lambda slot: slot.get("slot").get("start")),
navbar=navbar.get_from_page(page="/concerts"),
filter=["concert", "dj set"])
@app.route('/workshops', methods=['GET'])
def workshops():
slots = get_slots()
return render_template("planning.html",
slots=sorted(slots.get("slots"),
key=lambda slot: slot.get("slot").get("start")),
navbar=navbar.get_from_page(page="/workshops"),
filter=["workshop"])
@app.route('/screenings', methods=['GET'])
def screenings():
slots = get_slots()
return render_template("planning.html",
slots=sorted(slots.get("slots"),
key=lambda slot: slot.get("slot").get("start")),
navbar=navbar.get_from_page(page="/screenings"),
filter=["screening"])
@app.route('/discussions', methods=['GET'])
def discussions():
slots = get_slots()
return render_template("planning.html",
slots=sorted(slots.get("slots"),
key=lambda slot: slot.get("slot").get("start")),
navbar=navbar.get_from_page(page="/discussions"),
filter=["panel discussion"])
@app.route('/exhibitions', methods=['GET'])
def exhibitions():
slots = get_slots()
return render_template("planning.html",
slots=sorted(slots.get("slots"),
key=lambda slot: slot.get("slot").get("start")),
navbar=navbar.get_from_page(page="/exhibitions"),
filter=["installation"])
@app.route('/talks', methods=['GET'])
def talks():
slots = get_slots()
return render_template("planning.html",
slots=sorted(slots.get("slots"),
key=lambda slot: slot.get("slot").get("start")),
navbar=navbar.get_from_page(page="/talks"),
filter=["talk", "light talk"])
# ------------------------------------------------------------------------------
# -- Main
# ------------------------------------------------------------------------------
if __name__ == '__main__':
app.run(host='127.0.0.1', port=5000, debug=True)

View File

@@ -0,0 +1,15 @@
import requests
import logging
class Backend:
def __init__(self, url, apiprefix, apikey):
self.url = url
self.apiprefix = apiprefix
self.apikey = apikey
self.session = requests.Session()
def get(self, endpoint, params=None):
url = f"{self.url}/{self.apiprefix}/{endpoint}"
headers = {"Authorization": f"Token {self.apikey}",
"Accept": "application/json"}
return self.session.get(url, params=params, headers=headers)

View File

@@ -0,0 +1,6 @@
class Navbar:
def __init__(self, config):
self.config = config
def get_from_page(self, page):
return [item for item in self.config["items"] if item["url"] != page]

View File

@@ -0,0 +1,6 @@
class Schedule:
def __init__(self):
self.slots = list()
def set_slots(self, slots):
self.slots = slots

View File

@@ -0,0 +1,49 @@
@font-face {
font-family: pfdintextcomppromedium;
src: url(../fonts/PFDinTextCompPro-Medium.ttf);
}
@font-face {
font-family: pfdintextcompprothin;
src: url(../fonts/PFDinTextCompPro-Thin.ttf);
}
:root {
--main-bg-color: #e6007e;
--alt-bg-color: #E59730;
--alt2-bg-color: #9EBF43;
--alt3-bg-color: #3096E5;
--main-color: #ffffff;
--alt-main-color: #1A000D;
}
.white {
color: var(--main-color);
}
.black {
color: var(--alt-main-color);
}
.thin {
font-family: pfdintextcompprothin;
}
.bold {
font-family: pfdintextcomppromedium;
}
.bg1 {
background-color: var(--alt-bg-color);
border-color: var(--alt-bg-color);
}
.bg2 {
background-color: var(--alt2-bg-color);
border-color: var(--alt2-bg-color);
}
.bg3 {
background-color: var(--alt3-bg-color);
border-color: var(--alt3-bg-color);
}

View File

@@ -0,0 +1,109 @@
@media screen and (min-width: 45em) {
.header {
display: flex;
flex-direction: row;
justify-content: center;
gap: 0;
text-align: center;
font-size: 9.75em;
font-weight: bold;
padding: 0;
}
.logo {
width: inherit;
}
.header > span {
margin: 0;
}
.subheader {
margin: -1em 0 0 0;
font-size: 3.47em;
}
.place {
margin: 0;
font-size: 2.145em;
}
.important {
font-family: pfdintextcomppromedium;
}
.left {
float: left;
margin-right: 0.5em;
}
.right {
float: right;
margin-left: 0.5em;
}
.logo_partner {
max-width: 250px;
max-height: 250px;
margin: 1em;
}
.button {
font-size: 2.5em;
transition-property: color;
transition-duration: 1s;
}
.button:hover {
color: var(--main-color);
cursor: pointer;
}
}
@media screen and (max-width: 44em) {
.header {
display: flex;
flex-direction: row;
justify-content: center;
gap: 0;
text-align: center;
font-size: 6.75em;
font-weight: bold;
padding: 0;
}
.header > span {
margin: 0;
}
.logo {
width: inherit;
}
.subheader {
margin: -1em 0 0 0;
font-size: 2.30em;
}
.place {
margin: 0;
font-size: 1.2em;
}
.important {
font-family: pfdintextcomppromedium;
}
.left {
float: left;
margin-right: 0.25em;
}
.right {
float: right;
margin-left: 0.25em;
}
.logo_partner {
max-width: 125px;
max-height: 125px;
margin: 0.25em;
}
.button {
font-size: 1.2em;
transition-property: color;
transition-duration: 1s;
}
.button:hover {
color: var(--main-color);
cursor: pointer;
}
.goodies {
text-align: justify;
}
.goodies_pic {
max-width: 5em;
}
}

View File

@@ -0,0 +1,19 @@
a {
font-family: pfdintextcomppromedium;
font-weight: 250;
color: var(--alt-main-color);
transition-property: color;
transition-duration: 1s;
text-decoration: wavy;
}
a:hover {
color: var(--main-color);
cursor: pointer;
text-shadow: -1px -1px 0 var(--alt-main-color), 1px -1px 0 var(--alt-main-color), -1px 1px 0 var(--alt-main-color), 1px 1px 0 var(--alt-main-color);
}
.content > p,
.content > h2 {
margin-top: 1.5em;
}

View File

@@ -0,0 +1,82 @@
.slot {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
align-content: center;
margin-bottom: 1em;
width: 20em;
}
.slot_header {
margin: 0;
width: 20em;
font-family: pfdintextcompprothin;
font-weight: bold;
}
.slot_title {
border-radius: 1em 0 0 0;
color: var(--main-color);
padding: 0.5em;
text-align: center;
display: flex;
flex-direction: row;
justify-content: flex-start;
align-content: flex-start;
align-items: flex-start;
width: 20em;
cursor: pointer;
}
.slot_title .title{
margin-left: 0.5em;
}
.slot_info {
background-color: var(--main-color);
color: var(--alt-main-color);
margin: 0;
padding: 0.5em;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-content: flex-start;
align-items: flex-start;
border-radius: 0 0 0 1em;
}
.speaker {
cursor: pointer;
}
.speakers > .speaker > .name > span {
text-decoration: underline;
}
.speaker_details,
.slot_details {
visibility: hidden;
display: none;
}
.speaker_img,
.slot_img {
width: 18em;
}
.abstract a,
.speaker_biography a {
color: var(--main-bg-color);
}
.abstract a:hover,
.speaker_biography a:hover {
color: var(--alt-color);
text-shadow: -1px -1px 0 var(--main-bg-color), 1px -1px 0 var(--main-bg-color), -1px 1px 0 var(--main-bg-color), 1px 1px 0 var(--main-bg-color);
}
.abstract strong,
.speaker_biography strong {
font-family: pfdintextcomppromedium;
}

View File

@@ -0,0 +1,15 @@
* {
box-sizing: border-box;
}
body {
background-color: var(--main-bg-color);
font-family: pfdintextcomppromedium;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
align-content: center;
text-align: center;
/* background-color: yellow; */
}

View File

@@ -0,0 +1,57 @@
.tooltip,
.slot_tooltip {
position: relative;
display: inline-block;
}
.tooltip .tooltiptext {
visibility: hidden;
background-color: var(--alt-main-color);
color: var(--main-color);
text-align: center;
border-radius: 6px;
padding: 5px 0;
position: absolute;
z-index: 1;
bottom: 0;
left: 0;
opacity: 0;
transform: translateX(-25%) translateY(-2em);
transition: opacity 1s;
}
.slot_tooltip .slot_tooltiptext {
visibility: hidden;
background-color: var(--main-color);
color: var(--alt-main-color);
text-align: center;
border-radius: 6px;
padding: 5px 0;
position: absolute;
z-index: 1;
bottom: 0;
left: 0;
opacity: 0;
transform: translateX(2em);
transition: opacity 1s;
}
.tooltip .tooltiptext::after,
.slot_tooltip .slot_tooltiptext::after {
content: "";
position: absolute;
top: 100%;
left: 50%;
margin-left: -5px;
border-width: 5px;
}
.tooltip:hover .tooltiptext,
.slot_tooltip:hover .slot_tooltiptext {
visibility: visible;
opacity: 1;
font-size: 0.7em;
padding: 0.2em;
}

View File

@@ -0,0 +1,72 @@
@media screen and (min-width: 45em) {
.wemakeporn {
background-color: #FFD036;
color: #000000;
font-family: Arial, Helvetica, sans-serif;
border-radius: 1em;
border-width: 1em;
border-style: solid;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
align-content: center;
padding: 0.5em;
transform: rotate(-20deg) translate(2em, -6em);
visibility: hidden;
position: fixed;
}
.wemakeporn:hover{
cursor: default;
}
.wemake {
font-size: 7em;
font-weight: bold;
flex-direction: row;
justify-content: center;
align-items: center;
align-content: center;
}
.porn {
font-size: 12em;
font-weight: bold;
flex-direction: row;
justify-content: center;
align-items: center;
align-content: center;
}
}
@media screen and (max-width: 44em) {
.wemakeporn {
background-color: #FFD036;
color: #000000;
font-family: Arial, Helvetica, sans-serif;
border-radius: 0.5em;
border-width: 0.5em;
border-style: solid;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
align-content: center;
padding: 0.5em;
transform: rotate(-20deg) translate(-1.5em, 8em);
visibility: hidden;
position: fixed;
}
.wemakeporn:hover{
cursor: default;
}
.wemake {
font-size: 3.5em;
font-weight: bold;
}
.porn {
font-size: 6em;
font-weight: bold;
}
}

View File

@@ -0,0 +1,125 @@
@media screen and (min-width: 45em) {
.page_wrapper {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
align-content: center;
text-align: center;
padding-bottom: 5em;
/* background-color: green; */
}
.center_wrapper,
.header_wrapper {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
}
.logo_wrapper {
margin: 1em 0 1em 0;
width: 40em;
}
.navbar_wrapper {
position: fixed;
bottom: 0;
padding: 1em 0;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
gap: 1.4em;
background-color: var(--main-bg-color);
width: 40em;
transform: translateZ(2);
}
.content {
font-size: 2em;
font-family: pfdintextcompprothin;
color: var(--main-color);
width: 20em;
text-align:justify;
text-justify: inter-word;
}
.partners {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
margin-bottom: 2em;
}
.subpartners {
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
text-align: center;
}
}
@media screen and (max-width: 44em) {
.page_wrapper {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
align-content: center;
text-align: center;
padding-bottom: 2em;
width: 21em;
/* background-color: green; */
}
.center_wrapper ,
.header_wrapper {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
width: 21em;
/* background-color: orangered; */
}
.logo_wrapper {
margin-top: 0.5em;
width: 21em;
/* background-color: red; */
}
.navbar_wrapper {
position: fixed;
bottom: 0;
padding: 0.5em 0;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
gap: 1em;
background-color: var(--main-bg-color);
width: 21em;
transform: translateZ(2);
/* background-color: white; */
}
.content {
font-size: 1em;
font-family: pfdintextcompprothin;
color: var(--main-color);
width: 21em;
text-align:justify;
text-justify: inter-word;
}
.partners {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
margin-bottom: 2em;
}
.subpartners {
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
text-align: center;
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

View File

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -0,0 +1,14 @@
function switch_visibility(item){
console.log(item.style.visibility);
console.log(item.style.display);
if (item.style.visibility == "hidden" || item.style.display == "none") {
item.style.visibility = "visible";
item.style.display = "block";
} else if (item.style.visibility == "" && item.style.display == "") {
item.style.visibility = "visible";
item.style.display = "block";
} else {
item.style.visibility = "hidden";
item.style.display = "none";
}
}

View File

@@ -0,0 +1,107 @@
<!DOCTYPE html>
<html lang='zxx'>
<head>
<title>THSF 2023: S/Extraire</title>
<meta name="viewport" content="initial-scale=1.0">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<script src="{{ url_for('static', filename='scripts/thsf23.js') }}"></script>
<link rel="stylesheet"
href="{{ url_for('static', filename='css/colors.css') }}">
<link rel="stylesheet"
href="{{ url_for('static', filename='css/wemakeporn.css') }}">
<link rel="stylesheet"
href="{{ url_for('static', filename='css/wrappers.css') }}">
<link rel="stylesheet"
href="{{ url_for('static', filename='css/custom.css') }}">
<link rel="stylesheet"
href="{{ url_for('static', filename='css/elements.css') }}">
<link rel="stylesheet"
href="{{ url_for('static', filename='css/style.css') }}">
<link rel="stylesheet"
href="{{ url_for('static', filename='css/tooltip.css') }}">
<link rel="stylesheet"
href="{{ url_for('static', filename='css/slot.css') }}">
<link rel="icon"
type="image/svg+xml"
href="{{ url_for('static', filename='images/logo.svg') }}">
<link rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
{% block headers %}
{% endblock %}
</head>
<body>
<div class="page_wrapper">
<div class="center_wrapper">
<div class="header_wrapper">
<div class="header">
<span class="black bold">THSF</span>
<span class="white thin">2023</span>
</div>
<div class="subheader">
<span class="white thin">Toulouse Hacker Space Factory</span>
</div>
<div class="place">
<span class="black thin">26 28 mai 2023 - </span>
<span class="white bold">CINÉMA UTOPIA BORDEROUGE</span>
</div>
</div>
{% block content %}
{% endblock %}
<div class="partners">
<div class="subpartners">
<a href="https://www.tetalab.org/" target="_new">
<img src="{{ url_for('static', filename='images/tetalab.png')}}"
alt="Tetalab"
title="Tetalab"
class="logo_partner">
</a>
<a href="https://www.librairie-terranova.fr/" target="_new">
<img src="{{ url_for('static', filename='images/terranova.jpg')}}"
alt="Librairie Terra Nova"
title="Librairie Terra Nova"
class="logo_partner">
</a>
</div>
<div class="subpartners">
<a href="https://www.tvbruits.org/" target="_new">
<img src="{{ url_for('static', filename='images/tv-bruits.png')}}"
alt="TV Bruits"
title="TV Bruits"
class="logo_partner">
</a>
<a href="https://www.tetaneutral.net/" target="_new">
<img src="{{ url_for('static', filename='images/tetaneutral.png')}}"
alt="Tetaneutral"
title="Tetaneutral"
class="logo_partner">
</a>
<a href="https://www.radio-fmr.net/" target="_new">
<img src="{{ url_for('static', filename='images/fmr.png')}}"
alt="Radio FMR"
title="Radio FMR"
class="logo_partner">
</a>
</div>
<div class="subpartners">
<a href="https://clutchmag.fr/" target="_new">
<img src="{{ url_for('static', filename='images/clutch.png')}}"
alt="Clutch"
title="Clutch"
class="logo_partner">
</a>
<a href="https://www.antistatik.store/" target="_new">
<img src="{{ url_for('static', filename='images/antistatik.png')}}"
alt="Antistatik"
title="Antistatik"
class="logo_partner">
</a>
</div>
</div>
{% block navbar %}
{% include "navbar.html" %}
{% endblock %}
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,14 @@
{% extends "base.html" %}
{% block content %}
<div class="logo_wrapper">
<img class="logo"
src="{{ url_for('static', filename='images/logo.svg') }}"
alt="THSF 2023 - S/Extraire"
title="THSF 2023 - S/Extraire">
</div>
<div class="content">
<h2>Restauration</h2>
<p>La restauration sur place est prévue.</p>
<p>Détails à venir...</p>
</div>
{% endblock %}

View File

@@ -0,0 +1,33 @@
{% extends "base.html" %}
{% block content %}
<div class="logo_wrapper">
<img class="logo"
src="{{ url_for('static', filename='images/logo.svg') }}"
alt="THSF 2023 - S/Extraire"
title="THSF 2023 - S/Extraire">
</div>
<div class="content" class="goodies">
<h2>Nous avons besoin de votre soutien</h2>
<p class="goodies">
<img class="left"
src="{{ url_for('static', filename='images/stickers.webp') }}"
alt="Stickers"
title="Stickers">
Pour faire du <strong>Toulouse Hacker Space Factory</strong> un événement toujours différent des autres festivals <a href="https://www.leetchi.com/c/thsf23" target="_new">votre soutien financier</a> est nécessaire.
</p>
<p class="goodies">
<img class="right"
src="{{ url_for('static', filename='images/tshirt.webp') }}"
alt="T-Shirt"
title="T-Shirt">
Pour faciliter la collecte des dons et vous remercier de votre participation, nous avons mis en place <a href="https://www.leetchi.com/c/thsf23" target="_new">une cagnote Leetchi</a> qui nous permettra de recenser les dons et vous permettra de suivre l'évolution du financement de notre festival.
</p>
<p class="goodies">
<img class="left"
src="{{ url_for('static', filename='images/sweatshirt.webp') }}"
alt="Sweat shirt"
title="Sweat shirt">
Nous sommes également conscients que la situation actuelle est particulièrement difficile. C'est pourquoi nous nous engageons à ce que <span class="important">toutes les sommes qui dépasseront notre objectif de financement de 2 000 € seront reversées aux caisses des grévistes de la réforme des retraites</span>. Ainsi, votre contribution permettra également de soutenir une cause importante et de <span class="important">faire une différence dans la vie de ceux qui se battent pour nos droits</span>.
</p>
</div>
{% endblock %}

View File

@@ -0,0 +1,27 @@
{% extends "base.html" %}
{% block content %}
<div class="logo_wrapper">
<img class="logo"
src="{{ url_for('static', filename='images/logo.svg') }}"
alt="THSF 2023 - S/Extraire"
title="THSF 2023 - S/Extraire"
onclick="document.getElementById('wemakeporn').style.visibility='visible';">
<div id="wemakeporn" class="wemakeporn"
onclick="document.getElementById('wemakeporn').style.visibility='hidden';">
<div class="wemake">WE MAKE</div>
<div class="porn">PORN</div>
</div>
</div>
<div class="content">
<h2>Le THSF est enfin de retour !</h2>
<p>Nous vous invitons à passer un week-end de 3 jours à <a href="https://www.cinemas-utopia.org/toulouse/" target="_new">Utopia Borderouge Toulouse</a> pour partager avec vous nos projets, nos réflexions, nos performances, nos poésies et nos doutes sur la technologie.</p>
<p>Après avoir été soutenu et accueilli pendant 10 ans par <a href="https://vive.mixart-myrys.org/" target="_new">Mix'Art Myrys</a>, le <strong>Toulouse HackerSpace Factory</strong> se tient désormais dans un autre lieu où l'utopie nécessaire est inscrite au programme.</p>
<p>Cette année nous mettons en avant des réflexions sur <a href="https://fr.wikipedia.org/wiki/Extractivisme" target="_new">l'extractivisme des ressources</a> planétaires, des données et du produit du travail.</p>
<p>Comme toujours, notre objectif est de créer un festival qui poétise les bifurcations de nos idées communes et qui réinvente le sens de certains schémas imposés par notre époque. Rejoignez-nous pour une expérience enrichissante et pleine de surprises !</p>
<p>Retrouvez <a href="/planning">le programme du THSF</a> avec ses <a href="/workshops">ateliers</a>, ses <a href="/exhibitions">expositions et installations</a> mais également ses <a href="/concerts">concerts</a>, ses <a href="/projections">projections</a>, ses <a href="/talks">présentations</a> et ses <a href="/discussions">tables rondes</a>.</p>
</div>
{% endblock %}

View File

@@ -0,0 +1,8 @@
<div class="navbar_wrapper">
{% for item in navbar %}
<i class="button tooltip black {{ item.classes }}"
onclick="document.location='{{item.url}}'">
<span class="tooltiptext thin">{{item.name}}</span>
</i>
{% endfor %}
</div>

View File

@@ -0,0 +1,34 @@
{% extends "base.html" %}
{% block content %}
<div class="logo_wrapper">
<img class="logo"
src="{{ url_for('static', filename='images/logo.svg') }}"
alt="THSF 2023 - S/Extraire"
title="THSF 2023 - S/Extraire"
onclick="document.getElementById('wemakeporn').style.visibility='visible';">
<div id="wemakeporn" class="wemakeporn"
onclick="document.getElementById('wemakeporn').style.visibility='hidden';">
<div class="wemake">WE MAKE</div>
<div class="porn">PORN</div>
</div>
</div>
<div class="content">
<h2>Toujours plus d'utopies</h2>
<p>
La fermeture administrative imposée à <a href="https://vive.mixart-myrys.org/" target="_new">Mix'Art Myrys</a>, terre d'accueil des 10 éditions antérieures du THSF, nous montre qu'il est plus que jamais important de continuer à bâtir, consolider et faire vivre nos utopies face à la repression systémique qu'on voudrait nous imposer.
</p>
<p>
Connu pour sa programmation alternative et engagée, ainsi que pour son ambiance conviviale et chaleureuse, le cinéma d'art et d'essai indépendant <a href="https://www.cinemas-utopia.org/toulouse/">Utopia Borderouge</a>, dont l'utopie est naturellement au programme, s'est proposé pour accueillir le <strong>THSF 2023</strong>.
</p>
<h3>Plan d'accès</h3>
<ul>
<li><strong>Adresse:</strong> 59, avenue Maurice Bourgès-Maunoury, Les Izards - Toulouse</li>
<li><strong>GPS:</strong> 43°38'22.7"N 1°27'07.3"E</li>
<li><strong>Métro:</strong> Ligne B - Borderouge</li>
<li><strong>Velooz:</strong> Station 175 - Métro Borderouge - Maunoury</li>
</ul>
<div class="map">
<iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="https://www.openstreetmap.org/export/embed.html?bbox=1.4502596855163576%2C43.63879667815726%2C1.4538002014160158%2C43.64046408342326&amp;layer=mapnik&amp;marker=43.639631357124614%2C1.4520299434661865" style="border: 1px solid black"></iframe><br/><small><a href="https://www.openstreetmap.org/?mlat=43.63963&amp;mlon=1.45203#map=19/43.63963/1.45203">Afficher une carte plus grande</a></small>
</div>
</div>
{% endblock %}

View File

@@ -0,0 +1,15 @@
{% extends "base.html" %}
{% block content %}
<div class="content">
{% for slot in slots %}
{% set loop_index = loop.index %}
{% if filter %}
{% if slot.submission_type.en | lower in filter %}
{% include "slot.html" %}
{% endif %}
{% else %}
{% include "slot.html" %}
{% endif %}
{% endfor %}
</div>
{% endblock %}

View File

@@ -0,0 +1,64 @@
<div class="slot">
<div class="slot_header">
<div class="slot_title {{ slot.slot.start | date2dayclass}}"
onclick="switch_visibility(document.getElementById('{{slot.code}}_{{loop_index}}'))">
<i class="black {{slot.submission_type.fr | toicon }}"></i>
<span class="title">{{slot.title}}</span>
</div>
<div class="slot_info">
{% if slot.slot.room.fr != "Workshops" %}
<div class="start">
<i class="fa-solid fa-caret-right"></i>
{{slot.slot.start | date2dmyhm}} - {{slot.duration}} minutes ({{slot.content_locale | capitalize}})
</div>
<div class="room">
<i class="fa-solid fa-caret-right"></i>
{{slot.slot.room.fr}}
</div>
{% endif %}
<div class="speakers">
{% for speaker in slot.speakers %}
<div class="speaker">
<div class="name" onclick="switch_visibility(document.getElementById('{{speaker.code}}_{{loop_index}}'))">
<i class="fa-solid fa-user"></i>
<span>{{speaker.name | title}}</span>
</div>
{% if speaker.avatar or speaker.biography %}
<div id="{{speaker.code}}_{{loop_index}}" class="speaker_details">
{% if speaker.avatar %}
<div class="speaker_avatar">
<img class="speaker_img"
src="{{speaker.avatar}}"
alt="{{speaker.name | title}}"
title="{{speaker.name | title}}">
</div>
{% endif %}
{% if speaker.biography %}
<div class="speaker_biography">
{{ speaker.biography | safe }}
</div>
{% endif %}
</div>
{% endif %}
</div>
{% endfor %}
</div>
<div id="{{slot.code}}_{{loop_index}}" class="slot_details">
<div class="abstract">
{% if slot.image %}
<img class="slot_img"
src="{{slot.image}}"
alt="{{slot.name}}"
title="{{slot.name}}">
{% endif %}
{% if slot.abstract %}
<p>{{slot.abstract | safe }}</p>
{% endif %}
{% if slot.description %}
<p>{{slot.description | safe }}</p>
{% endif %}
</div>
</div>
</div>
</div>
</div>

5
src/thsf_wsgi.py Normal file
View File

@@ -0,0 +1,5 @@
from thsf import app
if __name__ == "__main__":
application = app
application.run(host="127.0.0.1", port=8043)

View File

@@ -1,139 +0,0 @@
@font-face {
font-family: pfdintextcomppro;
src: url(../fonts/PFDinTextCompPro-Medium.ttf);
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: pfdintextcomppro;
}
body {
background-color: #e6007e;
background-image: url('../images/affiche_v1.png');
background-repeat: no-repeat;
background-size: auto;
background-position-x: center;
overflow: hidden;
}
ul {
overflow: hidden;
perspective: 900px;
list-style: none;
height: 100vh;
max-height: 800px;
min-height: 400px;
text-align: center;
}
@keyframes width-sway {
0%, 100% {
width: 500px;
}
50% {
width: 100%;
}
}
li {
position: absolute;
top: 0;
margin: auto;
width: 100%;
transform: translateY(100vh);
font-size: 6rem;
font-family: pfdintextcomppro;
font-weight: bold;
color: #ffffdd;
animation: 5.3333333333s spiral-staircase linear infinite;
white-space: nowrap;
}
li:nth-child(1) {
animation-delay: 0.3333333333s;
}
li:nth-child(2) {
animation-delay: 0.6666666667s;
}
li:nth-child(3) {
animation-delay: 1s;
}
li:nth-child(4) {
animation-delay: 1.3333333333s;
}
li:nth-child(5) {
animation-delay: 1.6666666667s;
}
li:nth-child(6) {
animation-delay: 2s;
}
li:nth-child(7) {
animation-delay: 2.3333333333s;
}
li:nth-child(8) {
animation-delay: 2.6666666667s;
}
li:nth-child(9) {
animation-delay: 3s;
}
li:nth-child(10) {
animation-delay: 3.3333333333s;
}
li:nth-child(11) {
animation-delay: 3.6666666667s;
}
li:nth-child(12) {
animation-delay: 4s;
}
li:nth-child(13) {
animation-delay: 4.3333333333s;
}
li:nth-child(14) {
animation-delay: 4.6666666667s;
}
li:nth-child(15) {
animation-delay: 5s;
}
li:nth-child(16) {
animation-delay: 5.3333333333s;
}
@keyframes spiral-staircase {
0% {
transform: rotateY(90deg) translateY(105vh) rotate(0deg) scale(0);
opacity: 0;
}
40% {
transform: rotateY(90deg) translateY(61vh) rotate(0deg) scale(0);
opacity: 0;
}
50% {
transform: rotateY(0deg) translateY(55vh) rotate(0deg) scale(0.50);
opacity: 1;
}
75% {
transform: rotateY(-60deg) translateY(27.5vh) rotate(0deg) scale(1);
opacity: 1;
}
100% {
transform: rotateY(-90deg) translateY(-5vh) rotate(0deg) scale(1.2);
opacity: 0;
}
}

15
thsf.Dockerfile Normal file
View File

@@ -0,0 +1,15 @@
ARG PRETALX_HOSTS_ENTRY
FROM python:3.9.16-bullseye as thsf_base
RUN apt-get update -y && \
apt-get install -y bash make python3-pip && \
useradd -m -d /home/thsf -s /bin/bash thsf
from thsf_base as thsf_build
COPY . /home/thsf/
RUN chown -R thsf:thsf /home/thsf/
USER thsf
WORKDIR /home/thsf/
from thsf_build
RUN make install
CMD ["make", "run"]

8
thsf.net.code-workspace Normal file
View File

@@ -0,0 +1,8 @@
{
"folders": [
{
"path": "."
}
],
"settings": {}
}