Skip to content

Commit 00cf8d6

Browse files
authored
Merge pull request #439 from MarketFactory/golang-issue-435
[golang] Issue #435 References inside messageHeader not working
2 parents e123949 + fbed816 commit 00cf8d6

File tree

19 files changed

+247
-89
lines changed

19 files changed

+247
-89
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ gocode/src/mktdata/*.go
7878
!gocode/src/mktdata/*_test.go
7979
gocode/src/simple/*.go
8080
!gocode/src/simple/*_test.go
81+
gocode/src/issue*/*.go
82+
!gocode/src/issue*/*_test.go
8183
gocode/src/*/*/*.go
8284
!gocode/src/*/*/*_test.go
8385
gocode/src/example-schema/example-schema*

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,6 @@ tests and containes some examples
125125

126126
Users of golang generated code should see the [user
127127
documentation](https://github.com/real-logic/simple-binary-encoding/wiki/Golang-User-Guide). Developers
128-
wishing to enhance golang generator should see the [developer
128+
wishing to enhance the golang generator should see the [developer
129129
documentation](https://github.com/real-logic/simple-binary-encoding/blob/master/gocode/README.md)
130130

build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -508,6 +508,7 @@ task(generateGolangCodecsWithXSD, type:JavaExec) {
508508
'gocode/resources/example-extension-2-schema.xml',
509509
'gocode/resources/group-with-data-extension-schema.xml',
510510
'gocode/resources/simple.xml',
511+
'gocode/resources/issue435.xml',
511512
'sbe-samples/src/main/resources/example-schema.xml',
512513
'sbe-samples/src/main/resources/example-extension-schema.xml' ]
513514
}
@@ -566,4 +567,4 @@ task runBenchmarks(type: Exec) {
566567
task uploadToMavenCentral {
567568
dependsOn 'sbe-tool:uploadArchives', 'sbe-samples:uploadArchives', 'sbe-benchmarks:uploadArchives',
568569
'sbe-all:uploadArchives', 'sbe-all:uploadShadow'
569-
}
570+
}

gocode/Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ src/example-schema/example-schema: $(DEP)
3838
go fmt && \
3939
./example-schema)
4040

41-
bench: $(DEP) src/example-schema/example-schema.test
41+
bench: $(DEP)
4242
(export GOPATH=$(GOPATH) && \
4343
cd src/example-schema && \
4444
go test --bench . -cpuprofile=cpu.out && \
@@ -68,7 +68,7 @@ test: $(DEP)
6868
go install \
6969
;done))
7070
(export GOPATH=$(GOPATH) && \
71-
(for t in mktdata group_with_data group_with_data_extension composite_element composite simple; do \
71+
(for t in mktdata group_with_data group_with_data_extension composite_elements composite simple issue435; do \
7272
cd $(GOPATH)/src/$$t && \
7373
go build && \
7474
go fmt && \

gocode/README.md

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
Overview
22
========
33

4-
There is now a [user
5-
guide]https://github.com/real-logic/simple-binary-encoding/wiki/Golang-User-Guide
4+
There is now a
5+
[user guide](https://github.com/real-logic/simple-binary-encoding/wiki/Golang-User-Guide)
66
and this document is for development of the SBE golang generator.
77

88
Code Layout
99
-----------
1010
The Java code that performs the generation of golang code is
11-
[here]https://github.com/real-logic/simple-binary-encoding/tree/master/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/golang.
11+
[here](https://github.com/real-logic/simple-binary-encoding/tree/master/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/golang).
1212

13-
Golang code used for testing resides in the top-level [gocode
14-
directory]https://github.com/real-logic/simple-binary-encoding/tree/master/gocode
13+
Golang code used for testing resides in the top-level
14+
[gocode directory](https://github.com/real-logic/simple-binary-encoding/tree/master/gocode).
1515

1616
Building and testing
1717
--------------------
18-
At some point teh golang build will be better integrated into
18+
At some point the golang build will be better integrated into
1919
gradle. For the time being some instructions/procedures are encoded
2020
into a gnu Makefile in the top level gocode directory
2121

@@ -50,23 +50,15 @@ test code for them.
5050
Design choices
5151
--------------
5252
Most of the design choice rationale is contained in the user guide
53-
however, Some design decisions are based around the structure of
54-
sbe-tool itself. sbe-tool parses the XML into an internal
55-
representation (IR) and then passes this to the language specific
56-
generator. As a result some information on the xml structure has been
57-
lost.
53+
however, some design decisions are based around the structure of
54+
sbe-tool itself.
5855

59-
The first example of this include the use of the `<ref>` tag which if
60-
used to the same underlying type in a composite will create two
61-
differently named definitions of the type in the IR.
62-
63-
A second example occurs where a field references an aliased primitive
64-
type definition in which case we lose the aliased type name in the IR
65-
as it is unreferenced.
56+
sbe-tool parses the XML into an internal representation (IR) and then
57+
passes this to the language specific generator. It is this IR which a
58+
generator processes.
6659

6760
Roadmap
6861
=======
6962
* Windows developer support (currently tested on Linux/MacOS)
70-
* Unnecessary code removal (e.g., GroupSizeEncoding)
7163
* Further Unicode support
7264
* Testing/Bug fixes

gocode/resources/example-bigendian.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
<type name="VehicleCode" primitiveType="char" length="6" characterEncoding="ASCII"/>
2828
<type name="Ron" primitiveType="uint8" minValue="90" maxValue="110"/>
2929
<type name="someNumbers" primitiveType="uint32" length="5"/>
30+
<type name="Percentage" primitiveType="int8" minValue="0" maxValue="100"/>
3031
<composite name="Booster">
3132
<enum name="BoostType" encodingType="char">
3233
<validValue name="TURBO">T</validValue>
@@ -42,6 +43,8 @@
4243
<type name="maxRpm" primitiveType="uint16" presence="constant">9000</type>
4344
<type name="manufacturerCode" primitiveType="char" length="3"/>
4445
<type name="fuel" primitiveType="char" presence="constant">Petrol</type>
46+
<ref name="efficiency" type="Percentage"/>
47+
<ref name="boosterEnabled" type="BooleanType"/>
4548
<ref name="booster" type="Booster"/>
4649
</composite>
4750
<enum name="BooleanType" encodingType="uint8">

gocode/resources/example-extension-2-schema.xml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@
2828
<type name="VehicleCode" primitiveType="char" length="6" characterEncoding="ASCII"/>
2929
<type name="Ron" primitiveType="uint8" minValue="90" maxValue="110"/>
3030
<type name="someNumbers" primitiveType="uint32" length="5"/>
31-
<composite name="Booster">
31+
<type name="Percentage" primitiveType="int8" minValue="0" maxValue="100"/>
32+
<composite name="Booster">
3233
<enum name="BoostType" encodingType="char">
3334
<validValue name="TURBO">T</validValue>
3435
<validValue name="SUPERCHARGER">S</validValue>
@@ -43,6 +44,8 @@
4344
<type name="maxRpm" primitiveType="uint16" presence="constant">9000</type>
4445
<type name="manufacturerCode" primitiveType="char" length="3"/>
4546
<type name="fuel" primitiveType="char" presence="constant">Petrol</type>
47+
<ref name="efficiency" type="Percentage"/>
48+
<ref name="boosterEnabled" type="BooleanType"/>
4649
<ref name="booster" type="Booster"/>
4750
</composite>
4851
<enum name="BooleanType" encodingType="uint8">

gocode/resources/issue435.xml

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2+
<sbe:messageSchema xmlns:sbe="http://fixprotocol.io/2016/sbe"
3+
package="issue435"
4+
id="435"
5+
version="0"
6+
semanticVersion="1.0"
7+
description="issue 435 test case"
8+
byteOrder="bigEndian">
9+
<types>
10+
<set name="setRef" encodingType="uint8">
11+
<choice name="One">0</choice>
12+
<choice name="Two">1</choice>
13+
</set>
14+
<enum name="enumRef" encodingType="uint8">
15+
<validValue name="One">0</validValue>
16+
<validValue name="Two">1</validValue>
17+
</enum>
18+
<composite name="messageHeader" description="Message identifiers and length of message root">
19+
<type name="blockLength" primitiveType="uint16"/>
20+
<type name="templateId" primitiveType="uint16"/>
21+
<type name="schemaId" primitiveType="uint16"/>
22+
<type name="version" primitiveType="uint16"/>
23+
<ref name="s" type="setRef"/>
24+
</composite>
25+
<composite name="exampleRef">
26+
<ref name="e" type="enumRef"/>
27+
</composite>
28+
</types>
29+
<sbe:message name="issue435" id="1" description="issue 435 test">
30+
<field name="example" type="exampleRef" id="10"/>
31+
</sbe:message>
32+
</sbe:messageSchema>

gocode/src/baseline-bigendian/Car_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ func TestDecodeJavaBuffer(t *testing.T) {
117117
// made by editing example-schgema to be bigendian and running
118118
// with the example with -Dsbe.encoding.filename
119119
// and then decoded using od -tu1
120-
data := []byte{0, 47, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 210, 7, 221, 1, 65, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 4, 97, 98, 99, 100, 101, 102, 6, 7, 208, 4, 49, 50, 51, 78, 200, 0, 6, 0, 3, 0, 30, 66, 15, 153, 154, 0, 0, 0, 11, 85, 114, 98, 97, 110, 32, 67, 121, 99, 108, 101, 0, 55, 66, 68, 0, 0, 0, 0, 0, 14, 67, 111, 109, 98, 105, 110, 101, 100, 32, 67, 121, 99, 108, 101, 0, 75, 66, 32, 0, 0, 0, 0, 0, 13, 72, 105, 103, 104, 119, 97, 121, 32, 67, 121, 99, 108, 101, 0, 1, 0, 2, 95, 0, 6, 0, 3, 0, 30, 64, 128, 0, 0, 0, 60, 64, 240, 0, 0, 0, 100, 65, 67, 51, 51, 99, 0, 6, 0, 3, 0, 30, 64, 115, 51, 51, 0, 60, 64, 227, 51, 51, 0, 100, 65, 60, 204, 205, 0, 0, 0, 5, 72, 111, 110, 100, 97, 0, 0, 0, 9, 67, 105, 118, 105, 99, 32, 86, 84, 105, 0, 0, 0, 6, 97, 98, 99, 100, 101, 102}
120+
data := []byte{0, 49, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 210, 7, 221, 1, 65, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 4, 97, 98, 99, 100, 101, 102, 6, 7, 208, 4, 49, 50, 51, 35, 1, 78, 200, 0, 6, 0, 3, 0, 30, 66, 15, 153, 154, 0, 0, 0, 11, 85, 114, 98, 97, 110, 32, 67, 121, 99, 108, 101, 0, 55, 66, 68, 0, 0, 0, 0, 0, 14, 67, 111, 109, 98, 105, 110, 101, 100, 32, 67, 121, 99, 108, 101, 0, 75, 66, 32, 0, 0, 0, 0, 0, 13, 72, 105, 103, 104, 119, 97, 121, 32, 67, 121, 99, 108, 101, 0, 1, 0, 2, 95, 0, 6, 0, 3, 0, 30, 64, 128, 0, 0, 0, 60, 64, 240, 0, 0, 0, 100, 65, 67, 51, 51, 99, 0, 6, 0, 3, 0, 30, 64, 115, 51, 51, 0, 60, 64, 227, 51, 51, 0, 100, 65, 60, 204, 205, 0, 0, 0, 5, 72, 111, 110, 100, 97, 0, 0, 0, 9, 67, 105, 118, 105, 99, 32, 86, 84, 105, 0, 0, 0, 6, 97, 98, 99, 100, 101, 102}
121121

122122
buf := bytes.NewBuffer(data)
123123
m := NewSbeGoMarshaller()

gocode/src/baseline/Car_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ func TestEncodeDecodeCar(t *testing.T) {
2020
optionalExtras[OptionalExtrasChoice.SportsPack] = true
2121

2222
var engine Engine
23-
engine = Engine{2000, 4, 0, manufacturerCode, [6]byte{}, EngineBooster{BoostType.NITROUS, 200}}
23+
engine = Engine{2000, 4, 0, manufacturerCode, [6]byte{}, 42, BooleanType.T, EngineBooster{BoostType.NITROUS, 200}}
2424

2525
manufacturer := []uint8("Honda")
2626
model := []uint8("Civic VTi")
@@ -115,12 +115,12 @@ func TestDecodeJavaBuffer(t *testing.T) {
115115

116116
// The byte array is from the java example for interop test made by
117117
// running with -Dsbe.encoding.filename and then decoded using od -tu1
118-
data := []byte{47, 0, 1, 0, 1, 0, 0, 0, 210, 4, 0, 0, 0, 0, 0, 0, 221, 7, 1, 65, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 97, 98, 99, 100, 101, 102, 6, 208, 7, 4, 49, 50, 51, 78, 200, 6, 0, 3, 0, 30, 0, 154, 153, 15, 66, 11, 0, 0, 0, 85, 114, 98, 97, 110, 32, 67, 121, 99, 108, 101, 55, 0, 0, 0, 68, 66, 14, 0, 0, 0, 67, 111, 109, 98, 105, 110, 101, 100, 32, 67, 121, 99, 108, 101, 75, 0, 0, 0, 32, 66, 13, 0, 0, 0, 72, 105, 103, 104, 119, 97, 121, 32, 67, 121, 99, 108, 101, 1, 0, 2, 0, 95, 6, 0, 3, 0, 30, 0, 0, 0, 128, 64, 60, 0, 0, 0, 240, 64, 100, 0, 51, 51, 67, 65, 99, 6, 0, 3, 0, 30, 0, 51, 51, 115, 64, 60, 0, 51, 51, 227, 64, 100, 0, 205, 204, 60, 65, 5, 0, 0, 0, 72, 111, 110, 100, 97, 9, 0, 0, 0, 67, 105, 118, 105, 99, 32, 86, 84, 105, 6, 0, 0, 0, 97, 98, 99, 100, 101, 102, 0, 0, 0, 0, 0, 0, 0, 0}
118+
data := []byte{49, 0, 1, 0, 1, 0, 0, 0, 210, 4, 0, 0, 0, 0, 0, 0, 221, 7, 1, 65, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 97, 98, 99, 100, 101, 102, 6, 208, 7, 4, 49, 50, 51, 35, 1, 78, 200, 6, 0, 3, 0, 30, 0, 154, 153, 15, 66, 11, 0, 0, 0, 85, 114, 98, 97, 110, 32, 67, 121, 99, 108, 101, 55, 0, 0, 0, 68, 66, 14, 0, 0, 0, 67, 111, 109, 98, 105, 110, 101, 100, 32, 67, 121, 99, 108, 101, 75, 0, 0, 0, 32, 66, 13, 0, 0, 0, 72, 105, 103, 104, 119, 97, 121, 32, 67, 121, 99, 108, 101, 1, 0, 2, 0, 95, 6, 0, 3, 0, 30, 0, 0, 0, 128, 64, 60, 0, 0, 0, 240, 64, 100, 0, 51, 51, 67, 65, 99, 6, 0, 3, 0, 30, 0, 51, 51, 115, 64, 60, 0, 51, 51, 227, 64, 100, 0, 205, 204, 60, 65, 5, 0, 0, 0, 72, 111, 110, 100, 97, 9, 0, 0, 0, 67, 105, 118, 105, 99, 32, 86, 84, 105, 6, 0, 0, 0, 97, 98, 99, 100, 101, 102}
119119

120120
buf := bytes.NewBuffer(data)
121121
m := NewSbeGoMarshaller()
122122

123-
var hdr MessageHeader
123+
var hdr SbeGoMessageHeader
124124
if err := hdr.Decode(m, buf); err != nil {
125125
t.Logf("Failed to decode message header", err)
126126
t.Fail()

gocode/src/composite/Composite_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ func TestEncodeDecode(t *testing.T) {
1111
var s1, s2 [5]byte
1212
copy(s1[:], "start")
1313
copy(s2[:], " end")
14-
p1 := Point{s1, 3.14, 1, [2]uint8{66, 77}, Truthval1.NullValue, Truthval2.T}
15-
p2 := Point{s2, 0.31, 2, [2]uint8{77, 88}, Truthval1.T, Truthval2.F}
14+
p1 := Point{s1, 3.14, 1, [2]uint8{66, 77}, BooleanEnum.NullValue, BooleanEnum.T}
15+
p2 := Point{s2, 0.31, 2, [2]uint8{77, 88}, BooleanEnum.T, BooleanEnum.F}
1616
in := Composite{p1, p2}
1717

1818
var cbuf = new(bytes.Buffer)
@@ -23,7 +23,7 @@ func TestEncodeDecode(t *testing.T) {
2323
t.Log(in, " -> ", cbuf.Bytes())
2424
t.Log("Cap() = ", cbuf.Cap(), "Len() = \n", cbuf.Len())
2525

26-
hdr := MessageHeader{in.SbeBlockLength(), in.SbeTemplateId(), in.SbeSchemaId(), in.SbeSchemaVersion()}
26+
hdr := SbeGoMessageHeader{in.SbeBlockLength(), in.SbeTemplateId(), in.SbeSchemaId(), in.SbeSchemaVersion()}
2727
var mbuf = new(bytes.Buffer)
2828
if err := hdr.Encode(m, mbuf); err != nil {
2929
t.Log("MessageHeader Encoding Error", err)
@@ -33,7 +33,7 @@ func TestEncodeDecode(t *testing.T) {
3333
t.Log("Cap() = ", mbuf.Cap(), "Len() = \n", mbuf.Len())
3434

3535
// Create a new empty MessageHeader and Composite
36-
hdr = *new(MessageHeader)
36+
hdr = *new(SbeGoMessageHeader)
3737
var out Composite = *new(Composite)
3838

3939
if err := hdr.Decode(m, mbuf); err != nil {

gocode/src/composite_elements/Message_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ func TestEncodeDecodeMsg3(t *testing.T) {
7474

7575
var in Msg3
7676

77-
in.Structure = FuturesPrice{65, 3, IsSettlement.T}
77+
in.Structure = FuturesPrice{65, 3, BooleanEnum.T}
7878

7979
var buf = new(bytes.Buffer)
8080
if err := in.Encode(m, buf, true); err != nil {

gocode/src/example-schema/CarExample.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ func ExampleDecodeBuffer() bool {
131131
buf := bytes.NewBuffer(data)
132132
m := baseline.NewSbeGoMarshaller()
133133

134-
var hdr baseline.MessageHeader
134+
var hdr baseline.SbeGoMessageHeader
135135
if err := hdr.Decode(m, buf); err != nil {
136136
fmt.Println("Failed to decode message header", err)
137137
os.Exit(1)
@@ -173,7 +173,7 @@ func ExampleDecodePipe() bool {
173173
}
174174
}()
175175

176-
var hdr baseline.MessageHeader
176+
var hdr baseline.SbeGoMessageHeader
177177
hdr.Decode(m, r)
178178

179179
var c baseline.Car
@@ -217,7 +217,7 @@ func ExampleDecodeSocket() bool {
217217
defer conn.Close()
218218

219219
// fmt.Println("reading messageheader")
220-
var hdr baseline.MessageHeader
220+
var hdr baseline.SbeGoMessageHeader
221221
hdr.Decode(m, conn)
222222

223223
// fmt.Println("reading car")
@@ -623,6 +623,8 @@ func makeCar() baseline.Car {
623623
9001, // will come back as constant value 9000
624624
manufacturerCode,
625625
[6]byte{'P', 'e', 't', 'r', 'o', 'l'},
626+
35,
627+
baseline.BooleanType.T,
626628
baseline.EngineBooster{baseline.BoostType.NITROUS, 200}},
627629
[]baseline.CarFuelFigures{
628630
baseline.CarFuelFigures{30, 35.9, urban},
@@ -660,6 +662,8 @@ func makeExtension() extension.Car {
660662
9000,
661663
manufacturerCode,
662664
[6]byte{'P', 'e', 't', 'r', 'o', 'l'},
665+
35,
666+
extension.BooleanType.T,
663667
extension.EngineBooster{extension.BoostType.NITROUS, 200}},
664668
119, // sinceVersion = 1
665669
[]extension.CarFuelFigures{
@@ -698,6 +702,8 @@ func makeExtension2() extension2.Car {
698702
9000,
699703
manufacturerCode,
700704
[6]byte{'P', 'e', 't', 'r', 'o', 'l'},
705+
35,
706+
extension2.BooleanType.T,
701707
extension2.EngineBooster{extension2.BoostType.NITROUS, 200}},
702708
119, // sinceVersion = 1
703709
[]extension2.CarFuelFigures{
@@ -738,4 +744,4 @@ func MinInt(a, b int) int {
738744

739745
// The byte array is from the java example for interop test made by
740746
// running with -Dsbe.encoding.filename and then decoded using od -tu1
741-
var data []byte = []byte{47, 0, 1, 0, 1, 0, 0, 0, 210, 4, 0, 0, 0, 0, 0, 0, 221, 7, 1, 65, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 97, 98, 99, 100, 101, 102, 6, 208, 7, 4, 49, 50, 51, 78, 200, 6, 0, 3, 0, 30, 0, 154, 153, 15, 66, 11, 0, 0, 0, 85, 114, 98, 97, 110, 32, 67, 121, 99, 108, 101, 55, 0, 0, 0, 68, 66, 14, 0, 0, 0, 67, 111, 109, 98, 105, 110, 101, 100, 32, 67, 121, 99, 108, 101, 75, 0, 0, 0, 32, 66, 13, 0, 0, 0, 72, 105, 103, 104, 119, 97, 121, 32, 67, 121, 99, 108, 101, 1, 0, 2, 0, 95, 6, 0, 3, 0, 30, 0, 0, 0, 128, 64, 60, 0, 0, 0, 240, 64, 100, 0, 51, 51, 67, 65, 99, 6, 0, 3, 0, 30, 0, 51, 51, 115, 64, 60, 0, 51, 51, 227, 64, 100, 0, 205, 204, 60, 65, 5, 0, 0, 0, 72, 111, 110, 100, 97, 9, 0, 0, 0, 67, 105, 118, 105, 99, 32, 86, 84, 105, 6, 0, 0, 0, 97, 98, 99, 100, 101, 102}
747+
var data []byte = []byte{49, 0, 1, 0, 1, 0, 0, 0, 210, 4, 0, 0, 0, 0, 0, 0, 221, 7, 1, 65, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 97, 98, 99, 100, 101, 102, 6, 208, 7, 4, 49, 50, 51, 35, 1, 78, 200, 6, 0, 3, 0, 30, 0, 154, 153, 15, 66, 11, 0, 0, 0, 85, 114, 98, 97, 110, 32, 67, 121, 99, 108, 101, 55, 0, 0, 0, 68, 66, 14, 0, 0, 0, 67, 111, 109, 98, 105, 110, 101, 100, 32, 67, 121, 99, 108, 101, 75, 0, 0, 0, 32, 66, 13, 0, 0, 0, 72, 105, 103, 104, 119, 97, 121, 32, 67, 121, 99, 108, 101, 1, 0, 2, 0, 95, 6, 0, 3, 0, 30, 0, 0, 0, 128, 64, 60, 0, 0, 0, 240, 64, 100, 0, 51, 51, 67, 65, 99, 6, 0, 3, 0, 30, 0, 51, 51, 115, 64, 60, 0, 51, 51, 227, 64, 100, 0, 205, 204, 60, 65, 5, 0, 0, 0, 72, 111, 110, 100, 97, 9, 0, 0, 0, 67, 105, 118, 105, 99, 32, 86, 84, 105, 6, 0, 0, 0, 97, 98, 99, 100, 101, 102}

0 commit comments

Comments
 (0)