gauntlt 1.0.5 → 1.0.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -10,3 +10,6 @@
10
10
  [submodule "features/support/scapegoat"]
11
11
  path = features/support/scapegoat
12
12
  url = git://github.com/gauntlt/scapegoat.git
13
+ [submodule "vendor/railsgoat"]
14
+ path = vendor/railsgoat
15
+ url = git://github.com/OWASP/railsgoat.git
@@ -7,6 +7,7 @@ before_install:
7
7
  before_script:
8
8
  - sudo apt-get install nmap
9
9
  - sudo apt-get install wget
10
+ - sudo apt-get install libcurl4-openssl-dev
10
11
  - export SSLYZE_PATH="/home/travis/build/gauntlt/gauntlt/vendor/sslyze/sslyze.py"
11
12
  - export SQLMAP_PATH="/home/travis/build/gauntlt/gauntlt/vendor/sqlmap/sqlmap.py"
12
13
  - 'cd vendor/Garmr && sudo python setup.py install && cd ../..'
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # gauntlt [![Build Status](https://secure.travis-ci.org/gauntlt/gauntlt.png?branch=master)](http://travis-ci.org/gauntlt/gauntlt) [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/gauntlt/gauntlt)
1
+ # gauntlt [![Build Status](https://secure.travis-ci.org/gauntlt/gauntlt.png?branch=master)](http://travis-ci.org/gauntlt/gauntlt) [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/gauntlt/gauntlt) [![Gem Version](https://badge.fury.io/rb/gauntlt.png)](http://badge.fury.io/rb/gauntlt)
2
2
 
3
3
  gauntlt is a ruggedization framework
4
4
 
@@ -20,7 +20,7 @@ You will need ruby version `1.9.3` to run gauntlt, but you can run gauntlt again
20
20
  $ gem install gauntlt
21
21
  ```
22
22
 
23
- 2. Create an attack file and put it anywhere you like
23
+ 2. Create an attack file and put it anywhere you like. (There is a more relevant example on gauntlt.org)
24
24
 
25
25
  ```gherkin
26
26
  # simplest.attack
@@ -0,0 +1 @@
1
+ default: TEST_HOSTNAME=scanme.nmap.org
@@ -1,18 +1,10 @@
1
1
  @slow
2
- Feature: Run dirb scan on a URL
2
+ Feature: Look for cross site scripting (xss) using arachni against a URL
3
3
 
4
- Scenario: Use dirb to scan a website for basic security requirements and the DIRB_WORDLISTS environment variable must be set in your path. You can use different wordlists by changing the environment variable.
5
- Given "dirb" is installed
4
+ Scenario: Using the arachni, look for cross site scripting and verify no issues are found
5
+ Given "arachni" is installed
6
6
  And the following profile:
7
7
  | name | value |
8
- | hostname | https://google.com |
9
- | dirb_wordlists_path | Overwritten by $DIRB_WORDLISTS |
10
- | wordlist | vulns/tests.txt |
11
- When I launch a "dirb" attack with:
12
- """
13
- dirb <hostname> <dirb_wordlists_path>/<wordlist>
14
- """
15
- Then the output should contain:
16
- """
17
- FOUND: 0
18
- """
8
+ | url | http://scanme.nmap.org |
9
+ When I launch an "arachni-simple_xss" attack
10
+ Then the output should contain "0 issues were detected."
@@ -0,0 +1,25 @@
1
+ @slow
2
+ Feature: simple nmap attack (sanity check)
3
+
4
+ Background:
5
+ Given "nmap" is installed
6
+
7
+ And the following environment variables:
8
+ | name | environment_variable_name |
9
+ | hostname | TEST_HOSTNAME |
10
+
11
+ And the following profile:
12
+ | name | value |
13
+ | https_port | 443 |
14
+ | http_port | 80 |
15
+
16
+ Scenario: Verify server is available on standard web ports
17
+ When I launch an "nmap" attack with:
18
+ """
19
+ nmap -p <http_port>,<https_port> <hostname>
20
+ """
21
+ Then the output should match /80.tcp\s+open/
22
+ And the output should not match:
23
+ """
24
+ 443/tcp\s+open
25
+ """
@@ -6,6 +6,7 @@ Feature: nmap attack
6
6
  And the following attack files exist:
7
7
  | filename |
8
8
  | simple.attack |
9
+ | simple-env-var.attack |
9
10
  | os_detection.attack |
10
11
  | tcp_ping_ports.attack |
11
12
  | nmap.attack |
@@ -18,6 +19,13 @@ Feature: nmap attack
18
19
  5 steps (5 passed)
19
20
  """
20
21
 
22
+ Scenario: Simple nmap using environment variables attack
23
+ When I run `gauntlt simple-env-var.attack`
24
+ Then it should pass with:
25
+ """
26
+ 6 steps (6 passed)
27
+ """
28
+
21
29
  Scenario: OS detection nmap attack
22
30
  When I run `gauntlt os_detection.attack`
23
31
  Then it should pass with:
@@ -20,6 +20,7 @@ Gem::Specification.new do |s|
20
20
  s.add_development_dependency "aruba"
21
21
  s.add_development_dependency "rake"
22
22
  s.add_development_dependency "sinatra"
23
+ s.add_development_dependency "arachni"
23
24
 
24
25
  s.add_runtime_dependency "cucumber"
25
26
  s.add_runtime_dependency "aruba"
@@ -0,0 +1,17 @@
1
+ Given /^"arachni" is installed$/ do
2
+ ensure_cli_installed("arachni")
3
+ end
4
+
5
+ When /^I launch (?:a|an) "arachni" attack with:$/ do | command |
6
+ run_with_profile command
7
+ end
8
+
9
+ When /^I launch (?:a|an) "arachni-(.*?)" attack$/ do | type |
10
+ attack_alias = 'arachni-' + type
11
+ attack = load_attack_alias(attack_alias)
12
+
13
+ Kernel.puts "Running a #{attack_alias} attack. This attack has this description:\n #{attack['description']}"
14
+ Kernel.puts "The #{attack_alias} attack requires the following to be set in the profile:\n #{attack['requires']}"
15
+
16
+ run_with_profile attack['command']
17
+ end
@@ -2,7 +2,7 @@ When /^"curl" is installed$/ do
2
2
  ensure_cli_installed("curl")
3
3
  end
4
4
 
5
- When /^I launch a "curl" attack with:$/ do |command|
5
+ When /^I launch (?:a|an) "curl" attack with:$/ do |command|
6
6
  run_with_profile command
7
7
  @raw_curl_response = all_output # aruba defines all_output
8
8
  end
@@ -15,4 +15,4 @@ Then /^the following cookies should be received:$/ do |table|
15
15
  cookies.any?{|s| s =~ /^#{name}/}.should be_true
16
16
  # TODO: check other values in table
17
17
  end
18
- end
18
+ end
@@ -6,7 +6,7 @@ When /^the DIRB_WORDLISTS environment variable is set$/ do
6
6
  ensure_shell_variable_set("DIRB_WORDLISTS")
7
7
  end
8
8
 
9
- When /^I launch a "dirb" attack with:$/ do |command|
9
+ When /^I launch (?:a|an) "dirb" attack with:$/ do |command|
10
10
  add_to_profile('dirb_wordlists_path', get_shell_variable("DIRB_WORDLISTS"))
11
11
  run_with_profile command
12
12
  @raw_dirb_output = all_output
@@ -2,7 +2,7 @@ When /^"garmr" is installed$/ do
2
2
  ensure_cli_installed("garmr")
3
3
  end
4
4
 
5
- When /^I launch a "garmr" attack with:$/ do |command|
5
+ When /^I launch (?:a|an) "garmr" attack with:$/ do |command|
6
6
  run_with_profile command
7
7
  @raw_garmr_output = all_output
8
- end
8
+ end
@@ -1,5 +1,11 @@
1
1
  require 'nokogiri'
2
2
 
3
+ Given /^the following environment variables:$/ do |table|
4
+ table.hashes.each do |hsh|
5
+ add_to_profile_from_environment( hsh['name'], hsh['environment_variable_name'] )
6
+ end
7
+ end
8
+
3
9
  Given /^the following profile:$/ do |table|
4
10
  table.hashes.each do |hsh|
5
11
  add_to_profile( hsh['name'], hsh['value'] )
@@ -16,4 +22,4 @@ When /^the file "(.*?)" should not contain XML:$/ do |filename, css_selectors|
16
22
  css_selectors.hashes.each do |row|
17
23
  assert_xml_does_not_include(filename, row['css'])
18
24
  end
19
- end
25
+ end
@@ -1,4 +1,4 @@
1
- When /^I launch a "generic" attack with:$/ do |command|
1
+ When /^I launch (?:a|an) "generic" attack with:$/ do |command|
2
2
  run_with_profile command
3
3
  end
4
4
 
@@ -5,11 +5,11 @@ When /^"nmap" is installed$/ do
5
5
  ensure_cli_installed("nmap")
6
6
  end
7
7
 
8
- When /^I launch an "nmap" attack with:$/ do |command|
8
+ When /^I launch (?:a|an) "nmap" attack with:$/ do |command|
9
9
  run_with_profile command
10
10
  end
11
11
 
12
- When /^I launch a "nmap-(.*?)" attack$/ do |type|
12
+ When /^I launch (?:a|an) "nmap-(.*?)" attack$/ do |type|
13
13
  attack_alias = 'nmap-' + type
14
14
  nmap_attack = load_attack_alias(attack_alias)
15
15
 
@@ -2,8 +2,8 @@ Given /^"sqlmap" is installed$/ do
2
2
  ensure_python_script_installed('sqlmap')
3
3
  end
4
4
 
5
- When /^I launch an? "sqlmap" attack with:$/ do |command|
5
+ When /^I launch (?:a|an) "sqlmap" attack with:$/ do |command|
6
6
  add_to_profile('sqlmap_path', path_to_python_script("sqlmap"))
7
7
 
8
8
  run_with_profile command
9
- end
9
+ end
@@ -2,8 +2,8 @@ Given /^"sslyze" is installed$/ do
2
2
  ensure_python_script_installed('sslyze')
3
3
  end
4
4
 
5
- When /^I launch an "sslyze" attack with:$/ do |command|
5
+ When /^I launch (?:a|an) "sslyze" attack with:$/ do |command|
6
6
  add_to_profile( 'sslyze', path_to_python_script('sslyze') )
7
7
 
8
8
  run_with_profile command
9
- end
9
+ end
@@ -10,6 +10,11 @@ module Gauntlt
10
10
  gauntlt_profile[k] = v
11
11
  end
12
12
 
13
+ def add_to_profile_from_environment(k,v)
14
+ puts "Overwriting profile with env value for #{k}" if gauntlt_profile.has_key?(k)
15
+ gauntlt_profile[k] = ENV[v]
16
+ end
17
+
13
18
  def run_with_profile(command_template)
14
19
  command = command_template.dup
15
20
 
@@ -0,0 +1,21 @@
1
+ { "arachni-simple_xss" : { "command" : "arachni --modules=xss --depth=1 --link-count=10 --auto-redundant=2 <url>",
2
+ "description" : "This is a scan for cross site scripting (xss) that only runs the base xss module in arachni. The scan only crawls one level deep which makes it faster. For more depth, run the gauntlt attack alias 'arachni-simple_xss_with_depth' and specifiy depth.",
3
+ "requires" : [ "<url>" ]
4
+ },
5
+ "arachni-simple_xss_with_depth" : { "command" : "arachni --modules=xss --depth=<depth> <url>",
6
+ "description" : "This is a scan for cross site scripting (xss) that only runs the base xss module in arachni. The scan only crawls as many levels deep as you specify. The higher the integer, the longer the scan will take to run.",
7
+ "requires" : [ "<url>", "<depth>"]
8
+ },
9
+ "arachni-full_xss" : { "command" : "arachni --modules=xss* --depth=1 --link-count=10 --auto-redundant=2 <url>",
10
+ "description" : "This is a scan for cross site scripting (xss) that only runs all the xss modules in arachni. The scan only crawls one level deep, which makes it faster. For more depth, run the gauntlt attack alias 'arachni-full_xss_with_depth' and specifiy depth.",
11
+ "requires" : [ "<url>" ]
12
+ },
13
+ "arachni-full_xss_with_depth" : { "command" : "arachni --modules=xss* --depth=<depth> <url>",
14
+ "description" : "This is a scan for cross site scripting (xss) that only runs all the xss modules in arachni. The scan only crawls as many levels deep as you specify. The higher the integer, the longer the scan will take to run.",
15
+ "requires" : [ "<url>", "<depth>"]
16
+ },
17
+ "arachni-xss_with_options" : { "command" : "arachni --modules=xss* --depth=<depth> --link-count=<link_count> --auto-redundant=<auto_redundant> <url>",
18
+ "description" : "This is a scan for cross site scripting (xss) that runs all the xss modules in arachni. This requires to specify several options for the scan. The arachni wiki has information on what these options represent but generally as you increase their values, the scan takes longer to run. \nThe wiki for arachni is available here > https://github.com/Arachni/arachni/wiki/Command-line-user-interface. \nThe depth option is described here: https://github.com/Arachni/arachni/wiki/Command-line-user-interface#wiki-depth \nThe link_count option is described here: https://github.com/Arachni/arachni/wiki/Command-line-user-interface#wiki-link-count \nThe auto_redundant option is described here: https://github.com/Arachni/arachni/wiki/Command-line-user-interface#wiki-auto-redundant",
19
+ "requires" : [ "<url>", "<depth>", "<link_count>", "<auto_redundant>" ]
20
+ }
21
+ }
@@ -1,3 +1,3 @@
1
1
  module Gauntlt
2
- VERSION = "1.0.5"
2
+ VERSION = "1.0.6"
3
3
  end
@@ -5,8 +5,16 @@
5
5
  NMAP=`which nmap`
6
6
  GARMR=`which garmr`
7
7
  DIRB=`which dirb`
8
+ ARACHNI=`which arachni`
9
+
8
10
  ERRORS=0
9
11
 
12
+ if [ -z $ARACHNI ]
13
+ then
14
+ MESSAGE="It looks like you dont have arachni-web-scanner installed. You should be able to do 'gem install arachni' to install it. You might need to install libcurl first, on ubuntu you can run 'sudo apt-get install libcurl4-openssl-dev && gem install arachni' For more info on arachni, go to arachni-scanner.com"
15
+ ERRORS=$ERRORS+1
16
+ fi
17
+
10
18
  if [ -z $SSLYZE_PATH ]
11
19
  then
12
20
  MESSAGE="SSLYZE_PATH environment variable unset, try setting it to ./vendor/sslyze/sslyze.py if you havent updated the submodules we use in gauntlt, run this first: git submodule update --init --recursive"
metadata CHANGED
@@ -1,7 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gauntlt
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.5
4
+ version: 1.0.6
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - James Wickett
@@ -9,11 +10,12 @@ authors:
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2013-08-07 00:00:00.000000000 Z
13
+ date: 2013-08-30 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: cucumber
16
17
  requirement: !ruby/object:Gem::Requirement
18
+ none: false
17
19
  requirements:
18
20
  - - ~>
19
21
  - !ruby/object:Gem::Version
@@ -21,6 +23,7 @@ dependencies:
21
23
  type: :development
22
24
  prerelease: false
23
25
  version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
24
27
  requirements:
25
28
  - - ~>
26
29
  - !ruby/object:Gem::Version
@@ -28,6 +31,7 @@ dependencies:
28
31
  - !ruby/object:Gem::Dependency
29
32
  name: aruba
30
33
  requirement: !ruby/object:Gem::Requirement
34
+ none: false
31
35
  requirements:
32
36
  - - ! '>='
33
37
  - !ruby/object:Gem::Version
@@ -35,6 +39,7 @@ dependencies:
35
39
  type: :development
36
40
  prerelease: false
37
41
  version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
38
43
  requirements:
39
44
  - - ! '>='
40
45
  - !ruby/object:Gem::Version
@@ -42,6 +47,7 @@ dependencies:
42
47
  - !ruby/object:Gem::Dependency
43
48
  name: rake
44
49
  requirement: !ruby/object:Gem::Requirement
50
+ none: false
45
51
  requirements:
46
52
  - - ! '>='
47
53
  - !ruby/object:Gem::Version
@@ -49,6 +55,7 @@ dependencies:
49
55
  type: :development
50
56
  prerelease: false
51
57
  version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
52
59
  requirements:
53
60
  - - ! '>='
54
61
  - !ruby/object:Gem::Version
@@ -56,6 +63,7 @@ dependencies:
56
63
  - !ruby/object:Gem::Dependency
57
64
  name: sinatra
58
65
  requirement: !ruby/object:Gem::Requirement
66
+ none: false
59
67
  requirements:
60
68
  - - ! '>='
61
69
  - !ruby/object:Gem::Version
@@ -63,6 +71,23 @@ dependencies:
63
71
  type: :development
64
72
  prerelease: false
65
73
  version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ - !ruby/object:Gem::Dependency
80
+ name: arachni
81
+ requirement: !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ! '>='
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ type: :development
88
+ prerelease: false
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
66
91
  requirements:
67
92
  - - ! '>='
68
93
  - !ruby/object:Gem::Version
@@ -70,6 +95,7 @@ dependencies:
70
95
  - !ruby/object:Gem::Dependency
71
96
  name: cucumber
72
97
  requirement: !ruby/object:Gem::Requirement
98
+ none: false
73
99
  requirements:
74
100
  - - ! '>='
75
101
  - !ruby/object:Gem::Version
@@ -77,6 +103,7 @@ dependencies:
77
103
  type: :runtime
78
104
  prerelease: false
79
105
  version_requirements: !ruby/object:Gem::Requirement
106
+ none: false
80
107
  requirements:
81
108
  - - ! '>='
82
109
  - !ruby/object:Gem::Version
@@ -84,6 +111,7 @@ dependencies:
84
111
  - !ruby/object:Gem::Dependency
85
112
  name: aruba
86
113
  requirement: !ruby/object:Gem::Requirement
114
+ none: false
87
115
  requirements:
88
116
  - - ! '>='
89
117
  - !ruby/object:Gem::Version
@@ -91,6 +119,7 @@ dependencies:
91
119
  type: :runtime
92
120
  prerelease: false
93
121
  version_requirements: !ruby/object:Gem::Requirement
122
+ none: false
94
123
  requirements:
95
124
  - - ! '>='
96
125
  - !ruby/object:Gem::Version
@@ -98,6 +127,7 @@ dependencies:
98
127
  - !ruby/object:Gem::Dependency
99
128
  name: nokogiri
100
129
  requirement: !ruby/object:Gem::Requirement
130
+ none: false
101
131
  requirements:
102
132
  - - ~>
103
133
  - !ruby/object:Gem::Version
@@ -105,6 +135,7 @@ dependencies:
105
135
  type: :runtime
106
136
  prerelease: false
107
137
  version_requirements: !ruby/object:Gem::Requirement
138
+ none: false
108
139
  requirements:
109
140
  - - ~>
110
141
  - !ruby/object:Gem::Version
@@ -112,6 +143,7 @@ dependencies:
112
143
  - !ruby/object:Gem::Dependency
113
144
  name: trollop
114
145
  requirement: !ruby/object:Gem::Requirement
146
+ none: false
115
147
  requirements:
116
148
  - - ! '>='
117
149
  - !ruby/object:Gem::Version
@@ -119,6 +151,7 @@ dependencies:
119
151
  type: :runtime
120
152
  prerelease: false
121
153
  version_requirements: !ruby/object:Gem::Requirement
154
+ none: false
122
155
  requirements:
123
156
  - - ! '>='
124
157
  - !ruby/object:Gem::Version
@@ -141,6 +174,7 @@ files:
141
174
  - README.md
142
175
  - Rakefile
143
176
  - bin/gauntlt
177
+ - config/cucumber.yml
144
178
  - config/warble.rb
145
179
  - examples/arachni/arachni-xss.attack
146
180
  - examples/curl/cookies.attack
@@ -151,6 +185,7 @@ files:
151
185
  - examples/generic/generic.attack
152
186
  - examples/nmap/nmap.attack
153
187
  - examples/nmap/os_detection.attack
188
+ - examples/nmap/simple-env-var.attack
154
189
  - examples/nmap/simple.attack
155
190
  - examples/nmap/tcp_ping_ports.attack
156
191
  - examples/nmap/xml_output.attack
@@ -159,7 +194,7 @@ files:
159
194
  - examples/sqlmap/sqlmap.attack
160
195
  - examples/sslyze/sslyze.attack
161
196
  - features/attack.feature
162
- - features/attacks/arachni.notimplemented
197
+ - features/attacks/arachni.feature
163
198
  - features/attacks/curl.feature
164
199
  - features/attacks/dirb.feature
165
200
  - features/attacks/garmr.feature
@@ -180,6 +215,7 @@ files:
180
215
  - gem_tasks/test.rake
181
216
  - lib/gauntlt.rb
182
217
  - lib/gauntlt/attack.rb
218
+ - lib/gauntlt/attack_adapters/arachni.rb
183
219
  - lib/gauntlt/attack_adapters/curl.rb
184
220
  - lib/gauntlt/attack_adapters/dirb.rb
185
221
  - lib/gauntlt/attack_adapters/garmr.rb
@@ -195,6 +231,7 @@ files:
195
231
  - lib/gauntlt/attack_adapters/support/profile_helper.rb
196
232
  - lib/gauntlt/attack_adapters/support/python_script_helper.rb
197
233
  - lib/gauntlt/attack_adapters/support/xml_helper.rb
234
+ - lib/gauntlt/attack_aliases/arachni.json
198
235
  - lib/gauntlt/attack_aliases/dirb.json
199
236
  - lib/gauntlt/attack_aliases/nmap.json
200
237
  - lib/gauntlt/runtime.rb
@@ -210,30 +247,31 @@ files:
210
247
  - vendor/sslyze_output.README
211
248
  homepage: https://github.com/gauntlt/gauntlt
212
249
  licenses: []
213
- metadata: {}
214
250
  post_install_message:
215
251
  rdoc_options: []
216
252
  require_paths:
217
253
  - lib
218
254
  required_ruby_version: !ruby/object:Gem::Requirement
255
+ none: false
219
256
  requirements:
220
257
  - - ! '>='
221
258
  - !ruby/object:Gem::Version
222
259
  version: '0'
223
260
  required_rubygems_version: !ruby/object:Gem::Requirement
261
+ none: false
224
262
  requirements:
225
263
  - - ! '>='
226
264
  - !ruby/object:Gem::Version
227
265
  version: '0'
228
266
  requirements: []
229
267
  rubyforge_project:
230
- rubygems_version: 2.0.5
268
+ rubygems_version: 1.8.25
231
269
  signing_key:
232
- specification_version: 4
270
+ specification_version: 3
233
271
  summary: behaviour-driven security using cucumber
234
272
  test_files:
235
273
  - features/attack.feature
236
- - features/attacks/arachni.notimplemented
274
+ - features/attacks/arachni.feature
237
275
  - features/attacks/curl.feature
238
276
  - features/attacks/dirb.feature
239
277
  - features/attacks/garmr.feature
checksums.yaml DELETED
@@ -1,15 +0,0 @@
1
- ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- MGRkZWZiMTQ4ZDIyMzFjZmFhODk5ZjQyOTJhZmYwY2Y5NjY0NDdmMA==
5
- data.tar.gz: !binary |-
6
- MzI0YjBjNTRkMTI4ODAzMWExOWI4MWUyYmFhNjY1ZDg0NzQ2OGY0Mg==
7
- !binary "U0hBNTEy":
8
- metadata.gz: !binary |-
9
- MWU3MWJkZjI0ZWI1N2Q3M2I0NGI5MjlhM2U2MDFjMzE5ZjRlY2Y1YjFkNjc3
10
- NGUwNjk3NzFiYmIyMTdhOTgzNGJiYTI5NGFhY2E0NWYxY2NjNGE2MjQyM2Rj
11
- MDY0YmFmM2NiNDExYzZiYTYxMDUzMzhhODQ4NTA4OGQwNTNiZjI=
12
- data.tar.gz: !binary |-
13
- ODM4MzVjYTM1NGIyYTBlNGZmMjk2MGM3OGRlYWViMTg5MDUwYzhiMGY3ZGQw
14
- NGFiY2EyYmI1MmU4YmU2MzAzNWI1NmEzYWFlZTZkMTA4OGI3ZGRkMTBhZGU0
15
- MGM1NGUwNWJiMDFlZjM3NmI5NTE3MzBmNjM1YTAzOTUwY2RhYzU=