mumuki-gobstones-runner 2.7.1 → 2.8.0

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 (57) hide show
  1. checksums.yaml +4 -4
  2. data/lib/assets_server.rb +20 -1
  3. data/lib/checker.rb +2 -2
  4. data/lib/game_framework/default.gbs.erb +3 -0
  5. data/lib/game_framework/default.xml.erb +3 -0
  6. data/lib/game_framework/extra.gbs.erb +84 -0
  7. data/lib/game_framework/program.gbs.erb +5 -0
  8. data/lib/game_framework/program.xml.erb +17 -0
  9. data/lib/gobstones.rb +1 -0
  10. data/lib/gobstones/batch.rb +4 -2
  11. data/lib/gobstones/batch_parser.rb +5 -1
  12. data/lib/gobstones/compilation_mode.rb +60 -0
  13. data/lib/gobstones_runner.rb +3 -1
  14. data/lib/public/full-kindergarten-toolbox.xml +5 -0
  15. data/lib/public/local-media/bool-false.svg +24 -0
  16. data/lib/public/local-media/bool-true.svg +17 -0
  17. data/lib/public/local-media/clean.png +0 -0
  18. data/lib/public/local-media/color-azul.svg +44 -0
  19. data/lib/public/local-media/color-negro.svg +44 -0
  20. data/lib/public/local-media/color-rojo.svg +44 -0
  21. data/lib/public/local-media/color-verde.svg +44 -0
  22. data/lib/public/local-media/direccion-este.svg +38 -0
  23. data/lib/public/local-media/direccion-norte.svg +38 -0
  24. data/lib/public/local-media/direccion-oeste.svg +38 -0
  25. data/lib/public/local-media/direccion-sur.svg +38 -0
  26. data/lib/public/local-media/hand.png +0 -0
  27. data/lib/public/local-media/main-procedure.png +0 -0
  28. data/lib/public/local-media/minus.png +0 -0
  29. data/lib/public/local-media/plus.png +0 -0
  30. data/lib/public/local-media/program.png +0 -0
  31. data/lib/public/local-media/repeticion-simple.png +0 -0
  32. data/lib/public/media/1x1.gif +0 -0
  33. data/lib/public/media/ShiftDown.png +0 -0
  34. data/lib/public/media/ShiftLeft.png +0 -0
  35. data/lib/public/media/ShiftRight.png +0 -0
  36. data/lib/public/media/ShiftUp.png +0 -0
  37. data/lib/public/media/click.mp3 +0 -0
  38. data/lib/public/media/click.ogg +0 -0
  39. data/lib/public/media/click.wav +0 -0
  40. data/lib/public/media/delete.mp3 +0 -0
  41. data/lib/public/media/delete.ogg +0 -0
  42. data/lib/public/media/delete.wav +0 -0
  43. data/lib/public/media/disconnect.mp3 +0 -0
  44. data/lib/public/media/disconnect.ogg +0 -0
  45. data/lib/public/media/disconnect.wav +0 -0
  46. data/lib/public/media/quote0.png +0 -0
  47. data/lib/public/media/quote1.png +0 -0
  48. data/lib/public/media/sprites.png +0 -0
  49. data/lib/public/media/sprites.svg +74 -0
  50. data/lib/public/minimal-kindergarten-toolbox.xml +2 -0
  51. data/lib/render/boards.html.erb +4 -6
  52. data/lib/render/editor/editor.css +9 -0
  53. data/lib/render/editor/{editor.html → editor.html.erb} +143 -18
  54. data/lib/render/html_renderer.rb +2 -2
  55. data/lib/render/with_renderer.rb +6 -3
  56. data/lib/version_hook.rb +1 -1
  57. metadata +91 -34
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d96082c599e490cc9fb4852f5abeb3e1d1028dae114a164439c012de51b21f0f
4
- data.tar.gz: 0ec06a7c118e46a253a6b1c5629743f06557df5a2a08c659a70316b22e2c36d9
3
+ metadata.gz: 7b4f5d5fb336bc9ac00ecd24b0ced150583e8d0ce3d62d59be42418731b208c8
4
+ data.tar.gz: 44de0eb3307ccbff273e2c687d451b7ab4cc1bbef78deef1bdb2fe34870fd6c0
5
5
  SHA512:
6
- metadata.gz: 1de5ceb45cd458d6ab9f9d15ee9e43a58b020892334986b890f52383e11d5bfa3cc4055d4e5a70f56a5a571c52308bf7a3207da2fbb22be159f3cc46d34544d5
7
- data.tar.gz: 3926c4c075c955982333d363b3423cecc9cc77ff52249fd9147c58fc9943499a74dd0b63dd4cfa43f3df66a5b2b27652a840b53a9a1fe2f4cdbe432752ee78c2
6
+ metadata.gz: 0c2669f3fda5e9e864c5c445e5fc1de4464fb079420f1c08a256bfb1b09612b70d350ac4d7bcbb929c71a5a2dea8c6f27339cdf7f451821e7857ff5676885ec4
7
+ data.tar.gz: ca800ccace6b8df687ea08ab8cf1fb21a1d7b1e61979ce03c6d702016f3b8f8b86020bd047a60eb6c0ea0ef95c300bef56579fa6da54207494b890f17d3b3d8a
@@ -17,6 +17,12 @@ class Mumukit::Server::App < Sinatra::Base
17
17
  get_local_asset "#{asset_type}/#{name}.svg", "lib/public/#{name}.svg", 'image/svg+xml'
18
18
  end
19
19
 
20
+ def self.get_media_assets(folder)
21
+ Dir.glob("lib/public/#{folder}/*").each do |path|
22
+ get_local_asset "#{folder}/#{File.basename path}", path
23
+ end
24
+ end
25
+
20
26
  ['polymer', 'polymer-mini', 'polymer-micro'].each { |name|
21
27
  get_board_asset "#{name}.html", "htmls/vendor/#{name}.html", 'text/html'
22
28
  }
@@ -29,9 +35,13 @@ class Mumukit::Server::App < Sinatra::Base
29
35
  get_local_asset 'layout/layout.html', 'lib/render/layout/layout.html', 'text/html'
30
36
  get_local_asset 'editor/editor.js', 'lib/render/editor/editor.js', 'application/javascript'
31
37
  get_local_asset 'editor/editor.css', 'lib/render/editor/editor.css', 'text/css'
32
- get_local_asset 'editor/editor.html', 'lib/render/editor/editor.html', 'text/html'
33
38
  get_local_asset 'editor/hammer.min.js', 'lib/render/editor/hammer.min.js', 'application/javascript'
34
39
  get_local_asset 'boom.png', 'lib/public/boom.png', 'image/png'
40
+ get_local_asset 'full-kindergarten-toolbox.xml', 'lib/public/full-kindergarten-toolbox.xml', 'text/plain'
41
+ get_local_asset 'minimal-kindergarten-toolbox.xml', 'lib/public/minimal-kindergarten-toolbox.xml', 'text/plain'
42
+
43
+ get_media_assets 'media'
44
+ get_media_assets 'local-media'
35
45
 
36
46
  ['red', 'blue', 'green', 'black'].each do |name|
37
47
  get_local_svg(name, 'editor')
@@ -40,4 +50,13 @@ class Mumukit::Server::App < Sinatra::Base
40
50
  ['attires_enabled', 'attires_disabled'].each do |name|
41
51
  get_local_svg(name, 'layout')
42
52
  end
53
+
54
+ get '/assets/editor/editor.html' do
55
+ cross_origin
56
+ @game_framework_extra = Gobstones::CompilationMode::GameFramework.extra_code
57
+ @game_framework_program = Gobstones::CompilationMode::GameFramework.program_code
58
+ @game_framework_default = Gobstones::CompilationMode::GameFramework.default_code
59
+ @assets_url = "//#{request.host_with_port}/assets"
60
+ erb File.read('lib/render/editor/editor.html.erb')
61
+ end
43
62
  end
@@ -49,7 +49,7 @@ module Gobstones
49
49
  fail_with status: :check_error_failed_another_reason,
50
50
  result: {
51
51
  reason: result[:finalBoardError],
52
- expected_code: expected
52
+ expected_code: I18n.t("code_#{expected}")
53
53
  } if reason_code != expected
54
54
  end
55
55
 
@@ -102,7 +102,7 @@ module Gobstones
102
102
  end
103
103
 
104
104
  def fail_with(error)
105
- fail error.to_json
105
+ fail error[:status], details: error[:result]
106
106
  end
107
107
 
108
108
  def board_json(board)
@@ -0,0 +1,3 @@
1
+ procedure Main() {
2
+
3
+ }
@@ -0,0 +1,3 @@
1
+ <block type="procedures_defnoreturnnoparams" x="30" y="30">
2
+ <field name="NAME">Main</field>
3
+ </block>
@@ -0,0 +1,84 @@
1
+ procedure Before() {
2
+ x := 0
3
+ y := 0
4
+
5
+ while(puedeMover(Sur)) {
6
+ x := x + 1
7
+ Mover(Sur)
8
+ }
9
+ while(puedeMover(Oeste)) {
10
+ y := y + 1
11
+ Mover(Oeste)
12
+ }
13
+
14
+ NextStage()
15
+
16
+ while(x > 0) {
17
+ x := x - 1
18
+ Mover(Norte)
19
+ }
20
+ while(y > 0) {
21
+ y := y - 1
22
+ Mover(Este)
23
+ }
24
+ }
25
+
26
+ procedure After() {
27
+ GoToOrigin()
28
+ NextStage()
29
+ }
30
+
31
+ procedure NextStage() {
32
+ while(puedeMover(Norte)) {
33
+ NextRowStage()
34
+ Mover(Norte)
35
+ }
36
+ NextRowStage()
37
+ GoToOrigin()
38
+ }
39
+
40
+ procedure NextRowStage() {
41
+ while(puedeMover(Este)) {
42
+ Poner(Verde)
43
+ Mover(Este)
44
+ }
45
+ Poner(Verde)
46
+ IrAlBorde(Oeste)
47
+ }
48
+
49
+ procedure ShiftLeft() {
50
+ ShiftTo(Oeste)
51
+ }
52
+
53
+ procedure ShiftRight() {
54
+ ShiftTo(Este)
55
+ }
56
+
57
+ procedure ShiftUp() {
58
+ ShiftTo(Norte)
59
+ }
60
+
61
+ procedure ShiftDown() {
62
+ ShiftTo(Sur)
63
+ }
64
+
65
+ procedure ShiftTo(dir) {
66
+ if (puedeMover(dir)) {
67
+ Sacar(Rojo)
68
+ Mover(dir)
69
+ Poner(Rojo)
70
+ CheckCollision()
71
+ }
72
+ }
73
+
74
+ procedure CheckCollision() {
75
+ if (hayBolitas(Azul) && nroBolitas(Azul) mod 2 == 0) {
76
+ After();
77
+ BOOM("Colision")
78
+ }
79
+ }
80
+
81
+ procedure GoToOrigin() {
82
+ IrAlBorde(Sur)
83
+ IrAlBorde(Oeste)
84
+ }
@@ -0,0 +1,5 @@
1
+ program {
2
+ Before()
3
+ Main()
4
+ After()
5
+ }
@@ -0,0 +1,17 @@
1
+ <block type="Program" deletable="false" x="189" y="177">
2
+ <statement name="program">
3
+ <block type="procedures_callnoreturnnoparams">
4
+ <mutation name="Before"></mutation>
5
+ <next>
6
+ <block type="procedures_callnoreturnnoparams">
7
+ <mutation name="Main"></mutation>
8
+ <next>
9
+ <block type="procedures_callnoreturnnoparams">
10
+ <mutation name="After"></mutation>
11
+ </block>
12
+ </next>
13
+ </block>
14
+ </next>
15
+ </block>
16
+ </statement>
17
+ </block>
@@ -8,5 +8,6 @@ end
8
8
 
9
9
  require_relative './gobstones/batch'
10
10
  require_relative './gobstones/batch_parser'
11
+ require_relative './gobstones/compilation_mode'
11
12
  require_relative './gobstones/error_builder'
12
13
  require_relative './gobstones/example_code_builder'
@@ -1,11 +1,13 @@
1
1
  class Gobstones::Batch
2
2
  attr_accessor :options, :examples, :content, :extra
3
+ delegate :compile_content, :compile_extra, to: :@compilation_mode
3
4
 
4
5
  def initialize(content, examples, extra, options)
5
6
  @content = content
6
7
  @examples = examples
7
8
  @extra = extra
8
9
  @options = options
10
+ @compilation_mode = @options[:game_framework] ? Gobstones::CompilationMode::GameFramework : Gobstones::CompilationMode::Classic
9
11
  end
10
12
 
11
13
  def run_tests!(output)
@@ -16,8 +18,8 @@ class Gobstones::Batch
16
18
 
17
19
  def to_json
18
20
  {
19
- code: content,
20
- extraCode: extra,
21
+ code: compile_content(content),
22
+ extraCode: compile_extra(extra),
21
23
  examples: examples.map { |example| example_json(example) }
22
24
  }.to_json
23
25
  end
@@ -3,7 +3,7 @@ module Gobstones::BatchParser
3
3
  def parse(request)
4
4
  test = parse_test(request)
5
5
 
6
- options = parse_options test
6
+ options = parse_options(test).merge(parse_settings(request))
7
7
  examples = parse_examples test, options
8
8
 
9
9
  Gobstones::Batch.new request.content, examples, request.extra, options
@@ -11,6 +11,10 @@ module Gobstones::BatchParser
11
11
 
12
12
  private
13
13
 
14
+ def parse_settings(request)
15
+ { game_framework: !!request.dig(:settings, 'game_framework') }
16
+ end
17
+
14
18
  def parse_test(request)
15
19
  YAML.load(request.test).deep_symbolize_keys
16
20
  end
@@ -0,0 +1,60 @@
1
+ module Gobstones
2
+ module CompilationMode
3
+ module Classic
4
+ class << self
5
+ def compile_extra(extra)
6
+ extra
7
+ end
8
+
9
+ def compile_content(content)
10
+ content
11
+ end
12
+ end
13
+ end
14
+
15
+ module GameFramework
16
+ class << self
17
+ def compile_extra(extra)
18
+ [extra, extra_code]
19
+ end
20
+
21
+ def compile_content(content)
22
+ if blockly_code?(content)
23
+ xml = Nokogiri::XML(content)
24
+ xml.root.add_child render_framework_file('program.xml')
25
+ xml.to_xhtml.gsub(/\n\s*/, '')
26
+ else
27
+ <<~GBS
28
+ #{content}
29
+
30
+ #{program_code}
31
+ GBS
32
+ .chop
33
+ end
34
+ end
35
+
36
+ def extra_code
37
+ render_framework_file 'extra.gbs'
38
+ end
39
+
40
+ def program_code
41
+ render_framework_file 'program.gbs'
42
+ end
43
+
44
+ def default_code
45
+ render_framework_file 'default.xml'
46
+ end
47
+
48
+ private
49
+
50
+ def blockly_code?(content)
51
+ content.strip.start_with? '<xml'
52
+ end
53
+
54
+ def render_framework_file(name)
55
+ ERB.new(File.read("lib/game_framework/#{name}.erb")).result
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -1,13 +1,15 @@
1
1
  require 'mumukit'
2
2
  require 'erb'
3
+ require 'nokogiri'
3
4
 
4
5
  I18n.load_translations_path File.join(__dir__, 'locales', '*.yml')
5
6
 
6
7
  Mumukit.runner_name = 'gobstones'
7
8
  Mumukit.configure do |config|
8
- config.docker_image = 'mumuki/mumuki-gobstones-worker:9.0'
9
+ config.docker_image = 'mumuki/mumuki-gobstones-worker:9.1'
9
10
  config.content_type = 'html'
10
11
  config.structured = true
12
+ config.settings = true
11
13
  end
12
14
 
13
15
  require_relative './gobstones'
@@ -0,0 +1,5 @@
1
+ <category name="Bloques de Gobstones">
2
+ <block type="RepeticionSimple"></block>
3
+ </category>
4
+ <category name="Procedimientos primitivos"></category>
5
+ <category name="Funciones primitivas"></category>
@@ -0,0 +1,24 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
+ width="14.173px" height="14.173px" viewBox="0 0 14.173 14.173" enable-background="new 0 0 14.173 14.173" xml:space="preserve">
6
+ <g id="Layer_2" display="none">
7
+ <g display="inline">
8
+ <rect x="-5.132" y="-3.933" fill="#5CBEFF" width="67.306" height="25.396"/>
9
+ </g>
10
+ </g>
11
+ <g id="Layer_3" display="none">
12
+ </g>
13
+ <g id="Layer_1">
14
+
15
+ <line fill="#FFFFFF" stroke="#231F20" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="3.836" y1="3.836" x2="10.336" y2="10.336"/>
16
+
17
+ <line fill="#FFFFFF" stroke="#231F20" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="10.336" y1="3.836" x2="3.836" y2="10.336"/>
18
+ </g>
19
+ <g id="Layer_4" display="none">
20
+
21
+ <polyline display="inline" fill="none" stroke="#231F20" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
22
+ 10.958,4.801 6.388,9.372 3.215,6.094 "/>
23
+ </g>
24
+ </svg>
@@ -0,0 +1,17 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
+ width="14.173px" height="14.173px" viewBox="0 0 14.173 14.173" enable-background="new 0 0 14.173 14.173" xml:space="preserve">
6
+ <g id="Layer_2" display="none">
7
+ <g display="inline">
8
+ <rect x="-5.132" y="-3.933" fill="#5CBEFF" width="67.306" height="25.396"/>
9
+ </g>
10
+ </g>
11
+ <g id="Layer_3" display="none">
12
+ </g>
13
+ <g id="Layer_1">
14
+ <polyline fill="none" stroke="#231F20" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
15
+ 10.958,4.801 6.388,9.372 3.215,6.094 "/>
16
+ </g>
17
+ </svg>
@@ -0,0 +1,44 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
+ width="14.173px" height="14.173px" viewBox="0 0 14.173 14.173" enable-background="new 0 0 14.173 14.173" xml:space="preserve">
6
+ <g id="Layer_2" display="none">
7
+ <g display="inline">
8
+ <rect x="-5.132" y="-3.933" fill="#5CBEFF" width="67.306" height="25.396"/>
9
+ </g>
10
+ </g>
11
+ <g id="Layer_3" display="none">
12
+ </g>
13
+ <g id="Layer_7">
14
+ </g>
15
+ <g id="Layer_1">
16
+
17
+ <circle fill="#1B75BB" stroke="#231F20" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" cx="7.087" cy="7.086" r="3.688"/>
18
+ </g>
19
+ <g id="Layer_6" display="none">
20
+ <g display="inline">
21
+ <g>
22
+
23
+ <path fill="#231F20" stroke="#231F20" stroke-width="0.9761" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
24
+ M7.082,3.701c0.021,1.21-0.007,5.512,0,6.771L0.889,7.086L7.082,3.701z"/>
25
+ </g>
26
+ <g>
27
+
28
+ <path fill="none" stroke="#231F20" stroke-width="0.9761" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
29
+ M7.09,3.701c-0.021,1.21,0.008,5.512,0,6.771l6.194-3.386L7.09,3.701z"/>
30
+ </g>
31
+ </g>
32
+ </g>
33
+ <g id="Layer_5" display="none">
34
+
35
+ <line display="inline" fill="#FFFFFF" stroke="#231F20" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="3.836" y1="3.836" x2="10.336" y2="10.336"/>
36
+
37
+ <line display="inline" fill="#FFFFFF" stroke="#231F20" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="10.336" y1="3.836" x2="3.836" y2="10.336"/>
38
+ </g>
39
+ <g id="Layer_4" display="none">
40
+
41
+ <polyline display="inline" fill="none" stroke="#231F20" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
42
+ 10.958,4.801 6.388,9.372 3.215,6.094 "/>
43
+ </g>
44
+ </svg>
@@ -0,0 +1,44 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
+ width="14.173px" height="14.173px" viewBox="0 0 14.173 14.173" enable-background="new 0 0 14.173 14.173" xml:space="preserve">
6
+ <g id="Layer_2" display="none">
7
+ <g display="inline">
8
+ <rect x="-5.132" y="-3.933" fill="#5CBEFF" width="67.306" height="25.396"/>
9
+ </g>
10
+ </g>
11
+ <g id="Layer_3" display="none">
12
+ </g>
13
+ <g id="Layer_7">
14
+ </g>
15
+ <g id="Layer_1">
16
+
17
+ <circle fill="#404041" stroke="#231F20" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" cx="7.087" cy="7.086" r="3.688"/>
18
+ </g>
19
+ <g id="Layer_6" display="none">
20
+ <g display="inline">
21
+ <g>
22
+
23
+ <path fill="#231F20" stroke="#231F20" stroke-width="0.9761" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
24
+ M7.082,3.701c0.021,1.21-0.007,5.512,0,6.771L0.889,7.086L7.082,3.701z"/>
25
+ </g>
26
+ <g>
27
+
28
+ <path fill="none" stroke="#231F20" stroke-width="0.9761" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
29
+ M7.09,3.701c-0.021,1.21,0.008,5.512,0,6.771l6.194-3.386L7.09,3.701z"/>
30
+ </g>
31
+ </g>
32
+ </g>
33
+ <g id="Layer_5" display="none">
34
+
35
+ <line display="inline" fill="#FFFFFF" stroke="#231F20" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="3.836" y1="3.836" x2="10.336" y2="10.336"/>
36
+
37
+ <line display="inline" fill="#FFFFFF" stroke="#231F20" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="10.336" y1="3.836" x2="3.836" y2="10.336"/>
38
+ </g>
39
+ <g id="Layer_4" display="none">
40
+
41
+ <polyline display="inline" fill="none" stroke="#231F20" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
42
+ 10.958,4.801 6.388,9.372 3.215,6.094 "/>
43
+ </g>
44
+ </svg>