opal-up 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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>