embulk 0.6.16 → 0.6.17
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.
- checksums.yaml +4 -4
- data/README.md +33 -45
- data/build.gradle +3 -3
- data/embulk-core/src/main/java/org/embulk/spi/Exec.java +6 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/InputStreamFileInput.java +73 -1
- data/embulk-core/src/main/java/org/embulk/spi/util/InputStreamTransactionalFileInput.java +25 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/Timestamps.java +53 -0
- data/embulk-docs/src/_static/embulk-logo.svg +133 -0
- data/embulk-docs/src/release.rst +1 -0
- data/embulk-docs/src/release/release-0.6.17.rst +39 -0
- data/embulk-standards/src/main/java/org/embulk/standards/CsvFormatterPlugin.java +2 -17
- data/embulk-standards/src/main/java/org/embulk/standards/CsvParserPlugin.java +3 -22
- data/embulk-standards/src/main/java/org/embulk/standards/GzipFileDecoderPlugin.java +2 -2
- data/embulk-standards/src/main/java/org/embulk/standards/GzipFileEncoderPlugin.java +0 -1
- data/embulk-standards/src/main/java/org/embulk/standards/LocalFileInputPlugin.java +18 -42
- data/embulk-standards/src/main/java/org/embulk/standards/LocalFileOutputPlugin.java +3 -3
- data/lib/embulk/command/embulk_new_plugin.rb +40 -14
- data/lib/embulk/command/embulk_run.rb +3 -3
- data/lib/embulk/data/new/README.md.erb +18 -17
- data/lib/embulk/data/new/java/build.gradle.erb +1 -1
- data/lib/embulk/data/new/java/decoder.java.erb +53 -9
- data/lib/embulk/data/new/java/encoder.java.erb +54 -8
- data/lib/embulk/data/new/java/file_input.java.erb +91 -12
- data/lib/embulk/data/new/java/file_output.java.erb +35 -8
- data/lib/embulk/data/new/java/filter.java.erb +16 -7
- data/lib/embulk/data/new/java/formatter.java.erb +16 -7
- data/lib/embulk/data/new/java/input.java.erb +18 -14
- data/lib/embulk/data/new/java/output.java.erb +16 -8
- data/lib/embulk/data/new/java/parser.java.erb +17 -8
- data/lib/embulk/data/new/java/plugin_loader.rb.erb +1 -1
- data/lib/embulk/data/new/java/test.java.erb +1 -1
- data/lib/embulk/data/new/ruby/filter.rb.erb +6 -4
- data/lib/embulk/data/new/ruby/formatter.rb.erb +6 -4
- data/lib/embulk/data/new/ruby/gemspec.erb +2 -2
- data/lib/embulk/data/new/ruby/input.rb.erb +6 -4
- data/lib/embulk/data/new/ruby/output.rb.erb +6 -4
- data/lib/embulk/data/new/ruby/parser.rb.erb +6 -4
- data/lib/embulk/file_input.rb +4 -0
- data/lib/embulk/file_output.rb +4 -0
- data/lib/embulk/version.rb +1 -1
- metadata +8 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c667cedd2e533e4a3404c81baa92618dfd826644
|
4
|
+
data.tar.gz: fc3c840b3c855395c02b3d2ba3e84cf3428a8a55
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e30b36e74c05cc9a3f63565691fd4366803be573f9909c1cfcce1292a65a1c7b70a1a6d324990555f89b774c786a8dc1316012f9f9a4330f52c3963573cedaa9
|
7
|
+
data.tar.gz: 8299b1e6c264a0031e2de1c557fd1a91eae1d24bf7badfc671e81fdc007421c4cc77dbc40cb8e6c15f66d54bd259be44b925772104055105988a704401f52418
|
data/README.md
CHANGED
@@ -1,58 +1,48 @@
|
|
1
1
|
# What's Embulk?
|
2
2
|
|
3
|
-
Embulk is a
|
3
|
+
Embulk is a parallel bulk data loader that **helps data transfer between various storages, databases, NoSQL and cloud services**.
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
[Embulk, an open-source plugin-based parallel bulk data loader](http://www.slideshare.net/frsyuki/embuk-making-data-integration-works-relaxed) at Slideshare
|
5
|
+
**Embulk supports plugins** to add functions. You can [share the plugins](http://www.embulk.org/plugins/) to keep your custom scripts readable, maintainable, and reusable.
|
8
6
|
|
9
7
|
[](http://www.slideshare.net/frsyuki/embuk-making-data-integration-works-relaxed/12)
|
8
|
+
[Embulk, an open-source plugin-based parallel bulk data loader](http://www.slideshare.net/frsyuki/embuk-making-data-integration-works-relaxed) at Slideshare
|
10
9
|
|
11
10
|
# Document
|
12
11
|
|
13
|
-
|
14
|
-
* [Using plugins](#using-plugins)
|
15
|
-
* [Using plugin bundle](#using-plugin-bundle)
|
16
|
-
* [Releasing plugins to RubyGems](#releasing-plugins-to-rubygems)
|
17
|
-
* [Resuming a failed transaction](#resuming-a-failed-transaction)
|
18
|
-
* [Embulk Development](#embulk-development)
|
19
|
-
* [Build](#build)
|
20
|
-
* [Release](#release)
|
12
|
+
Embulk documents: http://www.embulk.org/docs/
|
21
13
|
|
22
14
|
## Quick Start
|
23
15
|
|
24
|
-
The single-file package is the simplest way to try Embulk. You can download the latest embulk-VERSION.jar from [the releases page](https://bintray.com/embulk/maven/embulk/view#files) and run it with java.
|
25
|
-
|
26
16
|
### Linux & Mac & BSD
|
27
17
|
|
28
|
-
Embulk is a Java application. Please make sure that
|
18
|
+
Embulk is a Java application. Please make sure that [Java](http://www.oracle.com/technetwork/java/javase/downloads/index.html) is installed.
|
29
19
|
|
30
20
|
Following 4 commands install embulk to your home directory:
|
31
21
|
|
32
|
-
```
|
22
|
+
```sh
|
33
23
|
curl --create-dirs -o ~/.embulk/bin/embulk -L "http://dl.embulk.org/embulk-latest.jar"
|
34
24
|
chmod +x ~/.embulk/bin/embulk
|
35
25
|
echo 'export PATH="$HOME/.embulk/bin:$PATH"' >> ~/.bashrc
|
36
26
|
source ~/.bashrc
|
37
27
|
```
|
38
28
|
|
39
|
-
Next step: [
|
29
|
+
Next step: [Running example in 4 commands](#running-example)
|
40
30
|
|
41
31
|
### Windows
|
42
32
|
|
43
|
-
Embulk is a Java application. Please make sure that
|
33
|
+
Embulk is a Java application. Please make sure that [Java](http://www.oracle.com/technetwork/java/javase/downloads/index.html) is installed.
|
44
34
|
|
45
|
-
You can
|
35
|
+
You can download `embulk.bat` using this command on cmd.exe or PowerShell.exe:
|
46
36
|
|
47
37
|
```
|
48
38
|
PowerShell -Command "& {Invoke-WebRequest http://dl.embulk.org/embulk-latest.jar -OutFile embulk.bat}"
|
49
39
|
```
|
50
40
|
|
51
|
-
Next step: [
|
41
|
+
Next step: [Running example in 4 commands](#running-example)
|
52
42
|
|
53
|
-
###
|
43
|
+
### Running example
|
54
44
|
|
55
|
-
|
45
|
+
`embulk example` command generates a sample CSV file so that you can try embulk quickly:
|
56
46
|
|
57
47
|
```
|
58
48
|
embulk example ./try1
|
@@ -78,9 +68,10 @@ embulk gem list
|
|
78
68
|
|
79
69
|
Embulk bundles some built-in plugins such as `embulk-encoder-gzip` or `embulk-formatter-csv`. You can use those plugins with following configuration file:
|
80
70
|
|
81
|
-
```
|
71
|
+
```yaml
|
82
72
|
in:
|
83
|
-
|
73
|
+
type: file
|
74
|
+
path_prefix: "./try1/csv/sample_"
|
84
75
|
out:
|
85
76
|
type: command
|
86
77
|
command: "cat - > task.$INDEX.$SEQID.csv.gz"
|
@@ -90,27 +81,6 @@ out:
|
|
90
81
|
type: csv
|
91
82
|
```
|
92
83
|
|
93
|
-
### Using plugin bundle
|
94
|
-
|
95
|
-
`embulk bundle` subcommand creates (or updates if already exists) a private (isolated) bundle of a plugins.
|
96
|
-
You can use the bundle using `-b <bundle_dir>` option. `embulk bundle` also generates some example plugins to \<bundle_dir>/embulk/\*.rb directory.
|
97
|
-
|
98
|
-
See the generated \<bundle_dir>/Gemfile file how to plugin bundles work.
|
99
|
-
|
100
|
-
```
|
101
|
-
embulk bundle ./embulk_bundle
|
102
|
-
embulk guess -b ./embulk_bundle ...
|
103
|
-
embulk run -b ./embulk_bundle ...
|
104
|
-
```
|
105
|
-
|
106
|
-
### Releasing plugins to RubyGems
|
107
|
-
|
108
|
-
TODO: documents
|
109
|
-
|
110
|
-
```
|
111
|
-
embulk-plugin-xyz
|
112
|
-
```
|
113
|
-
|
114
84
|
### Resuming a failed transaction
|
115
85
|
|
116
86
|
Embulk supports resuming failed transactions.
|
@@ -132,6 +102,24 @@ If you give up on resuming the transaction, you can use `embulk cleanup` subcomm
|
|
132
102
|
embulk cleanup config.yml -r resume-state.yml
|
133
103
|
```
|
134
104
|
|
105
|
+
### Using plugin bundle
|
106
|
+
|
107
|
+
`embulk bundle` subcommand creates (or updates if already exists) a private (isolated) bundle of a plugins.
|
108
|
+
You can use the bundle using `-b <bundle_dir>` option. `embulk bundle` also generates some example plugins to \<bundle_dir>/embulk/\*.rb directory.
|
109
|
+
|
110
|
+
See the generated \<bundle_dir>/Gemfile file how to plugin bundles work.
|
111
|
+
|
112
|
+
```
|
113
|
+
embulk bundle ./embulk_bundle
|
114
|
+
embulk guess -b ./embulk_bundle ...
|
115
|
+
embulk run -b ./embulk_bundle ...
|
116
|
+
```
|
117
|
+
|
118
|
+
## Use cases
|
119
|
+
|
120
|
+
* [Scheduled bulk data loading to Elasticsearch + Kibana 4 from CSV files](http://www.embulk.org/docs/recipe/scheduled-csv-load-to-elasticsearch-kibana4.html)
|
121
|
+
|
122
|
+
For further details, visit [Embulk documentation](http://www.embulk.org/docs/).
|
135
123
|
|
136
124
|
## Embulk Development
|
137
125
|
|
data/build.gradle
CHANGED
@@ -11,7 +11,7 @@ def release_projects = [project(":embulk-core"), project(":embulk-standards")]
|
|
11
11
|
|
12
12
|
allprojects {
|
13
13
|
group = 'org.embulk'
|
14
|
-
version = '0.6.
|
14
|
+
version = '0.6.17'
|
15
15
|
|
16
16
|
ext {
|
17
17
|
jrubyVersion = '1.7.19'
|
@@ -282,9 +282,9 @@ Manual operations:
|
|
282
282
|
bintrayUpload.mustRunAfter('releaseCheck')
|
283
283
|
rubyGemsUpload.mustRunAfter('releaseCheck')
|
284
284
|
|
285
|
-
task
|
285
|
+
task setVersion << {
|
286
286
|
if (!project.hasProperty("to")) {
|
287
|
-
throw new GradleException("Usage: ./gradlew -Pto=VERSION")
|
287
|
+
throw new GradleException("Usage: ./gradlew setVersion -Pto=VERSION")
|
288
288
|
}
|
289
289
|
|
290
290
|
File gradle_ver = file('build.gradle')
|
@@ -10,6 +10,7 @@ import org.embulk.config.ConfigDiff;
|
|
10
10
|
import org.embulk.config.ConfigSource;
|
11
11
|
import org.embulk.config.TaskSource;
|
12
12
|
import org.embulk.plugin.PluginType;
|
13
|
+
import org.embulk.spi.time.Timestamp;
|
13
14
|
|
14
15
|
public class Exec
|
15
16
|
{
|
@@ -43,6 +44,11 @@ public class Exec
|
|
43
44
|
return session().getInjector();
|
44
45
|
}
|
45
46
|
|
47
|
+
public static Timestamp getTransactionTime()
|
48
|
+
{
|
49
|
+
return session().getTransactionTime();
|
50
|
+
}
|
51
|
+
|
46
52
|
public static Logger getLogger(String name)
|
47
53
|
{
|
48
54
|
return session().getLogger(name);
|
@@ -19,7 +19,13 @@ public class InputStreamFileInput
|
|
19
19
|
public void close() throws IOException;
|
20
20
|
}
|
21
21
|
|
22
|
-
public
|
22
|
+
public interface Opener
|
23
|
+
{
|
24
|
+
public InputStream open() throws IOException;
|
25
|
+
}
|
26
|
+
|
27
|
+
public static class IteratorProvider implements Provider
|
28
|
+
{
|
23
29
|
private Iterator<InputStream> iterator;
|
24
30
|
|
25
31
|
public IteratorProvider(Iterable<InputStream> iterable)
|
@@ -32,6 +38,7 @@ public class InputStreamFileInput
|
|
32
38
|
this.iterator = iterator;
|
33
39
|
}
|
34
40
|
|
41
|
+
@Override
|
35
42
|
public InputStream openNext() throws IOException
|
36
43
|
{
|
37
44
|
if (!iterator.hasNext()) {
|
@@ -49,6 +56,61 @@ public class InputStreamFileInput
|
|
49
56
|
}
|
50
57
|
}
|
51
58
|
|
59
|
+
private static class OpenerProvider implements Provider
|
60
|
+
{
|
61
|
+
private Opener opener;
|
62
|
+
|
63
|
+
public OpenerProvider(Opener opener)
|
64
|
+
{
|
65
|
+
this.opener = opener;
|
66
|
+
}
|
67
|
+
|
68
|
+
@Override
|
69
|
+
public InputStream openNext() throws IOException
|
70
|
+
{
|
71
|
+
if (opener == null) {
|
72
|
+
return null;
|
73
|
+
}
|
74
|
+
InputStream stream = opener.open();
|
75
|
+
opener = null;
|
76
|
+
return stream;
|
77
|
+
}
|
78
|
+
|
79
|
+
@Override
|
80
|
+
public void close() throws IOException
|
81
|
+
{ }
|
82
|
+
}
|
83
|
+
|
84
|
+
private static class InputStreamProvider implements Provider
|
85
|
+
{
|
86
|
+
private InputStream input;
|
87
|
+
|
88
|
+
public InputStreamProvider(InputStream input)
|
89
|
+
{
|
90
|
+
this.input = input;
|
91
|
+
}
|
92
|
+
|
93
|
+
@Override
|
94
|
+
public InputStream openNext() throws IOException
|
95
|
+
{
|
96
|
+
if (input == null) {
|
97
|
+
return null;
|
98
|
+
}
|
99
|
+
InputStream ret = input;
|
100
|
+
input = null;
|
101
|
+
return ret;
|
102
|
+
}
|
103
|
+
|
104
|
+
@Override
|
105
|
+
public void close() throws IOException
|
106
|
+
{
|
107
|
+
if (input != null) {
|
108
|
+
input.close();
|
109
|
+
input = null;
|
110
|
+
}
|
111
|
+
}
|
112
|
+
}
|
113
|
+
|
52
114
|
private final BufferAllocator allocator;
|
53
115
|
private final Provider provider;
|
54
116
|
private InputStream current;
|
@@ -60,6 +122,16 @@ public class InputStreamFileInput
|
|
60
122
|
this.current = null;
|
61
123
|
}
|
62
124
|
|
125
|
+
public InputStreamFileInput(BufferAllocator allocator, Opener opener)
|
126
|
+
{
|
127
|
+
this(allocator, new OpenerProvider(opener));
|
128
|
+
}
|
129
|
+
|
130
|
+
public InputStreamFileInput(BufferAllocator allocator, InputStream openedStream)
|
131
|
+
{
|
132
|
+
this(allocator, new InputStreamProvider(openedStream));
|
133
|
+
}
|
134
|
+
|
63
135
|
public Buffer poll()
|
64
136
|
{
|
65
137
|
// TODO check current != null and throw Illegal State - file is not opened
|
@@ -0,0 +1,25 @@
|
|
1
|
+
package org.embulk.spi.util;
|
2
|
+
|
3
|
+
import java.io.InputStream;
|
4
|
+
import org.embulk.spi.TransactionalFileInput;
|
5
|
+
import org.embulk.spi.BufferAllocator;
|
6
|
+
|
7
|
+
public abstract class InputStreamTransactionalFileInput
|
8
|
+
extends InputStreamFileInput
|
9
|
+
implements TransactionalFileInput
|
10
|
+
{
|
11
|
+
public InputStreamTransactionalFileInput(BufferAllocator allocator, Provider provider)
|
12
|
+
{
|
13
|
+
super(allocator, provider);
|
14
|
+
}
|
15
|
+
|
16
|
+
public InputStreamTransactionalFileInput(BufferAllocator allocator, Opener opener)
|
17
|
+
{
|
18
|
+
super(allocator, opener);
|
19
|
+
}
|
20
|
+
|
21
|
+
public InputStreamTransactionalFileInput(BufferAllocator allocator, InputStream openedStream)
|
22
|
+
{
|
23
|
+
super(allocator, openedStream);
|
24
|
+
}
|
25
|
+
}
|
@@ -0,0 +1,53 @@
|
|
1
|
+
package org.embulk.spi.util;
|
2
|
+
|
3
|
+
import java.util.Map;
|
4
|
+
import com.google.common.base.Optional;
|
5
|
+
import org.embulk.config.Task;
|
6
|
+
import org.embulk.spi.Column;
|
7
|
+
import org.embulk.spi.Schema;
|
8
|
+
import org.embulk.spi.ColumnConfig;
|
9
|
+
import org.embulk.spi.SchemaConfig;
|
10
|
+
import org.embulk.spi.time.TimestampFormatter;
|
11
|
+
import org.embulk.spi.type.TimestampType;
|
12
|
+
import org.embulk.spi.time.TimestampParser;
|
13
|
+
import org.embulk.spi.SchemaConfig;
|
14
|
+
|
15
|
+
public class Timestamps
|
16
|
+
{
|
17
|
+
private Timestamps() { }
|
18
|
+
|
19
|
+
private interface TimestampColumnOption
|
20
|
+
extends Task, TimestampParser.TimestampColumnOption
|
21
|
+
{ }
|
22
|
+
|
23
|
+
public static TimestampParser[] newTimestampColumnParsers(
|
24
|
+
TimestampParser.Task parserTask, SchemaConfig schema)
|
25
|
+
{
|
26
|
+
TimestampParser[] parsers = new TimestampParser[schema.getColumnCount()];
|
27
|
+
int i = 0;
|
28
|
+
for (ColumnConfig column : schema.getColumns()) {
|
29
|
+
if (column.getType() instanceof TimestampType) {
|
30
|
+
TimestampColumnOption option = column.getOption().loadConfig(TimestampColumnOption.class);
|
31
|
+
parsers[i] = new TimestampParser(parserTask, option);
|
32
|
+
}
|
33
|
+
i++;
|
34
|
+
}
|
35
|
+
return parsers;
|
36
|
+
}
|
37
|
+
|
38
|
+
public static TimestampFormatter[] newTimestampColumnFormatters(
|
39
|
+
TimestampFormatter.Task formatterTask, Schema schema,
|
40
|
+
Map<String, ? extends TimestampFormatter.TimestampColumnOption> columnOptions)
|
41
|
+
{
|
42
|
+
TimestampFormatter[] formatters = new TimestampFormatter[schema.getColumnCount()];
|
43
|
+
int i = 0;
|
44
|
+
for (Column column : schema.getColumns()) {
|
45
|
+
if (column.getType() instanceof TimestampType) {
|
46
|
+
Optional<TimestampFormatter.TimestampColumnOption> option = Optional.fromNullable(columnOptions.get(column.getName()));
|
47
|
+
formatters[i] = new TimestampFormatter(formatterTask, option);
|
48
|
+
}
|
49
|
+
i++;
|
50
|
+
}
|
51
|
+
return formatters;
|
52
|
+
}
|
53
|
+
}
|
@@ -0,0 +1,133 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<!-- Generator: Adobe Illustrator 15.0.2, 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" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
5
|
+
width="466px" height="268px" viewBox="0 0 466 268" enable-background="new 0 0 466 268" xml:space="preserve">
|
6
|
+
<g>
|
7
|
+
<path fill="#EF4F39" d="M124.753,173.479c0,0,7.781,2.789,8.031,6.721c0.57,8.859,5.539,30.307-0.93,30.686
|
8
|
+
c-8.516,0.502-20.797-12.975-24.602-22.738c-5.82-14.951-4.18-19.992-4.18-19.992L124.753,173.479z"/>
|
9
|
+
<g>
|
10
|
+
<g>
|
11
|
+
<path fill="#1F1F1F" d="M38.015,225.368c1.477,4.021,3.523,7.008,6.141,8.953s5.891,2.918,9.828,2.918
|
12
|
+
c2.859,0,5.742-0.58,8.648-1.744c0.762-0.312,3.422-1.586,7.984-3.822c1.383-0.672,2.93-1.006,4.625-1.006
|
13
|
+
c2.328,0,4.297,1.051,5.906,3.152c1.34,1.699,2.012,3.398,2.012,5.096c0,3.803-2.707,7.246-8.113,10.33
|
14
|
+
c-6.488,3.713-13.844,5.57-22.07,5.57c-12.297,0-21.98-4.273-29.047-12.814c-5.094-6.17-7.645-13.592-7.645-22.268
|
15
|
+
c0-11.762,3.777-21.152,11.336-28.172c6.527-6.037,14.266-9.057,23.207-9.057c7.828,0,14.781,2.416,20.859,7.246
|
16
|
+
c5.859,4.695,9.75,11.066,11.672,19.115c0.672,2.863,1.008,5.725,1.008,8.586c0,5.277-2.93,7.916-8.789,7.916H38.015z
|
17
|
+
M64.511,211.616c-0.848-3.264-1.832-5.701-2.949-7.312c-2.414-3.531-5.812-5.299-10.195-5.299c-3.758,0-6.953,1.365-9.594,4.094
|
18
|
+
c-1.699,1.787-3.195,4.627-4.492,8.518H64.511z"/>
|
19
|
+
<path fill="#1F1F1F" d="M112.202,189.481c2.367-2.102,4.539-3.623,6.508-4.561c3.352-1.609,7.133-2.416,11.336-2.416
|
20
|
+
c5.23,0,9.812,1.117,13.75,3.354c1.742,0.984,3.598,2.797,5.566,5.434c3.355-2.727,6.215-4.693,8.586-5.902
|
21
|
+
c3.934-1.922,8.16-2.885,12.676-2.885c6.977,0,12.742,2.215,17.305,6.641c4.609,4.518,6.91,10.061,6.91,16.635v35.146
|
22
|
+
c0,3.848-0.449,6.666-1.34,8.451c-0.762,1.432-1.957,2.627-3.59,3.59c-1.633,0.961-3.344,1.443-5.129,1.443
|
23
|
+
c-1.793,0-3.5-0.469-5.133-1.41c-1.633-0.939-2.828-2.146-3.59-3.623c-0.895-1.785-1.34-4.604-1.34-8.451v-30.652
|
24
|
+
c0-2.951-0.895-5.342-2.684-7.176c-2.012-2.146-4.559-3.221-7.645-3.221c-3.133,0-5.75,1.051-7.852,3.154
|
25
|
+
c-1.875,1.832-2.816,4.246-2.816,7.242v30.652c0,3.805-0.449,6.621-1.34,8.451c-0.762,1.477-1.957,2.684-3.59,3.623
|
26
|
+
c-1.633,0.941-3.344,1.41-5.129,1.41c-1.789,0-3.5-0.469-5.133-1.41c-1.633-0.939-2.828-2.146-3.59-3.623
|
27
|
+
c-0.895-1.785-1.34-4.604-1.34-8.451v-28.641c0-4.066-0.961-7.152-2.887-9.254c-1.922-2.104-4.449-3.154-7.578-3.154
|
28
|
+
c-3.086,0-5.699,1.098-7.848,3.287c-1.789,1.879-2.68,4.248-2.68,7.109v30.652c0,3.805-0.453,6.621-1.344,8.451
|
29
|
+
c-0.762,1.477-1.957,2.684-3.59,3.623c-1.633,0.941-3.34,1.41-5.133,1.41c-1.785,0-3.496-0.469-5.129-1.41
|
30
|
+
c-1.633-0.939-2.828-2.146-3.59-3.623c-0.895-1.785-1.34-4.604-1.34-8.451v-46.414c0-3.398,0.848-6.127,2.547-8.186
|
31
|
+
c1.879-2.279,4.336-3.42,7.379-3.42c2.594,0,4.809,0.873,6.641,2.617C109.897,186.284,110.952,187.603,112.202,189.481z"/>
|
32
|
+
<path fill="#1F1F1F" d="M112.202,189.481c2.367-2.102,4.539-3.623,6.508-4.561c3.352-1.609,7.133-2.416,11.336-2.416
|
33
|
+
c5.23,0,9.812,1.117,13.75,3.354c1.742,0.984,3.598,2.797,5.566,5.434c3.355-2.727,6.215-4.693,8.586-5.902
|
34
|
+
c3.934-1.922,8.16-2.885,12.676-2.885c6.977,0,12.742,2.215,17.305,6.641c4.609,4.518,6.91,10.061,6.91,16.635v35.146
|
35
|
+
c0,3.848-0.449,6.666-1.34,8.451c-0.762,1.432-1.957,2.627-3.59,3.59c-1.633,0.961-3.344,1.443-5.129,1.443
|
36
|
+
c-1.793,0-3.5-0.469-5.133-1.41c-1.633-0.939-2.828-2.146-3.59-3.623c-0.895-1.785-1.34-4.604-1.34-8.451v-30.652
|
37
|
+
c0-2.951-0.895-5.342-2.684-7.176c-2.012-2.146-4.559-3.221-7.645-3.221c-3.133,0-5.75,1.051-7.852,3.154
|
38
|
+
c-1.875,1.832-2.816,4.246-2.816,7.242v30.652c0,3.805-0.449,6.621-1.34,8.451c-0.762,1.477-1.957,2.684-3.59,3.623
|
39
|
+
c-1.633,0.941-3.344,1.41-5.129,1.41c-1.789,0-3.5-0.469-5.133-1.41c-1.633-0.939-2.828-2.146-3.59-3.623
|
40
|
+
c-0.895-1.785-1.34-4.604-1.34-8.451v-28.641c0-4.066-0.961-7.152-2.887-9.254c-1.922-2.104-4.449-3.154-7.578-3.154
|
41
|
+
c-3.086,0-5.699,1.098-7.848,3.287c-1.789,1.879-2.68,4.248-2.68,7.109v30.652c0,3.805-0.453,6.621-1.344,8.451
|
42
|
+
c-0.762,1.477-1.957,2.684-3.59,3.623c-1.633,0.941-3.34,1.41-5.133,1.41c-1.785,0-3.496-0.469-5.129-1.41
|
43
|
+
c-1.633-0.939-2.828-2.146-3.59-3.623c-0.895-1.785-1.34-4.604-1.34-8.451v-46.414c0-3.398,0.848-6.127,2.547-8.186
|
44
|
+
c1.879-2.279,4.336-3.42,7.379-3.42c2.594,0,4.809,0.873,6.641,2.617C109.897,186.284,110.952,187.603,112.202,189.481z"/>
|
45
|
+
</g>
|
46
|
+
</g>
|
47
|
+
<g>
|
48
|
+
<path fill="#FFFFFF" d="M32.706,101.839c0,0,12.794,37.536,28.406,50.635c23.352,19.592,42.266,24.008,63.57,26.375
|
49
|
+
c27.992,3.109,68.055,0.375,76.672-3.381c19.914-8.666,36.523-27.725,41.93-43.279c5.414-15.557-82.844-32.125-82.844-32.125
|
50
|
+
l-30.766-13.865c0,0-19.617-10.143-26.719-6.76c-7.102,3.381-13.859,5.748-19.273,7.1c-5.406,1.354-13.523,0.338-22.656,2.029
|
51
|
+
C51.901,90.257,32.706,101.839,32.706,101.839z"/>
|
52
|
+
<path fill="#EF4F39" d="M32.331,101.245c0,0,0.391,10.795,3.898,14.678c4.727,5.23,3.203,11.189,13.461,25.664
|
53
|
+
c13.281,18.732,38.328,36.789,89.406,38.908c50.391,2.094,50.086-1.395,50.086-1.395s-6.891,1.152-44.25-0.252
|
54
|
+
c-23.625-0.889-56.344-5.354-75.016-20.842c-17.734-14.709-24.203-24.42-29.125-39.309c-2.094-6.34-5.797-6.422-5.992-15.996
|
55
|
+
C34.776,101.249,32.331,101.245,32.331,101.245z"/>
|
56
|
+
<g>
|
57
|
+
<path fill="#F16523" d="M195.331,176.63c0,0,5.219-1.023,11.352-4.504c8.711-4.943,14.773-11.02,15.852-11.918
|
58
|
+
c4.883-4.057,15.219-16.484,15.219-16.484c-0.414,0.613-5.562,9.764-12.305,15.977c-4.484,4.133-1.898,2.156-9.25,7.861
|
59
|
+
c-9.078,7.043-22,11.92-22,11.92"/>
|
60
|
+
<path fill="#F16523" d="M284.198,12.147c0,0-7.016,13.777-24.008,15.553c-11.57,1.211-13.188,11.16-13.188,11.16
|
61
|
+
s-4.055-10.652-14.453-12.174c-15.477-2.264-20.375-13.525-20.375-13.525c-4.391,16.23,0.68,24.346,3.383,28.404
|
62
|
+
c5.188,7.781,18.258,9.469,21.305,16.23c3.039,6.764,0.672,11.498-2.703,27.391c-3.383,15.893-19.281,12.848-32.125,11.156
|
63
|
+
c-7.117-0.934-18.672-8.105-41.508-16.402c0.242-4.438-2.695-9.434-1.016-16.23c6.086-24.6,24.094-34.361,12.938-32.715
|
64
|
+
c-8.805,1.301-50.031,32.121-56.523,36.102c-8.344-1.617-17.086-2.822-26.156-3.387c-31.359-1.947-39.305,14.033-48.945,20.627
|
65
|
+
c-17.148,11.734-8.07,17.84-8.07,17.84s28.812,1.553,40.109,3.975c9.469,2.027,32.125,8.453,33.812,11.496
|
66
|
+
c1.695,3.043,4.398,11.834,12.516,10.145c8.109-1.691,8.75-7.969,8.75-7.969c-0.344,9.131,6.805,21.156,14.242,31.639
|
67
|
+
s19.273,13.188,19.273,13.188c2.031,25.359-11.562,49.064-8.031,49.195c23.844,0.889,38.156-23.922,40.453-28.275
|
68
|
+
c4.82-9.131,3.297-19.656,3.297-19.656c42.266-8.113,49.461-34.107,53.203-45.637c6.344-19.529,3.055-59.438,3.055-59.438
|
69
|
+
s8.789-0.676,20.961-9.467C286.565,42.579,284.198,12.147,284.198,12.147z"/>
|
70
|
+
</g>
|
71
|
+
<path fill="#FFFFFF" d="M107.753,97.312c0,0-0.617-14.115,18.625-10.881s19.953,13.1,4.945,17.168
|
72
|
+
C116.323,107.669,108.065,103.565,107.753,97.312z"/>
|
73
|
+
<g>
|
74
|
+
<circle fill="#1F1F1F" cx="101.776" cy="92.2" r="4.312"/>
|
75
|
+
<path fill="#FFFFFF" d="M101.776,96.761c-2.516,0-4.562-2.046-4.562-4.561c0-2.516,2.047-4.562,4.562-4.562
|
76
|
+
s4.562,2.047,4.562,4.562C106.339,94.715,104.292,96.761,101.776,96.761z M101.776,88.138c-2.24,0-4.062,1.822-4.062,4.062
|
77
|
+
c0,2.239,1.822,4.061,4.062,4.061s4.062-1.822,4.062-4.061C105.839,89.96,104.017,88.138,101.776,88.138z"/>
|
78
|
+
<path fill="#FFFFFF" d="M104.394,90.595c0,0.512-0.414,0.928-0.93,0.928c-0.508,0-0.93-0.416-0.93-0.928
|
79
|
+
c0-0.516,0.422-0.932,0.93-0.932C103.979,89.663,104.394,90.079,104.394,90.595z"/>
|
80
|
+
</g>
|
81
|
+
<g>
|
82
|
+
<path fill="#EF4F39" d="M164.237,161.2c-1.523,0.254-4.141,0.254-9.383-1.184c-4.789-1.311-12.648-9.082-13.984-10.43
|
83
|
+
c0.438,0.631,0.875,1.254,1.312,1.875c7.438,10.482,19.273,13.188,19.273,13.188c1.969,24.617-10.773,47.672-8.297,49.121
|
84
|
+
c0.008-0.064,0.094-0.949,0.258-1.764c0.164-0.846,0.594-2.283,1.266-3.805c0.68-1.521,10.062-18.682,12.172-26.543
|
85
|
+
c2.117-7.861,1.188-21.727,1.188-21.727S165.761,160.948,164.237,161.2z"/>
|
86
|
+
<path fill="#EF4F39" d="M122.995,115.067c0,0,2.531-7.607,10.648-6.086s5.328,10.271,5.328,10.271s0.031-6.586-5.711-7.734
|
87
|
+
C128.19,110.503,122.995,115.067,122.995,115.067z"/>
|
88
|
+
<path fill="#EF4F39" d="M117.237,126.362c-5.328-0.635-5.711-8.242-9.891-11.287c-3.484-2.529-25.367-9.129-34.242-11.031
|
89
|
+
s-36.266-3.803-38.547-3.93s-2.914-3.043-3.297-3.553c-0.242-0.326,0.25-2.391,0.633-3.816c-3.898,6.225,0.859,9.432,0.859,9.432
|
90
|
+
s28.812,1.553,40.109,3.975c9.469,2.027,32.125,8.453,33.812,11.496c1.695,3.043,4.398,11.834,12.516,10.145
|
91
|
+
c8.109-1.691,8.75-7.969,8.75-7.969S122.144,126.946,117.237,126.362z"/>
|
92
|
+
<path fill="#EF4F39" d="M251.394,111.146c-1.352,7.1-6.594,22.994-16.398,32.799c-6.102,6.098-15.898,10.652-23.672,14.203
|
93
|
+
c-6.266,2.859-15.219,3.887-15.219,3.887l1.07,3.879c42.266-8.113,49.461-34.107,53.203-45.637
|
94
|
+
c2.305-7.115,3.344-16.934,3.719-26.541C253.448,98.396,252.308,106.351,251.394,111.146z"/>
|
95
|
+
</g>
|
96
|
+
</g>
|
97
|
+
<rect x="133.667" y="203.567" fill="#1F1F1F" width="20.055" height="21.766"/>
|
98
|
+
<g>
|
99
|
+
<g>
|
100
|
+
<path fill="#1F1F1F" d="M226.835,188.409c2.816-2.104,5.188-3.512,7.109-4.227c2.992-1.162,6.059-1.744,9.188-1.744
|
101
|
+
c8.32,0,15.586,3.379,21.801,10.127c6.348,6.889,9.527,15.496,9.527,25.826c0,11.402-3.555,20.658-10.668,27.77
|
102
|
+
c-5.723,5.768-12.543,8.654-20.457,8.654c-4.609,0-8.562-1.031-11.875-3.086c-1.516-0.984-3.148-2.619-4.895-4.896
|
103
|
+
c-2.059,5.051-5.23,7.578-9.527,7.578c-2.637,0-4.961-0.85-6.973-2.549c-2.238-1.967-3.355-4.697-3.355-8.182v-77.543
|
104
|
+
c0-3.799,0.449-6.594,1.344-8.383c0.758-1.477,1.953-2.684,3.59-3.623c1.629-0.939,3.34-1.408,5.129-1.408s3.5,0.469,5.133,1.408
|
105
|
+
s2.828,2.146,3.586,3.623c0.895,1.789,1.344,4.584,1.344,8.383V188.409z M240.519,201.22c-3.758,0-7.02,1.631-9.793,4.896
|
106
|
+
c-2.684,3.219-4.023,7.379-4.023,12.477c0,5.141,1.34,9.324,4.023,12.543c2.773,3.264,6.078,4.896,9.926,4.896
|
107
|
+
c4.16,0,7.488-1.746,9.996-5.23c2.457-3.49,3.688-7.535,3.688-12.143c0-4.695-1.23-8.742-3.688-12.143
|
108
|
+
C248.097,202.987,244.718,201.22,240.519,201.22z"/>
|
109
|
+
<path fill="#1F1F1F" d="M345.358,196.39v29.916c0,6.842-1.637,12.387-4.898,16.635c-2.773,3.578-6.352,6.396-10.734,8.451
|
110
|
+
c-4.918,2.324-10.148,3.488-15.695,3.488c-7.781,0-14.598-2.078-20.457-6.238c-4.559-3.221-7.645-7.064-9.258-11.537
|
111
|
+
c-1.074-3.037-1.605-6.641-1.605-10.799V196.39c0-3.801,0.445-6.617,1.336-8.451c0.762-1.477,1.949-2.684,3.559-3.623
|
112
|
+
c1.605-0.938,3.332-1.408,5.164-1.408c1.789,0,3.496,0.471,5.129,1.408c1.633,0.939,2.828,2.146,3.59,3.623
|
113
|
+
c0.895,1.789,1.34,4.607,1.34,8.451v27.434c0,2.818,0.449,4.945,1.344,6.373c2.281,3.668,5.57,5.502,9.859,5.502
|
114
|
+
c3.129,0,5.793-1.074,7.984-3.221c2.145-2.059,3.219-4.941,3.219-8.654V196.39c0-3.844,0.445-6.662,1.34-8.451
|
115
|
+
c0.762-1.477,1.957-2.684,3.59-3.623c1.633-0.938,3.344-1.408,5.133-1.408c1.785,0,3.5,0.471,5.129,1.408
|
116
|
+
c1.633,0.939,2.828,2.146,3.59,3.623C344.909,189.728,345.358,192.546,345.358,196.39z"/>
|
117
|
+
<path fill="#1F1F1F" d="M377.351,166.138v74.789c0,3.848-0.445,6.666-1.344,8.451c-0.758,1.477-1.953,2.684-3.586,3.623
|
118
|
+
c-1.633,0.941-3.344,1.41-5.133,1.41s-3.5-0.469-5.129-1.41c-1.633-0.939-2.832-2.146-3.59-3.623
|
119
|
+
c-0.895-1.785-1.344-4.604-1.344-8.451v-74.789c0-3.799,0.449-6.594,1.344-8.383c0.758-1.477,1.957-2.684,3.59-3.623
|
120
|
+
c1.629-0.939,3.34-1.408,5.129-1.408s3.5,0.469,5.133,1.408s2.828,2.146,3.586,3.623
|
121
|
+
C376.905,159.544,377.351,162.339,377.351,166.138z"/>
|
122
|
+
<path fill="#1F1F1F" d="M409.343,220.403v20.523c0,3.805-0.445,6.621-1.34,8.451c-0.762,1.477-1.957,2.684-3.586,3.623
|
123
|
+
c-1.633,0.941-3.344,1.41-5.133,1.41s-3.496-0.469-5.129-1.41c-1.633-0.939-2.828-2.146-3.594-3.623
|
124
|
+
c-0.891-1.785-1.34-4.604-1.34-8.451v-74.789c0-3.799,0.449-6.594,1.34-8.383c0.766-1.477,1.961-2.684,3.594-3.623
|
125
|
+
s3.34-1.408,5.129-1.408s3.5,0.469,5.133,1.408c1.629,0.939,2.824,2.146,3.586,3.623c0.895,1.789,1.34,4.584,1.34,8.383v40.582
|
126
|
+
l18.516-18.982c3.445-3.533,6.527-5.299,9.258-5.299c2.727,0,5.051,0.984,6.977,2.951c1.922,1.924,2.883,4.227,2.883,6.908
|
127
|
+
c0,1.969-0.738,3.936-2.215,5.904c-0.488,0.625-1.566,1.744-3.219,3.354l-12.609,12.072l17.641,21.936
|
128
|
+
c2.902,3.578,4.355,6.551,4.355,8.918c0,3.178-1.27,5.793-3.82,7.85c-1.836,1.432-3.957,2.146-6.375,2.146
|
129
|
+
c-2.41,0-4.672-0.961-6.77-2.885c-0.629-0.58-1.656-1.787-3.09-3.621L409.343,220.403z"/>
|
130
|
+
</g>
|
131
|
+
</g>
|
132
|
+
</g>
|
133
|
+
</svg>
|