gcaptcha 0.1.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: e6bae238a6e252435c307924e785ef11f4069be6f8e402fa9555eca5335f1841
4
+ data.tar.gz: 3fa938cb33079789d561423d274cda62d99d8045ab8cdb55fd1d05dfaa6817de
5
+ SHA512:
6
+ metadata.gz: e62f4a7f0fdf25678502afec1b25e89278b09b7977863e27fc3bca21d5e211f57c2ac0e217a13dda3706a34909e8032c0fa48ff3991502f48a168662651f6470
7
+ data.tar.gz: 9e93c5cb97dad740b9a0840c3e79388c215f07bbbf19ecf51569aebc6c4d291ce7f9ac5a6ad674c41403c530e0b02656afa19a273a09da1ce2ebad744517d1c1
@@ -0,0 +1,10 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+ .idea/
10
+ .DS_Store
@@ -0,0 +1,7 @@
1
+ ---
2
+ sudo: false
3
+ language: ruby
4
+ cache: bundler
5
+ rvm:
6
+ - 2.6.1
7
+ before_install: gem install bundler -v 1.17.2
@@ -0,0 +1,2 @@
1
+ ### 0.1.0
2
+ * First release
@@ -0,0 +1,74 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ In the interest of fostering an open and welcoming environment, we as
6
+ contributors and maintainers pledge to making participation in our project and
7
+ our community a harassment-free experience for everyone, regardless of age, body
8
+ size, disability, ethnicity, gender identity and expression, level of experience,
9
+ nationality, personal appearance, race, religion, or sexual identity and
10
+ orientation.
11
+
12
+ ## Our Standards
13
+
14
+ Examples of behavior that contributes to creating a positive environment
15
+ include:
16
+
17
+ * Using welcoming and inclusive language
18
+ * Being respectful of differing viewpoints and experiences
19
+ * Gracefully accepting constructive criticism
20
+ * Focusing on what is best for the community
21
+ * Showing empathy towards other community members
22
+
23
+ Examples of unacceptable behavior by participants include:
24
+
25
+ * The use of sexualized language or imagery and unwelcome sexual attention or
26
+ advances
27
+ * Trolling, insulting/derogatory comments, and personal or political attacks
28
+ * Public or private harassment
29
+ * Publishing others' private information, such as a physical or electronic
30
+ address, without explicit permission
31
+ * Other conduct which could reasonably be considered inappropriate in a
32
+ professional setting
33
+
34
+ ## Our Responsibilities
35
+
36
+ Project maintainers are responsible for clarifying the standards of acceptable
37
+ behavior and are expected to take appropriate and fair corrective action in
38
+ response to any instances of unacceptable behavior.
39
+
40
+ Project maintainers have the right and responsibility to remove, edit, or
41
+ reject comments, commits, code, wiki edits, issues, and other contributions
42
+ that are not aligned to this Code of Conduct, or to ban temporarily or
43
+ permanently any contributor for other behaviors that they deem inappropriate,
44
+ threatening, offensive, or harmful.
45
+
46
+ ## Scope
47
+
48
+ This Code of Conduct applies both within project spaces and in public spaces
49
+ when an individual is representing the project or its community. Examples of
50
+ representing a project or community include using an official project e-mail
51
+ address, posting via an official social media account, or acting as an appointed
52
+ representative at an online or offline event. Representation of a project may be
53
+ further defined and clarified by project maintainers.
54
+
55
+ ## Enforcement
56
+
57
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
58
+ reported by contacting the project team at lanyuejin1108@gmail.com. All
59
+ complaints will be reviewed and investigated and will result in a response that
60
+ is deemed necessary and appropriate to the circumstances. The project team is
61
+ obligated to maintain confidentiality with regard to the reporter of an incident.
62
+ Further details of specific enforcement policies may be posted separately.
63
+
64
+ Project maintainers who do not follow or enforce the Code of Conduct in good
65
+ faith may face temporary or permanent repercussions as determined by other
66
+ members of the project's leadership.
67
+
68
+ ## Attribution
69
+
70
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71
+ available at [http://contributor-covenant.org/version/1/4][version]
72
+
73
+ [homepage]: http://contributor-covenant.org
74
+ [version]: http://contributor-covenant.org/version/1/4/
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source "https://rubygems.org"
2
+
3
+ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
+
5
+ # Specify your gem's dependencies in gcaptcha.gemspec
6
+ gemspec
@@ -0,0 +1,25 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ gcaptcha (0.1.0)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ minitest (5.11.3)
10
+ rake (10.5.0)
11
+ rake-compiler (1.0.7)
12
+ rake
13
+
14
+ PLATFORMS
15
+ ruby
16
+
17
+ DEPENDENCIES
18
+ bundler (~> 1.17)
19
+ gcaptcha!
20
+ minitest (~> 5.0)
21
+ rake (~> 10.0)
22
+ rake-compiler (~> 1)
23
+
24
+ BUNDLED WITH
25
+ 1.17.2
@@ -0,0 +1,3 @@
1
+ compile:
2
+ rake clean
3
+ rake compile
@@ -0,0 +1,76 @@
1
+ # GCaptcha
2
+
3
+ 最近涉及验证码识别的工作,所以需要生成一定量的验证码数据进行训练,然后发现Ruby下没有比较方便的Gem可以做到直接生成验证码图片(大部分是与Rails结合的)。所以自己就针对[rucaptcha](https://github.com/huacnlee/rucaptcha)
4
+ 抽离出验证码生成的逻辑,形成了这个Gem。验证码较为简单,仅作学习使用。
5
+
6
+ Recently, it involves the work of verification code identification, so it is necessary to generate a certain amount of verification code data for training, and then find that there is no convenient Gem under Ruby to directly generate verification code pictures (mostly combined with Rails). So I created the Gem according to the logic of [Rucaptcha](https://github.com/huacnlee/rucaptcha).The verification code is simple and just for learning.
7
+
8
+ ## Example
9
+ ![](./img/wiyvfca.png)
10
+
11
+ ## Installation
12
+
13
+ ```ruby
14
+ gem 'gcaptcha'
15
+ ```
16
+
17
+ And then execute:
18
+
19
+ $ bundle
20
+
21
+ Or install it yourself as:
22
+
23
+ $ gem install gcaptcha
24
+
25
+ ## Usage
26
+
27
+ You can write the script to generate the captcha. Example:
28
+ ```ruby
29
+ GCaptcha.configure do |config|
30
+ config.style = :colorful # default: :colorful, allows: [:colorful, :black_white]
31
+ config.length = 5 # default: 5, allows: 3..7
32
+ config.strike_through = false # default: true
33
+ config.outline = false # default: true, outline style for the hard mode
34
+ config.batch_nums = 10 # default: 10, batch generate captcha
35
+ config.img_path = "path" # default: Dir.pwd
36
+ config.extension_name = :jpg # default: :jpg, allows: [:jpg, :png, :gif]
37
+ end
38
+
39
+ # generate one, return the img path
40
+ GCaptcha.generate
41
+
42
+ # batch generate, return an array of img path
43
+ GCaptcha.batch_generate
44
+
45
+ # get the config
46
+ GCaptcha.config
47
+ ```
48
+
49
+ And also you can use the command, example:
50
+ ```ruby
51
+ $ gcaptcha -h
52
+ Usage: GCaptcha [options]
53
+
54
+ Specific options:
55
+ -s, --style [TYPE] Color style, default: colorful, allows: [colorful, black_white]
56
+ -l, --length [INTEGER] Chars length: default 5, allows: [3..7]
57
+ -t, --[no-]through strike_through, default: true
58
+ -u, --[no-]outline Outline style for the hard mode, default: true
59
+ -n, --nums [INTEGER] The nums to batch generate captcha, default: 10
60
+ -o, --output [STRING] img output path, default: Dir.pwd
61
+ -e, --ext_name [TYPE] image's extension name, allows: [jpg, png, gif], default: jpg
62
+
63
+ Common options:
64
+ -h, --help show the help message
65
+ -v, --version Show version
66
+ ```
67
+
68
+ ## Thanks
69
+ * [rucaptcha](https://github.com/huacnlee/rucaptcha)
70
+ * [captcha](https://github.com/ITikhonov/captcha)
71
+
72
+ ## Development
73
+
74
+ After checking out the repo, run `bin/setup` to install dependencies and run `rake compile` to make the c extension. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
75
+
76
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
@@ -0,0 +1,15 @@
1
+ require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+ require 'rake/extensiontask'
4
+
5
+ Rake::ExtensionTask.new "gcaptcha" do |ext|
6
+ ext.lib_dir = "lib/gcaptcha"
7
+ end
8
+
9
+ Rake::TestTask.new(:test) do |t|
10
+ t.libs << "test"
11
+ t.libs << "lib"
12
+ t.test_files = FileList["test/**/*_test.rb"]
13
+ end
14
+
15
+ task :default => :test
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "gcaptcha"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
@@ -0,0 +1,116 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'optparse'
5
+ require 'gcaptcha'
6
+
7
+ class GCaptchaOptparser
8
+ class Parser
9
+ attr_accessor :style,
10
+ :length,
11
+ :strike_through,
12
+ :outline,
13
+ :batch_nums,
14
+ :img_path,
15
+ :extension_name
16
+
17
+ def initialize
18
+
19
+ end
20
+
21
+ def define_options(parser)
22
+ parser.banner = "Usage: GCaptcha [options]"
23
+ parser.separator ""
24
+ parser.separator "Specific options:"
25
+
26
+ style_option(parser)
27
+ length_option(parser)
28
+ strike_through_option(parser)
29
+ outline_option(parser)
30
+ batch_nums_option(parser)
31
+ img_path_option(parser)
32
+ extension_name_option(parser)
33
+
34
+ parser.separator ""
35
+ parser.separator "Common options:"
36
+
37
+ parser.on_tail("-h", "--help", "show the help message") do
38
+ puts parser
39
+ exit
40
+ end
41
+
42
+ parser.on_tail("-v", "--version", "Show version") do
43
+ puts GCaptcha::VERSION
44
+ exit
45
+ end
46
+ end
47
+
48
+ private
49
+
50
+ def style_option(parser)
51
+ parser.on("-s", "--style [TYPE]", [:colorful, :blank_white],"Color style, default: colorful, allows: [colorful, black_white]") do |style|
52
+ self.style = style
53
+ end
54
+ end
55
+
56
+ def length_option(parser)
57
+ parser.on("-l", "--length [INTEGER]", Integer, "Chars length: default 5, allows: [3..7]") do |length|
58
+ self.length = length
59
+ end
60
+ end
61
+
62
+ def strike_through_option(parser)
63
+ parser.on("-t", "--[no-]through", "strike_through, default: true") do |strike_through|
64
+ self.strike_through = strike_through
65
+ end
66
+ end
67
+
68
+ def outline_option(parser)
69
+ parser.on("-u", "--[no-]outline", "Outline style for the hard mode, default: true") do |outline|
70
+ self.outline = outline
71
+ end
72
+ end
73
+
74
+ def batch_nums_option(parser)
75
+ parser.on("-n", "--nums [INTEGER]", Integer, "The nums to batch generate captcha, default: 10") do |num|
76
+ self.batch_nums = num
77
+ end
78
+ end
79
+
80
+ def img_path_option(parser)
81
+ parser.on("-o", "--output [STRING]", String, "img output path, default: Dir.pwd") do |path|
82
+ self.img_path = path
83
+ end
84
+ end
85
+
86
+ def extension_name_option(parser)
87
+ parser.on("-e", "--ext_name [TYPE]", [:jpg, :png, :gif], "image's extension name, allows: [jpg, png, gif], default: jpg") do |ext_name|
88
+ self.extension_name = ext_name
89
+ end
90
+ end
91
+ end
92
+
93
+ attr_reader :parser, :options
94
+ def parse(args)
95
+ @options = Parser.new
96
+ @args = OptionParser.new do |parser|
97
+ @options.define_options(parser)
98
+ parser.parse!(args)
99
+ end
100
+ @options
101
+ end
102
+ end
103
+
104
+ parser = GCaptchaOptparser.new
105
+ options = parser.parse(ARGV)
106
+
107
+ GCaptcha.configure do |config|
108
+ config.style = options.style if options.style
109
+ config.length = options.length if options.length
110
+ config.strike_through = options.strike_through unless options.strike_through.nil?
111
+ config.outline = options.outline unless options.outline.nil?
112
+ config.batch_nums = options.batch_nums if options.batch_nums
113
+ config.img_path = options.img_path if options.img_path
114
+ config.extension_name = options.extension_name if options.extension_name
115
+ end
116
+ GCaptcha.batch_generate
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,345 @@
1
+ // Colors from
2
+ // https://material.io/guidelines/style/color.html#color-ui-color-palette
3
+ static char *colors[] = {
4
+ // Black 500 #000000
5
+ "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
6
+ "\x11\x11\x11"
7
+ "\x11\x11\x11"
8
+ "\x11\x11\x11"
9
+ "\x11\x11\x11"
10
+ "\x11\x11\x11"
11
+ "\x11\x11\x11"
12
+ "\x11\x11\x11"
13
+ "\x11\x11\x11"
14
+ "\x11\x11\x11"
15
+ "\x11\x11\x11"
16
+ "\x11\x11\x11"
17
+ "\x11\x11\x11"
18
+ "\x11\x11\x11"
19
+ "\x11\x11\x11"
20
+ "\x11\x11\x11"
21
+ "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
22
+
23
+ // Red 500 #F44336
24
+ "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
25
+ "\xF4\x43\x36"
26
+ "\xF4\x43\x36"
27
+ "\xF4\x43\x36"
28
+ "\xF4\x43\x36"
29
+ "\xF4\x43\x36"
30
+ "\xF4\x43\x36"
31
+ "\xF4\x43\x36"
32
+ "\xF4\x43\x36"
33
+ "\xF4\x43\x36"
34
+ "\xF4\x43\x36"
35
+ "\xF4\x43\x36"
36
+ "\xF4\x43\x36"
37
+ "\xF4\x43\x36"
38
+ "\xF4\x43\x36"
39
+ "\xF4\x43\x36"
40
+ "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
41
+
42
+ // Pink 500 #E91E63
43
+ "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
44
+ "\xE9\x1E\x63"
45
+ "\xE9\x1E\x63"
46
+ "\xE9\x1E\x63"
47
+ "\xE9\x1E\x63"
48
+ "\xE9\x1E\x63"
49
+ "\xE9\x1E\x63"
50
+ "\xE9\x1E\x63"
51
+ "\xE9\x1E\x63"
52
+ "\xE9\x1E\x63"
53
+ "\xE9\x1E\x63"
54
+ "\xE9\x1E\x63"
55
+ "\xE9\x1E\x63"
56
+ "\xE9\x1E\x63"
57
+ "\xE9\x1E\x63"
58
+ "\xE9\x1E\x63"
59
+ "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
60
+
61
+ // Purple 500 #9C27B0
62
+ "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
63
+ "\x9C\x27\xB0"
64
+ "\x9C\x27\xB0"
65
+ "\x9C\x27\xB0"
66
+ "\x9C\x27\xB0"
67
+ "\x9C\x27\xB0"
68
+ "\x9C\x27\xB0"
69
+ "\x9C\x27\xB0"
70
+ "\x9C\x27\xB0"
71
+ "\x9C\x27\xB0"
72
+ "\x9C\x27\xB0"
73
+ "\x9C\x27\xB0"
74
+ "\x9C\x27\xB0"
75
+ "\x9C\x27\xB0"
76
+ "\x9C\x27\xB0"
77
+ "\x9C\x27\xB0"
78
+ "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
79
+
80
+ // Deep Purple 500 #673AB7
81
+ "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
82
+ "\x67\x3A\xB7"
83
+ "\x67\x3A\xB7"
84
+ "\x67\x3A\xB7"
85
+ "\x67\x3A\xB7"
86
+ "\x67\x3A\xB7"
87
+ "\x67\x3A\xB7"
88
+ "\x67\x3A\xB7"
89
+ "\x67\x3A\xB7"
90
+ "\x67\x3A\xB7"
91
+ "\x67\x3A\xB7"
92
+ "\x67\x3A\xB7"
93
+ "\x67\x3A\xB7"
94
+ "\x67\x3A\xB7"
95
+ "\x67\x3A\xB7"
96
+ "\x67\x3A\xB7"
97
+ "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
98
+
99
+ // Indigo 500 #3F51B5
100
+ "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
101
+ "\x3F\x51\xB5"
102
+ "\x3F\x51\xB5"
103
+ "\x3F\x51\xB5"
104
+ "\x3F\x51\xB5"
105
+ "\x3F\x51\xB5"
106
+ "\x3F\x51\xB5"
107
+ "\x3F\x51\xB5"
108
+ "\x3F\x51\xB5"
109
+ "\x3F\x51\xB5"
110
+ "\x3F\x51\xB5"
111
+ "\x3F\x51\xB5"
112
+ "\x3F\x51\xB5"
113
+ "\x3F\x51\xB5"
114
+ "\x3F\x51\xB5"
115
+ "\x3F\x51\xB5"
116
+ "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
117
+
118
+ // Blue 500 #2196F3
119
+ "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
120
+ "\x21\x96\xF3"
121
+ "\x21\x96\xF3"
122
+ "\x21\x96\xF3"
123
+ "\x21\x96\xF3"
124
+ "\x21\x96\xF3"
125
+ "\x21\x96\xF3"
126
+ "\x21\x96\xF3"
127
+ "\x21\x96\xF3"
128
+ "\x21\x96\xF3"
129
+ "\x21\x96\xF3"
130
+ "\x21\x96\xF3"
131
+ "\x21\x96\xF3"
132
+ "\x21\x96\xF3"
133
+ "\x21\x96\xF3"
134
+ "\x21\x96\xF3"
135
+ "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
136
+
137
+ // Light Blue 500 #03A9F4
138
+ "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
139
+ "\x03\xA9\xF4"
140
+ "\x03\xA9\xF4"
141
+ "\x03\xA9\xF4"
142
+ "\x03\xA9\xF4"
143
+ "\x03\xA9\xF4"
144
+ "\x03\xA9\xF4"
145
+ "\x03\xA9\xF4"
146
+ "\x03\xA9\xF4"
147
+ "\x03\xA9\xF4"
148
+ "\x03\xA9\xF4"
149
+ "\x03\xA9\xF4"
150
+ "\x03\xA9\xF4"
151
+ "\x03\xA9\xF4"
152
+ "\x03\xA9\xF4"
153
+ "\x03\xA9\xF4"
154
+ "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
155
+
156
+ // Cyan 500 #00BCD4
157
+ "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
158
+ "\x00\xBC\xD4"
159
+ "\x00\xBC\xD4"
160
+ "\x00\xBC\xD4"
161
+ "\x00\xBC\xD4"
162
+ "\x00\xBC\xD4"
163
+ "\x00\xBC\xD4"
164
+ "\x00\xBC\xD4"
165
+ "\x00\xBC\xD4"
166
+ "\x00\xBC\xD4"
167
+ "\x00\xBC\xD4"
168
+ "\x00\xBC\xD4"
169
+ "\x00\xBC\xD4"
170
+ "\x00\xBC\xD4"
171
+ "\x00\xBC\xD4"
172
+ "\x00\xBC\xD4"
173
+ "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
174
+
175
+ // Teal 500 #009688
176
+ "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
177
+ "\x00\x96\x88"
178
+ "\x00\x96\x88"
179
+ "\x00\x96\x88"
180
+ "\x00\x96\x88"
181
+ "\x00\x96\x88"
182
+ "\x00\x96\x88"
183
+ "\x00\x96\x88"
184
+ "\x00\x96\x88"
185
+ "\x00\x96\x88"
186
+ "\x00\x96\x88"
187
+ "\x00\x96\x88"
188
+ "\x00\x96\x88"
189
+ "\x00\x96\x88"
190
+ "\x00\x96\x88"
191
+ "\x00\x96\x88"
192
+ "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
193
+
194
+ // Green 500 #4CAF50
195
+ "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
196
+ "\x4C\xAF\x50"
197
+ "\x4C\xAF\x50"
198
+ "\x4C\xAF\x50"
199
+ "\x4C\xAF\x50"
200
+ "\x4C\xAF\x50"
201
+ "\x4C\xAF\x50"
202
+ "\x4C\xAF\x50"
203
+ "\x4C\xAF\x50"
204
+ "\x4C\xAF\x50"
205
+ "\x4C\xAF\x50"
206
+ "\x4C\xAF\x50"
207
+ "\x4C\xAF\x50"
208
+ "\x4C\xAF\x50"
209
+ "\x4C\xAF\x50"
210
+ "\x4C\xAF\x50"
211
+ "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
212
+
213
+ // Light Green 500 #8BC34A
214
+ "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
215
+ "\x8B\xC3\x4A"
216
+ "\x8B\xC3\x4A"
217
+ "\x8B\xC3\x4A"
218
+ "\x8B\xC3\x4A"
219
+ "\x8B\xC3\x4A"
220
+ "\x8B\xC3\x4A"
221
+ "\x8B\xC3\x4A"
222
+ "\x8B\xC3\x4A"
223
+ "\x8B\xC3\x4A"
224
+ "\x8B\xC3\x4A"
225
+ "\x8B\xC3\x4A"
226
+ "\x8B\xC3\x4A"
227
+ "\x8B\xC3\x4A"
228
+ "\x8B\xC3\x4A"
229
+ "\x8B\xC3\x4A"
230
+ "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
231
+
232
+ // Lime 500 #CDDC39
233
+ "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
234
+ "\xCD\xDC\x39"
235
+ "\xCD\xDC\x39"
236
+ "\xCD\xDC\x39"
237
+ "\xCD\xDC\x39"
238
+ "\xCD\xDC\x39"
239
+ "\xCD\xDC\x39"
240
+ "\xCD\xDC\x39"
241
+ "\xCD\xDC\x39"
242
+ "\xCD\xDC\x39"
243
+ "\xCD\xDC\x39"
244
+ "\xCD\xDC\x39"
245
+ "\xCD\xDC\x39"
246
+ "\xCD\xDC\x39"
247
+ "\xCD\xDC\x39"
248
+ "\xCD\xDC\x39"
249
+ "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
250
+
251
+ // Yellow 500 #FFEB3B
252
+ "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
253
+ "\xFF\xEB\x3B"
254
+ "\xFF\xEB\x3B"
255
+ "\xFF\xEB\x3B"
256
+ "\xFF\xEB\x3B"
257
+ "\xFF\xEB\x3B"
258
+ "\xFF\xEB\x3B"
259
+ "\xFF\xEB\x3B"
260
+ "\xFF\xEB\x3B"
261
+ "\xFF\xEB\x3B"
262
+ "\xFF\xEB\x3B"
263
+ "\xFF\xEB\x3B"
264
+ "\xFF\xEB\x3B"
265
+ "\xFF\xEB\x3B"
266
+ "\xFF\xEB\x3B"
267
+ "\xFF\xEB\x3B"
268
+ "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
269
+
270
+ // Amber 500 #FFC107
271
+ "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
272
+ "\xFF\xC1\x07"
273
+ "\xFF\xC1\x07"
274
+ "\xFF\xC1\x07"
275
+ "\xFF\xC1\x07"
276
+ "\xFF\xC1\x07"
277
+ "\xFF\xC1\x07"
278
+ "\xFF\xC1\x07"
279
+ "\xFF\xC1\x07"
280
+ "\xFF\xC1\x07"
281
+ "\xFF\xC1\x07"
282
+ "\xFF\xC1\x07"
283
+ "\xFF\xC1\x07"
284
+ "\xFF\xC1\x07"
285
+ "\xFF\xC1\x07"
286
+ "\xFF\xC1\x07"
287
+ "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
288
+
289
+ // Orange 500 #FF9800
290
+ "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
291
+ "\xFF\x98\x00"
292
+ "\xFF\x98\x00"
293
+ "\xFF\x98\x00"
294
+ "\xFF\x98\x00"
295
+ "\xFF\x98\x00"
296
+ "\xFF\x98\x00"
297
+ "\xFF\x98\x00"
298
+ "\xFF\x98\x00"
299
+ "\xFF\x98\x00"
300
+ "\xFF\x98\x00"
301
+ "\xFF\x98\x00"
302
+ "\xFF\x98\x00"
303
+ "\xFF\x98\x00"
304
+ "\xFF\x98\x00"
305
+ "\xFF\x98\x00"
306
+ "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
307
+
308
+ // Deep Orange 500 #FF5722
309
+ "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
310
+ "\xFF\x57\x22"
311
+ "\xFF\x57\x22"
312
+ "\xFF\x57\x22"
313
+ "\xFF\x57\x22"
314
+ "\xFF\x57\x22"
315
+ "\xFF\x57\x22"
316
+ "\xFF\x57\x22"
317
+ "\xFF\x57\x22"
318
+ "\xFF\x57\x22"
319
+ "\xFF\x57\x22"
320
+ "\xFF\x57\x22"
321
+ "\xFF\x57\x22"
322
+ "\xFF\x57\x22"
323
+ "\xFF\x57\x22"
324
+ "\xFF\x57\x22"
325
+ "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04",
326
+
327
+ // Brown 500 #795548
328
+ "GIF89a" "\xc8\0\x46\0" "\x83" "\0\0"
329
+ "\x79\x55\x48"
330
+ "\x79\x55\x48"
331
+ "\x79\x55\x48"
332
+ "\x79\x55\x48"
333
+ "\x79\x55\x48"
334
+ "\x79\x55\x48"
335
+ "\x79\x55\x48"
336
+ "\x79\x55\x48"
337
+ "\x79\x55\x48"
338
+ "\x79\x55\x48"
339
+ "\x79\x55\x48"
340
+ "\x79\x55\x48"
341
+ "\x79\x55\x48"
342
+ "\x79\x55\x48"
343
+ "\x79\x55\x48"
344
+ "\xff\xff\xff" "," "\0\0\0\0" "\xc8\0\x46\0" "\0" "\x04"
345
+ };