opal-up 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +209 -0
  3. data/README.md +81 -28
  4. data/bin/up_ruby +4 -0
  5. data/bin/up_ruby_cluster +4 -0
  6. data/ext/up_ext/App.h +606 -0
  7. data/ext/up_ext/AsyncSocket.h +355 -0
  8. data/ext/up_ext/AsyncSocketData.h +87 -0
  9. data/ext/up_ext/BloomFilter.h +83 -0
  10. data/ext/up_ext/ChunkedEncoding.h +236 -0
  11. data/ext/up_ext/ClientApp.h +36 -0
  12. data/ext/up_ext/HttpContext.h +502 -0
  13. data/ext/up_ext/HttpContextData.h +56 -0
  14. data/ext/up_ext/HttpErrors.h +53 -0
  15. data/ext/up_ext/HttpParser.h +680 -0
  16. data/ext/up_ext/HttpResponse.h +578 -0
  17. data/ext/up_ext/HttpResponseData.h +95 -0
  18. data/ext/up_ext/HttpRouter.h +380 -0
  19. data/ext/up_ext/Loop.h +204 -0
  20. data/ext/up_ext/LoopData.h +112 -0
  21. data/ext/up_ext/MoveOnlyFunction.h +377 -0
  22. data/ext/up_ext/PerMessageDeflate.h +315 -0
  23. data/ext/up_ext/ProxyParser.h +163 -0
  24. data/ext/up_ext/QueryParser.h +120 -0
  25. data/ext/up_ext/TopicTree.h +363 -0
  26. data/ext/up_ext/Utilities.h +66 -0
  27. data/ext/up_ext/WebSocket.h +381 -0
  28. data/ext/up_ext/WebSocketContext.h +434 -0
  29. data/ext/up_ext/WebSocketContextData.h +109 -0
  30. data/ext/up_ext/WebSocketData.h +86 -0
  31. data/ext/up_ext/WebSocketExtensions.h +256 -0
  32. data/ext/up_ext/WebSocketHandshake.h +145 -0
  33. data/ext/up_ext/WebSocketProtocol.h +506 -0
  34. data/ext/up_ext/bsd.c +767 -0
  35. data/ext/up_ext/bsd.h +109 -0
  36. data/ext/up_ext/context.c +524 -0
  37. data/ext/up_ext/epoll_kqueue.c +458 -0
  38. data/ext/up_ext/epoll_kqueue.h +67 -0
  39. data/ext/up_ext/extconf.rb +5 -0
  40. data/ext/up_ext/internal.h +224 -0
  41. data/ext/up_ext/libusockets.h +350 -0
  42. data/ext/up_ext/libuwebsockets.cpp +1374 -0
  43. data/ext/up_ext/libuwebsockets.h +260 -0
  44. data/ext/up_ext/loop.c +386 -0
  45. data/ext/up_ext/loop_data.h +38 -0
  46. data/ext/up_ext/socket.c +231 -0
  47. data/ext/up_ext/up_ext.c +278 -0
  48. data/lib/up/node/rack_env.rb +2 -2
  49. data/lib/up/ruby/cluster_cli.rb +10 -0
  50. data/lib/up/ruby/rack_cluster.rb +26 -0
  51. data/lib/up/ruby/rack_env.rb +97 -0
  52. data/lib/up/ruby/rack_server.rb +26 -0
  53. data/lib/up/ruby/server_cli.rb +10 -0
  54. data/lib/up/u_web_socket/rack_env.rb +1 -1
  55. data/lib/up/version.rb +1 -1
  56. metadata +71 -18
  57. data/.gitignore +0 -5
  58. data/Gemfile +0 -2
  59. data/example_rack_app/Gemfile +0 -3
  60. data/example_rack_app/config.ru +0 -6
  61. data/example_rack_app/rack_app.rb +0 -5
  62. data/example_roda_app/Gemfile +0 -6
  63. data/example_roda_app/config.ru +0 -6
  64. data/example_roda_app/roda_app.rb +0 -37
  65. data/example_sinatra_app/Gemfile +0 -6
  66. data/example_sinatra_app/config.ru +0 -6
  67. data/example_sinatra_app/sinatra_app.rb +0 -7
  68. data/opal-up.gemspec +0 -27
  69. data/up_logo.svg +0 -256
@@ -0,0 +1,26 @@
1
+ require 'up/ruby/rack_env'
2
+ require 'up_ext'
3
+
4
+ module Up
5
+ module Ruby
6
+ module RackServer
7
+ def self.run(app, options = {})
8
+ raise "already running" if @server
9
+ @server = Up::Ruby::Server.new(app: app, **options).listen
10
+ true
11
+ end
12
+
13
+ def self.shutdown
14
+ @server&.stop
15
+ @server = nil
16
+ end
17
+ end
18
+ end
19
+ end
20
+
21
+ ENV['RACK_HANDLER'] ||= 'up'
22
+
23
+ begin
24
+ ::Rackup::Handler.register('up', Up::Ruby::RackServer) if defined?(::Rackup::Handler)
25
+ rescue StandardError
26
+ end
@@ -0,0 +1,10 @@
1
+ require 'rack/builder'
2
+ require 'up/ruby/rack_server'
3
+
4
+ module Up
5
+ module CLI
6
+ def self.call
7
+ Up::Ruby::RackServer.run(get_app, get_options)
8
+ end
9
+ end
10
+ end
@@ -48,7 +48,7 @@ module Up
48
48
  when 'PATH_INFO'
49
49
  `#@req.getUrl()`
50
50
  when 'QUERY_STRING'
51
- `#@req.getQuery()`
51
+ `#@req.getQuery() || nil`
52
52
  when 'RACK_ERRORS'
53
53
  self['rack.errors']
54
54
  when 'RACK_LOGGER'
data/lib/up/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Up
2
- VERSION = '0.0.2'.freeze
2
+ VERSION = '0.0.3'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opal-up
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Biedermann
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-02-03 00:00:00.000000000 Z
11
+ date: 2024-02-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: logger
@@ -92,6 +92,20 @@ dependencies:
92
92
  - - "~>"
93
93
  - !ruby/object:Gem::Version
94
94
  version: 13.1.0
95
+ - !ruby/object:Gem::Dependency
96
+ name: rake-compiler
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - "~>"
100
+ - !ruby/object:Gem::Version
101
+ version: 1.2.7
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - "~>"
107
+ - !ruby/object:Gem::Version
108
+ version: 1.2.7
95
109
  - !ruby/object:Gem::Dependency
96
110
  name: rspec
97
111
  requirement: !ruby/object:Gem::Requirement
@@ -106,7 +120,7 @@ dependencies:
106
120
  - - "~>"
107
121
  - !ruby/object:Gem::Version
108
122
  version: 3.12.0
109
- description: High performance Rack server for Opal Ruby
123
+ description: High performance Rack server for Opal and Ruby
110
124
  email:
111
125
  - jan@kursator.de
112
126
  executables:
@@ -115,11 +129,12 @@ executables:
115
129
  - up_cluster
116
130
  - up_node
117
131
  - up_node_cluster
118
- extensions: []
132
+ - up_ruby
133
+ - up_ruby_cluster
134
+ extensions:
135
+ - ext/up_ext/extconf.rb
119
136
  extra_rdoc_files: []
120
137
  files:
121
- - ".gitignore"
122
- - Gemfile
123
138
  - LICENSE
124
139
  - README.md
125
140
  - bin/up
@@ -127,15 +142,50 @@ files:
127
142
  - bin/up_cluster
128
143
  - bin/up_node
129
144
  - bin/up_node_cluster
130
- - example_rack_app/Gemfile
131
- - example_rack_app/config.ru
132
- - example_rack_app/rack_app.rb
133
- - example_roda_app/Gemfile
134
- - example_roda_app/config.ru
135
- - example_roda_app/roda_app.rb
136
- - example_sinatra_app/Gemfile
137
- - example_sinatra_app/config.ru
138
- - example_sinatra_app/sinatra_app.rb
145
+ - bin/up_ruby
146
+ - bin/up_ruby_cluster
147
+ - ext/up_ext/App.h
148
+ - ext/up_ext/AsyncSocket.h
149
+ - ext/up_ext/AsyncSocketData.h
150
+ - ext/up_ext/BloomFilter.h
151
+ - ext/up_ext/ChunkedEncoding.h
152
+ - ext/up_ext/ClientApp.h
153
+ - ext/up_ext/HttpContext.h
154
+ - ext/up_ext/HttpContextData.h
155
+ - ext/up_ext/HttpErrors.h
156
+ - ext/up_ext/HttpParser.h
157
+ - ext/up_ext/HttpResponse.h
158
+ - ext/up_ext/HttpResponseData.h
159
+ - ext/up_ext/HttpRouter.h
160
+ - ext/up_ext/Loop.h
161
+ - ext/up_ext/LoopData.h
162
+ - ext/up_ext/MoveOnlyFunction.h
163
+ - ext/up_ext/PerMessageDeflate.h
164
+ - ext/up_ext/ProxyParser.h
165
+ - ext/up_ext/QueryParser.h
166
+ - ext/up_ext/TopicTree.h
167
+ - ext/up_ext/Utilities.h
168
+ - ext/up_ext/WebSocket.h
169
+ - ext/up_ext/WebSocketContext.h
170
+ - ext/up_ext/WebSocketContextData.h
171
+ - ext/up_ext/WebSocketData.h
172
+ - ext/up_ext/WebSocketExtensions.h
173
+ - ext/up_ext/WebSocketHandshake.h
174
+ - ext/up_ext/WebSocketProtocol.h
175
+ - ext/up_ext/bsd.c
176
+ - ext/up_ext/bsd.h
177
+ - ext/up_ext/context.c
178
+ - ext/up_ext/epoll_kqueue.c
179
+ - ext/up_ext/epoll_kqueue.h
180
+ - ext/up_ext/extconf.rb
181
+ - ext/up_ext/internal.h
182
+ - ext/up_ext/libusockets.h
183
+ - ext/up_ext/libuwebsockets.cpp
184
+ - ext/up_ext/libuwebsockets.h
185
+ - ext/up_ext/loop.c
186
+ - ext/up_ext/loop_data.h
187
+ - ext/up_ext/socket.c
188
+ - ext/up_ext/up_ext.c
139
189
  - lib/up/bun/rack_env.rb
140
190
  - lib/up/bun/rack_server.rb
141
191
  - lib/up/bun/server.rb
@@ -149,6 +199,11 @@ files:
149
199
  - lib/up/node/server.rb
150
200
  - lib/up/node/server_cli.rb
151
201
  - lib/up/rack_builder_patch.rb
202
+ - lib/up/ruby/cluster_cli.rb
203
+ - lib/up/ruby/rack_cluster.rb
204
+ - lib/up/ruby/rack_env.rb
205
+ - lib/up/ruby/rack_server.rb
206
+ - lib/up/ruby/server_cli.rb
152
207
  - lib/up/u_web_socket/cluster.rb
153
208
  - lib/up/u_web_socket/cluster_cli.rb
154
209
  - lib/up/u_web_socket/rack_cluster.rb
@@ -157,8 +212,6 @@ files:
157
212
  - lib/up/u_web_socket/server.rb
158
213
  - lib/up/u_web_socket/server_cli.rb
159
214
  - lib/up/version.rb
160
- - opal-up.gemspec
161
- - up_logo.svg
162
215
  homepage: ''
163
216
  licenses:
164
217
  - MIT
@@ -171,7 +224,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
171
224
  requirements:
172
225
  - - ">="
173
226
  - !ruby/object:Gem::Version
174
- version: '0'
227
+ version: 3.0.0
175
228
  required_rubygems_version: !ruby/object:Gem::Requirement
176
229
  requirements:
177
230
  - - ">="
data/.gitignore DELETED
@@ -1,5 +0,0 @@
1
- node_modules
2
- Gemfile.lock
3
- package-lock.json
4
- package.json
5
- *.gem
data/Gemfile DELETED
@@ -1,2 +0,0 @@
1
- source 'https://rubygems.org'
2
- gemspec
@@ -1,3 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'opal-up', path: '../'
@@ -1,6 +0,0 @@
1
- require_relative 'rack_app'
2
- if defined? RubyVM
3
- # ensure up contenders use a JIT
4
- RubyVM::YJIT.enable
5
- end
6
- run RackApp
@@ -1,5 +0,0 @@
1
- class RackApp
2
- def self.call(env)
3
- [200, {}, [env.to_s]]
4
- end
5
- end
@@ -1,6 +0,0 @@
1
- source 'https://rubygems.org'
2
- git_source(:github) { |repo| "https://github.com/#{repo}.git" }
3
-
4
- gem 'rack', path: '../../rack'
5
- gem 'opal-up', path: '../'
6
- gem 'roda', path: '../../roda'
@@ -1,6 +0,0 @@
1
- require_relative 'roda_app'
2
- if defined? RubyVM
3
- # ensure up contenders use a JIT
4
- RubyVM::YJIT.enable
5
- end
6
- run RodaApp.freeze
@@ -1,37 +0,0 @@
1
- require "roda"
2
-
3
- class RodaApp < Roda
4
- STDERR.puts "executing route"
5
- route do |r|
6
- STDERR.puts r
7
- # GET / request
8
- r.root do
9
- r.redirect "/hello"
10
- end
11
-
12
- # /hello branch
13
- r.on "hello" do
14
- # Set variable for all routes in /hello branch
15
- @greeting = 'Hello'
16
-
17
- # GET /hello/world request
18
- r.get "world" do
19
- "#{@greeting} world!"
20
- end
21
-
22
- # /hello request
23
- r.is do
24
- # GET /hello request
25
- r.get do
26
- "#{@greeting}!"
27
- end
28
-
29
- # POST /hello request
30
- r.post do
31
- puts "Someone said #{@greeting}!"
32
- r.redirect
33
- end
34
- end
35
- end
36
- end
37
- end
@@ -1,6 +0,0 @@
1
- source 'https://rubygems.org'
2
- git_source(:github) { |repo| "https://github.com/#{repo}.git" }
3
-
4
- gem 'opal', github: 'opal/opal'
5
- gem 'opal-up', path: '../'
6
- gem 'sinatra'
@@ -1,6 +0,0 @@
1
- require_relative 'sinatra_app'
2
- if defined? RubyVM
3
- # ensure up contenders use a JIT
4
- RubyVM::YJIT.enable
5
- end
6
- run SinatraApp
@@ -1,7 +0,0 @@
1
- require 'sinatra/base'
2
-
3
- class SinatraApp
4
- get '/' do
5
- 'Hello world!'
6
- end
7
- end
data/opal-up.gemspec DELETED
@@ -1,27 +0,0 @@
1
- lib = File.expand_path('lib', __dir__)
2
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
- require_relative 'lib/up/version'
4
-
5
- Gem::Specification.new do |spec|
6
- spec.name = 'opal-up'
7
- spec.version = Up::VERSION
8
- spec.authors = ['Jan Biedermann']
9
- spec.email = ['jan@kursator.de']
10
-
11
- spec.summary = 'Rack server for Opal'
12
- spec.description = 'High performance Rack server for Opal Ruby'
13
- spec.homepage = ''
14
- spec.license = 'MIT'
15
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test_app|test|spec|features)/}) }
16
- spec.bindir = 'bin'
17
- spec.executables = %w[up up_bun up_cluster up_node up_node_cluster]
18
- spec.require_paths = %w[lib]
19
-
20
- spec.add_dependency 'logger', '~> 1.6.0'
21
- spec.add_dependency 'opal', '>= 1.8.2', '< 3.0.0'
22
- spec.add_dependency 'rack', '~> 3.0.9'
23
- spec.add_dependency 'rackup', '>= 0.2.2', '< 3.0.0'
24
-
25
- spec.add_development_dependency 'rake', '~> 13.1.0'
26
- spec.add_development_dependency 'rspec', '~> 3.12.0'
27
- end
data/up_logo.svg DELETED
@@ -1,256 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
- <!-- Generator: Adobe Illustrator 27.5.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
-
4
- <svg
5
- version="1.1"
6
- id="Capa_1"
7
- x="0px"
8
- y="0px"
9
- viewBox="0 0 799.92104 945.28792"
10
- xml:space="preserve"
11
- width="799.92102"
12
- height="945.2879"
13
- xmlns="http://www.w3.org/2000/svg"
14
- xmlns:svg="http://www.w3.org/2000/svg"><defs
15
- id="defs65"><rect
16
- x="222.77943"
17
- y="327.29486"
18
- width="357.86758"
19
- height="243.77267"
20
- id="rect66" /><rect
21
- x="27.871536"
22
- y="730.54065"
23
- width="778.40509"
24
- height="77.992775"
25
- id="rect65" /></defs>
26
- <rect
27
- y="0"
28
- style="clip-rule:evenodd;fill:#a0dbfa;fill-rule:evenodd;stroke-width:1.08707"
29
- width="799.91998"
30
- height="945.2879"
31
- id="rect1"
32
- x="0.001" />
33
- <polygon
34
- style="clip-rule:evenodd;fill:#ffffff;fill-rule:evenodd"
35
- points="658.991,136.939 654.959,136.939 654.959,377.684 646.655,377.684 646.655,136.939 642.378,136.939 650.684,125.153 "
36
- id="polygon1"
37
- transform="translate(0.001,145.36792)" />
38
- <path
39
- style="clip-rule:evenodd;fill:#ffffff;fill-rule:evenodd"
40
- d="m 51.406,361.61492 -10.996,-15.601 -11.853,16.817 v -77.905 H 43.49 l -28.997,-41.142 -14.492,20.562 v 680.942 c 287.066,0 608.08,0 799.92,0 v -667.871 l -23.525,33.38 h 13.71 v 49.736 l -9.558,-13.56 -8.285,11.756 v -97.417 h 14.933 l -28.997,-41.143 -28.998,41.143 h 14.075 v 32.453 l -6.645,-9.426 -19.901,28.237 h 9.66 v 31.023 l -11.389,-16.159 -12.573,17.839 v -58.049 h 14.933 l -28.997,-41.143 -28.997,41.143 h 14.075 v 48.193 l -11.716,-16.623 -28.996,41.143 h 14.074 v 33.128 l -10.901,-15.468 -12.667,17.972 v -82.428 h 14.933 l -28.997,-41.143 -28.997,41.143 h 14.075 v 23.414 l -10.996,-15.601 -11.853,16.818 v -77.905 h 14.933 l -28.997,-41.143 -28.997,41.143 h 14.075 v 48.954 l -9.197,-13.05 -28.244,40.074 h 13.709 v 49.736 l -9.557,-13.56 -8.285,11.756 v -97.417 h 14.932 l -28.997,-41.142 -28.996,41.142 h 14.074 v 32.453 l -6.643,-9.426 -19.901,28.237 h 9.66 v 31.023 l -11.389,-16.159 -12.573,17.839 v -58.049 h 14.933 l -28.997,-41.142 -28.997,41.142 h 14.075 v 48.193 l -11.716,-16.623 -28.997,41.142 h 14.075 v 29.21 l -11.853,-16.817 -11.715,16.623 v -75.811 h 14.932 l -28.997,-41.142 -28.996,41.142 h 14.075 v 23.414 l -10.996,-15.601 -11.853,16.817 v -77.905 h 14.932 l -28.997,-41.143 -28.997,41.143 h 14.075 v 23.9 l -9.197,-13.05 -28.244,40.074 h 13.71 v 49.736 l -9.557,-13.56 -8.286,11.756 v -137.781 h 14.933 l -28.997,-41.142 -28.996,41.142 h 14.075 v 72.818 l -6.644,-9.426 -19.902,28.237 h 9.66 v 31.023 l -11.389,-16.159 -12.573,17.839 v -58.049 h 14.933 l -28.997,-41.142 -28.996,41.142 h 14.075 v 48.193 l -11.715,-16.623 -28.997,41.142 h 14.075 v 22.63 l -12.349,-17.521 -11.22,15.92 v -67.824 h 14.933 l -28.997,-41.142 -29.001,41.143 h 14.075 z"
41
- id="path1" />
42
- <polygon
43
- style="clip-rule:evenodd;fill:#0073a2;fill-rule:evenodd"
44
- points="154.962,396.856 130.926,396.856 130.926,784.116 81.428,784.116 81.428,396.856 55.928,396.856 105.445,326.598 "
45
- id="polygon2"
46
- transform="translate(0.001,145.36792)" />
47
- <polygon
48
- style="clip-rule:evenodd;fill:#f4b200;fill-rule:evenodd"
49
- points="114.003,487.786 89.967,487.786 89.967,784.116 40.468,784.116 40.468,487.786 14.968,487.786 64.485,417.528 "
50
- id="polygon3"
51
- transform="translate(0.001,145.36792)" />
52
- <polygon
53
- style="clip-rule:evenodd;fill:#e95818;fill-rule:evenodd"
54
- points="89.967,487.786 89.967,784.116 81.428,784.116 81.428,441.566 114.003,487.786 "
55
- id="polygon4"
56
- transform="translate(0.001,145.36792)" />
57
- <polygon
58
- style="clip-rule:evenodd;fill:#dd0031;fill-rule:evenodd"
59
- points="195.102,525.469 171.067,525.469 171.067,784.116 121.568,784.116 121.568,525.469 96.068,525.469 145.585,455.211 "
60
- id="polygon5"
61
- transform="translate(0.001,145.36792)" />
62
- <polygon
63
- style="clip-rule:evenodd;fill:#6f3969;fill-rule:evenodd"
64
- points="130.926,784.116 121.568,784.116 121.568,525.469 96.068,525.469 130.926,476.01 "
65
- id="polygon6"
66
- transform="translate(0.001,145.36792)" />
67
- <polygon
68
- style="clip-rule:evenodd;fill:#a1ba24;fill-rule:evenodd"
69
- points="236.166,307.834 212.13,307.834 212.13,784.116 162.631,784.116 162.631,307.834 137.132,307.834 186.649,237.576 "
70
- id="polygon7"
71
- transform="translate(0.001,145.36792)" />
72
- <polygon
73
- style="clip-rule:evenodd;fill:#bf5c2a;fill-rule:evenodd"
74
- points="171.067,525.469 171.067,784.116 162.631,784.116 162.631,479.396 195.102,525.469 "
75
- id="polygon8"
76
- transform="translate(0.001,145.36792)" />
77
- <polygon
78
- style="clip-rule:evenodd;fill:#801d88;fill-rule:evenodd"
79
- points="277.229,222.627 253.193,222.627 253.193,784.116 203.694,784.116 203.694,222.627 178.195,222.627 227.712,152.37 "
80
- id="polygon9"
81
- transform="translate(0.001,145.36792)" />
82
- <polygon
83
- style="clip-rule:evenodd;fill:#916c56;fill-rule:evenodd"
84
- points="212.13,307.834 212.13,784.116 203.694,784.116 203.694,261.761 236.166,307.834 "
85
- id="polygon10"
86
- transform="translate(0.001,145.36792)" />
87
- <polygon
88
- style="clip-rule:evenodd;fill:#ed6500;fill-rule:evenodd"
89
- points="319.225,360.012 295.189,360.012 295.189,784.116 245.69,784.116 245.69,360.012 220.19,360.012 269.707,289.754 "
90
- id="polygon11"
91
- transform="translate(0.001,145.36792)" />
92
- <polygon
93
- style="clip-rule:evenodd;fill:#b74144;fill-rule:evenodd"
94
- points="253.193,784.116 245.69,784.116 245.69,360.012 220.19,360.012 253.193,313.185 "
95
- id="polygon12"
96
- transform="translate(0.001,145.36792)" />
97
- <polygon
98
- style="clip-rule:evenodd;fill:#0073a2;fill-rule:evenodd"
99
- points="360.754,438.811 336.719,438.811 336.719,784.116 287.22,784.116 287.22,438.811 261.72,438.811 311.237,368.553 "
100
- id="polygon13"
101
- transform="translate(0.001,145.36792)" />
102
- <polygon
103
- style="clip-rule:evenodd;fill:#766c51;fill-rule:evenodd"
104
- points="287.22,784.116 287.22,438.811 261.72,438.811 295.189,391.323 295.189,784.116 "
105
- id="polygon14"
106
- transform="translate(0.001,145.36792)" />
107
- <polygon
108
- style="clip-rule:evenodd;fill:#f4b200;fill-rule:evenodd"
109
- points="402.284,289.731 378.248,289.731 378.248,784.116 328.749,784.116 328.749,289.731 303.249,289.731 352.767,219.473 "
110
- id="polygon15"
111
- transform="translate(0.001,145.36792)" />
112
- <polygon
113
- style="clip-rule:evenodd;fill:#7a9350;fill-rule:evenodd"
114
- points="336.719,438.811 336.719,784.116 328.749,784.116 328.749,393.4 360.754,438.811 "
115
- id="polygon16"
116
- transform="translate(0.001,145.36792)" />
117
- <polygon
118
- style="clip-rule:evenodd;fill:#c5007e;fill-rule:evenodd"
119
- points="443.813,385.568 419.777,385.568 419.777,784.116 370.278,784.116 370.278,385.568 344.779,385.568 394.296,315.311 "
120
- id="polygon17"
121
- transform="translate(0.001,145.36792)" />
122
- <polygon
123
- style="clip-rule:evenodd;fill:#dd593e;fill-rule:evenodd"
124
- points="378.248,784.116 370.278,784.116 370.278,385.568 344.779,385.568 378.248,338.08 "
125
- id="polygon18"
126
- transform="translate(0.001,145.36792)" />
127
- <polygon
128
- style="clip-rule:evenodd;fill:#801d88;fill-rule:evenodd"
129
- points="462.372,784.116 412.873,784.116 412.873,494.185 387.373,494.185 436.891,423.926 486.407,494.185 462.372,494.185 "
130
- id="polygon19"
131
- transform="translate(0.001,145.36792)" />
132
- <polygon
133
- style="clip-rule:evenodd;fill:#a30e83;fill-rule:evenodd"
134
- points="419.777,784.116 412.873,784.116 412.873,494.185 387.373,494.185 419.777,448.207 "
135
- id="polygon20"
136
- transform="translate(0.001,145.36792)" />
137
- <polygon
138
- style="clip-rule:evenodd;fill:#dd0031;fill-rule:evenodd"
139
- points="530.066,585.762 506.03,585.762 506.03,784.116 456.532,784.116 456.532,585.762 431.032,585.762 480.55,515.504 "
140
- id="polygon21"
141
- transform="translate(0.001,145.36792)" />
142
- <polygon
143
- style="clip-rule:evenodd;fill:#af0e5c;fill-rule:evenodd"
144
- points="456.532,784.116 456.532,585.762 431.032,585.762 462.372,541.295 462.372,784.116 "
145
- id="polygon22"
146
- transform="translate(0.001,145.36792)" />
147
- <polygon
148
- style="clip-rule:evenodd;fill:#ed6500;fill-rule:evenodd"
149
- points="572.661,424.968 548.625,424.968 548.625,784.116 499.126,784.116 499.126,424.968 473.627,424.968 523.144,354.71 "
150
- id="polygon23"
151
- transform="translate(0.001,145.36792)" />
152
- <polygon
153
- style="clip-rule:evenodd;fill:#e53218;fill-rule:evenodd"
154
- points="506.03,585.762 506.03,784.116 499.126,784.116 499.126,541.861 530.066,585.762 "
155
- id="polygon24"
156
- transform="translate(0.001,145.36792)" />
157
- <polygon
158
- style="clip-rule:evenodd;fill:#0073a2;fill-rule:evenodd"
159
- points="615.255,327.001 591.22,327.001 591.22,784.116 541.721,784.116 541.721,327.001 516.221,327.001 565.738,256.743 "
160
- id="polygon25"
161
- transform="translate(0.001,145.36792)" />
162
- <polygon
163
- style="clip-rule:evenodd;fill:#766c51;fill-rule:evenodd"
164
- points="548.625,424.968 548.625,784.116 541.721,784.116 541.721,381.068 572.661,424.968 "
165
- id="polygon26"
166
- transform="translate(0.001,145.36792)" />
167
- <polygon
168
- style="clip-rule:evenodd;fill:#f4b200;fill-rule:evenodd"
169
- points="657.85,472.887 633.813,472.887 633.813,784.116 584.315,784.116 584.315,472.887 558.815,472.887 608.332,402.629 "
170
- id="polygon27"
171
- transform="translate(0.001,145.36792)" />
172
- <polygon
173
- style="clip-rule:evenodd;fill:#7a9350;fill-rule:evenodd"
174
- points="584.315,784.116 584.315,472.887 558.815,472.887 591.22,426.909 591.22,784.116 "
175
- id="polygon28"
176
- transform="translate(0.001,145.36792)" />
177
- <polygon
178
- style="clip-rule:evenodd;fill:#801d88;fill-rule:evenodd"
179
- points="701.509,571.919 677.473,571.919 677.473,784.116 627.974,784.116 627.974,571.919 602.475,571.919 651.991,501.66 "
180
- id="polygon29"
181
- transform="translate(0.001,145.36792)" />
182
- <polygon
183
- style="clip-rule:evenodd;fill:#ba6744;fill-rule:evenodd"
184
- points="633.813,784.116 627.974,784.116 627.974,571.919 602.475,571.919 633.813,527.452 "
185
- id="polygon30"
186
- transform="translate(0.001,145.36792)" />
187
- <polygon
188
- style="clip-rule:evenodd;fill:#a1ba24;fill-rule:evenodd"
189
- points="744.102,399.412 720.067,399.412 720.067,784.116 670.568,784.116 670.568,399.412 645.068,399.412 694.586,329.153 "
190
- id="polygon31"
191
- transform="translate(0.001,145.36792)" />
192
- <polygon
193
- style="clip-rule:evenodd;fill:#916c56;fill-rule:evenodd"
194
- points="677.473,571.919 677.473,784.116 670.568,784.116 670.568,528.018 701.509,571.919 "
195
- id="polygon32"
196
- transform="translate(0.001,145.36792)" />
197
- <polygon
198
- style="clip-rule:evenodd;fill:#dd0031;fill-rule:evenodd"
199
- points="786.697,511.222 762.661,511.222 762.661,784.116 713.162,784.116 713.162,511.222 687.662,511.222 737.18,440.964 "
200
- id="polygon33"
201
- transform="translate(0.001,145.36792)" />
202
- <polygon
203
- style="clip-rule:evenodd;fill:#bf5c2a;fill-rule:evenodd"
204
- points="713.162,784.116 713.162,511.222 687.662,511.222 720.067,465.244 720.067,784.116 "
205
- id="polygon34"
206
- transform="translate(0.001,145.36792)" />
207
- <path
208
- style="clip-rule:evenodd;fill:#ffffff;fill-rule:evenodd"
209
- d="m 140.554,690.37292 28.997,-41.143 28.997,41.143 h -14.075 v 64.45 l 10.996,-15.602 28.997,41.143 h -14.075 v 23.414 l 10.996,-15.602 11.852,16.817 v -77.905 h -14.932 l 28.997,-41.142 28.997,41.142 h -14.075 v 48.954 l 9.197,-13.05 28.245,40.075 h -13.71 v 49.735 l 9.557,-13.56 8.286,11.757 v -97.417 h -14.933 l 28.997,-41.142 28.997,41.142 h -14.075 v 32.453 l 6.644,-9.427 19.901,28.238 h -9.66 v 31.022 l 11.389,-16.159 12.573,17.839 v -58.049 h -14.933 l 28.997,-41.143 28.997,41.143 H 402.62 v 48.193 l 11.716,-16.623 21.46416,30.45686 5.31084,-6.92086 11.716,16.622 v -45.81 h -14.933 l 28.997,-41.142 28.997,41.142 h -14.075 v 23.414 l 10.996,-15.601 11.853,16.817 v -77.905 h -14.933 l 28.997,-41.143 28.997,41.143 h -14.075 v 23.899 l 9.198,-13.05 28.243,40.075 H 557.38 v 49.735 l 9.557,-13.56 8.286,11.757 v -137.78 H 560.29 l 28.997,-41.142 28.997,41.142 h -14.075 v 72.818 l 6.644,-9.427 19.901,28.238 h -9.66 v 31.022 l 11.39,-16.159 12.572,17.839 v -58.049 h -14.933 l 28.997,-41.143 28.997,41.143 h -14.075 v 48.193 l 11.716,-16.623 22.43456,30.47358 4.83644,-6.22158 11.22,15.92 v -45.824 h -14.932 l 28.997,-41.142 28.996,41.142 h -14.074 v 23.414 l 10.995,-15.601 11.852,16.817 v -77.905 l -11.98653,-0.65137 26.05053,-40.49163 9.773,13.867 v 208.42 H 0 v -195.348 l 28.244,40.074 h -13.71 v 49.735 l 9.557,-13.56 8.286,11.756 v -97.416 H 17.446 l 28.997,-41.143 28.997,41.143 H 61.365 v 32.452 l 6.644,-9.426 19.901,28.237 h -9.66 v 31.022 l 11.389,-16.159 12.573,17.839 v -58.049 H 87.279 l 28.997,-41.142 28.997,41.142 h -14.075 v 48.193 l 11.716,-16.622 12.573,17.839 v -113.481 z"
210
- id="path34" />
211
-
212
- <polygon
213
- style="clip-rule:evenodd;fill:#ffffff;fill-rule:evenodd"
214
- points="73.967,118.991 69.935,118.991 69.935,359.736 61.631,359.736 61.631,118.991 57.354,118.991 65.66,107.205 "
215
- id="polygon60"
216
- transform="translate(0.001,145.36792)" />
217
- <polygon
218
- style="clip-rule:evenodd;fill:#ffffff;fill-rule:evenodd"
219
- points="156.145,37.469 152.112,37.469 152.112,278.214 143.809,278.214 143.809,37.469 139.531,37.469 147.837,25.683 "
220
- id="polygon61"
221
- transform="translate(0.001,145.36792)" />
222
- <polygon
223
- style="clip-rule:evenodd;fill:#ffffff;fill-rule:evenodd"
224
- points="653.848,606.583 649.815,606.583 649.815,756.577 641.512,756.577 641.512,606.583 637.234,606.583 645.541,594.797 "
225
- id="polygon62"
226
- transform="translate(0.001,145.36792)" />
227
- <polygon
228
- style="clip-rule:evenodd;fill:#ffffff;fill-rule:evenodd"
229
- points="132.417,541.98 128.384,541.98 128.384,691.976 120.081,691.976 120.081,541.98 115.803,541.98 124.109,530.194 "
230
- id="polygon63"
231
- transform="translate(0.001,145.36792)" />
232
- <polygon
233
- style="clip-rule:evenodd;fill:#ffffff;fill-rule:evenodd"
234
- points="752.289,592.739 748.256,592.739 748.256,742.734 739.953,742.734 739.953,592.739 735.675,592.739 743.981,580.953 "
235
- id="polygon64"
236
- transform="translate(0.001,145.36792)" />
237
- <polygon
238
- style="clip-rule:evenodd;fill:#ffffff;fill-rule:evenodd"
239
- points="471.004,75.805 466.972,75.805 466.972,316.55 458.668,316.55 458.668,75.805 454.391,75.805 462.697,64.019 "
240
- id="polygon65"
241
- transform="translate(0.001,145.36792)" />
242
- <text
243
- xml:space="preserve"
244
- id="text65"
245
- style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:53.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;white-space:pre;shape-inside:url(#rect65);fill:#000000"
246
- transform="translate(-11.999,133.36792)"><tspan
247
- x="27.871094"
248
- y="778.58122"
249
- id="tspan1">UNEXPECTED PROMPTITUDE</tspan></text><text
250
- xml:space="preserve"
251
- id="text66"
252
- style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:192px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;white-space:pre;shape-inside:url(#rect66);fill:#000000"
253
- transform="translate(20.13016,-317.87561)"><tspan
254
- x="222.7793"
255
- y="500.23977"
256
- id="tspan2">UP!</tspan></text></svg>