temporalio 0.0.0 → 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (316) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +130 -0
  3. data/bridge/Cargo.lock +2865 -0
  4. data/bridge/Cargo.toml +26 -0
  5. data/bridge/sdk-core/ARCHITECTURE.md +76 -0
  6. data/bridge/sdk-core/Cargo.lock +2606 -0
  7. data/bridge/sdk-core/Cargo.toml +2 -0
  8. data/bridge/sdk-core/LICENSE.txt +23 -0
  9. data/bridge/sdk-core/README.md +107 -0
  10. data/bridge/sdk-core/arch_docs/diagrams/README.md +10 -0
  11. data/bridge/sdk-core/arch_docs/diagrams/sticky_queues.puml +40 -0
  12. data/bridge/sdk-core/arch_docs/diagrams/workflow_internals.svg +1 -0
  13. data/bridge/sdk-core/arch_docs/sticky_queues.md +51 -0
  14. data/bridge/sdk-core/bridge-ffi/Cargo.toml +24 -0
  15. data/bridge/sdk-core/bridge-ffi/LICENSE.txt +23 -0
  16. data/bridge/sdk-core/bridge-ffi/build.rs +25 -0
  17. data/bridge/sdk-core/bridge-ffi/include/sdk-core-bridge.h +249 -0
  18. data/bridge/sdk-core/bridge-ffi/src/lib.rs +825 -0
  19. data/bridge/sdk-core/bridge-ffi/src/wrappers.rs +211 -0
  20. data/bridge/sdk-core/client/Cargo.toml +40 -0
  21. data/bridge/sdk-core/client/LICENSE.txt +23 -0
  22. data/bridge/sdk-core/client/src/lib.rs +1294 -0
  23. data/bridge/sdk-core/client/src/metrics.rs +165 -0
  24. data/bridge/sdk-core/client/src/raw.rs +931 -0
  25. data/bridge/sdk-core/client/src/retry.rs +674 -0
  26. data/bridge/sdk-core/client/src/workflow_handle/mod.rs +185 -0
  27. data/bridge/sdk-core/core/Cargo.toml +116 -0
  28. data/bridge/sdk-core/core/LICENSE.txt +23 -0
  29. data/bridge/sdk-core/core/benches/workflow_replay.rs +73 -0
  30. data/bridge/sdk-core/core/src/abstractions.rs +166 -0
  31. data/bridge/sdk-core/core/src/core_tests/activity_tasks.rs +911 -0
  32. data/bridge/sdk-core/core/src/core_tests/child_workflows.rs +221 -0
  33. data/bridge/sdk-core/core/src/core_tests/determinism.rs +107 -0
  34. data/bridge/sdk-core/core/src/core_tests/local_activities.rs +515 -0
  35. data/bridge/sdk-core/core/src/core_tests/mod.rs +100 -0
  36. data/bridge/sdk-core/core/src/core_tests/queries.rs +736 -0
  37. data/bridge/sdk-core/core/src/core_tests/replay_flag.rs +65 -0
  38. data/bridge/sdk-core/core/src/core_tests/workers.rs +259 -0
  39. data/bridge/sdk-core/core/src/core_tests/workflow_cancels.rs +124 -0
  40. data/bridge/sdk-core/core/src/core_tests/workflow_tasks.rs +2070 -0
  41. data/bridge/sdk-core/core/src/ephemeral_server/mod.rs +515 -0
  42. data/bridge/sdk-core/core/src/lib.rs +175 -0
  43. data/bridge/sdk-core/core/src/log_export.rs +62 -0
  44. data/bridge/sdk-core/core/src/pollers/mod.rs +54 -0
  45. data/bridge/sdk-core/core/src/pollers/poll_buffer.rs +297 -0
  46. data/bridge/sdk-core/core/src/protosext/mod.rs +428 -0
  47. data/bridge/sdk-core/core/src/replay/mod.rs +71 -0
  48. data/bridge/sdk-core/core/src/retry_logic.rs +202 -0
  49. data/bridge/sdk-core/core/src/telemetry/metrics.rs +383 -0
  50. data/bridge/sdk-core/core/src/telemetry/mod.rs +412 -0
  51. data/bridge/sdk-core/core/src/telemetry/prometheus_server.rs +77 -0
  52. data/bridge/sdk-core/core/src/test_help/mod.rs +875 -0
  53. data/bridge/sdk-core/core/src/worker/activities/activity_heartbeat_manager.rs +580 -0
  54. data/bridge/sdk-core/core/src/worker/activities/local_activities.rs +1042 -0
  55. data/bridge/sdk-core/core/src/worker/activities.rs +464 -0
  56. data/bridge/sdk-core/core/src/worker/client/mocks.rs +87 -0
  57. data/bridge/sdk-core/core/src/worker/client.rs +347 -0
  58. data/bridge/sdk-core/core/src/worker/mod.rs +566 -0
  59. data/bridge/sdk-core/core/src/worker/workflow/bridge.rs +37 -0
  60. data/bridge/sdk-core/core/src/worker/workflow/driven_workflow.rs +110 -0
  61. data/bridge/sdk-core/core/src/worker/workflow/history_update.rs +458 -0
  62. data/bridge/sdk-core/core/src/worker/workflow/machines/activity_state_machine.rs +911 -0
  63. data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_external_state_machine.rs +298 -0
  64. data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_workflow_state_machine.rs +171 -0
  65. data/bridge/sdk-core/core/src/worker/workflow/machines/child_workflow_state_machine.rs +860 -0
  66. data/bridge/sdk-core/core/src/worker/workflow/machines/complete_workflow_state_machine.rs +140 -0
  67. data/bridge/sdk-core/core/src/worker/workflow/machines/continue_as_new_workflow_state_machine.rs +161 -0
  68. data/bridge/sdk-core/core/src/worker/workflow/machines/fail_workflow_state_machine.rs +133 -0
  69. data/bridge/sdk-core/core/src/worker/workflow/machines/local_activity_state_machine.rs +1448 -0
  70. data/bridge/sdk-core/core/src/worker/workflow/machines/mod.rs +342 -0
  71. data/bridge/sdk-core/core/src/worker/workflow/machines/mutable_side_effect_state_machine.rs +127 -0
  72. data/bridge/sdk-core/core/src/worker/workflow/machines/patch_state_machine.rs +712 -0
  73. data/bridge/sdk-core/core/src/worker/workflow/machines/side_effect_state_machine.rs +71 -0
  74. data/bridge/sdk-core/core/src/worker/workflow/machines/signal_external_state_machine.rs +443 -0
  75. data/bridge/sdk-core/core/src/worker/workflow/machines/timer_state_machine.rs +439 -0
  76. data/bridge/sdk-core/core/src/worker/workflow/machines/transition_coverage.rs +169 -0
  77. data/bridge/sdk-core/core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +246 -0
  78. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines/local_acts.rs +96 -0
  79. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines.rs +1184 -0
  80. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_task_state_machine.rs +277 -0
  81. data/bridge/sdk-core/core/src/worker/workflow/managed_run/managed_wf_test.rs +198 -0
  82. data/bridge/sdk-core/core/src/worker/workflow/managed_run.rs +647 -0
  83. data/bridge/sdk-core/core/src/worker/workflow/mod.rs +1143 -0
  84. data/bridge/sdk-core/core/src/worker/workflow/run_cache.rs +145 -0
  85. data/bridge/sdk-core/core/src/worker/workflow/wft_poller.rs +88 -0
  86. data/bridge/sdk-core/core/src/worker/workflow/workflow_stream.rs +940 -0
  87. data/bridge/sdk-core/core-api/Cargo.toml +31 -0
  88. data/bridge/sdk-core/core-api/LICENSE.txt +23 -0
  89. data/bridge/sdk-core/core-api/src/errors.rs +95 -0
  90. data/bridge/sdk-core/core-api/src/lib.rs +151 -0
  91. data/bridge/sdk-core/core-api/src/worker.rs +135 -0
  92. data/bridge/sdk-core/etc/deps.svg +187 -0
  93. data/bridge/sdk-core/etc/dynamic-config.yaml +2 -0
  94. data/bridge/sdk-core/etc/otel-collector-config.yaml +36 -0
  95. data/bridge/sdk-core/etc/prometheus.yaml +6 -0
  96. data/bridge/sdk-core/fsm/Cargo.toml +18 -0
  97. data/bridge/sdk-core/fsm/LICENSE.txt +23 -0
  98. data/bridge/sdk-core/fsm/README.md +3 -0
  99. data/bridge/sdk-core/fsm/rustfsm_procmacro/Cargo.toml +27 -0
  100. data/bridge/sdk-core/fsm/rustfsm_procmacro/LICENSE.txt +23 -0
  101. data/bridge/sdk-core/fsm/rustfsm_procmacro/src/lib.rs +647 -0
  102. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/progress.rs +8 -0
  103. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dupe_transitions_fail.rs +18 -0
  104. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dupe_transitions_fail.stderr +12 -0
  105. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dynamic_dest_pass.rs +41 -0
  106. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/forgot_name_fail.rs +14 -0
  107. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/forgot_name_fail.stderr +11 -0
  108. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/handler_arg_pass.rs +32 -0
  109. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/handler_pass.rs +31 -0
  110. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/medium_complex_pass.rs +46 -0
  111. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.rs +29 -0
  112. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.stderr +12 -0
  113. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/simple_pass.rs +32 -0
  114. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/struct_event_variant_fail.rs +18 -0
  115. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/struct_event_variant_fail.stderr +5 -0
  116. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_more_item_event_variant_fail.rs +11 -0
  117. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_more_item_event_variant_fail.stderr +5 -0
  118. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_zero_item_event_variant_fail.rs +11 -0
  119. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_zero_item_event_variant_fail.stderr +5 -0
  120. data/bridge/sdk-core/fsm/rustfsm_trait/Cargo.toml +14 -0
  121. data/bridge/sdk-core/fsm/rustfsm_trait/LICENSE.txt +23 -0
  122. data/bridge/sdk-core/fsm/rustfsm_trait/src/lib.rs +249 -0
  123. data/bridge/sdk-core/fsm/src/lib.rs +2 -0
  124. data/bridge/sdk-core/histories/fail_wf_task.bin +0 -0
  125. data/bridge/sdk-core/histories/timer_workflow_history.bin +0 -0
  126. data/bridge/sdk-core/integ-with-otel.sh +7 -0
  127. data/bridge/sdk-core/protos/api_upstream/README.md +9 -0
  128. data/bridge/sdk-core/protos/api_upstream/api-linter.yaml +40 -0
  129. data/bridge/sdk-core/protos/api_upstream/buf.yaml +12 -0
  130. data/bridge/sdk-core/protos/api_upstream/dependencies/gogoproto/gogo.proto +141 -0
  131. data/bridge/sdk-core/protos/api_upstream/temporal/api/batch/v1/message.proto +86 -0
  132. data/bridge/sdk-core/protos/api_upstream/temporal/api/cluster/v1/message.proto +83 -0
  133. data/bridge/sdk-core/protos/api_upstream/temporal/api/command/v1/message.proto +259 -0
  134. data/bridge/sdk-core/protos/api_upstream/temporal/api/common/v1/message.proto +112 -0
  135. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/batch_operation.proto +46 -0
  136. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/cluster.proto +40 -0
  137. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/command_type.proto +57 -0
  138. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/common.proto +55 -0
  139. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/event_type.proto +168 -0
  140. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +97 -0
  141. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/namespace.proto +51 -0
  142. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/query.proto +50 -0
  143. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/reset.proto +41 -0
  144. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/schedule.proto +60 -0
  145. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/task_queue.proto +59 -0
  146. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/update.proto +51 -0
  147. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/workflow.proto +122 -0
  148. data/bridge/sdk-core/protos/api_upstream/temporal/api/errordetails/v1/message.proto +108 -0
  149. data/bridge/sdk-core/protos/api_upstream/temporal/api/failure/v1/message.proto +114 -0
  150. data/bridge/sdk-core/protos/api_upstream/temporal/api/filter/v1/message.proto +56 -0
  151. data/bridge/sdk-core/protos/api_upstream/temporal/api/history/v1/message.proto +751 -0
  152. data/bridge/sdk-core/protos/api_upstream/temporal/api/namespace/v1/message.proto +97 -0
  153. data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/request_response.proto +161 -0
  154. data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/service.proto +99 -0
  155. data/bridge/sdk-core/protos/api_upstream/temporal/api/query/v1/message.proto +61 -0
  156. data/bridge/sdk-core/protos/api_upstream/temporal/api/replication/v1/message.proto +55 -0
  157. data/bridge/sdk-core/protos/api_upstream/temporal/api/schedule/v1/message.proto +300 -0
  158. data/bridge/sdk-core/protos/api_upstream/temporal/api/taskqueue/v1/message.proto +108 -0
  159. data/bridge/sdk-core/protos/api_upstream/temporal/api/update/v1/message.proto +46 -0
  160. data/bridge/sdk-core/protos/api_upstream/temporal/api/version/v1/message.proto +59 -0
  161. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflow/v1/message.proto +145 -0
  162. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +1124 -0
  163. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +401 -0
  164. data/bridge/sdk-core/protos/grpc/health/v1/health.proto +63 -0
  165. data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_result/activity_result.proto +78 -0
  166. data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_task/activity_task.proto +79 -0
  167. data/bridge/sdk-core/protos/local/temporal/sdk/core/bridge/bridge.proto +210 -0
  168. data/bridge/sdk-core/protos/local/temporal/sdk/core/child_workflow/child_workflow.proto +77 -0
  169. data/bridge/sdk-core/protos/local/temporal/sdk/core/common/common.proto +15 -0
  170. data/bridge/sdk-core/protos/local/temporal/sdk/core/core_interface.proto +30 -0
  171. data/bridge/sdk-core/protos/local/temporal/sdk/core/external_data/external_data.proto +30 -0
  172. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +261 -0
  173. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +297 -0
  174. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_completion/workflow_completion.proto +29 -0
  175. data/bridge/sdk-core/protos/testsrv_upstream/api-linter.yaml +38 -0
  176. data/bridge/sdk-core/protos/testsrv_upstream/buf.yaml +13 -0
  177. data/bridge/sdk-core/protos/testsrv_upstream/dependencies/gogoproto/gogo.proto +141 -0
  178. data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/request_response.proto +63 -0
  179. data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/service.proto +90 -0
  180. data/bridge/sdk-core/rustfmt.toml +1 -0
  181. data/bridge/sdk-core/sdk/Cargo.toml +47 -0
  182. data/bridge/sdk-core/sdk/LICENSE.txt +23 -0
  183. data/bridge/sdk-core/sdk/src/activity_context.rs +230 -0
  184. data/bridge/sdk-core/sdk/src/app_data.rs +37 -0
  185. data/bridge/sdk-core/sdk/src/conversions.rs +8 -0
  186. data/bridge/sdk-core/sdk/src/interceptors.rs +17 -0
  187. data/bridge/sdk-core/sdk/src/lib.rs +792 -0
  188. data/bridge/sdk-core/sdk/src/payload_converter.rs +11 -0
  189. data/bridge/sdk-core/sdk/src/workflow_context/options.rs +295 -0
  190. data/bridge/sdk-core/sdk/src/workflow_context.rs +683 -0
  191. data/bridge/sdk-core/sdk/src/workflow_future.rs +503 -0
  192. data/bridge/sdk-core/sdk-core-protos/Cargo.toml +30 -0
  193. data/bridge/sdk-core/sdk-core-protos/LICENSE.txt +23 -0
  194. data/bridge/sdk-core/sdk-core-protos/build.rs +108 -0
  195. data/bridge/sdk-core/sdk-core-protos/src/constants.rs +7 -0
  196. data/bridge/sdk-core/sdk-core-protos/src/history_builder.rs +497 -0
  197. data/bridge/sdk-core/sdk-core-protos/src/history_info.rs +230 -0
  198. data/bridge/sdk-core/sdk-core-protos/src/lib.rs +1910 -0
  199. data/bridge/sdk-core/sdk-core-protos/src/task_token.rs +38 -0
  200. data/bridge/sdk-core/sdk-core-protos/src/utilities.rs +14 -0
  201. data/bridge/sdk-core/test-utils/Cargo.toml +35 -0
  202. data/bridge/sdk-core/test-utils/src/canned_histories.rs +1579 -0
  203. data/bridge/sdk-core/test-utils/src/histfetch.rs +28 -0
  204. data/bridge/sdk-core/test-utils/src/lib.rs +598 -0
  205. data/bridge/sdk-core/tests/integ_tests/client_tests.rs +36 -0
  206. data/bridge/sdk-core/tests/integ_tests/ephemeral_server_tests.rs +128 -0
  207. data/bridge/sdk-core/tests/integ_tests/heartbeat_tests.rs +218 -0
  208. data/bridge/sdk-core/tests/integ_tests/polling_tests.rs +146 -0
  209. data/bridge/sdk-core/tests/integ_tests/queries_tests.rs +437 -0
  210. data/bridge/sdk-core/tests/integ_tests/visibility_tests.rs +93 -0
  211. data/bridge/sdk-core/tests/integ_tests/workflow_tests/activities.rs +878 -0
  212. data/bridge/sdk-core/tests/integ_tests/workflow_tests/appdata_propagation.rs +61 -0
  213. data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +59 -0
  214. data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +58 -0
  215. data/bridge/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +50 -0
  216. data/bridge/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +60 -0
  217. data/bridge/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +54 -0
  218. data/bridge/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +634 -0
  219. data/bridge/sdk-core/tests/integ_tests/workflow_tests/patches.rs +113 -0
  220. data/bridge/sdk-core/tests/integ_tests/workflow_tests/replay.rs +137 -0
  221. data/bridge/sdk-core/tests/integ_tests/workflow_tests/resets.rs +93 -0
  222. data/bridge/sdk-core/tests/integ_tests/workflow_tests/signals.rs +167 -0
  223. data/bridge/sdk-core/tests/integ_tests/workflow_tests/stickyness.rs +99 -0
  224. data/bridge/sdk-core/tests/integ_tests/workflow_tests/timers.rs +131 -0
  225. data/bridge/sdk-core/tests/integ_tests/workflow_tests/upsert_search_attrs.rs +75 -0
  226. data/bridge/sdk-core/tests/integ_tests/workflow_tests.rs +587 -0
  227. data/bridge/sdk-core/tests/load_tests.rs +191 -0
  228. data/bridge/sdk-core/tests/main.rs +111 -0
  229. data/bridge/sdk-core/tests/runner.rs +93 -0
  230. data/bridge/src/connection.rs +167 -0
  231. data/bridge/src/lib.rs +180 -0
  232. data/bridge/src/runtime.rs +47 -0
  233. data/bridge/src/worker.rs +73 -0
  234. data/ext/Rakefile +9 -0
  235. data/lib/bridge.so +0 -0
  236. data/lib/gen/dependencies/gogoproto/gogo_pb.rb +14 -0
  237. data/lib/gen/temporal/api/batch/v1/message_pb.rb +48 -0
  238. data/lib/gen/temporal/api/cluster/v1/message_pb.rb +67 -0
  239. data/lib/gen/temporal/api/command/v1/message_pb.rb +166 -0
  240. data/lib/gen/temporal/api/common/v1/message_pb.rb +69 -0
  241. data/lib/gen/temporal/api/enums/v1/batch_operation_pb.rb +32 -0
  242. data/lib/gen/temporal/api/enums/v1/cluster_pb.rb +26 -0
  243. data/lib/gen/temporal/api/enums/v1/command_type_pb.rb +37 -0
  244. data/lib/gen/temporal/api/enums/v1/common_pb.rb +41 -0
  245. data/lib/gen/temporal/api/enums/v1/event_type_pb.rb +67 -0
  246. data/lib/gen/temporal/api/enums/v1/failed_cause_pb.rb +71 -0
  247. data/lib/gen/temporal/api/enums/v1/namespace_pb.rb +37 -0
  248. data/lib/gen/temporal/api/enums/v1/query_pb.rb +31 -0
  249. data/lib/gen/temporal/api/enums/v1/reset_pb.rb +24 -0
  250. data/lib/gen/temporal/api/enums/v1/schedule_pb.rb +28 -0
  251. data/lib/gen/temporal/api/enums/v1/task_queue_pb.rb +30 -0
  252. data/lib/gen/temporal/api/enums/v1/update_pb.rb +28 -0
  253. data/lib/gen/temporal/api/enums/v1/workflow_pb.rb +89 -0
  254. data/lib/gen/temporal/api/errordetails/v1/message_pb.rb +84 -0
  255. data/lib/gen/temporal/api/failure/v1/message_pb.rb +83 -0
  256. data/lib/gen/temporal/api/filter/v1/message_pb.rb +40 -0
  257. data/lib/gen/temporal/api/history/v1/message_pb.rb +489 -0
  258. data/lib/gen/temporal/api/namespace/v1/message_pb.rb +63 -0
  259. data/lib/gen/temporal/api/operatorservice/v1/request_response_pb.rb +125 -0
  260. data/lib/gen/temporal/api/operatorservice/v1/service_pb.rb +20 -0
  261. data/lib/gen/temporal/api/query/v1/message_pb.rb +38 -0
  262. data/lib/gen/temporal/api/replication/v1/message_pb.rb +37 -0
  263. data/lib/gen/temporal/api/schedule/v1/message_pb.rb +128 -0
  264. data/lib/gen/temporal/api/taskqueue/v1/message_pb.rb +73 -0
  265. data/lib/gen/temporal/api/update/v1/message_pb.rb +26 -0
  266. data/lib/gen/temporal/api/version/v1/message_pb.rb +41 -0
  267. data/lib/gen/temporal/api/workflow/v1/message_pb.rb +110 -0
  268. data/lib/gen/temporal/api/workflowservice/v1/request_response_pb.rb +771 -0
  269. data/lib/gen/temporal/api/workflowservice/v1/service_pb.rb +20 -0
  270. data/lib/gen/temporal/sdk/core/activity_result/activity_result_pb.rb +58 -0
  271. data/lib/gen/temporal/sdk/core/activity_task/activity_task_pb.rb +57 -0
  272. data/lib/gen/temporal/sdk/core/bridge/bridge_pb.rb +222 -0
  273. data/lib/gen/temporal/sdk/core/child_workflow/child_workflow_pb.rb +57 -0
  274. data/lib/gen/temporal/sdk/core/common/common_pb.rb +22 -0
  275. data/lib/gen/temporal/sdk/core/core_interface_pb.rb +34 -0
  276. data/lib/gen/temporal/sdk/core/external_data/external_data_pb.rb +27 -0
  277. data/lib/gen/temporal/sdk/core/workflow_activation/workflow_activation_pb.rb +164 -0
  278. data/lib/gen/temporal/sdk/core/workflow_commands/workflow_commands_pb.rb +192 -0
  279. data/lib/gen/temporal/sdk/core/workflow_completion/workflow_completion_pb.rb +34 -0
  280. data/lib/temporal/bridge.rb +14 -0
  281. data/lib/temporal/client/implementation.rb +339 -0
  282. data/lib/temporal/client/workflow_handle.rb +243 -0
  283. data/lib/temporal/client.rb +144 -0
  284. data/lib/temporal/connection.rb +736 -0
  285. data/lib/temporal/data_converter.rb +150 -0
  286. data/lib/temporal/error/failure.rb +194 -0
  287. data/lib/temporal/error/workflow_failure.rb +17 -0
  288. data/lib/temporal/errors.rb +22 -0
  289. data/lib/temporal/failure_converter/base.rb +26 -0
  290. data/lib/temporal/failure_converter/basic.rb +313 -0
  291. data/lib/temporal/failure_converter.rb +8 -0
  292. data/lib/temporal/interceptor/chain.rb +27 -0
  293. data/lib/temporal/interceptor/client.rb +102 -0
  294. data/lib/temporal/payload_codec/base.rb +32 -0
  295. data/lib/temporal/payload_converter/base.rb +24 -0
  296. data/lib/temporal/payload_converter/bytes.rb +26 -0
  297. data/lib/temporal/payload_converter/composite.rb +47 -0
  298. data/lib/temporal/payload_converter/encoding_base.rb +35 -0
  299. data/lib/temporal/payload_converter/json.rb +25 -0
  300. data/lib/temporal/payload_converter/nil.rb +25 -0
  301. data/lib/temporal/payload_converter.rb +14 -0
  302. data/lib/temporal/retry_policy.rb +82 -0
  303. data/lib/temporal/retry_state.rb +35 -0
  304. data/lib/temporal/runtime.rb +22 -0
  305. data/lib/temporal/timeout_type.rb +29 -0
  306. data/lib/temporal/version.rb +1 -1
  307. data/lib/temporal/workflow/execution_info.rb +54 -0
  308. data/lib/temporal/workflow/execution_status.rb +36 -0
  309. data/lib/temporal/workflow/id_reuse_policy.rb +36 -0
  310. data/lib/temporal/workflow/query_reject_condition.rb +33 -0
  311. data/lib/temporal.rb +4 -0
  312. data/lib/temporalio.rb +3 -1
  313. data/lib/thermite_patch.rb +23 -0
  314. data/temporalio.gemspec +41 -0
  315. metadata +543 -9
  316. data/temporal.gemspec +0 -20
@@ -0,0 +1,2 @@
1
+ [workspace]
2
+ members = ["bridge-ffi", "core", "client", "core-api", "fsm", "test-utils", "sdk-core-protos", "sdk"]
@@ -0,0 +1,23 @@
1
+ Temporal Core SDK
2
+
3
+ The MIT License
4
+
5
+ Copyright (c) 2021 Temporal Technologies, Inc. All Rights Reserved
6
+
7
+ Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ of this software and associated documentation files (the "Software"), to deal
9
+ in the Software without restriction, including without limitation the rights
10
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ copies of the Software, and to permit persons to whom the Software is
12
+ furnished to do so, subject to the following conditions:
13
+
14
+ The above copyright notice and this permission notice shall be included in all
15
+ copies or substantial portions of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
+ SOFTWARE.
@@ -0,0 +1,107 @@
1
+ [![Build status](https://badge.buildkite.com/c23f47f4a827f04daece909963bd3a248496f0cdbabfbecee4.svg?branch=master)](https://buildkite.com/temporal/core-sdk?branch=master)
2
+
3
+ Core SDK that can be used as a base for all other Temporal SDKs.
4
+
5
+ # Getting started
6
+
7
+ See the [Architecture](ARCHITECTURE.md) doc for some high-level information.
8
+
9
+ ## Dependencies
10
+ * Protobuf compiler
11
+
12
+ # Development
13
+
14
+ This repo is composed of multiple crates:
15
+ * temporal-sdk-core-protos `./sdk-core-protos` - Holds the generated proto code and extensions
16
+ * temporal-client `./client` - Defines client(s) for interacting with the Temporal gRPC service
17
+ * temporal-sdk-core-api `./core-api` - Defines the API surface exposed by Core
18
+ * temporal-sdk-core `./core` - The Core implementation
19
+ * temporal-sdk `./sdk` - A (currently prototype) Rust SDK built on top of Core. Used for testing.
20
+ * temporal-sdk-core-bridge-ffi `./bridge-ffi` - C API wrapper for Core
21
+ * rustfsm `./fsm` - Implements a procedural macro used by core for defining state machines
22
+ (contains subcrates). It is temporal agnostic.
23
+
24
+ Visualized (dev dependencies are in blue):
25
+
26
+ ![Crate dependency graph](./etc/deps.svg)
27
+
28
+
29
+ All the following commands are enforced for each pull request:
30
+
31
+ ## Building and testing
32
+
33
+ You can buld and test the project using cargo:
34
+ `cargo build`
35
+ `cargo test`
36
+
37
+ Run integ tests with `cargo integ-test`. You will need to already be running the server:
38
+ `docker-compose -f .buildkite/docker/docker-compose.yaml up`
39
+
40
+ ## Formatting
41
+ To format all code run:
42
+ `cargo fmt --all`
43
+
44
+ ## Linting
45
+ We are using [clippy](https://github.com/rust-lang/rust-clippy) for linting.
46
+ You can run it using:
47
+ `cargo clippy --all -- -D warnings`
48
+
49
+ ## Debugging
50
+ The crate uses [tracing](https://github.com/tokio-rs/tracing) to help with debugging. To enable
51
+ it for a test, insert the below snippet at the start of the test. By default, tracing data is output
52
+ to stdout in a (reasonably) pretty manner.
53
+
54
+ ```rust
55
+ crate::telemetry::telemetry_init(Default::default());
56
+ let s = info_span!("Test start");
57
+ let _enter = s.enter();
58
+ ```
59
+
60
+ The passed in options to initialization can be customized to export to an OTel collector, etc.
61
+
62
+ To run integ tests with OTel collection on, you can use `integ-with-otel.sh`. You will want to make
63
+ sure you are running the collector via docker, which can be done like so:
64
+
65
+ `docker-compose -f .buildkite/docker/docker-compose.yaml -f .buildkite/docker/docker-compose-telem.yaml up`
66
+
67
+ If you are working on a language SDK, you are expected to initialize tracing early in your `main`
68
+ equivalent.
69
+
70
+ ## Proto files
71
+
72
+ This repo uses a subtree for upstream protobuf files. The path `protos/api_upstream` is a
73
+ subtree. To update it, use:
74
+
75
+ `git pull --squash -s subtree ssh://git@github.com/temporalio/api.git master --allow-unrelated-histories`
76
+
77
+ Do not question why this git command is the way it is. It is not our place to interpret git's ways.
78
+
79
+ The java testserver protos are also pulled from the sdk-java repo, but since we only need a
80
+ subdirectory of that repo, we just copy the files with read-tree:
81
+ ```bash
82
+ # add sdk-java as a remote if you have not already
83
+ git remote add -f -t master --no-tags testsrv-protos git@github.com:temporalio/sdk-java.git
84
+ # delete existing protos
85
+ git rm -rf protos/testsrv_upstream
86
+ # pull from upstream & commit
87
+ git read-tree --prefix protos/testsrv_upstream -u testsrv-protos/master:temporal-test-server/src/main/proto
88
+ git commit
89
+ ```
90
+
91
+ ## Fetching Histories
92
+ Tests which would like to replay stored histories rely on that history being made available in
93
+ binary format. You can fetch histories in that format like so (from a local docker server):
94
+
95
+ `cargo run --bin histfetch {workflow_id} [{run_id}]`
96
+
97
+ You can change the `TEMPORAL_SERVICE_ADDRESS` env var to fetch from a different address.
98
+
99
+ ## Style Guidelines
100
+
101
+ ### Error handling
102
+ Any error which is returned from a public interface should be well-typed, and we use
103
+ [thiserror](https://github.com/dtolnay/thiserror) for that purpose.
104
+
105
+ Errors returned from things only used in testing are free to use
106
+ [anyhow](https://github.com/dtolnay/anyhow) for less verbosity.
107
+
@@ -0,0 +1,10 @@
1
+ This directory contains diagrams used in the arch documents.
2
+
3
+ They can be embedded into those documents two ways:
4
+
5
+ * by the technique described here using the plantuml proxy service:
6
+ https://stackoverflow.com/questions/32203610/how-to-integrate-uml-diagrams-into-gitlab-or-github
7
+ * By pasting them into https://www.planttext.com/ and then embedding the resulting SVG link
8
+
9
+ The first technique has the problem that the PR won't show changes, since it's always from master.
10
+ The second has the problem that you have to update it by hand. Pick your poison.
@@ -0,0 +1,40 @@
1
+ @startuml
2
+
3
+ title "Sticky Task Queue Interactions"
4
+
5
+ participant "Worker 1" as w1
6
+ participant "Server" as fe
7
+ queue "some_tq" as gq
8
+ queue "some_tq_worker_1_xxx" as sq
9
+
10
+ w1 -> fe : Poll on ""some_tq""
11
+ fe <- gq : grab next task
12
+ fe --> w1 : Workflow Task (entire history)
13
+
14
+ w1 -> w1 : Process task
15
+ w1 -> fe : Task complete, use task queue ""some_tq_worker_1_xxx""
16
+
17
+ fe -> fe : An event, like a timer firing
18
+ fe -> sq ** : Enqueue task
19
+
20
+ loop Processing workflow tasks on a specific queue
21
+ w1 -> fe : Poll on ""some_tq_worker_1_xxx""
22
+ fe <- sq : grab next task
23
+ fe --> w1 : Workflow Task (only new events)
24
+ w1 -> w1 : Process task
25
+ w1 -> fe : Task complete, use task queue ""some_tq_worker_1_xxx""
26
+ fe -> fe : An event, like a timer firing
27
+ fe -> sq : Enqueue task
28
+ end
29
+
30
+ w1 -> w1 : Evict workflow from cache
31
+ note right : Eviction happens of this workflow for some reason
32
+
33
+ w1 -> fe : ResetSticky (includes which workflow execution)
34
+
35
+ fe -> fe : An event, like a timer firing
36
+ fe -> gq : Enqueue task
37
+ note left : We go back to the shared queue
38
+
39
+
40
+ @enduml
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:lucid="lucid" width="1686.1" height="1244.89"><g transform="translate(-11.2201838707646 -20)" lucid:page-tab-id="Qysh0Fsg6jTJ"><path d="M0 0h1722.64v1331.13H0z" fill="#fff"/><path d="M1401.32 946a6 6 0 0 1 6-6h248a6 6 0 0 1 6 6v278a6 6 0 0 1-6 6h-248a6 6 0 0 1-6-6z" fill="#fff"/><path d="M1402.05 943.16l.42-.7.6-.7.62-.52m1.46-.82l.3-.13.92-.23h1.5m2 0h2.97m2 0h2.98m2 0h2.98m2 0h3m1.98 0h3m1.98 0h3m1.98 0h3m1.98 0h3m1.98 0h2.98m2 0h2.98m2 0h2.98m2 0h2.98m2-.02h2.98m2 0h2.98m2 0h2.98m2 0h2.98m2 0h2.97m2 0h3m2 0h2.97m2 0h2.98m2 0h2.98m2 0h2.98m2 0h3m1.98 0h3m1.98 0h3m1.98 0l2.98-.02m2 0h2.98m2 0h2.98m2 0h2.98m2 0h2.98m2 0h2.98m2 0h2.98m2 0h2.98m2 0h2.97m2 0h2.98m2 0h2.98m2 0h3m1.98 0h3m1.98 0h3m1.98-.02h3m1.98 0h3m1.98 0h2.98m2 0h2.98m2 0h2.98m2 0h2.98m2 0h2.98m2 0h2.98m2 0h2.98m2 0h2.98m2 0h1.48l.94.07.32.08m1.6.58l.67.42.7.6.53.62m.82 1.47l.13.3.22.92v1.5m0 2v2.98m0 2v2.98m0 2v2.98m0 2v2.98m0 2v2.98m0 2v2.98m0 2v2.98m0 2v2.98m0 2v2.98m0 2v3m0 1.98v3m0 1.98v3m0 1.98v3m0 1.98l.02 3m0 1.98v3m0 1.98v3m0 1.98v3m0 2v2.97m0 2v3m0 2v2.98m0 2v2.98m0 2v2.98m0 2v2.98m0 2v2.98m0 2v2.98m0 2v2.98m0 2v2.98m0 2v2.98m0 2l.02 3m0 1.98v3m0 1.98v3m0 1.98v3m0 1.98v3m0 1.98v3m0 1.98v3m0 1.98v3m0 2v2.97m0 2v3m0 1.98v3m0 1.98v3m0 2v2.98m0 2v2.98m0 2v2.98m0 2v2.98m0 2v2.98m0 2v2.98m0 2v2.98m0 2v3m0 1.98v3m0 1.98v3m0 1.98v3m.02 1.98v3m0 1.98v3m0 1.98v3m0 1.98v3m0 2v1.48l-.07.94-.08.32m-.58 1.58l-.43.7-.6.7-.62.52m-1.47.82l-.3.13-.92.23h-1.5m-2 0h-2.97m-2 0h-3m-1.98 0h-3m-1.98 0h-3m-1.98 0h-3m-1.98 0h-3m-1.98 0h-3m-1.98 0h-2.98m-2 0h-2.98m-2 0H1605m-2 0H1600m-2 0h-2.98m-2 0l-2.98.02m-2 0h-2.98m-2 0h-2.98m-2 0h-2.97m-2 0h-2.97m-2 0h-2.98m-2 0h-2.98m-2 0h-2.98m-2 0h-3m-1.98 0h-3m-1.98 0h-3m-1.98 0h-2.98m-2 0h-2.98m-2 0h-2.98m-2 .02h-2.98m-2 0h-2.98m-2 0h-2.98m-2 0h-2.98m-2 0h-2.98m-2 0h-2.97m-2 0h-2.98m-2 0h-2.98m-2 0h-3m-1.98 0h-3m-1.98 0h-3m-1.98 0h-3m-1.98 0h-3m-1.98 0l-3 .02m-1.98 0h-2.98m-2 0h-2.98m-2 0h-2.98m-2 0h-2.98m-2 0h-2.98m-2 0h-2.98m-2 0h-2.98m-2 0h-2.98m-2 0h-2.97m-2 0h-1.48l-.94-.07-.32-.08m-1.58-.58l-.7-.42-.7-.6-.52-.62m-.82-1.47l-.13-.3-.2-.92v-1.5m0-2v-2.98m0-2v-2.98m0-2v-2.98m0-2v-2.98m0-2v-2.98m0-2v-2.98m0-2v-2.98m-.02-2v-2.98m0-2v-3m0-1.98v-3m0-1.98v-3m0-1.98v-3m0-1.98v-3m0-1.98v-3m0-1.98v-3m0-1.98v-3m0-2v-2.97m0-2v-2.98m0-2v-3m0-2v-2.98m0-2v-2.98m0-2v-2.98m-.02-2v-2.98m0-2v-2.98m0-2v-2.98m0-2v-2.98m0-2v-2.98m0-2v-3m0-1.98v-3m0-1.98v-3m0-1.98v-3m0-1.98v-3m0-1.98v-3m0-1.98v-3m0-1.98v-3m0-2v-2.97m0-2v-2.98m-.02-2v-3m0-1.98v-3m0-1.98v-3m0-2v-2.98m0-2v-2.98m0-2v-2.98m0-2v-2.98m0-2v-2.98m0-2v-2.98m0-2v-3m0-1.98v-3m0-1.98v-3m0-1.98v-3m0-1.98v-3m0-1.98v-3m0-1.98l-.02-3m0-1.98v-3m0-1.98v-3m0-2V946l.07-.94.07-.32" stroke="#3a414a" fill="none"/><use xlink:href="#a" transform="matrix(1,0,0,1,1413.3207547169814,951.9996625863065) translate(0 17.77777777777778)"/><use xlink:href="#b" transform="matrix(1,0,0,1,1413.3207547169814,951.9996625863065) translate(54.32098765432099 17.77777777777778)"/><use xlink:href="#c" transform="matrix(1,0,0,1,1413.3207547169814,951.9996625863065) translate(92.53086419753086 17.77777777777778)"/><use xlink:href="#d" transform="matrix(1,0,0,1,1413.3207547169814,951.9996625863065) translate(143.02469135802468 17.77777777777778)"/><use xlink:href="#e" transform="matrix(1,0,0,1,1413.3207547169814,951.9996625863065) translate(166.41975308641975 17.77777777777778)"/><use xlink:href="#f" transform="matrix(1,0,0,1,1413.3207547169814,951.9996625863065) translate(194.7530864197531 17.77777777777778)"/><use xlink:href="#g" transform="matrix(1,0,0,1,1413.3207547169814,951.9996625863065) translate(0 44.44444444444444)"/><path d="M521.32 866a6 6 0 0 1 6-6h468a6 6 0 0 1 6 6v358a6 6 0 0 1-6 6h-468a6 6 0 0 1-6-6z" fill="#fff"/><path d="M522.05 863.16l.42-.7.6-.7.62-.52m1.46-.82l.3-.13.92-.23h1.5m2 0h3m1.98 0h3m2 0h2.98m2 0h3m2 0h2.98m2 0h3m2 0h2.98m2 0h3m1.98 0h3m2 0h3m1.98 0h3m2 0h2.98m2 0h3m2 0h2.98m2 0h3m1.98 0h3m2 0h3m1.98 0h3m2 0h2.98m2 0h3m2 0h2.98m2 0h3m2 0h2.98m2 0l3-.02m1.98 0h3m2 0h3m1.98 0h3m2 0h2.98m2 0h3m2 0h2.98m2 0h3m1.98 0h3m2 0h3m1.98 0h3m2 0h2.98m2 0h3m2 0h2.98m2 0h3m2 0h2.98m2 0h3m1.98 0h3m2 0h2.98m2 0h3m2 0h2.98m2 0h3m2 0h2.98m2 0h3m1.98 0h3m2 0h3m1.98-.02h3m2 0h2.98m2 0h3m2 0h2.98m2 0h3m1.98 0h3m2 0h3m1.98 0h3m2 0h2.98m2 0h3m2 0h2.98m2 0h3m2 0h2.98m2 0h3m1.98 0h3m2 0h2.98m2 0h3m2 0h2.98m2 0h3m2 0h2.98m2 0h3m1.98 0h3m2 0h3m1.98 0h3m2 0h2.98m2 0l3-.02m2 0H907m2 0h3m1.98 0h3m2 0h3m1.98 0h3m2 0h2.98m2 0h3m2 0h2.98m2 0h3m2 0h2.98m2 0h3m1.98 0h3m2 0h3m1.98 0h3m2 0h2.98m2 0h3m2 0h2.98m2 0h3m1.98 0h1.5l.94.07.32.08m1.6.58l.67.42.7.6.53.62m.82 1.47l.13.3.22.92v1.5m0 2v2.98m0 2v3m0 1.98v3m0 2v2.98m0 2v2.98m0 2v3m0 1.98v3m0 2v2.98m0 2v2.98m0 2v3m0 1.98v3m0 2v2.98m0 2v3m0 1.98v3m0 1.98v3m0 2v2.98m0 2v3m0 1.98l.02 3m0 2v2.98m0 2v2.98m0 2v3m0 1.98v3m0 2v2.98m0 2v2.98m0 2v3m0 1.98v3m0 2v2.98m0 2v2.98m0 2v3m0 1.98v3m0 2v2.98m0 2v3m0 1.98v3m0 1.98v3m0 2v2.98m0 2v3m0 1.98l.02 3m0 2v2.98m0 2v2.98m0 2v3m0 1.98v3m0 2v2.98m0 2v2.98m0 2v3m0 1.98v3m0 2v2.98m0 2v2.98m0 2v3m0 1.98v3m0 2v2.98m0 2v3m0 1.98v3m0 1.98v3m0 2v2.98m0 2v3m0 1.98v3m0 2v2.98m0 2v2.98m0 2v3m0 1.98v3m0 2v2.98m0 2v2.98m0 2v3m0 1.98v3m0 2v2.98m0 2v2.98m.02 2v3m0 1.98v3m0 2v2.98m0 2v2.98m0 2v3m0 1.98v1.5l-.07.94-.08.32m-.58 1.58l-.43.7-.6.7-.62.52m-1.47.82l-.3.13-.92.23h-1.5m-2 0h-3m-1.98 0h-3m-2 0h-2.98m-2 0h-3m-2 0h-2.98m-2 0h-3m-1.98 0h-3m-2 0h-3m-1.98 0h-3m-2 0h-2.98m-2 0h-3m-2 0h-2.98m-2 0h-3m-2 0h-2.98m-2 0h-3m-1.98 0h-3m-2 0h-3m-1.98 0h-3m-2 0H900m-2 0h-3m-2 0H890m-2 0h-3m-1.98 0h-3m-2 0h-3m-1.98.02h-3m-2 0h-2.98m-2 0h-3m-2 0h-2.98m-2 0h-3m-2 0h-2.98m-2 0h-3m-1.98 0h-3m-2 0h-2.98m-2 0h-3m-2 0h-2.98m-2 0h-3m-2 0h-2.98m-2 0h-3m-1.98 0h-3m-2 0h-3m-1.98 0h-3m-2 0h-2.98m-2 0h-3m-2 0h-2.98m-2 0h-3m-1.98 0h-3m-2 0h-3m-1.98 0h-3m-2 0h-2.98m-2 0l-3 .02m-2 0h-2.98m-2 0h-3m-2 0h-2.98m-2 0h-3m-1.98 0h-3m-2 0h-2.98m-2 0h-3m-2 0h-2.98m-2 0h-3m-2 0h-2.98m-2 0h-3m-1.98 0h-3m-2 0h-3m-1.98 0h-3m-2 0h-2.98m-2 0h-3m-2 0h-2.98m-2 0h-3m-1.98 0h-3m-2 0h-3m-1.98 0h-3m-2 0h-2.98m-2 0h-3m-2 0h-2.98m-2 0l-3 .02m-2 0h-2.98m-2 0h-3m-1.98 0h-3m-2 0h-3m-1.98 0h-3m-2 0h-2.98m-2 0h-3m-2 0h-2.98m-2 0h-3m-1.98 0h-3m-2 0h-3m-1.98 0h-3m-2 0h-2.98m-2 0h-3m-2 0h-2.98m-2 0h-3m-2 0h-2.98m-2 0h-3m-1.98 0h-1.5l-.94-.07-.32-.08m-1.58-.58l-.7-.42-.7-.6-.52-.62m-.82-1.47l-.13-.3-.2-.92v-1.5m0-2v-2.98m0-2v-3m0-1.98v-3m0-2v-2.98m0-2v-2.98m0-2v-3m0-1.98v-3m0-2v-2.98m0-2v-2.98m-.02-2v-3m0-1.98v-3m0-2v-2.98m0-2v-3m0-1.98v-3m0-1.98v-3m0-2v-2.98m0-2v-3m0-1.98v-3m0-2v-2.98m0-2v-2.98m0-2v-3m0-1.98v-3m0-2v-2.98m0-2v-2.98m0-2v-3m0-1.98v-3m0-2v-2.98m0-2v-2.98m0-2l-.02-3m0-1.98v-3m0-2v-2.98m0-2v-3m0-1.98v-3m0-1.98v-3m0-2v-2.98m0-2v-3m0-1.98v-3m0-2V1034m0-2v-2.98m0-2v-3m0-1.98v-3m0-2v-2.98m0-2v-2.98m0-2v-3m0-1.98v-3m0-2v-2.98m0-2v-2.98m0-2v-3m-.02-1.98v-3m0-2v-2.98m0-2v-3m0-1.98v-3m0-1.98v-3m0-2v-2.98m0-2v-3m0-1.98v-3m0-2v-2.98m0-2v-2.98m0-2v-3m0-1.98v-3m0-2v-2.98m0-2v-2.98m0-2v-3m0-1.98v-3m0-2v-2.98m0-2v-2.98m0-2v-3m0-1.98l-.02-3m0-2v-2.98m0-2v-3m0-1.98v-3m0-1.98V866l.07-.94.07-.32" stroke="#3a414a" fill="none"/><use xlink:href="#h" transform="matrix(1,0,0,1,533.3207547169811,871.9999999999999) translate(0 17.7734375)"/><use xlink:href="#i" transform="matrix(1,0,0,1,533.3207547169811,871.9999999999999) translate(0 36.44444444444444)"/><use xlink:href="#j" transform="matrix(1,0,0,1,533.3207547169811,871.9999999999999) translate(103.60493827160491 36.44444444444444)"/><use xlink:href="#k" transform="matrix(1,0,0,1,533.3207547169811,871.9999999999999) translate(155.85185185185182 36.44444444444444)"/><path d="M40.72 166a6 6 0 0 1 6-6h408a6 6 0 0 1 6 6v208a6 6 0 0 1-6 6h-408a6 6 0 0 1-6-6z" stroke="#3a414a" fill="#fff"/><use xlink:href="#l" transform="matrix(1,0,0,1,52.71513214225743,172) translate(0 17.7734375)"/><path d="M711.32 406a6 6 0 0 1 6-6h88a6 6 0 0 1 6 6v68a6 6 0 0 1-6 6h-88a6 6 0 0 1-6-6z" stroke="#3a414a" fill="#fff"/><use xlink:href="#m" transform="matrix(1,0,0,1,723.3207547169811,412) translate(-2.0065104166666714 34.662326388888886)"/><path d="M581.32 927.67a6 6 0 0 1 6-6h386.82a6 6 0 0 1 6 6v265.5a6 6 0 0 1-6 6H587.32a6 6 0 0 1-6-6z" stroke="#3a414a" fill="#fff"/><use xlink:href="#n" transform="matrix(1,0,0,1,593.3207547169814,933.6666385488587) translate(134.1579861111111 17.7734375)"/><path d="M848.03 340.8l1 .23.95.4.87.52.78.66.66.8.52.86.4.94.23 1 .08 1V859h-1v-511.8l-.07-.87-.2-.84-.33-.78-.45-.74-.56-.66-.66-.56-.73-.45-.8-.32-.82-.2-370.3-.07v-1z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M853.53 859.52h-1v-.5h1z" fill="#3a414a"/><path d="M853.55 859.55h-1.05v-.57h1.05zm-1-.52v.47h.95v-.47z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M477.1 345.85l-14.28-4.64 14.27-4.62z" fill="#3a414a"/><path d="M477.6 346.53l-16.4-5.32 16.4-5.3zm-13.16-5.32l12.15 3.96v-7.9z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><use xlink:href="#o" transform="matrix(1,0,0,1,605.7075530414215,319.43372547540986) translate(0 14.21875)"/><path d="M760.27 623.13h-1v-87.8h1zm0-123.34h-1v-18.84h1z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M760.27 480.98h-1v-.5l1-.02z" fill="#3a414a"/><path d="M760.3 481h-1.05v-.56h1.05zm-1-.5v.45h.95v-.46z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M759.77 637.9l-4.63-14.27h9.27z" fill="#3a414a"/><path d="M759.77 639.5l-5.32-16.37h10.65zm-3.94-15.37l3.94 12.15 3.95-12.15z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><use xlink:href="#p" transform="matrix(1,0,0,1,695.7640199244275,499.78645014560215) translate(0 14.21875)"/><use xlink:href="#q" transform="matrix(1,0,0,1,695.7640199244275,499.78645014560215) translate(0 31.99652777777778)"/><use xlink:href="#r" transform="matrix(1,0,0,1,695.7640199244275,499.78645014560215) translate(53.34201388888889 31.99652777777778)"/><path d="M111.74 623.15h-1V407.72h1zm0-233.2h-1v-8.96h1z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M111.74 381h-1v-.5h1z" fill="#3a414a"/><path d="M111.76 381.03h-1.05v-.57h1.06zm-1-.52v.48h.95v-.47z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M111.24 637.92l-4.64-14.27h9.28z" fill="#3a414a"/><path d="M111.24 639.53l-5.32-16.38h10.64zm-3.95-15.38l3.94 12.15 3.95-12.15z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><use xlink:href="#s" transform="matrix(1,0,0,1,52.56364936376542,389.94157280351783) translate(0 14.21875)"/><path d="M46.93 642.14a1.1 1.1 0 0 1 .4-2.14h408a1.1 1.1 0 0 1 .38 2.14l-198.77 75.72a15.75 15.75 0 0 1-11.22 0z" stroke="#3a414a" fill="#fff"/><use xlink:href="#t" transform="matrix(1,0,0,1,46.32075471698127,645) translate(124.99197916666664 35.2734375)"/><use xlink:href="#u" transform="matrix(1,0,0,1,46.32075471698127,645) translate(205.005 35.2734375)"/><path d="M195.4 510.13l-.1.1-.1 112.9h-1l.1-113.36.1-.1V503h1zm0-24.9h-1V461.7h1zm0-59.1h-1v-45.16h1z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M195.4 381h-1v-.53h1z" fill="#3a414a"/><path d="M195.44 381h-1.05v-.55h1.04zm-1-.5v.46h.95v-.46z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M194.7 637.9l-4.62-14.26h9.27z" fill="#3a414a"/><path d="M194.7 639.53l-5.3-16.4h10.64zm-3.93-15.4l3.94 12.16 3.96-12.16z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><use xlink:href="#v" transform="matrix(1,0,0,1,136.23584890796755,426.1433035939898) translate(0 14.21875)"/><use xlink:href="#w" transform="matrix(1,0,0,1,136.23584890796755,426.1433035939898) translate(64.01041666666667 14.21875)"/><use xlink:href="#x" transform="matrix(1,0,0,1,136.23584890796755,426.1433035939898) translate(0 31.99652777777778)"/><path d="M251.22 623.14h-1v-84.1h1zm0-101.88h-1V503h1zm0-36.03h-1V461.7h1zm0-59.1h-1v-45.17h1z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M251.22 380.98h-1v-.52h1z" fill="#3a414a"/><path d="M251.24 381h-1.05v-.56h1.04zm-1-.5v.45h.95v-.46z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M250.72 637.9l-4.64-14.26h9.27z" fill="#3a414a"/><path d="M250.72 639.52l-5.33-16.38h10.64zm-3.95-15.38l3.95 12.14 3.94-12.14z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><use xlink:href="#y" transform="matrix(1,0,0,1,170.70211130892412,485.22890142164107) translate(0 14.21875)"/><path d="M336.96 623.13h-1l-.03-84.1h1zm-.28-113.54l.24.1v11.56h-1v-10.9l-.08-.04-.16-.38v-129h1z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M336.68 380.96h-1v-.5h1z" fill="#3a414a"/><path d="M336.7 381h-1.05v-.58h1.05zm-1-.53v.47h.95v-.47z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M336.46 637.9l-4.63-14.27h9.27z" fill="#3a414a"/><path d="M336.46 639.5l-5.32-16.37h10.65zm-3.94-15.37l3.94 12.15 3.95-12.15z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><use xlink:href="#z" transform="matrix(1,0,0,1,245.78291974315843,521.2551748750891) translate(0 14.21875)"/><use xlink:href="#A" transform="matrix(1,0,0,1,245.78291974315843,521.2551748750891) translate(96.015625 14.21875)"/><path d="M409.94 623.12h-1v-42h1zm0-59.8h-1v-24.3h1zm0-42.06h-1V380.93h1z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M409.94 380.95h-1v-.52h1z" fill="#3a414a"/><path d="M409.97 380.97h-1.05v-.56h1.05zm-1-.5v.45h.95v-.46z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M409.44 637.9l-4.63-14.28h9.28z" fill="#3a414a"/><path d="M409.44 639.5l-5.32-16.38h10.65zm-3.94-15.38l3.94 12.15 3.95-12.15z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><use xlink:href="#B" transform="matrix(1,0,0,1,345.43353593558334,563.3348359357309) translate(0 14.21875)"/><path d="M435.34 748.96l1 .08 1 .24.93.4.87.52.78.67.66.77.53.87.4.95.25 1 .07 8.7h-1l-.07-8.56-.2-.84-.33-.8-.45-.73-.56-.66-.65-.56-.73-.44-.8-.33-.84-.2-.88-.07h-35.64v-1zm-183.52-5.52l.07.88.2.84.32.8.45.73.56.65.66.56.72.46.8.33.82.2h36.54v1h-36.66l-1-.25-.95-.4-.87-.53-.78-.66-.66-.78-.53-.87-.4-.93-.23-1-.08-1V719.9h1z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M251.32 719.4l.5-.02v.53h-1v-.52z" fill="#3a414a"/><path d="M251.32 719.37l.53-.02v.58h-1.05v-.58zm-.47.5h.95v-.47l-.48.02-.47-.02z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M441.32 777.9l-4.63-14.25h9.26z" fill="#3a414a"/><path d="M441.32 779.53L436 763.15h10.64zm-3.95-15.38l3.95 12.14 3.95-12.15z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><use xlink:href="#C" transform="matrix(1,0,0,1,292.97873378469797,740.5739361126523) translate(0 14.21875)"/><path d="M586.3 643.33a1.82 1.82 0 0 1 1.02-3.33h228a1.82 1.82 0 0 1 1 3.33l-110 73.34a9 9 0 0 1-10 0z" stroke="#3a414a" fill="#fff"/><use xlink:href="#D" transform="matrix(1,0,0,1,586.3207547169812,645) translate(61.66298611111112 35.2734375)"/><use xlink:href="#E" transform="matrix(1,0,0,1,586.3207547169812,645) translate(115.005 35.2734375)"/><path d="M658.92 459.5l1 .08 1 .24.93.4.87.52.78.66.66.78.53.87.38.94.24 1 .08 158.15h-1l-.08-158.03-.2-.82-.32-.8-.45-.73-.56-.66-.67-.55-.74-.45-.8-.33-.84-.2-.88-.07h-33.06v-1zm-212.74-5.52l.07.88.2.84.34.8.44.73.56.66.65.55.74.45.8.33.8.2h25.66v1H450.7l-1.02-.25-.95-.4-.87-.52-.77-.66-.68-.78-.53-.87-.4-.94-.24-.98-.08-1v-73.1h1z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M446.18 380.94h-1v-.5h1z" fill="#3a414a"/><path d="M446.2 380.97h-1.04v-.57h1.05zm-1-.52v.47h.96v-.47z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M664.9 637.92l-4.64-14.26h9.27z" fill="#3a414a"/><path d="M664.9 639.54l-5.33-16.38h10.65zm-3.95-15.38l3.95 12.14 3.95-12.14z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><use xlink:href="#p" transform="matrix(1,0,0,1,476.4577496728524,442.22222222222223) translate(0 14.21875)"/><use xlink:href="#q" transform="matrix(1,0,0,1,476.4577496728524,442.22222222222223) translate(0 31.99652777777778)"/><use xlink:href="#F" transform="matrix(1,0,0,1,476.4577496728524,442.22222222222223) translate(53.34201388888889 31.99652777777778)"/><path d="M326.3 783.33a1.82 1.82 0 0 1 1.02-3.33h228a1.82 1.82 0 0 1 1 3.33l-110 73.34a9 9 0 0 1-10 0z" stroke="#3a414a" fill="#fff"/><use xlink:href="#G" transform="matrix(1,0,0,1,326.32075471698124,785) translate(48.327482638888874 17.7734375)"/><use xlink:href="#H" transform="matrix(1,0,0,1,326.32075471698124,785) translate(81.66624131944444 39.99565972222222)"/><path d="M459.3 749.6h-11.96l-.88.08-.84.2-.8.33-.73.46-.67.56-.56.65-.45.74-.33.8-.2.83-.08 8.92h-1l.08-9.04.24-1 .4-.94.52-.87.66-.8.78-.65.87-.54.94-.38 1-.23 1-.1h12zm242.52-6.47l-.08 1-.24 1-.4.93-.52.87-.66.77-.78.67-.87.53-.94.4-1 .23h-13v-1h12.87l.82-.2.8-.32.73-.44.66-.57.57-.66.45-.74.33-.8.2-.83.07-.88v-23.92h1z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M701.32 718.68l.5-.03v.55h-1v-.55z" fill="#3a414a"/><path d="M701.32 718.66l.53-.03v.6h-1.05v-.6zm-.47.5h.95v-.48l-.48.03-.47-.02z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M441.32 777.9l-4.63-14.25h9.26z" fill="#3a414a"/><path d="M441.32 779.53L436 763.15h10.64zm-3.95-15.38l3.95 12.14 3.95-12.15z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><use xlink:href="#I" transform="matrix(1,0,0,1,459.3025169306053,740.2179472987657) translate(0 14.21875)"/><path d="M441.82 1054.4l.07.88.2.84.32.8.45.73.56.65.66.56.72.46.8.33.82.2 118.03.07v1l-118.15-.08-1-.24-.95-.4-.87-.52-.78-.67-.66-.76-.53-.87-.4-.94-.23-1-.08-1v-102h1zm0-119.76h-1v-75.46h1z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M441.32 858.68l.5-.03v.55h-1v-.55z" fill="#3a414a"/><path d="M441.32 858.66l.53-.03v.6h-1.05v-.6zm-.47.5h.95v-.48l-.48.03-.47-.02z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M579.24 1060.42l-14.27 4.63v-9.27z" fill="#3a414a"/><path d="M580.86 1060.42l-16.4 5.32v-10.65zm-15.4 3.94l12.16-3.94-12.15-3.95z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><use xlink:href="#J" transform="matrix(1,0,0,1,371.9761366614257,934.6383517181883) translate(0 14.21875)"/><path d="M1473.32 1052v-12l142.02.48a5.54 5.54 0 0 1 5.98 5.52v96a6 6 0 0 1-6 6h-5.94a.06.06 0 0 1-.06-.06V1052h-136z" stroke="#3a414a" fill="#fff"/><path d="M1461.32 1058a6 6 0 0 1 6-6h136a6 6 0 0 1 6 6v96a6 6 0 0 1-6 6h-136a6 6 0 0 1-6-6z" stroke="#3a414a" fill="#fff"/><use xlink:href="#K" transform="matrix(1,0,0,1,1461.3207547169814,1052) translate(7.327482638888876 66.5234375)"/><path d="M715.2 1043.46v-13.89l240.13.34a5.67 5.67 0 0 1 6 5.66v112.88a6 6 0 0 1-6 6h-7.8a.07.07 0 0 1-.08-.07v-110.94H715.2z" stroke="#3a414a" fill="#fff"/><path d="M701.32 1049.46a6 6 0 0 1 6-6h234.13a6 6 0 0 1 6 6v112.87a6 6 0 0 1-6 6H707.32a6 6 0 0 1-6-6z" stroke="#3a414a" fill="#fff"/><use xlink:href="#L" transform="matrix(1,0,0,1,701.3207547169812,1043.4582496828552) translate(16.32097222222219 74.2421875)"/><path d="M1444.47 1099.5v1l-143.57-.02v-1zm-482.18-.04v-1h103.9v1z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M962.3 1099.46h-.5v-1h.5z" fill="#3a414a"/><path d="M962.33 1099.48h-.57v-1.05h.57zm-.52-1v.95h.48v-.95z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M1459.23 1100l-14.26 4.64v-9.28z" fill="#3a414a"/><path d="M1460.85 1100l-16.38 5.32v-10.64zm-15.38 3.95l12.15-3.95-12.15-3.95z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><use xlink:href="#M" transform="matrix(1,0,0,1,1066.196295057712,1054.5136498872796) translate(0 14.21875)"/><use xlink:href="#N" transform="matrix(1,0,0,1,1066.196295057712,1054.5136498872796) translate(0 31.99652777777778)"/><use xlink:href="#O" transform="matrix(1,0,0,1,1066.196295057712,1054.5136498872796) translate(21.336805555555557 31.99652777777778)"/><use xlink:href="#P" transform="matrix(1,0,0,1,1066.196295057712,1054.5136498872796) translate(0 49.77430555555556)"/><use xlink:href="#Q" transform="matrix(1,0,0,1,1066.196295057712,1054.5136498872796) translate(21.336805555555557 49.77430555555556)"/><use xlink:href="#P" transform="matrix(1,0,0,1,1066.196295057712,1054.5136498872796) translate(0 67.55208333333334)"/><use xlink:href="#R" transform="matrix(1,0,0,1,1066.196295057712,1054.5136498872796) translate(21.336805555555557 67.55208333333334)"/><use xlink:href="#P" transform="matrix(1,0,0,1,1066.196295057712,1054.5136498872796) translate(0 85.32986111111111)"/><use xlink:href="#S" transform="matrix(1,0,0,1,1066.196295057712,1054.5136498872796) translate(21.336805555555557 85.32986111111111)"/><path d="M56.94 599.12l1 .24.93.4.87.52.78.66.66.78.54.87.4.93.23 1 .07 18.63h-1l-.07-18.5-.2-.82-.33-.8-.45-.73-.56-.65-.64-.56-.74-.46-.8-.33-.84-.2-.88-.06-19.46.07-.82.2-.8.34-.73.45-.67.55-.56.66-.45.74-.33.8-.2.84-.08.88.07 639.32.2.82.32.8.45.73.56.66.66.55.72.45.8.33.84.2.88.07h68.86v1H37.3l-1-.08-1-.24-.93-.4-.87-.52-.78-.66-.66-.78-.53-.87-.4-.94-.24-1-.08-639.48.08-1 .24-1 .4-.93.52-.88.66-.78.78-.66.87-.53.94-.4 1.02-.23 19.62-.08zm1403.43 520.57h-93.03l-.88.06-.84.2-.8.34-.73.45-.67.56-.56.66-.45.74-.33.8-.2.82-.08 119.7-.08 1-.24 1-.4.93-.52.87-.66.78-.78.66-.87.53-.94.38-1 .25-1068.77.06v-1l1068.64-.07.82-.2.8-.33.73-.45.66-.56.57-.67.45-.73.33-.8.2-.84.07-.88.07-119.78.24-1 .4-.96.52-.87.66-.77.78-.67.87-.53.94-.4 1-.23 1-.08h93.07z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M1460.87 1119.7h-.52v-1h.52z" fill="#3a414a"/><path d="M1460.9 1119.72h-.57v-1.05h.56zm-.52-1v.95h.46v-.95z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M61.92 637.92l-4.63-14.26h9.26z" fill="#3a414a"/><path d="M61.92 639.54l-5.32-16.38h10.65zm-3.94-15.38l3.94 12.14 3.95-12.14z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><use xlink:href="#T" transform="matrix(1,0,0,1,106.20197166394996,1241.111111111111) translate(0 14.21875)"/><path d="M1541.32 1160.96v33.5a6 6 0 0 0 6 6h30.74a6 6 0 0 0 6-6v-17.64" stroke="#3a414a" fill="none"/><path d="M1541.82 1160.97h-1v-.5h1z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M1584.06 1162.05l4.63 14.27h-9.28z" stroke="#3a414a" fill="#3a414a"/><use xlink:href="#U" transform="matrix(1,0,0,1,1494.6887752642865,1209.095290581674) translate(0 10.664062499999998)"/><use xlink:href="#V" transform="matrix(1,0,0,1,1494.6887752642865,1209.095290581674) translate(80.0130208333333 10.664062499999998)"/><path d="M41.32 46a6 6 0 0 1 6-6h408a6 6 0 0 1 6 6v48a6 6 0 0 1-6 6h-408a6 6 0 0 1-6-6z" stroke="#3a414a" fill="#fff"/><use xlink:href="#W" transform="matrix(1,0,0,1,53.32075471698127,52) translate(157.99348958333331 24.5234375)"/><path d="M76.96 159.07h-1v-24.93h1z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M76.96 159.57h-1v-.5h1z" fill="#3a414a"/><path d="M77 159.6h-1.06v-.57H77zm-1-.52v.46h.94v-.46z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M80.53 116.36h-9.26l4.63-14.25z" fill="#3a414a"/><path d="M81.05 116.36h-10.3l5.15-15.87zm-9.1-.48h7.9l-3.95-12.15z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><use xlink:href="#o" transform="matrix(1,0,0,1,17.2201838707646,116.36064293372232) translate(0 14.21875)"/><path d="M260 186a6 6 0 0 1 6-6h44c27.6 0 50 22.4 50 50s-22.4 50-50 50h-44a6 6 0 0 1-6-6z" stroke="#3a414a" fill="#fff"/><use xlink:href="#X" transform="matrix(1,0,0,1,265,185) translate(4.99348958333335 35.9765625)"/><use xlink:href="#Y" transform="matrix(1,0,0,1,265,185) translate(20.99609375000001 49.30989583333333)"/><use xlink:href="#Z" transform="matrix(1,0,0,1,265,185) translate(16.995442708333346 62.64322916666666)"/><path d="M226.04 223.98l.07.88.2.84.34.8.45.73.55.66.66.55.75.45.8.33.8.2 12.5.07v1l-12.6-.07-1.02-.25-.94-.4-.88-.52-.77-.66-.67-.78-.53-.87-.4-.94-.23-.98-.08-1v-88.68h1zm0-101.98h-1v-21.03h1z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M226.04 100.98h-1v-.5h1z" fill="#3a414a"/><path d="M226.07 101h-1.05v-.56h1.05zm-1-.5v.46h.95v-.47z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M257.92 230l-14.27 4.64v-9.28z" fill="#3a414a"/><path d="M259.54 230l-16.4 5.32v-10.64zm-15.4 3.95L256.3 230l-12.15-3.95z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><g><use xlink:href="#aa" transform="matrix(1,0,0,1,165.5330708680748,122.00259024015914) translate(0 10.6640625)"/><use xlink:href="#ab" transform="matrix(1,0,0,1,165.5330708680748,122.00259024015914) translate(96.01562499999999 10.6640625)"/></g><path d="M145.68 255.97h-28.42l-.88.07-.84.2-.8.33-.73.45-.65.56-.56.65-.46.74-.33.8-.2.82-.06 103.5h-1l.07-103.63.26-1 .4-.95.52-.87.66-.78.78-.66.87-.53.93-.4 1-.22 1-.08h28.45zm113.38 0h-102.7v-1h102.7z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M259.56 255.97h-.52v-1h.52z" fill="#3a414a"/><path d="M259.58 256h-.56v-1.06h.56zm-.5-1v.94h.45V255z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M111.24 378.87l-4.64-14.27h9.28z" fill="#3a414a"/><path d="M111.24 380.5l-5.32-16.4h10.64zm-3.95-15.4l3.94 12.15 3.95-12.15z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><g><use xlink:href="#ac" transform="matrix(1,0,0,1,145.67699387533187,246.57798507000678) translate(0 14.21875)"/></g><path d="M407.55 225l-.25 1-.4.95-.52.87-.66.78-.78.66-.87.53-.94.38-1 .24-1 .08H361v-1h40.1l.88-.07.84-.2.8-.33.73-.45.66-.56.57-.67.45-.73.33-.8.2-.82.06-88.78h1zm.07-108.18v5.94h-1v-5.94z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M361 230.5h-.52l.02-.5-.02-.5h.53z" fill="#3a414a"/><path d="M361.04 230.52h-.6l.04-.52-.02-.53h.58zm-.53-1l.03.48-.03.47h.5v-.95z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M411.75 116.32h-9.27l4.64-14.27z" fill="#3a414a"/><path d="M412.44 116.82H401.8l5.32-16.4zm-9.27-1h7.9l-3.95-12.15z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><g><use xlink:href="#ad" transform="matrix(1,0,0,1,319.10479556491623,122.76319576840983) translate(0 10.6640625)"/><use xlink:href="#ae" transform="matrix(1,0,0,1,319.10479556491623,122.76319576840983) translate(72.01171875 10.6640625)"/><use xlink:href="#af" transform="matrix(1,0,0,1,319.10479556491623,122.76319576840983) translate(152.02473958333331 10.6640625)"/></g><path d="M920.32 261.9H365.5" stroke="#3a414a" fill="none"/><path d="M920.82 261.87l.02.53h-.53v-1h.58z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M350.73 261.9l14.27-4.64v9.27z" stroke="#3a414a" fill="#3a414a"/><path d="M941.82 859h-1V330.1h1zm0-546.67h-1v-13.55h1z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M941.82 859.5h-1v-.5h1z" fill="#3a414a"/><path d="M941.85 859.53h-1.05v-.56h1.05zm-1-.5v.45h.95v-.46z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M945.96 298.28h-9.27l4.62-14.26z" fill="#3a414a"/><path d="M946.64 298.78H936l5.32-16.38zm-9.27-1h7.9l-3.95-12.15z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><g><use xlink:href="#ag" transform="matrix(1,0,0,1,823.9683241614256,312.33076445396125) translate(0 14.21875)"/><use xlink:href="#ah" transform="matrix(1,0,0,1,823.9683241614256,312.33076445396125) translate(85.34722222222223 14.21875)"/><use xlink:href="#ai" transform="matrix(1,0,0,1,823.9683241614256,312.33076445396125) translate(202.69965277777777 14.21875)"/></g><path d="M1686.32 261.47l1 .24.95.4.87.54.78.66.66.77.53.87.4.95.24.98.08 1-.07 827.12-.25 1-.4.95-.52.87-.66.78-.78.66-.87.53-.94.38-1 .24-1 .08h-63.04v-1h63l.88-.07.84-.2.8-.33.73-.45.66-.56.57-.67.45-.73.33-.8.2-.82.07-826.96-.07-.88-.2-.84-.33-.8-.45-.74-.56-.65-.65-.55-.73-.45-.8-.33-.82-.2h-132.74v-1zm-602.27-.06v1H978.2v-1z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M1622.3 1100.5h-.5v-1h.5z" fill="#3a414a"/><path d="M1622.33 1100.52h-.57v-1.05h.57zm-.52-1v.95h.48v-.95z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><path d="M977.7 266.53l-14.26-4.63 14.26-4.64z" fill="#3a414a"/><path d="M978.2 267.22l-16.38-5.32 16.38-5.33zm-13.14-5.32l12.14 3.94v-7.9z" stroke="#3a414a" stroke-width=".05" fill="#3a414a"/><g><use xlink:href="#aj" transform="matrix(1,0,0,1,1084.0503827143218,253.00695784311793) translate(0 14.21875)"/><use xlink:href="#ak" transform="matrix(1,0,0,1,1084.0503827143218,253.00695784311793) translate(106.68402777777777 14.21875)"/><use xlink:href="#al" transform="matrix(1,0,0,1,1084.0503827143218,253.00695784311793) translate(192.03125 14.21875)"/><use xlink:href="#am" transform="matrix(1,0,0,1,1084.0503827143218,253.00695784311793) translate(277.37847222222223 14.21875)"/><use xlink:href="#an" transform="matrix(1,0,0,1,1084.0503827143218,253.00695784311793) translate(320.05208333333337 14.21875)"/><use xlink:href="#ai" transform="matrix(1,0,0,1,1084.0503827143218,253.00695784311793) translate(437.4045138888889 14.21875)"/></g><path d="M961.32 261.9c0 11.04-8.95 20-20 20-11.04 0-20-8.96-20-20 0-11.05 8.96-20 20-20 11.05 0 20 8.95 20 20zm-40 0h40m-20-20v40" stroke="#3a414a" fill="#fff"/><defs><path fill="#3a414a" d="M100-194c63 0 86 42 84 106H49c0 40 14 67 53 68 26 1 43-12 49-29l28 8c-11 28-37 45-77 45C44 4 14-33 15-96c1-61 26-98 85-98zm52 81c6-60-76-77-97-28-3 7-6 17-6 28h103" id="ao"/><path fill="#3a414a" d="M141-36C126-15 110 5 73 4 37 3 15-17 15-53c-1-64 63-63 125-63 3-35-9-54-41-54-24 1-41 7-42 31l-33-3c5-37 33-52 76-52 45 0 72 20 72 64v82c-1 20 7 32 28 27v20c-31 9-61-2-59-35zM48-53c0 20 12 33 32 33 41-3 63-29 60-74-43 2-92-5-92 41" id="ap"/><path fill="#3a414a" d="M96-169c-40 0-48 33-48 73s9 75 48 75c24 0 41-14 43-38l32 2c-6 37-31 61-74 61-59 0-76-41-82-99-10-93 101-131 147-64 4 7 5 14 7 22l-32 3c-4-21-16-35-41-35" id="aq"/><path fill="#3a414a" d="M106-169C34-169 62-67 57 0H25v-261h32l-1 103c12-21 28-36 61-36 89 0 53 116 60 194h-32v-121c2-32-8-49-39-48" id="ar"/><g id="a"><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#ao"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,12.345679012345679,0)" xlink:href="#ap"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,24.691358024691358,0)" xlink:href="#aq"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,35.80246913580247,0)" xlink:href="#ar"/></g><path fill="#3a414a" d="M114-163C36-179 61-72 57 0H25l-1-190h30c1 12-1 29 2 39 6-27 23-49 58-41v29" id="as"/><path fill="#3a414a" d="M84 4C-5 8 30-112 23-190h32v120c0 31 7 50 39 49 72-2 45-101 50-169h31l1 190h-30c-1-10 1-25-2-33-11 22-28 36-60 37" id="at"/><path fill="#3a414a" d="M117-194c89-4 53 116 60 194h-32v-121c0-31-8-49-39-48C34-167 62-67 57 0H25l-1-190h30c1 10-1 24 2 32 11-22 29-35 61-36" id="au"/><g id="b"><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#as"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,7.345679012345679,0)" xlink:href="#at"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,19.691358024691358,0)" xlink:href="#au"/></g><path fill="#3a414a" d="M24 0v-261h32V0H24" id="av"/><path fill="#3a414a" d="M24-231v-30h32v30H24zM24 0v-190h32V0H24" id="aw"/><path fill="#3a414a" d="M108 0H70L1-190h34L89-25l56-165h34" id="ax"/><path fill="#3a414a" d="M135-143c-3-34-86-38-87 0 15 53 115 12 119 90S17 21 10-45l28-5c4 36 97 45 98 0-10-56-113-15-118-90-4-57 82-63 122-42 12 7 21 19 24 35" id="ay"/><g id="c"><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#av"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,4.876543209876543,0)" xlink:href="#aw"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,9.753086419753085,0)" xlink:href="#ax"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,20.864197530864196,0)" xlink:href="#ao"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,33.20987654320987,0)" xlink:href="#ay"/></g><g id="d"><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#aw"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,4.876543209876543,0)" xlink:href="#au"/></g><path fill="#3a414a" d="M59-47c-2 24 18 29 38 22v24C64 9 27 4 27-40v-127H5v-23h24l9-43h21v43h35v23H59v120" id="az"/><g id="e"><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#aw"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,4.876543209876543,0)" xlink:href="#az"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,11.049382716049383,0)" xlink:href="#ay"/></g><path fill="#3a414a" d="M100-194c62-1 85 37 85 99 1 63-27 99-86 99S16-35 15-95c0-66 28-99 85-99zM99-20c44 1 53-31 53-75 0-43-8-75-51-75s-53 32-53 75 10 74 51 75" id="aA"/><path fill="#3a414a" d="M206 0h-36l-40-164L89 0H53L-1-190h32L70-26l43-164h34l41 164 42-164h31" id="aB"/><g id="f"><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#aA"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,12.345679012345679,0)" xlink:href="#aB"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,28.333333333333332,0)" xlink:href="#au"/></g><path fill="#3a414a" d="M143 0L79-87 56-68V0H24v-261h32v163l83-92h37l-77 82L181 0h-38" id="aC"/><g id="g"><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,0,0)" xlink:href="#az"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,6.172839506172839,0)" xlink:href="#ap"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,18.51851851851852,0)" xlink:href="#ay"/><use transform="matrix(0.06172839506172839,0,0,0.06172839506172839,29.62962962962963,0)" xlink:href="#aC"/></g><path fill="#3a414a" d="M698-1104c312 3 392 244 392 558 0 315-82 566-392 566-169 0-277-65-331-184h-5c8 188 2 394 4 589H185V-858c0-76-1-156-6-224h175c6 52 9 120 10 178h4c58-122 150-202 330-200zm-49 991c225 0 255-203 255-433 0-225-32-419-253-419-236 0-285 192-285 441 0 237 53 411 283 411" id="aD"/><path fill="#3a414a" d="M839-1102c70 0 148 7 206 17v167c-112-18-268-36-363 15-129 69-208 203-208 395V0H294c-10-367 32-789-52-1082h171c21 75 41 161 48 250h5c67-152 152-270 373-270" id="aE"/><path fill="#3a414a" d="M615-1102c343 0 484 203 482 560-1 347-147 562-488 562-336 0-475-219-479-562-4-349 156-560 485-560zm-8 989c240 0 301-180 301-429 0-245-55-427-290-427-236 0-299 181-299 427 0 243 61 429 288 429" id="aF"/><path fill="#3a414a" d="M631 20c-350 0-501-215-501-562 0-355 162-560 502-560 250 0 399 118 446 323l-192 14c-23-124-109-196-262-196-242 0-305 171-305 415 1 245 61 427 304 427 151 0 248-77 267-215l190 12C1039-107 883 20 631 20" id="aG"/><path fill="#3a414a" d="M617-1102c355 0 481 238 477 599H322c5 222 84 388 301 388 144 0 244-59 284-166l158 45C1002-72 854 20 623 20c-342 0-490-220-490-568 0-346 151-554 484-554zm291 461c-18-192-90-328-289-328-194 0-287 128-295 328h584" id="aH"/><path fill="#3a414a" d="M873-819c-18-114-119-146-250-146-163 0-245 50-245 151 0 151 170 148 294 185 182 54 388 94 388 320 0 240-189 325-439 329-245 4-410-69-454-268l159-31c24 133 136 168 295 165 144-2 270-31 270-171 0-164-195-160-331-202-167-52-350-87-350-299 0-218 173-315 413-313 220 2 373 77 412 260" id="aI"/><path fill="#3a414a" d="M745-142h380V0H143v-142h422v-798H246v-142h499v940zM545-1292v-192h200v192H545" id="aJ"/><path fill="#3a414a" d="M706-1102c241 0 344 136 343 381V0H868v-695c1-168-57-273-220-268-190 6-283 138-283 336V0H185c-3-360 6-732-6-1082h170c4 54 7 126 8 185h3c63-121 164-204 346-205" id="aK"/><path fill="#3a414a" d="M1048-32c-2 300-135 456-433 456-222-1-358-88-400-267l184-25c22 99 100 157 222 156 184-2 248-125 248-315 0-64 3-133-2-194C807-100 706-13 524-12c-306 0-381-228-381-537 0-318 85-550 400-550 164 0 271 83 325 202h3c1-60 3-134 12-185h171c-13 339-4 702-6 1050zM585-145c210-8 284-178 284-406 0-192-52-331-177-392-33-16-69-22-104-22-223 2-259 184-259 414 0 229 31 415 256 406" id="aL"/><path fill="#3a414a" d="M-5 220v-96h1238v96H-5" id="aM"/><path fill="#3a414a" d="M682 16c-209 0-323-80-324-285v-671H190v-142h170l58-282h120v282h432v142H538v652c2 114 60 155 182 155 106 0 209-16 297-34v137C921-4 806 16 682 16" id="aN"/><path fill="#3a414a" d="M1000-272c3 95 12 159 101 161 21 0 41-3 59-7V-6c-44 10-86 16-139 16-141 2-191-84-197-217h-6C748-76 648 20 446 20c-207 0-318-120-318-322 0-266 194-348 454-354l236-4c12-191-40-305-222-305-140 0-220 47-232 172l-188-17c33-204 181-292 423-292 255 0 401 118 401 364v466zm-683-27c0 109 63 184 175 182 166-3 259-96 306-217 24-65 20-120 20-200-232 7-501-28-501 235" id="aO"/><path fill="#3a414a" d="M914 0L548-499l-132 98V0H236v-1484h180v927l475-525h211L663-617 1125 0H914" id="aP"/><g id="h"><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,0,0)" xlink:href="#aD"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,13.335503472222221,0)" xlink:href="#aE"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,26.671006944444443,0)" xlink:href="#aF"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,40.006510416666664,0)" xlink:href="#aG"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,53.342013888888886,0)" xlink:href="#aH"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,66.67751736111111,0)" xlink:href="#aI"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,80.01302083333334,0)" xlink:href="#aI"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,93.34852430555557,0)" xlink:href="#aJ"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,106.6840277777778,0)" xlink:href="#aK"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,120.01953125000003,0)" xlink:href="#aL"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,133.35503472222226,0)" xlink:href="#aM"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,146.69053819444449,0)" xlink:href="#aN"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,160.0260416666667,0)" xlink:href="#aO"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,173.36154513888894,0)" xlink:href="#aI"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,186.69704861111117,0)" xlink:href="#aP"/></g><path fill="#3a414a" d="M179-190L93 31C79 59 56 82 12 73V49c39 6 53-20 64-50L1-190h34L92-34l54-156h33" id="aQ"/><g id="i"><use transform="matrix(0.049382716049382706,0,0,0.049382716049382706,0,0)" xlink:href="#aq"/><use transform="matrix(0.049382716049382706,0,0,0.049382716049382706,8.888888888888888,0)" xlink:href="#aA"/><use transform="matrix(0.049382716049382706,0,0,0.049382716049382706,18.76543209876543,0)" xlink:href="#au"/><use transform="matrix(0.049382716049382706,0,0,0.049382716049382706,28.64197530864197,0)" xlink:href="#az"/><use transform="matrix(0.049382716049382706,0,0,0.049382716049382706,33.58024691358024,0)" xlink:href="#aw"/><use transform="matrix(0.049382716049382706,0,0,0.049382716049382706,37.481481481481474,0)" xlink:href="#au"/><use transform="matrix(0.049382716049382706,0,0,0.049382716049382706,47.35802469135801,0)" xlink:href="#at"/><use transform="matrix(0.049382716049382706,0,0,0.049382716049382706,57.234567901234556,0)" xlink:href="#aA"/><use transform="matrix(0.049382716049382706,0,0,0.049382716049382706,67.1111111111111,0)" xlink:href="#at"/><use transform="matrix(0.049382716049382706,0,0,0.049382716049382706,76.98765432098764,0)" xlink:href="#ay"/><use transform="matrix(0.049382716049382706,0,0,0.049382716049382706,85.87654320987653,0)" xlink:href="#av"/><use transform="matrix(0.049382716049382706,0,0,0.049382716049382706,89.77777777777776,0)" xlink:href="#aQ"/></g><path fill="#3a414a" d="M85-194c31 0 48 13 60 33l-1-100h32l1 261h-30c-2-10 0-23-3-31C134-8 116 4 85 4 32 4 16-35 15-94c0-66 23-100 70-100zm9 24c-40 0-46 34-46 75 0 40 6 74 45 74 42 0 51-32 51-76 0-42-9-74-50-73" id="aR"/><g id="j"><use transform="matrix(0.049382716049382706,0,0,0.049382716049382706,0,0)" xlink:href="#aR"/><use transform="matrix(0.049382716049382706,0,0,0.049382716049382706,9.87654320987654,0)" xlink:href="#as"/><use transform="matrix(0.049382716049382706,0,0,0.049382716049382706,15.75308641975308,0)" xlink:href="#aw"/><use transform="matrix(0.049382716049382706,0,0,0.049382716049382706,19.654320987654316,0)" xlink:href="#ax"/><use transform="matrix(0.049382716049382706,0,0,0.049382716049382706,28.543209876543205,0)" xlink:href="#ao"/><use transform="matrix(0.049382716049382706,0,0,0.049382716049382706,38.419753086419746,0)" xlink:href="#ay"/></g><path fill="#3a414a" d="M210-169c-67 3-38 105-44 169h-31v-121c0-29-5-50-35-48C34-165 62-65 56 0H25l-1-190h30c1 10-1 24 2 32 10-44 99-50 107 0 11-21 27-35 58-36 85-2 47 119 55 194h-31v-121c0-29-5-49-35-48" id="aS"/><g id="k"><use transform="matrix(0.049382716049382706,0,0,0.049382716049382706,0,0)" xlink:href="#ay"/><use transform="matrix(0.049382716049382706,0,0,0.049382716049382706,8.888888888888888,0)" xlink:href="#az"/><use transform="matrix(0.049382716049382706,0,0,0.049382716049382706,13.827160493827158,0)" xlink:href="#as"/><use transform="matrix(0.049382716049382706,0,0,0.049382716049382706,19.7037037037037,0)" xlink:href="#ao"/><use transform="matrix(0.049382716049382706,0,0,0.049382716049382706,29.58024691358024,0)" xlink:href="#ap"/><use transform="matrix(0.049382716049382706,0,0,0.049382716049382706,39.456790123456784,0)" xlink:href="#aS"/></g><path fill="#3a414a" d="M1018 0H810c-67-251-137-496-194-756C558-495 487-250 419 0H211L0-1349h189c48 393 110 772 142 1181 58-262 128-512 197-763h175c69 251 139 500 197 763 37-402 92-789 139-1181h189" id="aT"/><path fill="#3a414a" d="M839-1335c-182-6-269 67-259 253h491v142H580V0H400v-940H138v-142h262c-15-293 132-408 418-402 94 2 200 7 281 21v145c-75-10-177-14-260-17" id="aU"/><path fill="#3a414a" d="M736-142h380V0H134v-142h422v-1200H267v-142h469v1342" id="aV"/><path fill="#3a414a" d="M1018 0H814c-67-224-138-444-200-673C552-442 476-224 407 0H204L21-1082h178c43 310 105 601 126 933 54-225 128-425 193-638h193c63 212 134 415 185 638 22-336 90-622 136-933h176" id="aW"/><g id="l"><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,0,0)" xlink:href="#aT"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,13.335503472222221,0)" xlink:href="#aF"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,26.671006944444443,0)" xlink:href="#aE"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,40.006510416666664,0)" xlink:href="#aP"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,53.342013888888886,0)" xlink:href="#aU"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,66.67751736111111,0)" xlink:href="#aV"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,80.01302083333334,0)" xlink:href="#aF"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,93.34852430555557,0)" xlink:href="#aW"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,106.6840277777778,0)" xlink:href="#aI"/></g><path fill="#3a414a" d="M622-1349c296 4 497 117 497 404 0 282-193 424-485 431H353V0H162v-1349h460zm-15 684c195-3 320-88 320-277 0-184-129-255-328-254H353v531h254" id="aX"/><g id="m"><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,0,0)" xlink:href="#aX"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,13.335503472222221,0)" xlink:href="#aF"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,26.671006944444443,0)" xlink:href="#aV"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,40.006510416666664,0)" xlink:href="#aV"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,53.342013888888886,0)" xlink:href="#aH"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,66.67751736111111,0)" xlink:href="#aE"/></g><path fill="#3a414a" d="M385-1193v494h676v158H385V0H194v-1349h891v156H385" id="aY"/><path fill="#3a414a" d="M614-1226c-167 1-283 53-283 213 0 183 186 193 334 234 230 63 463 120 463 409 0 286-219 387-518 390C309 23 131-98 79-338l185-37c34 165 149 248 351 246 184-2 324-58 324-238 0-203-207-221-372-266-210-57-422-111-422-377 0-267 201-356 470-360 279-5 430 101 480 324l-188 33c-28-141-121-215-293-213" id="aZ"/><path fill="#3a414a" d="M904-1102c199 0 220 177 220 381V0H956v-686c-3-114 0-215-60-264-70-33-125-4-158 71-26 56-39 140-39 252V0H531v-686c-3-114-1-215-61-264-78-41-136 24-157 84-24 69-39 159-39 259V0H105c-3-360 6-732-6-1082h149c6 50 3 123 8 175 36-100 83-195 216-195 135 0 166 79 196 196 42-105 93-196 236-196" id="ba"/><g id="n"><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,0,0)" xlink:href="#aT"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,13.335503472222221,0)" xlink:href="#aY"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,26.671006944444443,0)" xlink:href="#aZ"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,40.006510416666664,0)" xlink:href="#aN"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,53.342013888888886,0)" xlink:href="#aE"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,66.67751736111111,0)" xlink:href="#aH"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,80.01302083333334,0)" xlink:href="#aO"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,93.34852430555557,0)" xlink:href="#ba"/></g><path fill="#333" d="M1229 0H935l-92-330H387L295 0H0l443-1349h344zM615-1167c-46 213-110 412-166 615h332c-56-204-119-401-166-615" id="bb"/><path fill="#333" d="M1109-360C1066-122 902 20 624 20c-347 0-514-209-514-555 0-353 168-567 518-567 270 0 425 136 473 361l-283 14c-16-106-75-183-196-182-75 0-130 31-165 93s-52 152-52 270c0 249 74 374 221 374 120 0 188-82 201-201" id="bc"/><path fill="#333" d="M711 13c-250 0-386-99-385-349l2-556H161v-190h181l88-282h176v282h385v190H606v530c-10 130 45 186 174 184 91-2 176-11 255-27v186C933-1 833 13 711 13" id="bd"/><path fill="#333" d="M794-190h353V0H118v-190h395v-702H223v-190h571v892zM513-1277v-207h281v207H513" id="be"/><path fill="#333" d="M774 0H438L31-1082h297c94 290 200 568 280 872 83-304 194-581 291-872h294" id="bf"/><path fill="#333" d="M775-193C708-75 621 20 439 20 226 20 106-93 106-306c0-251 170-341 417-346l223-4c4-143-12-264-148-264-103 0-141 58-150 153l-293-14c37-219 194-321 455-321 263 0 418 130 417 390v392c1 84 5 161 89 160 21 0 42-2 62-6v152c-57 15-108 27-180 26-145 0-202-73-217-205h-6zm-256 17c168 0 234-139 227-325-166 4-347-25-347 173 0 94 33 152 120 152" id="bg"/><path fill="#333" d="M616-1102c361 0 521 202 521 560 0 354-171 562-527 562C259 20 92-192 92-542c0-351 169-560 524-560zm-9 930c200-2 236-165 236-370 0-199-27-367-223-367-195 0-233 146-233 367 0 129 18 223 55 282s92 88 165 88" id="bh"/><path fill="#333" d="M768-1103c247 0 336 167 336 416V0H824v-619c-3-164-24-273-171-273-164 0-229 142-229 312V0H143c-4-359 9-736-8-1082h268c7 63 12 146 13 215h4c67-145 160-236 348-236" id="bi"/><path fill="#333" d="M622-916c-112 2-200 14-200 111 0 90 89 101 168 121 234 58 514 77 514 368C1104-4 751 54 434 5 267-21 161-112 121-270l247-37c24 111 113 145 252 141 114-3 226-12 226-124 0-101-103-113-192-134-225-54-490-76-490-351 0-247 201-328 458-328 245 0 413 88 457 292l-249 26c-16-98-92-133-208-131" id="bj"/><g id="o"><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,0,0)" xlink:href="#bb"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,10.668402777777779,0)" xlink:href="#bc"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,21.336805555555557,0)" xlink:href="#bd"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,32.005208333333336,0)" xlink:href="#be"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,42.673611111111114,0)" xlink:href="#bf"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,53.34201388888889,0)" xlink:href="#bg"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,64.01041666666667,0)" xlink:href="#bd"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,74.67881944444446,0)" xlink:href="#be"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,85.34722222222223,0)" xlink:href="#bh"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,96.015625,0)" xlink:href="#bi"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,106.68402777777777,0)" xlink:href="#bj"/></g><path fill="#333" d="M1018 0H770c-49-215-106-420-154-636C567-419 511-214 459 0H211L0-1349h259c35 320 94 617 105 961 37-206 100-393 154-583h195c54 191 118 375 154 583 14-339 68-641 102-961h259" id="bk"/><path fill="#333" d="M462-1121v384h621v228H462V0H167v-1349h939v228H462" id="bl"/><path fill="#333" d="M762-1121V0H467v-1121H61v-228h1107v228H762" id="bm"/><g id="p"><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,0,0)" xlink:href="#bk"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,10.668402777777779,0)" xlink:href="#bl"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,21.336805555555557,0)" xlink:href="#bm"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,32.005208333333336,0)" xlink:href="#bj"/></g><path fill="#333" d="M844-1321c-130 0-195 53-191 182v57h443v190H653V0H373v-892H117v-190h256v-83c5-247 162-348 422-349 120-1 232 13 327 28v184c-84-10-183-19-278-19" id="bn"/><path fill="#333" d="M875-1102c70 0 148 7 206 17v237c-110-17-267-37-359 15-123 69-192 207-192 395V0H250c-10-367 32-789-52-1082h271c19 69 36 149 46 228h4c52-151 151-250 356-248" id="bo"/><path fill="#333" d="M934-1102c199 0 220 177 220 381V0H926c-2-260 10-533-4-785-4-72-14-138-83-138-34 0-61 27-81 81s-29 134-29 241V0H501c-2-260 9-533-5-785-4-72-13-138-82-138-46 0-65 47-80 93-21 67-30 155-30 248V0H75c-3-360 6-732-6-1082h209c6 50 3 123 8 175 36-100 83-195 216-195 135 0 166 79 196 196 42-105 93-196 236-196" id="bp"/><g id="q"><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,0,0)" xlink:href="#bn"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,10.668402777777779,0)" xlink:href="#bo"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,21.336805555555557,0)" xlink:href="#bh"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,32.005208333333336,0)" xlink:href="#bp"/></g><path fill="#333" d="M427-171c3 195 2 397 2 596H148V-846c1-83-4-168-8-236h272c10 49 14 118 15 176h4c59-114 151-197 316-197 291 0 385 259 385 560 0 243-65 433-220 521-50 28-109 42-176 42-162-2-253-78-309-191zm69-661c-91 113-92 463-1 586 46 62 145 101 225 54 96-57 118-191 119-351 0-123-18-215-53-276-46-82-128-115-220-74-25 12-48 33-70 61" id="bq"/><path fill="#333" d="M794-190h353V0H118v-190h395v-1104H223v-190h571v1294" id="br"/><path fill="#333" d="M1108-33c-3 314-178 467-492 467-243 0-400-94-447-291l281-33c17 79 82 141 174 141 176 0 212-155 205-347-2-40 5-80 0-115C773-85 665-12 501-12c-288 0-377-242-377-538 0-242 65-426 223-510 50-26 108-39 175-39 160 0 253 78 307 191h5c1-58 5-125 14-174h266c-12 335-3 703-6 1049zM811-384c25-82 27-259 1-342-30-99-77-180-190-180-172 0-205 171-205 356 0 116 18 202 54 258 48 76 129 107 221 70 62-25 96-86 119-162" id="bs"/><g id="r"><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,0,0)" xlink:href="#bq"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,10.668402777777779,0)" xlink:href="#bh"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,21.336805555555557,0)" xlink:href="#br"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,32.005208333333336,0)" xlink:href="#br"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,42.673611111111114,0)" xlink:href="#be"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,53.34201388888889,0)" xlink:href="#bi"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,64.01041666666667,0)" xlink:href="#bs"/></g><path fill="#333" d="M872-915c-35-112-84-223-220-223-91 0-156 41-204 116-89 137-87 550 2 688 51 79 116 122 209 122 150 0 197-126 240-244l273 52C1094-168 961 20 656 20 239 20 80-262 80-681c0-418 154-689 568-689 289 0 425 167 496 389" id="bt"/><path fill="#333" d="M1113-274C1038-96 884 20 626 20c-352 0-526-209-526-566 0-358 185-556 530-556 358 0 496 251 499 615H395c5 180 68 319 245 319 102 0 186-45 208-129zM857-663c-6-177-128-307-315-247-94 30-141 121-145 247h460" id="bu"/><g id="s"><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,0,0)" xlink:href="#bt"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,10.668402777777779,0)" xlink:href="#bh"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,21.336805555555557,0)" xlink:href="#bp"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,32.005208333333336,0)" xlink:href="#bq"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,42.673611111111114,0)" xlink:href="#br"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,53.34201388888889,0)" xlink:href="#bu"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,64.01041666666667,0)" xlink:href="#bd"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,74.67881944444446,0)" xlink:href="#be"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,85.34722222222223,0)" xlink:href="#bh"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,96.015625,0)" xlink:href="#bi"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,106.68402777777777,0)" xlink:href="#bj"/></g><path fill="#3a414a" d="M237 0v-1349h191v1193h672V0H237" id="bv"/><g id="t"><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,0,0)" xlink:href="#bv"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,13.335503472222221,0)" xlink:href="#aF"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,26.671006944444443,0)" xlink:href="#aG"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,40.006510416666664,0)" xlink:href="#aO"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,53.342013888888886,0)" xlink:href="#aV"/></g><path fill="#3a414a" d="M202-1349h823v156H709v1037h316V0H202v-156h316v-1037H202v-156" id="bw"/><path fill="#3a414a" d="M528 20c-247 0-343-132-343-381v-721h180v686c-4 177 45 284 224 277 194-8 279-136 279-336v-627h181c3 360-6 732 6 1082H885c-4-54-7-126-8-185h-3C809-64 714 20 528 20" id="bx"/><g id="u"><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,0,0)" xlink:href="#bw"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,13.335503472222221,0)" xlink:href="#aK"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,26.671006944444443,0)" xlink:href="#aD"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,40.006510416666664,0)" xlink:href="#bx"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,53.342013888888886,0)" xlink:href="#aN"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,66.67751736111111,0)" xlink:href="#aI"/></g><path fill="#333" d="M211 0v-1349h295v1121h616V0H211" id="by"/><g id="v"><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,0,0)" xlink:href="#by"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,10.668402777777779,0)" xlink:href="#bh"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,21.336805555555557,0)" xlink:href="#bc"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,32.005208333333336,0)" xlink:href="#bg"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,42.673611111111114,0)" xlink:href="#br"/></g><g id="w"><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,0,0)" xlink:href="#bb"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,10.668402777777779,0)" xlink:href="#bc"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,21.336805555555557,0)" xlink:href="#bd"/></g><path fill="#333" d="M1157-949c0 209-118 316-279 368L1227 0H895L605-515H432V0H137v-1349h494c317-2 526 111 526 400zM608-744c158 1 248-51 252-193 5-207-223-184-428-183v376h176" id="bz"/><path fill="#333" d="M471 20c-247 0-336-169-336-415v-687h281v607c4 148 31 285 172 285 152 0 207-150 207-312v-580h281c4 359-9 736 8 1082H816c-7-63-11-146-12-215h-5C736-76 644 20 471 20" id="bA"/><g id="x"><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,0,0)" xlink:href="#bz"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,10.668402777777779,0)" xlink:href="#bu"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,21.336805555555557,0)" xlink:href="#bj"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,32.005208333333336,0)" xlink:href="#bh"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,42.673611111111114,0)" xlink:href="#br"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,53.34201388888889,0)" xlink:href="#bA"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,64.01041666666667,0)" xlink:href="#bd"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,74.67881944444446,0)" xlink:href="#be"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,85.34722222222223,0)" xlink:href="#bh"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,96.015625,0)" xlink:href="#bi"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,106.68402777777777,0)" xlink:href="#bj"/></g><path fill="#333" d="M616-1349c316 3 526 118 526 426 0 301-201 442-514 447H431V0H136v-1349h480zm-25 646c164 1 254-62 254-215 0-157-99-200-262-202H431v417h160" id="bB"/><path fill="#333" d="M324-409v-244h580v244H324" id="bC"/><g id="y"><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,0,0)" xlink:href="#bB"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,10.668402777777779,0)" xlink:href="#bh"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,21.336805555555557,0)" xlink:href="#bj"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,32.005208333333336,0)" xlink:href="#bd"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,42.673611111111114,0)" xlink:href="#bC"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,53.34201388888889,0)" xlink:href="#bg"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,64.01041666666667,0)" xlink:href="#bc"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,74.67881944444446,0)" xlink:href="#bd"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,85.34722222222223,0)" xlink:href="#be"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,96.015625,0)" xlink:href="#bf"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,106.68402777777777,0)" xlink:href="#bg"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,117.35243055555554,0)" xlink:href="#bd"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,128.02083333333331,0)" xlink:href="#be"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,138.6892361111111,0)" xlink:href="#bh"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,149.35763888888886,0)" xlink:href="#bi"/></g><path fill="#333" d="M137 0v-1349h968v228H432v324h612v228H432v341h714V0H137" id="bD"/><g id="z"><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,0,0)" xlink:href="#bD"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,10.668402777777779,0)" xlink:href="#bf"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,21.336805555555557,0)" xlink:href="#be"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,32.005208333333336,0)" xlink:href="#bc"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,42.673611111111114,0)" xlink:href="#bd"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,53.34201388888889,0)" xlink:href="#be"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,64.01041666666667,0)" xlink:href="#bh"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,74.67881944444446,0)" xlink:href="#bi"/></g><path fill="#333" d="M800 425c-1-198 1-404 0-596C746-55 645 20 483 20 183 20 97-237 97-543c0-242 74-429 227-518 49-28 105-42 168-42 163 0 248 85 306 197h4c1-59 6-126 15-176h272c-4 67-9 153-8 236V425H800zm-66-671c93-114 91-467-2-586-35-45-76-79-141-79-64 0-113 31-149 92-69 115-66 440 4 561 39 68 130 111 220 70 25-11 46-31 68-58" id="bE"/><g id="A"><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,0,0)" xlink:href="#bo"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,10.668402777777779,0)" xlink:href="#bu"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,21.336805555555557,0)" xlink:href="#bE"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,32.005208333333336,0)" xlink:href="#bA"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,42.673611111111114,0)" xlink:href="#bu"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,53.34201388888889,0)" xlink:href="#bj"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,64.01041666666667,0)" xlink:href="#bd"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,74.67881944444446,0)" xlink:href="#bj"/></g><path fill="#333" d="M650-216c90 0 157-35 208-74v-235H584v-218h544v558C1004-84 858 20 635 20 235 20 80-276 80-681c0-416 146-689 558-689 277 0 398 160 462 375l-274 54c-31-108-73-197-185-197-231 0-262 217-262 457 0 149 22 263 67 344s113 121 204 121" id="bF"/><path fill="#333" d="M609-1161c-125 0-218 36-218 153 0 149 166 161 290 196 235 67 484 129 484 421 0 300-239 408-554 411C302 23 93-114 38-367l285-37c32 128 131 205 296 203 143-2 259-31 259-173 0-164-197-172-333-212-218-64-441-131-441-405 0-276 231-379 511-379 299 0 463 114 513 363l-286 29c-28-115-96-183-233-183" id="bG"/><path fill="#333" d="M157-1349h916v228H757v893h316V0H157v-228h316v-893H157v-228" id="bH"/><g id="B"><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,0,0)" xlink:href="#bF"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,10.668402777777779,0)" xlink:href="#bu"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,21.336805555555557,0)" xlink:href="#bd"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,32.005208333333336,0)" xlink:href="#bG"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,42.673611111111114,0)" xlink:href="#bd"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,53.34201388888889,0)" xlink:href="#bg"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,64.01041666666667,0)" xlink:href="#bd"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,74.67881944444446,0)" xlink:href="#bu"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,85.34722222222223,0)" xlink:href="#bH"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,96.015625,0)" xlink:href="#bi"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,106.68402777777777,0)" xlink:href="#bn"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,117.35243055555554,0)" xlink:href="#bh"/></g><g id="C"><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,0,0)" xlink:href="#by"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,10.668402777777779,0)" xlink:href="#bh"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,21.336805555555557,0)" xlink:href="#bc"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,32.005208333333336,0)" xlink:href="#bg"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,42.673611111111114,0)" xlink:href="#br"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,53.34201388888889,0)" xlink:href="#bH"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,64.01041666666667,0)" xlink:href="#bi"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,74.67881944444446,0)" xlink:href="#bq"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,85.34722222222223,0)" xlink:href="#bA"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,96.015625,0)" xlink:href="#bd"/></g><path fill="#3a414a" d="M912-211c-10-84-18-177-18-274v-864h172V0H836L316-1130c7 79 16 167 16 254V0H162v-1349h222" id="bI"/><g id="D"><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,0,0)" xlink:href="#bI"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,13.335503472222221,0)" xlink:href="#aH"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,26.671006944444443,0)" xlink:href="#aW"/></g><path fill="#3a414a" d="M709-1193V0H519v-1193H76v-156h1076v156H709" id="bJ"/><g id="E"><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,0,0)" xlink:href="#aT"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,13.335503472222221,0)" xlink:href="#aY"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,26.671006944444443,0)" xlink:href="#bJ"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,40.006510416666664,0)" xlink:href="#aI"/></g><g id="F"><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,0,0)" xlink:href="#bc"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,10.668402777777779,0)" xlink:href="#bh"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,21.336805555555557,0)" xlink:href="#bp"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,32.005208333333336,0)" xlink:href="#bq"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,42.673611111111114,0)" xlink:href="#br"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,53.34201388888889,0)" xlink:href="#bu"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,64.01041666666667,0)" xlink:href="#bd"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,74.67881944444446,0)" xlink:href="#bu"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,85.34722222222223,0)" xlink:href="#bj"/></g><path fill="#3a414a" d="M147 0v-137l681-806H187v-139h844v137L349-139h719V0H147" id="bK"/><g id="G"><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,0,0)" xlink:href="#aX"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,13.335503472222221,0)" xlink:href="#aE"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,26.671006944444443,0)" xlink:href="#aJ"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,40.006510416666664,0)" xlink:href="#aF"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,53.342013888888886,0)" xlink:href="#aE"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,66.67751736111111,0)" xlink:href="#aJ"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,80.01302083333334,0)" xlink:href="#aN"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,93.34852430555557,0)" xlink:href="#aJ"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,106.6840277777778,0)" xlink:href="#bK"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,120.01953125000003,0)" xlink:href="#aH"/></g><g id="H"><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,0,0)" xlink:href="#bv"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,13.335503472222221,0)" xlink:href="#aF"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,26.671006944444443,0)" xlink:href="#aG"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,40.006510416666664,0)" xlink:href="#aO"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,53.342013888888886,0)" xlink:href="#aV"/></g><path fill="#333" d="M766 0H467L3-1349h308c102 347 212 687 307 1041 91-356 204-694 304-1041h305" id="bL"/><path fill="#333" d="M802-909c-3-189-2-383-2-575h281v1248c-1 83 4 168 8 236H817c-9-50-14-117-15-176h-4C735-49 651 20 482 20 191 20 97-238 97-539c0-243 66-432 221-519 50-28 108-42 175-42 162 2 253 78 309 191zm-70 658c91-113 93-462 2-584-46-61-145-100-224-53-96 56-119 190-120 349 0 123 17 214 52 275 46 82 130 115 222 74 25-12 46-33 68-61" id="bM"/><path fill="#333" d="M615-1370c385 0 542 273 542 691 0 358-114 602-378 679 41 115 114 187 266 186 41 0 86-7 123-13v202c-117 27-296 45-408-1C608 311 534 171 482 7 194-58 72-308 72-679c0-419 158-691 543-691zM797-330c77-133 78-564 0-695-44-73-101-113-182-113s-139 40-183 114c-79 133-78 560 0 694 45 77 102 118 183 118s138-41 182-118" id="bN"/><g id="I"><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,0,0)" xlink:href="#bL"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,10.668402777777779,0)" xlink:href="#bg"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,21.336805555555557,0)" xlink:href="#br"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,32.005208333333336,0)" xlink:href="#be"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,42.673611111111114,0)" xlink:href="#bM"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,53.34201388888889,0)" xlink:href="#bB"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,64.01041666666667,0)" xlink:href="#bh"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,74.67881944444446,0)" xlink:href="#br"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,85.34722222222223,0)" xlink:href="#br"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,96.015625,0)" xlink:href="#bk"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,106.68402777777777,0)" xlink:href="#bl"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,117.35243055555554,0)" xlink:href="#bm"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,128.02083333333331,0)" xlink:href="#bN"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,138.6892361111111,0)" xlink:href="#bz"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,149.35763888888886,0)" xlink:href="#bu"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,160.02604166666663,0)" xlink:href="#bj"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,170.6944444444444,0)" xlink:href="#bq"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,181.36284722222217,0)" xlink:href="#bh"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,192.03124999999994,0)" xlink:href="#bi"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,202.69965277777771,0)" xlink:href="#bj"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,213.36805555555546,0)" xlink:href="#bu"/></g><g id="J"><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,0,0)" xlink:href="#bk"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,10.668402777777779,0)" xlink:href="#bl"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,21.336805555555557,0)" xlink:href="#bG"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,32.005208333333336,0)" xlink:href="#bd"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,42.673611111111114,0)" xlink:href="#bo"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,53.34201388888889,0)" xlink:href="#bu"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,64.01041666666667,0)" xlink:href="#bg"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,74.67881944444446,0)" xlink:href="#bp"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,85.34722222222223,0)" xlink:href="#bH"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,96.015625,0)" xlink:href="#bi"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,106.68402777777777,0)" xlink:href="#bq"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,117.35243055555554,0)" xlink:href="#bA"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,128.02083333333331,0)" xlink:href="#bd"/></g><path fill="#3a414a" d="M285-1169c8 382 2 780 4 1169H129v-1349h237c86 239 188 461 253 720 69-258 169-481 255-720h225V0H937c2-390-5-788 6-1169-75 255-170 488-259 729H547c-90-240-185-475-262-729" id="bO"/><path fill="#3a414a" d="M865-914c-3-187-2-380-2-570h180v1261c0 76 1 155 6 223H877c-8-49-9-116-10-174h-5C801-44 708 26 530 26c-135 0-234-46-297-139s-95-232-95-419c0-377 131-566 392-566 176 0 271 63 335 184zm-286-51c-222 0-255 197-255 427 0 229 31 425 253 425 237 0 286-195 286-441 0-238-52-411-284-411" id="bP"/><path fill="#3a414a" d="M1121-976c0 225-142 341-344 379L1177 0H957L591-575H353V0H162v-1349h482c281 3 477 100 477 373zM633-726c181-1 296-73 296-247 0-149-101-223-304-223H353v470h280" id="bQ"/><g id="K"><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,0,0)" xlink:href="#bO"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,13.335503472222221,0)" xlink:href="#aO"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,26.671006944444443,0)" xlink:href="#aK"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,40.006510416666664,0)" xlink:href="#aO"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,53.342013888888886,0)" xlink:href="#aL"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,66.67751736111111,0)" xlink:href="#aH"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,80.01302083333334,0)" xlink:href="#bP"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,93.34852430555557,0)" xlink:href="#bQ"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,106.6840277777778,0)" xlink:href="#bx"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,120.01953125000003,0)" xlink:href="#aK"/></g><path fill="#3a414a" d="M875 0v-623H353V0H162v-1349h191v566h522v-566h191V0H875" id="bR"/><g id="L"><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,0,0)" xlink:href="#bO"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,13.335503472222221,0)" xlink:href="#aO"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,26.671006944444443,0)" xlink:href="#aK"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,40.006510416666664,0)" xlink:href="#aO"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,53.342013888888886,0)" xlink:href="#aL"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,66.67751736111111,0)" xlink:href="#aH"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,80.01302083333334,0)" xlink:href="#bP"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,93.34852430555557,0)" xlink:href="#bQ"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,106.6840277777778,0)" xlink:href="#bx"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,120.01953125000003,0)" xlink:href="#aK"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,133.35503472222226,0)" xlink:href="#bR"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,146.69053819444449,0)" xlink:href="#aO"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,160.0260416666667,0)" xlink:href="#aK"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,173.36154513888894,0)" xlink:href="#bP"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,186.69704861111117,0)" xlink:href="#aV"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,200.0325520833334,0)" xlink:href="#aH"/></g><g id="M"><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,0,0)" xlink:href="#bz"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,10.668402777777779,0)" xlink:href="#bA"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,21.336805555555557,0)" xlink:href="#bi"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,32.005208333333336,0)" xlink:href="#bb"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,42.673611111111114,0)" xlink:href="#bc"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,53.34201388888889,0)" xlink:href="#bd"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,64.01041666666667,0)" xlink:href="#be"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,74.67881944444446,0)" xlink:href="#bh"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,85.34722222222223,0)" xlink:href="#bi"/></g><path fill="#333" d="M706-1209l235-104 68 197-250 61 186 213-184 121-146-252-149 252-186-123 190-211-250-61 68-197 239 104-18-274h215" id="bS"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,0,0)" xlink:href="#bS" id="N"/><path fill="#333" d="M865-312c-44-312-23-686-28-1037h257V0H748L364-1010c44 304 24 668 28 1010H135v-1349h337" id="bT"/><path fill="#333" d="M1028 0H784c-56-191-119-378-170-573C562-377 495-191 437 0H194L11-1082h228c32 239 67 472 95 714 4 40 7 80 7 119 53-195 119-378 177-568h193c56 190 120 371 169 568-1-79 11-158 21-226l91-607h226" id="bU"/><g id="O"><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,0,0)" xlink:href="#bT"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,10.668402777777779,0)" xlink:href="#bu"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,21.336805555555557,0)" xlink:href="#bU"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,32.005208333333336,0)" xlink:href="#bH"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,42.673611111111114,0)" xlink:href="#bi"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,53.34201388888889,0)" xlink:href="#bc"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,64.01041666666667,0)" xlink:href="#bh"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,74.67881944444446,0)" xlink:href="#bp"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,85.34722222222223,0)" xlink:href="#be"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,96.015625,0)" xlink:href="#bi"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,106.68402777777777,0)" xlink:href="#bs"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,117.35243055555554,0)" xlink:href="#bk"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,128.02083333333331,0)" xlink:href="#bl"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,138.6892361111111,0)" xlink:href="#bm"/></g><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,0,0)" xlink:href="#bS" id="P"/><g id="Q"><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,0,0)" xlink:href="#bb"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,10.668402777777779,0)" xlink:href="#bc"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,21.336805555555557,0)" xlink:href="#bd"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,32.005208333333336,0)" xlink:href="#be"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,42.673611111111114,0)" xlink:href="#bf"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,53.34201388888889,0)" xlink:href="#bg"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,64.01041666666667,0)" xlink:href="#bd"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,74.67881944444446,0)" xlink:href="#be"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,85.34722222222223,0)" xlink:href="#bh"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,96.015625,0)" xlink:href="#bi"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,106.68402777777777,0)" xlink:href="#bt"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,117.35243055555554,0)" xlink:href="#bh"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,128.02083333333331,0)" xlink:href="#bp"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,138.6892361111111,0)" xlink:href="#bq"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,149.35763888888886,0)" xlink:href="#br"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,160.02604166666663,0)" xlink:href="#bu"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,170.6944444444444,0)" xlink:href="#bd"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,181.36284722222217,0)" xlink:href="#be"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,192.03124999999994,0)" xlink:href="#bh"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,202.69965277777771,0)" xlink:href="#bi"/></g><path fill="#333" d="M424-1484c-2 206 5 424-8 618h4c67-145 160-234 348-236 251-3 335 167 336 416V0H824v-621c0-150-23-276-173-270-163 7-227 142-227 312V0H143v-1484h281" id="bV"/><path fill="#333" d="M864 0L575-490l-121 84V0H173v-1484h281v850l386-448h302L762-660 1171 0H864" id="bW"/><path fill="#333" d="M305-1169c27 366 9 780 14 1169H99v-1349h347c49 189 108 371 150 564 12 56 15 107 23 166 33-270 117-487 176-730h335V0H908c5-390-13-801 16-1169-52 285-130 541-199 809H507c-70-267-148-525-202-809" id="bX"/><g id="R"><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,0,0)" xlink:href="#bt"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,10.668402777777779,0)" xlink:href="#bV"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,21.336805555555557,0)" xlink:href="#bu"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,32.005208333333336,0)" xlink:href="#bc"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,42.673611111111114,0)" xlink:href="#bW"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,53.34201388888889,0)" xlink:href="#bX"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,64.01041666666667,0)" xlink:href="#bh"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,74.67881944444446,0)" xlink:href="#bo"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,85.34722222222223,0)" xlink:href="#bu"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,96.015625,0)" xlink:href="#bk"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,106.68402777777777,0)" xlink:href="#bh"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,117.35243055555554,0)" xlink:href="#bo"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,128.02083333333331,0)" xlink:href="#bW"/></g><g id="S"><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,0,0)" xlink:href="#by"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,10.668402777777779,0)" xlink:href="#bh"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,21.336805555555557,0)" xlink:href="#bc"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,32.005208333333336,0)" xlink:href="#bg"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,42.673611111111114,0)" xlink:href="#br"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,53.34201388888889,0)" xlink:href="#bz"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,64.01041666666667,0)" xlink:href="#bu"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,74.67881944444446,0)" xlink:href="#bj"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,85.34722222222223,0)" xlink:href="#bh"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,96.015625,0)" xlink:href="#br"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,106.68402777777777,0)" xlink:href="#bA"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,117.35243055555554,0)" xlink:href="#bd"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,128.02083333333331,0)" xlink:href="#be"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,138.6892361111111,0)" xlink:href="#bh"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,149.35763888888886,0)" xlink:href="#bi"/></g><path fill="#333" d="M1100-543c2 361-147 563-501 563-342 0-470-199-470-548v-821h295v818c3 172 13 322 183 320 173-2 198-150 198-330v-808h295v806" id="bY"/><g id="T"><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,0,0)" xlink:href="#bz"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,10.668402777777779,0)" xlink:href="#bA"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,21.336805555555557,0)" xlink:href="#bi"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,32.005208333333336,0)" xlink:href="#bY"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,42.673611111111114,0)" xlink:href="#bq"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,53.34201388888889,0)" xlink:href="#bM"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,64.01041666666667,0)" xlink:href="#bg"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,74.67881944444446,0)" xlink:href="#bd"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,85.34722222222223,0)" xlink:href="#bu"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,96.015625,0)" xlink:href="#bz"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,106.68402777777777,0)" xlink:href="#bu"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,117.35243055555554,0)" xlink:href="#bj"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,128.02083333333331,0)" xlink:href="#bq"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,138.6892361111111,0)" xlink:href="#bh"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,149.35763888888886,0)" xlink:href="#bi"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,160.02604166666663,0)" xlink:href="#bj"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,170.6944444444444,0)" xlink:href="#bu"/></g><path fill="#333" d="M796 0v-574H433V0H138v-1349h295v531h363v-531h295V0H796" id="bZ"/><path fill="#333" d="M429-1484c1 190-1 388 0 572 54-116 155-191 317-191 300 0 386 257 386 563 0 241-73 429-226 518-49 28-106 42-169 42-162 0-251-81-306-196h-4c-1 59-5 127-15 176H140c4-67 9-153 8-236v-1248h281zm66 648c-93 114-92 466 1 585 35 45 77 79 142 79 64 0 112-31 148-92 69-115 68-440-2-561-39-68-131-111-221-70-25 11-46 32-68 59" id="ca"/><g id="U"><use transform="matrix(0.006510416666666666,0,0,0.006510416666666666,0,0)" xlink:href="#bZ"/><use transform="matrix(0.006510416666666666,0,0,0.006510416666666666,8.001302083333332,0)" xlink:href="#bu"/><use transform="matrix(0.006510416666666666,0,0,0.006510416666666666,16.002604166666664,0)" xlink:href="#bg"/><use transform="matrix(0.006510416666666666,0,0,0.006510416666666666,24.003906249999996,0)" xlink:href="#bo"/><use transform="matrix(0.006510416666666666,0,0,0.006510416666666666,32.00520833333333,0)" xlink:href="#bd"/><use transform="matrix(0.006510416666666666,0,0,0.006510416666666666,40.00651041666666,0)" xlink:href="#ca"/><use transform="matrix(0.006510416666666666,0,0,0.006510416666666666,48.007812499999986,0)" xlink:href="#bu"/><use transform="matrix(0.006510416666666666,0,0,0.006510416666666666,56.009114583333314,0)" xlink:href="#bg"/><use transform="matrix(0.006510416666666666,0,0,0.006510416666666666,64.01041666666664,0)" xlink:href="#bd"/></g><g id="V"><use transform="matrix(0.006510416666666666,0,0,0.006510416666666666,0,0)" xlink:href="#bd"/><use transform="matrix(0.006510416666666666,0,0,0.006510416666666666,8.001302083333332,0)" xlink:href="#be"/><use transform="matrix(0.006510416666666666,0,0,0.006510416666666666,16.002604166666664,0)" xlink:href="#bp"/><use transform="matrix(0.006510416666666666,0,0,0.006510416666666666,24.003906249999996,0)" xlink:href="#bu"/><use transform="matrix(0.006510416666666666,0,0,0.006510416666666666,32.00520833333333,0)" xlink:href="#bh"/><use transform="matrix(0.006510416666666666,0,0,0.006510416666666666,40.00651041666666,0)" xlink:href="#bA"/><use transform="matrix(0.006510416666666666,0,0,0.006510416666666666,48.007812499999986,0)" xlink:href="#bd"/></g><g id="W"><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,0,0)" xlink:href="#aT"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,13.335503472222221,0)" xlink:href="#aF"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,26.671006944444443,0)" xlink:href="#aE"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,40.006510416666664,0)" xlink:href="#aP"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,53.342013888888886,0)" xlink:href="#aH"/><use transform="matrix(0.010850694444444444,0,0,0.010850694444444444,66.67751736111111,0)" xlink:href="#aE"/></g><path fill="#635dff" d="M631 20c-350 0-501-215-501-562 0-355 162-560 502-560 250 0 399 118 446 323l-192 14c-23-124-109-196-262-196-242 0-305 171-305 415 1 245 61 427 304 427 151 0 248-77 267-215l190 12C1039-107 883 20 631 20" id="cb"/><path fill="#635dff" d="M615-1102c343 0 484 203 482 560-1 347-147 562-488 562-336 0-475-219-479-562-4-349 156-560 485-560zm-8 989c240 0 301-180 301-429 0-245-55-427-290-427-236 0-299 181-299 427 0 243 61 429 288 429" id="cc"/><path fill="#635dff" d="M904-1102c199 0 220 177 220 381V0H956v-686c-3-114 0-215-60-264-70-33-125-4-158 71-26 56-39 140-39 252V0H531v-686c-3-114-1-215-61-264-78-41-136 24-157 84-24 69-39 159-39 259V0H105c-3-360 6-732-6-1082h149c6 50 3 123 8 175 36-100 83-195 216-195 135 0 166 79 196 196 42-105 93-196 236-196" id="cd"/><path fill="#635dff" d="M698-1104c312 3 392 244 392 558 0 315-82 566-392 566-169 0-277-65-331-184h-5c8 188 2 394 4 589H185V-858c0-76-1-156-6-224h175c6 52 9 120 10 178h4c58-122 150-202 330-200zm-49 991c225 0 255-203 255-433 0-225-32-419-253-419-236 0-285 192-285 441 0 237 53 411 283 411" id="ce"/><path fill="#635dff" d="M736-142h380V0H134v-142h422v-1200H267v-142h469v1342" id="cf"/><path fill="#635dff" d="M617-1102c355 0 481 238 477 599H322c5 222 84 388 301 388 144 0 244-59 284-166l158 45C1002-72 854 20 623 20c-342 0-490-220-490-568 0-346 151-554 484-554zm291 461c-18-192-90-328-289-328-194 0-287 128-295 328h584" id="cg"/><path fill="#635dff" d="M682 16c-209 0-323-80-324-285v-671H190v-142h170l58-282h120v282h432v142H538v652c2 114 60 155 182 155 106 0 209-16 297-34v137C921-4 806 16 682 16" id="ch"/><path fill="#635dff" d="M745-142h380V0H143v-142h422v-798H246v-142h499v940zM545-1292v-192h200v192H545" id="ci"/><path fill="#635dff" d="M706-1102c241 0 344 136 343 381V0H868v-695c1-168-57-273-220-268-190 6-283 138-283 336V0H185c-3-360 6-732-6-1082h170c4 54 7 126 8 185h3c63-121 164-204 346-205" id="cj"/><g id="X"><use transform="matrix(0.006510416666666664,0,0,0.006510416666666664,0,0)" xlink:href="#cb"/><use transform="matrix(0.006510416666666664,0,0,0.006510416666666664,8.00130208333333,0)" xlink:href="#cc"/><use transform="matrix(0.006510416666666664,0,0,0.006510416666666664,16.00260416666666,0)" xlink:href="#cd"/><use transform="matrix(0.006510416666666664,0,0,0.006510416666666664,24.003906249999993,0)" xlink:href="#ce"/><use transform="matrix(0.006510416666666664,0,0,0.006510416666666664,32.00520833333332,0)" xlink:href="#cf"/><use transform="matrix(0.006510416666666664,0,0,0.006510416666666664,40.00651041666665,0)" xlink:href="#cg"/><use transform="matrix(0.006510416666666664,0,0,0.006510416666666664,48.00781249999998,0)" xlink:href="#ch"/><use transform="matrix(0.006510416666666664,0,0,0.006510416666666664,56.0091145833333,0)" xlink:href="#ci"/><use transform="matrix(0.006510416666666664,0,0,0.006510416666666664,64.01041666666664,0)" xlink:href="#cc"/><use transform="matrix(0.006510416666666664,0,0,0.006510416666666664,72.01171874999997,0)" xlink:href="#cj"/></g><path fill="#635dff" d="M1000-272c3 95 12 159 101 161 21 0 41-3 59-7V-6c-44 10-86 16-139 16-141 2-191-84-197-217h-6C748-76 648 20 446 20c-207 0-318-120-318-322 0-266 194-348 454-354l236-4c12-191-40-305-222-305-140 0-220 47-232 172l-188-17c33-204 181-292 423-292 255 0 401 118 401 364v466zm-683-27c0 109 63 184 175 182 166-3 259-96 306-217 24-65 20-120 20-200-232 7-501-28-501 235" id="ck"/><path fill="#635dff" d="M1018 0H814c-67-224-138-444-200-673C552-442 476-224 407 0H204L21-1082h178c43 310 105 601 126 933 54-225 128-425 193-638h193c63 212 134 415 185 638 22-336 90-622 136-933h176" id="cl"/><path fill="#635dff" d="M873-819c-18-114-119-146-250-146-163 0-245 50-245 151 0 151 170 148 294 185 182 54 388 94 388 320 0 240-189 325-439 329-245 4-410-69-454-268l159-31c24 133 136 168 295 165 144-2 270-31 270-171 0-164-195-160-331-202-167-52-350-87-350-299 0-218 173-315 413-313 220 2 373 77 412 260" id="cm"/><g id="Y"><use transform="matrix(0.006510416666666664,0,0,0.006510416666666664,0,0)" xlink:href="#ck"/><use transform="matrix(0.006510416666666664,0,0,0.006510416666666664,8.00130208333333,0)" xlink:href="#cl"/><use transform="matrix(0.006510416666666664,0,0,0.006510416666666664,16.00260416666666,0)" xlink:href="#ck"/><use transform="matrix(0.006510416666666664,0,0,0.006510416666666664,24.003906249999993,0)" xlink:href="#ci"/><use transform="matrix(0.006510416666666664,0,0,0.006510416666666664,32.00520833333332,0)" xlink:href="#ch"/><use transform="matrix(0.006510416666666664,0,0,0.006510416666666664,40.00651041666665,0)" xlink:href="#cm"/></g><path fill="#635dff" d="M528 20c-247 0-343-132-343-381v-721h180v686c-4 177 45 284 224 277 194-8 279-136 279-336v-627h181c3 360-6 732 6 1082H885c-4-54-7-126-8-185h-3C809-64 714 20 528 20" id="cn"/><path fill="#635dff" d="M365-904c58-129 161-200 334-200 130 0 228 46 293 138s98 233 98 420c0 189-34 331-102 425S824 20 698 20c-170 0-275-64-336-184 0 55-3 116-9 164H179c5-68 6-147 6-223v-1261h180c-2 193 4 394-4 580h4zm283 791c221 0 256-197 256-427 0-229-34-425-254-425-236 0-285 195-285 441 0 237 53 411 283 411" id="co"/><path fill="#635dff" d="M914 0L548-499l-132 98V0H236v-1484h180v927l475-525h211L663-617 1125 0H914" id="cp"/><g id="Z"><use transform="matrix(0.006510416666666664,0,0,0.006510416666666664,0,0)" xlink:href="#cn"/><use transform="matrix(0.006510416666666664,0,0,0.006510416666666664,8.00130208333333,0)" xlink:href="#cj"/><use transform="matrix(0.006510416666666664,0,0,0.006510416666666664,16.00260416666666,0)" xlink:href="#co"/><use transform="matrix(0.006510416666666664,0,0,0.006510416666666664,24.003906249999993,0)" xlink:href="#cf"/><use transform="matrix(0.006510416666666664,0,0,0.006510416666666664,32.00520833333332,0)" xlink:href="#cc"/><use transform="matrix(0.006510416666666664,0,0,0.006510416666666664,40.00651041666665,0)" xlink:href="#cb"/><use transform="matrix(0.006510416666666664,0,0,0.006510416666666664,48.00781249999998,0)" xlink:href="#cp"/></g><path fill="#635dff" d="M872-915c-35-112-84-223-220-223-91 0-156 41-204 116-89 137-87 550 2 688 51 79 116 122 209 122 150 0 197-126 240-244l273 52C1094-168 961 20 656 20 239 20 80-262 80-681c0-418 154-689 568-689 289 0 425 167 496 389" id="cq"/><path fill="#635dff" d="M616-1102c361 0 521 202 521 560 0 354-171 562-527 562C259 20 92-192 92-542c0-351 169-560 524-560zm-9 930c200-2 236-165 236-370 0-199-27-367-223-367-195 0-233 146-233 367 0 129 18 223 55 282s92 88 165 88" id="cr"/><path fill="#635dff" d="M934-1102c199 0 220 177 220 381V0H926c-2-260 10-533-4-785-4-72-14-138-83-138-34 0-61 27-81 81s-29 134-29 241V0H501c-2-260 9-533-5-785-4-72-13-138-82-138-46 0-65 47-80 93-21 67-30 155-30 248V0H75c-3-360 6-732-6-1082h209c6 50 3 123 8 175 36-100 83-195 216-195 135 0 166 79 196 196 42-105 93-196 236-196" id="cs"/><path fill="#635dff" d="M427-171c3 195 2 397 2 596H148V-846c1-83-4-168-8-236h272c10 49 14 118 15 176h4c59-114 151-197 316-197 291 0 385 259 385 560 0 243-65 433-220 521-50 28-109 42-176 42-162-2-253-78-309-191zm69-661c-91 113-92 463-1 586 46 62 145 101 225 54 96-57 118-191 119-351 0-123-18-215-53-276-46-82-128-115-220-74-25 12-48 33-70 61" id="ct"/><path fill="#635dff" d="M794-190h353V0H118v-190h395v-1104H223v-190h571v1294" id="cu"/><path fill="#635dff" d="M1113-274C1038-96 884 20 626 20c-352 0-526-209-526-566 0-358 185-556 530-556 358 0 496 251 499 615H395c5 180 68 319 245 319 102 0 186-45 208-129zM857-663c-6-177-128-307-315-247-94 30-141 121-145 247h460" id="cv"/><path fill="#635dff" d="M711 13c-250 0-386-99-385-349l2-556H161v-190h181l88-282h176v282h385v190H606v530c-10 130 45 186 174 184 91-2 176-11 255-27v186C933-1 833 13 711 13" id="cw"/><path fill="#635dff" d="M794-190h353V0H118v-190h395v-702H223v-190h571v892zM513-1277v-207h281v207H513" id="cx"/><path fill="#635dff" d="M768-1103c247 0 336 167 336 416V0H824v-619c-3-164-24-273-171-273-164 0-229 142-229 312V0H143c-4-359 9-736-8-1082h268c7 63 12 146 13 215h4c67-145 160-236 348-236" id="cy"/><path fill="#635dff" d="M622-916c-112 2-200 14-200 111 0 90 89 101 168 121 234 58 514 77 514 368C1104-4 751 54 434 5 267-21 161-112 121-270l247-37c24 111 113 145 252 141 114-3 226-12 226-124 0-101-103-113-192-134-225-54-490-76-490-351 0-247 201-328 458-328 245 0 413 88 457 292l-249 26c-16-98-92-133-208-131" id="cz"/><g id="aa"><use transform="matrix(0.006510416666666667,0,0,0.006510416666666667,0,0)" xlink:href="#cq"/><use transform="matrix(0.006510416666666667,0,0,0.006510416666666667,8.001302083333334,0)" xlink:href="#cr"/><use transform="matrix(0.006510416666666667,0,0,0.006510416666666667,16.002604166666668,0)" xlink:href="#cs"/><use transform="matrix(0.006510416666666667,0,0,0.006510416666666667,24.00390625,0)" xlink:href="#ct"/><use transform="matrix(0.006510416666666667,0,0,0.006510416666666667,32.005208333333336,0)" xlink:href="#cu"/><use transform="matrix(0.006510416666666667,0,0,0.006510416666666667,40.00651041666667,0)" xlink:href="#cv"/><use transform="matrix(0.006510416666666667,0,0,0.006510416666666667,48.00781250000001,0)" xlink:href="#cw"/><use transform="matrix(0.006510416666666667,0,0,0.006510416666666667,56.00911458333335,0)" xlink:href="#cx"/><use transform="matrix(0.006510416666666667,0,0,0.006510416666666667,64.01041666666667,0)" xlink:href="#cr"/><use transform="matrix(0.006510416666666667,0,0,0.006510416666666667,72.01171875,0)" xlink:href="#cy"/><use transform="matrix(0.006510416666666667,0,0,0.006510416666666667,80.01302083333333,0)" xlink:href="#cz"/></g><path fill="#635dff" d="M621-530c0 421 127 700 301 955H641C466 173 344-110 344-531s122-702 297-953h281c-174 254-301 534-301 954" id="cA"/><path fill="#635dff" d="M138-1120c207-4 339-93 415-229h266v1140h323V0H149v-209h389v-891c-70 121-216 187-400 194v-214" id="cB"/><path fill="#635dff" d="M885-531c0 421-122 704-297 956H307c174-255 301-534 301-955 0-420-127-700-301-954h281c175 251 297 532 297 953" id="cC"/><g id="ab"><use transform="matrix(0.006510416666666667,0,0,0.006510416666666667,0,0)" xlink:href="#cA"/><use transform="matrix(0.006510416666666667,0,0,0.006510416666666667,8.001302083333334,0)" xlink:href="#cB"/><use transform="matrix(0.006510416666666667,0,0,0.006510416666666667,16.002604166666668,0)" xlink:href="#cC"/></g><path fill="#635dff" d="M135-968c34-256 187-402 480-402 217 0 371 75 441 220 45 93 40 219-8 308-114 212-348 323-508 488-38 39-66 80-85 123h654V0H123v-195c112-245 321-399 515-560 57-48 107-96 142-157 14-26 22-53 22-80-1-104-73-156-185-154-131 2-181 74-199 194" id="cD"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,0,0)" xlink:href="#cD" id="ac"/><g id="ad"><use transform="matrix(0.006510416666666667,0,0,0.006510416666666667,0,0)" xlink:href="#cq"/><use transform="matrix(0.006510416666666667,0,0,0.006510416666666667,8.001302083333334,0)" xlink:href="#cr"/><use transform="matrix(0.006510416666666667,0,0,0.006510416666666667,16.002604166666668,0)" xlink:href="#cs"/><use transform="matrix(0.006510416666666667,0,0,0.006510416666666667,24.00390625,0)" xlink:href="#ct"/><use transform="matrix(0.006510416666666667,0,0,0.006510416666666667,32.005208333333336,0)" xlink:href="#cu"/><use transform="matrix(0.006510416666666667,0,0,0.006510416666666667,40.00651041666667,0)" xlink:href="#cv"/><use transform="matrix(0.006510416666666667,0,0,0.006510416666666667,48.00781250000001,0)" xlink:href="#cw"/><use transform="matrix(0.006510416666666667,0,0,0.006510416666666667,56.00911458333335,0)" xlink:href="#cv"/></g><path fill="#635dff" d="M471 20c-247 0-336-169-336-415v-687h281v607c4 148 31 285 172 285 152 0 207-150 207-312v-580h281c4 359-9 736 8 1082H816c-7-63-11-146-12-215h-5C736-76 644 20 471 20" id="cE"/><path fill="#635dff" d="M429-1484c1 190-1 388 0 572 54-116 155-191 317-191 300 0 386 257 386 563 0 241-73 429-226 518-49 28-106 42-169 42-162 0-251-81-306-196h-4c-1 59-5 127-15 176H140c4-67 9-153 8-236v-1248h281zm66 648c-93 114-92 466 1 585 35 45 77 79 142 79 64 0 112-31 148-92 69-115 68-440-2-561-39-68-131-111-221-70-25 11-46 32-68 59" id="cF"/><path fill="#635dff" d="M1109-360C1066-122 902 20 624 20c-347 0-514-209-514-555 0-353 168-567 518-567 270 0 425 136 473 361l-283 14c-16-106-75-183-196-182-75 0-130 31-165 93s-52 152-52 270c0 249 74 374 221 374 120 0 188-82 201-201" id="cG"/><path fill="#635dff" d="M864 0L575-490l-121 84V0H173v-1484h281v850l386-448h302L762-660 1171 0H864" id="cH"/><path fill="#635dff" d="M802-909c-3-189-2-383-2-575h281v1248c-1 83 4 168 8 236H817c-9-50-14-117-15-176h-4C735-49 651 20 482 20 191 20 97-238 97-539c0-243 66-432 221-519 50-28 108-42 175-42 162 2 253 78 309 191zm-70 658c91-113 93-462 2-584-46-61-145-100-224-53-96 56-119 190-120 349 0 123 17 214 52 275 46 82 130 115 222 74 25-12 46-33 68-61" id="cI"/><g id="ae"><use transform="matrix(0.006510416666666667,0,0,0.006510416666666667,0,0)" xlink:href="#cE"/><use transform="matrix(0.006510416666666667,0,0,0.006510416666666667,8.001302083333334,0)" xlink:href="#cy"/><use transform="matrix(0.006510416666666667,0,0,0.006510416666666667,16.002604166666668,0)" xlink:href="#cF"/><use transform="matrix(0.006510416666666667,0,0,0.006510416666666667,24.00390625,0)" xlink:href="#cu"/><use transform="matrix(0.006510416666666667,0,0,0.006510416666666667,32.005208333333336,0)" xlink:href="#cr"/><use transform="matrix(0.006510416666666667,0,0,0.006510416666666667,40.00651041666667,0)" xlink:href="#cG"/><use transform="matrix(0.006510416666666667,0,0,0.006510416666666667,48.00781250000001,0)" xlink:href="#cH"/><use transform="matrix(0.006510416666666667,0,0,0.006510416666666667,56.00911458333335,0)" xlink:href="#cv"/><use transform="matrix(0.006510416666666667,0,0,0.006510416666666667,64.01041666666667,0)" xlink:href="#cI"/></g><path fill="#635dff" d="M426-814c58-49 145-93 255-90 282 8 442 169 442 450 0 312-203 474-522 474-288 0-453-130-497-372l281-23c24 104 89 172 219 172 153 0 230-91 230-245 0-144-78-226-224-229-94-2-148 42-191 91H145l49-763h847v209H449" id="cJ"/><g id="af"><use transform="matrix(0.006510416666666667,0,0,0.006510416666666667,0,0)" xlink:href="#cA"/><use transform="matrix(0.006510416666666667,0,0,0.006510416666666667,8.001302083333334,0)" xlink:href="#cJ"/><use transform="matrix(0.006510416666666667,0,0,0.006510416666666667,16.002604166666668,0)" xlink:href="#cC"/></g><path fill="#635dff" d="M1100-543c2 361-147 563-501 563-342 0-470-199-470-548v-821h295v818c3 172 13 322 183 320 173-2 198-150 198-330v-808h295v806" id="cK"/><g id="ag"><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,0,0)" xlink:href="#cK"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,10.668402777777779,0)" xlink:href="#cy"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,21.336805555555557,0)" xlink:href="#cF"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,32.005208333333336,0)" xlink:href="#cu"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,42.673611111111114,0)" xlink:href="#cr"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,53.34201388888889,0)" xlink:href="#cG"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,64.01041666666667,0)" xlink:href="#cH"/></g><g id="ah"><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,0,0)" xlink:href="#cq"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,10.668402777777779,0)" xlink:href="#cr"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,21.336805555555557,0)" xlink:href="#cs"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,32.005208333333336,0)" xlink:href="#ct"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,42.673611111111114,0)" xlink:href="#cu"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,53.34201388888889,0)" xlink:href="#cv"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,64.01041666666667,0)" xlink:href="#cw"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,74.67881944444446,0)" xlink:href="#cx"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,85.34722222222223,0)" xlink:href="#cr"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,96.015625,0)" xlink:href="#cy"/></g><path fill="#635dff" d="M788-691c191 26 337 112 337 315 0 286-214 399-510 399-306 0-483-128-522-391l286-25c18 124 91 190 235 188 132-2 223-58 223-188 0-176-191-182-378-179v-227c176 5 345-9 345-176 0-115-82-171-200-171s-198 55-206 169l-281-20c34-252 213-373 492-373 224 0 381 74 451 224 20 43 29 89 29 136 0 195-130 279-301 315v4" id="cL"/><g id="ai"><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,0,0)" xlink:href="#cA"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,10.668402777777779,0)" xlink:href="#cL"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,21.336805555555557,0)" xlink:href="#cC"/></g><path fill="#635dff" d="M796 0v-574H433V0H138v-1349h295v531h363v-531h295V0H796" id="cM"/><path fill="#635dff" d="M775-193C708-75 621 20 439 20 226 20 106-93 106-306c0-251 170-341 417-346l223-4c4-143-12-264-148-264-103 0-141 58-150 153l-293-14c37-219 194-321 455-321 263 0 418 130 417 390v392c1 84 5 161 89 160 21 0 42-2 62-6v152c-57 15-108 27-180 26-145 0-202-73-217-205h-6zm-256 17c168 0 234-139 227-325-166 4-347-25-347 173 0 94 33 152 120 152" id="cN"/><path fill="#635dff" d="M875-1102c70 0 148 7 206 17v237c-110-17-267-37-359 15-123 69-192 207-192 395V0H250c-10-367 32-789-52-1082h271c19 69 36 149 46 228h4c52-151 151-250 356-248" id="cO"/><g id="aj"><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,0,0)" xlink:href="#cM"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,10.668402777777779,0)" xlink:href="#cv"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,21.336805555555557,0)" xlink:href="#cN"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,32.005208333333336,0)" xlink:href="#cO"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,42.673611111111114,0)" xlink:href="#cw"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,53.34201388888889,0)" xlink:href="#cF"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,64.01041666666667,0)" xlink:href="#cv"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,74.67881944444446,0)" xlink:href="#cN"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,85.34722222222223,0)" xlink:href="#cw"/></g><g id="ak"><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,0,0)" xlink:href="#cw"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,10.668402777777779,0)" xlink:href="#cx"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,21.336805555555557,0)" xlink:href="#cs"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,32.005208333333336,0)" xlink:href="#cv"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,42.673611111111114,0)" xlink:href="#cr"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,53.34201388888889,0)" xlink:href="#cE"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,64.01041666666667,0)" xlink:href="#cw"/></g><path fill="#635dff" d="M844-1321c-130 0-195 53-191 182v57h443v190H653V0H373v-892H117v-190h256v-83c5-247 162-348 422-349 120-1 232 13 327 28v184c-84-10-183-19-278-19" id="cP"/><path fill="#635dff" d="M1108-33c-3 314-178 467-492 467-243 0-400-94-447-291l281-33c17 79 82 141 174 141 176 0 212-155 205-347-2-40 5-80 0-115C773-85 665-12 501-12c-288 0-377-242-377-538 0-242 65-426 223-510 50-26 108-39 175-39 160 0 253 78 307 191h5c1-58 5-125 14-174h266c-12 335-3 703-6 1049zM811-384c25-82 27-259 1-342-30-99-77-180-190-180-172 0-205 171-205 356 0 116 18 202 54 258 48 76 129 107 221 70 62-25 96-86 119-162" id="cQ"/><g id="al"><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,0,0)" xlink:href="#cP"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,10.668402777777779,0)" xlink:href="#cr"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,21.336805555555557,0)" xlink:href="#cO"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,32.005208333333336,0)" xlink:href="#cG"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,42.673611111111114,0)" xlink:href="#cx"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,53.34201388888889,0)" xlink:href="#cy"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,64.01041666666667,0)" xlink:href="#cQ"/></g><path fill="#635dff" d="M1018 0H770c-49-215-106-420-154-636C567-419 511-214 459 0H211L0-1349h259c35 320 94 617 105 961 37-206 100-393 154-583h195c54 191 118 375 154 583 14-339 68-641 102-961h259" id="cR"/><path fill="#635dff" d="M462-1121v384h621v228H462V0H167v-1349h939v228H462" id="cS"/><path fill="#635dff" d="M762-1121V0H467v-1121H61v-228h1107v228H762" id="cT"/><g id="am"><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,0,0)" xlink:href="#cR"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,10.668402777777779,0)" xlink:href="#cS"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,21.336805555555557,0)" xlink:href="#cT"/></g><g id="an"><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,0,0)" xlink:href="#cG"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,10.668402777777779,0)" xlink:href="#cr"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,21.336805555555557,0)" xlink:href="#cs"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,32.005208333333336,0)" xlink:href="#ct"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,42.673611111111114,0)" xlink:href="#cu"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,53.34201388888889,0)" xlink:href="#cv"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,64.01041666666667,0)" xlink:href="#cw"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,74.67881944444446,0)" xlink:href="#cx"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,85.34722222222223,0)" xlink:href="#cr"/><use transform="matrix(0.008680555555555556,0,0,0.008680555555555556,96.015625,0)" xlink:href="#cy"/></g></defs></g></svg>
@@ -0,0 +1,51 @@
1
+ # Sticky (and Non-Sticky) Task Queues
2
+
3
+ A temporal worker, whether polling for workflows or activities, does so by polling a specific
4
+ "Task Queue". [Here](https://docs.temporal.io/docs/concepts/task-queues) is some basic documentation
5
+ on them. Task queues are designed to be lightweight, it's OK to have very large numbers of them.
6
+
7
+ Any time there is a new activity task or workflow task that needs to be performed by a worker, it'll
8
+ be queued in a specific task queue.
9
+
10
+ ## Non-Sticky Queues
11
+ Before explaining sticky queues, let's examine how things work when they are *not* enabled.
12
+
13
+ In our example, let's say there are two workers polling the same task queue (`shared_q`):
14
+
15
+ ```text
16
+ ┌───────┬───►shared_q
17
+ w1│ │ ┌───────┐
18
+ ┌──┤ │ │ t1 │
19
+ │ │ │ ├───────┤
20
+ └──┘ │ │ t2 │
21
+ │ ├───────┤
22
+ w2 │ │ t3 │
23
+ ┌──┬───────┘ ├───────┤
24
+ │ │ │ .. │
25
+ └──┘ └───────┘
26
+ ```
27
+
28
+ Both workers poll the same queue, and either may take the next task from it. When they do, they will
29
+ be delivered the *entire* history of that workflow. They will recreate workflow state by replaying
30
+ history from the start, and then issue the appropriate workflow task completion. The cycle continues
31
+ until the workflow executions are finished.
32
+
33
+ ## Sticky Queues
34
+ Sticky queues exist to avoid needing to ship the entire workflow history to workers for every task,
35
+ and avoid the need to replay history from the start.
36
+
37
+ To accomplish this, workers maintain workflow state in a cache. When they reply with a workflow
38
+ task completion, they specify a task queue name specific to them. This queue name is unique to
39
+ the specific instance of the worker and will be different across restarts even of the same binary on
40
+ the same machine. The worker will poll on both the shared queue, and its specific task queue.
41
+
42
+ Also unlike normal task queues, sticky task queues have a schedule-to-start timeout associated with
43
+ them. More on why this is needed later.
44
+
45
+ The interactions, at a high level, look like this:
46
+ ![](https://www.planttext.com/api/plantuml/svg/jLEnRjim4Dtv5GTDSH0FNeEYI8SCtT8aG4Q3eKyI8OedyKwM_FSzKNOJkqK13rbvxxrxx-dqm6AJ36qmHhm4XE95l6iEy6gvWLy33WW_es2oJZn5BepfbE2TxsmKADueDPXWKu1b63VdmnTCUqnvLABfirZ1rE9M-lnQzHUlsp7hRJVRQPeoX7jZnWsilwi4tCCJXG0KeVYZKnWTV5khbewhPDyXuYGWwd-Uh9Mf_7kOdPQ1nYNP3KRn2Q7sB9GEgzEI37rAv91vqVYqF3CTjLr0mJiO63C4ZXd-7K8RcsqS9Nv4mBtkleFW6mGBubljh_J9n-e8v1vkRnNx61VXRCC4ekxaJB4mdlBCOvuxiS0TEbzwjpZwRs-N9fSI-ReIAOQ38iSb4w--iCJhExme4EFkx2C_xhsJZnRBH2quwseqaGGX-QgM4qml7shRTHYrw194h-OJanBCfY6XPOfdv_gCZ7ByesvyT67OeL9hx-eF0PpG3VEErTMdKlqLCviFMCxUtn0gWdVh6X1IrmXSsuIxutaOyw2bwB__6m00)]
47
+
48
+ After reviewing the diagram you may wonder what happens if the worker dies without being able
49
+ to send the `ResetSticky` request. This is where the timeout for sticky queues matters. If the
50
+ worker does not poll from the queue during the specified duration (default `5s`), then the task
51
+ in the queue will time out and will be rescheduled onto the non-sticky queue.
@@ -0,0 +1,24 @@
1
+ [package]
2
+ name = "temporal-sdk-core-bridge-ffi"
3
+ version = "0.1.0"
4
+ edition = "2021"
5
+ license-file = "LICENSE.txt"
6
+ description = "FFI Bridge for Core"
7
+ homepage = "https://temporal.io/"
8
+ repository = "https://github.com/temporalio/sdk-core"
9
+
10
+ [lib]
11
+ crate-type = ["staticlib"]
12
+
13
+ [dependencies]
14
+ lazy_static = "1.4"
15
+ libc = "0.2"
16
+ log = "0.4"
17
+ prost = "0.11"
18
+ temporal-sdk-core = { version = "0.1", path = "../core" }
19
+ temporal-sdk-core-api = { version = "0.1", path = "../core-api" }
20
+ temporal-sdk-core-protos = { version = "0.1", path = "../sdk-core-protos" }
21
+ tokio = "1"
22
+
23
+ [build-dependencies]
24
+ cbindgen = "0.24"
@@ -0,0 +1,23 @@
1
+ Temporal Core SDK
2
+
3
+ The MIT License
4
+
5
+ Copyright (c) 2022 Temporal Technologies, Inc. All Rights Reserved
6
+
7
+ Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ of this software and associated documentation files (the "Software"), to deal
9
+ in the Software without restriction, including without limitation the rights
10
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ copies of the Software, and to permit persons to whom the Software is
12
+ furnished to do so, subject to the following conditions:
13
+
14
+ The above copyright notice and this permission notice shall be included in all
15
+ copies or substantial portions of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
+ SOFTWARE.