Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
H
helm3
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
go
helm3
Commits
5a5a44ec
Commit
5a5a44ec
authored
Sep 28, 2016
by
Adam Reese
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat(*): add rollback to a release version
closes #1244
parent
becc1200
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
121 additions
and
67 deletions
+121
-67
tiller.proto
_proto/hapi/services/tiller.proto
+2
-1
rollback.go
cmd/helm/rollback.go
+10
-3
rollback_test.go
cmd/helm/rollback_test.go
+6
-1
release_server.go
cmd/tiller/release_server.go
+11
-1
release_server_test.go
cmd/tiller/release_server_test.go
+21
-0
option.go
pkg/helm/option.go
+8
-1
tiller.pb.go
pkg/proto/hapi/services/tiller.pb.go
+63
-60
No files found.
_proto/hapi/services/tiller.proto
View file @
5a5a44ec
...
...
@@ -183,7 +183,6 @@ message UpdateReleaseRequest {
hapi.chart.Config
values
=
3
;
// dry_run, if true, will run through the release logic, but neither create
bool
dry_run
=
4
;
// DisableHooks causes the server to skip running any hooks for the upgrade.
bool
disable_hooks
=
5
;
}
...
...
@@ -200,6 +199,8 @@ message RollbackReleaseRequest {
bool
dry_run
=
2
;
// DisableHooks causes the server to skip running any hooks for the rollback
bool
disable_hooks
=
3
;
// Version is the version of the release to deploy.
int32
version
=
4
;
}
// RollbackReleaseResponse is the response to an update request.
...
...
cmd/helm/rollback.go
View file @
5a5a44ec
...
...
@@ -26,12 +26,13 @@ import (
)
const
rollbackDesc
=
`
This command rolls back a release to the previous
ver
sion.
This command rolls back a release to the previous
revi
sion.
The argument of the rollback command is the name of a release.
`
type
rollbackCmd
struct
{
name
string
version
int32
dryRun
bool
disableHooks
bool
out
io
.
Writer
...
...
@@ -46,7 +47,7 @@ func newRollbackCmd(c helm.Interface, out io.Writer) *cobra.Command {
cmd
:=
&
cobra
.
Command
{
Use
:
"rollback [RELEASE]"
,
Short
:
"roll back a release to
the previous ver
sion"
,
Short
:
"roll back a release to
a previous revi
sion"
,
Long
:
rollbackDesc
,
PersistentPreRunE
:
setupConnection
,
RunE
:
func
(
cmd
*
cobra
.
Command
,
args
[]
string
)
error
{
...
...
@@ -60,13 +61,19 @@ func newRollbackCmd(c helm.Interface, out io.Writer) *cobra.Command {
}
f
:=
cmd
.
Flags
()
f
.
Int32Var
(
&
rollback
.
version
,
"revision"
,
0
,
"revision to deploy"
)
f
.
BoolVar
(
&
rollback
.
dryRun
,
"dry-run"
,
false
,
"simulate a rollback"
)
f
.
BoolVar
(
&
rollback
.
disableHooks
,
"no-hooks"
,
false
,
"prevent hooks from running during rollback"
)
return
cmd
}
func
(
r
*
rollbackCmd
)
run
()
error
{
_
,
err
:=
r
.
client
.
RollbackRelease
(
r
.
name
,
helm
.
RollbackDryRun
(
r
.
dryRun
),
helm
.
RollbackDisableHooks
(
r
.
disableHooks
))
_
,
err
:=
r
.
client
.
RollbackRelease
(
r
.
name
,
helm
.
RollbackDryRun
(
r
.
dryRun
),
helm
.
RollbackDisableHooks
(
r
.
disableHooks
),
helm
.
RollbackVersion
(
r
.
version
),
)
if
err
!=
nil
{
return
prettyError
(
err
)
}
...
...
cmd/helm/rollback_test.go
View file @
5a5a44ec
...
...
@@ -29,7 +29,12 @@ func TestRollbackCmd(t *testing.T) {
{
name
:
"rollback a release"
,
args
:
[]
string
{
"funny-honey"
},
resp
:
nil
,
flags
:
[]
string
{
"revision"
,
"1"
},
expected
:
"Rollback was a success! Happy Helming!"
,
},
{
name
:
"rollback a release without version"
,
args
:
[]
string
{
"funny-honey"
},
expected
:
"Rollback was a success! Happy Helming!"
,
},
}
...
...
cmd/tiller/release_server.go
View file @
5a5a44ec
...
...
@@ -461,7 +461,17 @@ func (s *releaseServer) prepareRollback(req *services.RollbackReleaseRequest) (*
return
nil
,
nil
,
err
}
previousRelease
,
err
:=
s
.
env
.
Releases
.
Get
(
req
.
Name
,
currentRelease
.
Version
-
1
)
v
:=
req
.
Version
if
v
==
0
{
v
=
currentRelease
.
Version
-
1
}
if
v
<
1
{
return
nil
,
nil
,
errors
.
New
(
"cannot rollback to version < 1"
)
}
log
.
Printf
(
"rolling back %s to version %d"
,
req
.
Name
,
v
)
previousRelease
,
err
:=
s
.
env
.
Releases
.
Get
(
req
.
Name
,
v
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
...
...
cmd/tiller/release_server_test.go
View file @
5a5a44ec
...
...
@@ -664,6 +664,27 @@ func TestRollbackReleaseNoHooks(t *testing.T) {
}
}
func
TestRollbackWithReleaseVersion
(
t
*
testing
.
T
)
{
c
:=
helm
.
NewContext
()
rs
:=
rsFixture
()
rel
:=
releaseStub
()
rs
.
env
.
Releases
.
Create
(
rel
)
upgradedRel
:=
upgradeReleaseVersion
(
rel
)
rs
.
env
.
Releases
.
Update
(
rel
)
rs
.
env
.
Releases
.
Create
(
upgradedRel
)
req
:=
&
services
.
RollbackReleaseRequest
{
Name
:
rel
.
Name
,
DisableHooks
:
true
,
Version
:
1
,
}
_
,
err
:=
rs
.
RollbackRelease
(
c
,
req
)
if
err
!=
nil
{
t
.
Fatalf
(
"Failed rollback: %s"
,
err
)
}
}
func
TestRollbackRelease
(
t
*
testing
.
T
)
{
c
:=
helm
.
NewContext
()
rs
:=
rsFixture
()
...
...
pkg/helm/option.go
View file @
5a5a44ec
...
...
@@ -196,6 +196,13 @@ func RollbackDryRun(dry bool) RollbackOption {
}
}
// RollbackVersion sets the version of the release to deploy.
func
RollbackVersion
(
ver
int32
)
RollbackOption
{
return
func
(
opts
*
options
)
{
opts
.
rollbackReq
.
Version
=
ver
}
}
// UpgradeDisableHooks will disable hooks for an upgrade operation.
func
UpgradeDisableHooks
(
disable
bool
)
UpdateOption
{
return
func
(
opts
*
options
)
{
...
...
@@ -333,7 +340,7 @@ func (o *options) rpcRollbackRelease(rlsName string, rlc rls.ReleaseServiceClien
o
.
rollbackReq
.
DryRun
=
o
.
dryRun
o
.
rollbackReq
.
Name
=
rlsName
return
rlc
.
RollbackRelease
(
context
.
TODO
(),
&
o
.
rollbackReq
)
return
rlc
.
RollbackRelease
(
NewContext
(),
&
o
.
rollbackReq
)
}
// Executes tiller.GetReleaseStatus RPC.
...
...
pkg/proto/hapi/services/tiller.pb.go
View file @
5a5a44ec
...
...
@@ -289,6 +289,8 @@ type RollbackReleaseRequest struct {
DryRun
bool
`protobuf:"varint,2,opt,name=dry_run,json=dryRun" json:"dry_run,omitempty"`
// DisableHooks causes the server to skip running any hooks for the rollback
DisableHooks
bool
`protobuf:"varint,3,opt,name=disable_hooks,json=disableHooks" json:"disable_hooks,omitempty"`
// Version is the version of the release to deploy.
Version
int32
`protobuf:"varint,4,opt,name=version" json:"version,omitempty"`
}
func
(
m
*
RollbackReleaseRequest
)
Reset
()
{
*
m
=
RollbackReleaseRequest
{}
}
...
...
@@ -807,64 +809,65 @@ var _ReleaseService_serviceDesc = grpc.ServiceDesc{
func
init
()
{
proto
.
RegisterFile
(
"hapi/services/tiller.proto"
,
fileDescriptor0
)
}
var
fileDescriptor0
=
[]
byte
{
// 944 bytes of a gzipped FileDescriptorProto
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x09
,
0x6e
,
0x88
,
0x02
,
0xff
,
0x9c
,
0x56
,
0xdd
,
0x6e
,
0xe3
,
0x44
,
0x14
,
0xae
,
0xf3
,
0x9f
,
0xd3
,
0x1f
,
0xd2
,
0xb3
,
0x69
,
0xe3
,
0x5a
,
0x80
,
0x22
,
0x23
,
0xd8
,
0xb0
,
0xb0
,
0x29
,
0x84
,
0x5b
,
0x84
,
0xd4
,
0xcd
,
0x46
,
0x6d
,
0xd9
,
0x92
,
0x95
,
0x26
,
0x14
,
0x24
,
0x2e
,
0x88
,
0xdc
,
0x64
,
0xb2
,
0xf5
,
0xae
,
0xe3
,
0x09
,
0x9e
,
0x49
,
0x45
,
0x1f
,
0x81
,
0x0b
,
0x5e
,
0x82
,
0xf7
,
0xe0
,
0xc9
,
0xb8
,
0x41
,
0x9e
,
0xf1
,
0xb8
,
0x71
,
0x62
,
0x6f
,
0xbd
,
0xb9
,
0x89
,
0x3d
,
0x73
,
0x3e
,
0x7f
,
0xe7
,
0x9b
,
0xef
,
0xcc
,
0x9c
,
0x09
,
0x58
,
0xb7
,
0xce
,
0xc2
,
0x3d
,
0xe5
,
0x34
,
0xb8
,
0x73
,
0x27
,
0x94
,
0x9f
,
0x0a
,
0xd7
,
0xf3
,
0x68
,
0xd0
,
0x5d
,
0x04
,
0x4c
,
0x30
,
0x6c
,
0x86
,
0xb1
,
0xae
,
0x8e
,
0x75
,
0x55
,
0xcc
,
0x3a
,
0x96
,
0x5f
,
0x4c
,
0x6e
,
0x9d
,
0x40
,
0xa8
,
0x5f
,
0x85
,
0xb6
,
0x5a
,
0xab
,
0xf3
,
0xcc
,
0x9f
,
0xb9
,
0x6f
,
0xa2
,
0x80
,
0x4a
,
0x11
,
0x50
,
0x8f
,
0x3a
,
0x9c
,
0xea
,
0x67
,
0xe2
,
0x23
,
0x1d
,
0x73
,
0xfd
,
0x19
,
0x8b
,
0x02
,
0x27
,
0x89
,
0x00
,
0x17
,
0x8e
,
0x58
,
0xf2
,
0x04
,
0xdf
,
0x1d
,
0x0d
,
0xb8
,
0xcb
,
0x7c
,
0xfd
,
0x54
,
0x31
,
0xfb
,
0x9f
,
0x02
,
0x3c
,
0xb9
,
0x72
,
0xb9
,
0x20
,
0xea
,
0x43
,
0x4e
,
0xe8
,
0x1f
,
0x4b
,
0xca
,
0x05
,
0x36
,
0xa1
,
0xec
,
0xb9
,
0x73
,
0x57
,
0x98
,
0x46
,
0xdb
,
0xe8
,
0x14
,
0x89
,
0x1a
,
0xe0
,
0x31
,
0x54
,
0xd8
,
0x6c
,
0xc6
,
0xa9
,
0x30
,
0x0b
,
0x6d
,
0xa3
,
0x53
,
0x27
,
0xd1
,
0x08
,
0x7f
,
0x80
,
0x2a
,
0x67
,
0x81
,
0x18
,
0xdf
,
0xdc
,
0x9b
,
0xc5
,
0xb6
,
0xd1
,
0x39
,
0xe8
,
0x7d
,
0xde
,
0x4d
,
0xb3
,
0xa2
,
0x1b
,
0x66
,
0x1a
,
0xb1
,
0x40
,
0x74
,
0xc3
,
0x9f
,
0x17
,
0xf7
,
0xa4
,
0xc2
,
0xe5
,
0x33
,
0xe4
,
0x9d
,
0xb9
,
0x9e
,
0xa0
,
0x81
,
0x59
,
0x52
,
0xbc
,
0x6a
,
0x84
,
0xe7
,
0x00
,
0x92
,
0x97
,
0x05
,
0x53
,
0x1a
,
0x98
,
0x65
,
0x49
,
0xdd
,
0xc9
,
0x41
,
0xfd
,
0x3a
,
0xc4
,
0x93
,
0x3a
,
0xd7
,
0xaf
,
0xf8
,
0x3d
,
0xec
,
0x29
,
0x4b
,
0xc6
,
0x13
,
0x36
,
0xa5
,
0xdc
,
0xac
,
0xb4
,
0x8b
,
0x9d
,
0x83
,
0xde
,
0x89
,
0xa2
,
0xd2
,
0x0e
,
0x8f
,
0x94
,
0x69
,
0x7d
,
0x36
,
0xa5
,
0x64
,
0x57
,
0xc1
,
0xc3
,
0x77
,
0x6e
,
0xff
,
0x0e
,
0x35
,
0x4d
,
0x6f
,
0xf7
,
0xa0
,
0xa2
,
0xc4
,
0xe3
,
0x2e
,
0x54
,
0xaf
,
0x87
,
0xaf
,
0x86
,
0xaf
,
0x7f
,
0x1d
,
0x36
,
0x76
,
0xb0
,
0x06
,
0xa5
,
0xe1
,
0xd9
,
0x4f
,
0x83
,
0x86
,
0x81
,
0x87
,
0xb0
,
0x7f
,
0x75
,
0x36
,
0xfa
,
0x79
,
0x4c
,
0x06
,
0x57
,
0x83
,
0xb3
,
0xd1
,
0xe0
,
0x65
,
0xa3
,
0x60
,
0x7f
,
0x0a
,
0xf5
,
0x58
,
0x15
,
0x56
,
0xa1
,
0x78
,
0x36
,
0xea
,
0xab
,
0x4f
,
0x5e
,
0x0e
,
0x46
,
0xfd
,
0x86
,
0x61
,
0xff
,
0x65
,
0x40
,
0x33
,
0x59
,
0x04
,
0xbe
,
0x60
,
0x3e
,
0xa7
,
0x61
,
0x15
,
0x26
,
0x6c
,
0xe9
,
0xc7
,
0x55
,
0x90
,
0x03
,
0x44
,
0x28
,
0xf9
,
0xf4
,
0x4f
,
0x5d
,
0x03
,
0xf9
,
0x1e
,
0x22
,
0x05
,
0x13
,
0x8e
,
0x27
,
0xfd
,
0x2f
,
0x12
,
0x35
,
0xc0
,
0x6f
,
0xa1
,
0x16
,
0x2d
,
0x8e
,
0x9b
,
0xa5
,
0x76
,
0xb1
,
0xb3
,
0xdb
,
0x3b
,
0x4a
,
0x2e
,
0x39
,
0xca
,
0x48
,
0x62
,
0x98
,
0x7d
,
0x0e
,
0xad
,
0x73
,
0xaa
,
0x95
,
0x28
,
0x47
,
0xf4
,
0x9e
,
0x08
,
0xf3
,
0x3a
,
0x73
,
0x2a
,
0xc5
,
0x84
,
0x79
,
0x9d
,
0x39
,
0x45
,
0x13
,
0xaa
,
0xd1
,
0x86
,
0x92
,
0x72
,
0xca
,
0x44
,
0x0f
,
0x6d
,
0x01
,
0xe6
,
0x26
,
0x51
,
0xb4
,
0xae
,
0x34
,
0xa6
,
0x2f
,
0xa0
,
0x14
,
0x6e
,
0x67
,
0x49
,
0xb3
,
0xdb
,
0xc3
,
0xa4
,
0xce
,
0x4b
,
0x7f
,
0xc6
,
0x88
,
0x8c
,
0xe3
,
0xc7
,
0x50
,
0x0f
,
0xf1
,
0x7c
,
0xe1
,
0x4c
,
0xa8
,
0x5c
,
0x6d
,
0x9d
,
0x3c
,
0x4c
,
0xd8
,
0x17
,
0xab
,
0x59
,
0xfb
,
0xcc
,
0x17
,
0xd4
,
0x17
,
0xdb
,
0xe9
,
0xbf
,
0x82
,
0x93
,
0x14
,
0xa6
,
0x68
,
0x01
,
0xa7
,
0x50
,
0x8d
,
0xa4
,
0x49
,
0xb6
,
0x4c
,
0x5f
,
0x35
,
0xca
,
0xfe
,
0xd7
,
0x80
,
0xe6
,
0xf5
,
0x62
,
0xea
,
0x08
,
0xaa
,
0x43
,
0xef
,
0x11
,
0xf5
,
0x14
,
0xca
,
0xb2
,
0x2d
,
0x44
,
0x5e
,
0x1c
,
0x2a
,
0x6e
,
0xd5
,
0x3b
,
0xfa
,
0xe1
,
0x2f
,
0x51
,
0x71
,
0x7c
,
0x06
,
0x95
,
0x3b
,
0xc7
,
0x5b
,
0x52
,
0x2e
,
0x8d
,
0x88
,
0x5d
,
0x8b
,
0x90
,
0xb2
,
0xa7
,
0x90
,
0x08
,
0x81
,
0x2d
,
0xa8
,
0x4e
,
0x83
,
0xfb
,
0x71
,
0xb0
,
0xf4
,
0xe5
,
0x21
,
0xab
,
0x91
,
0xca
,
0x34
,
0xb8
,
0x27
,
0x4b
,
0x1f
,
0x3f
,
0x83
,
0xfd
,
0xa9
,
0xcb
,
0x9d
,
0x1b
,
0x8f
,
0x8e
,
0x6f
,
0x19
,
0x7b
,
0xc7
,
0xe5
,
0x39
,
0xab
,
0x91
,
0xbd
,
0x68
,
0xf2
,
0x22
,
0x9c
,
0xb3
,
0x2f
,
0xe0
,
0x68
,
0x4d
,
0xfe
,
0xb6
,
0x4e
,
0xbc
,
0x85
,
0x63
,
0xc2
,
0x3c
,
0xef
,
0xc6
,
0x99
,
0xbc
,
0xcb
,
0x61
,
0xc5
,
0x8a
,
0xea
,
0xc2
,
0xfb
,
0x55
,
0x17
,
0x53
,
0x54
,
0xff
,
0x08
,
0xad
,
0x8d
,
0x5c
,
0xdb
,
0xea
,
0xfe
,
0xcf
,
0x80
,
0xa3
,
0x4b
,
0x9f
,
0x0b
,
0xc7
,
0xf3
,
0xd6
,
0x74
,
0xc7
,
0xe5
,
0x32
,
0x72
,
0x97
,
0xab
,
0xf0
,
0x21
,
0xe5
,
0x2a
,
0x26
,
0x16
,
0xae
,
0x5d
,
0x2a
,
0xad
,
0xb8
,
0x94
,
0xa7
,
0x84
,
0xc9
,
0x83
,
0x53
,
0x59
,
0x3b
,
0x38
,
0xf8
,
0x09
,
0x40
,
0x40
,
0x97
,
0x9c
,
0x8e
,
0x25
,
0x79
,
0x55
,
0x7e
,
0x5f
,
0x97
,
0x33
,
0x43
,
0x67
,
0x4e
,
0xed
,
0x4b
,
0x38
,
0x5e
,
0x5f
,
0xfc
,
0xb6
,
0x46
,
0xde
,
0x42
,
0xeb
,
0xda
,
0x77
,
0x53
,
0x9d
,
0x4c
,
0xdb
,
0x01
,
0x1b
,
0x6b
,
0x2b
,
0xa4
,
0xac
,
0xad
,
0x09
,
0xe5
,
0xc5
,
0x32
,
0x78
,
0x43
,
0x23
,
0xaf
,
0xd4
,
0xc0
,
0x7e
,
0x05
,
0xe6
,
0x66
,
0xa6
,
0x6d
,
0x65
,
0x3f
,
0x81
,
0xc3
,
0x73
,
0x2a
,
0x7e
,
0x51
,
0xdd
,
0x21
,
0x12
,
0x6c
,
0x0f
,
0x00
,
0x57
,
0x27
,
0x1f
,
0xb8
,
0xa3
,
0xa9
,
0x24
,
0xb7
,
0xbe
,
0x7a
,
0x35
,
0x5e
,
0xa3
,
0x7a
,
0x7f
,
0x57
,
0xe1
,
0x40
,
0x77
,
0x4a
,
0x75
,
0xaf
,
0xa1
,
0x0b
,
0x7b
,
0xab
,
0x57
,
0x02
,
0x7e
,
0x99
,
0x7d
,
0xed
,
0xad
,
0xdd
,
0xdd
,
0xd6
,
0xb3
,
0x3c
,
0x50
,
0x25
,
0xd5
,
0xde
,
0xf9
,
0xc6
,
0x40
,
0x0e
,
0x8d
,
0xf5
,
0x4e
,
0x8d
,
0xcf
,
0xd3
,
0x39
,
0x32
,
0xae
,
0x06
,
0xab
,
0x9b
,
0x17
,
0xae
,
0xd3
,
0xe2
,
0x9d
,
0xb4
,
0x33
,
0xd9
,
0x5e
,
0xf1
,
0x51
,
0x9a
,
0x64
,
0x47
,
0xb7
,
0x4e
,
0x73
,
0xe3
,
0xe3
,
0xbc
,
0x6f
,
0x61
,
0x3f
,
0xd1
,
0xc8
,
0x30
,
0xc3
,
0xad
,
0xb4
,
0x66
,
0x6d
,
0x7d
,
0x95
,
0x0b
,
0x1b
,
0xe7
,
0x9a
,
0xc3
,
0x41
,
0xf2
,
0xd0
,
0x60
,
0x06
,
0x41
,
0x6a
,
0x5f
,
0xb1
,
0xbe
,
0xce
,
0x07
,
0x8e
,
0xd3
,
0x71
,
0x68
,
0xac
,
0x6f
,
0xf7
,
0xac
,
0x3a
,
0x66
,
0x1c
,
0xc0
,
0xac
,
0x3a
,
0x66
,
0x9d
,
0x22
,
0x7b
,
0x07
,
0x1d
,
0x80
,
0x87
,
0x13
,
0x80
,
0x4f
,
0x33
,
0x0b
,
0x92
,
0x3c
,
0x38
,
0x56
,
0xe7
,
0x71
,
0x60
,
0x9c
,
0x62
,
0x01
,
0x1f
,
0xad
,
0x75
,
0x71
,
0xcc
,
0xb0
,
0x26
,
0xfd
,
0x62
,
0xb1
,
0x9e
,
0xe7
,
0x44
,
0xeb
,
0x8c
,
0x2f
,
0xe0
,
0xb7
,
0x9a
,
0x06
,
0xdf
,
0x54
,
0xe4
,
0x1f
,
0xe5
,
0xef
,
0xfe
,
0x0f
,
0x00
,
0x00
,
0xff
,
0xff
,
0x0b
,
0x37
,
0x7c
,
0x73
,
0xf9
,
0x0b
,
0x00
,
0x00
,
// 951 bytes of a gzipped FileDescriptorProto
0x1f
,
0x8b
,
0x08
,
0x00
,
0x00
,
0x09
,
0x6e
,
0x88
,
0x02
,
0xff
,
0x9c
,
0x56
,
0x5f
,
0x6f
,
0xe3
,
0x44
,
0x10
,
0xaf
,
0xf3
,
0x3f
,
0xd3
,
0x3f
,
0xa4
,
0x73
,
0x69
,
0xe3
,
0x5a
,
0x80
,
0x22
,
0x23
,
0xb8
,
0x70
,
0x70
,
0x29
,
0x84
,
0x57
,
0x84
,
0xd4
,
0xcb
,
0x45
,
0x6d
,
0xb9
,
0x92
,
0x93
,
0x36
,
0x14
,
0x24
,
0x1e
,
0x88
,
0xdc
,
0x64
,
0x73
,
0x35
,
0xe7
,
0x78
,
0x83
,
0x77
,
0x53
,
0xd1
,
0x77
,
0x5e
,
0x78
,
0xe0
,
0x4b
,
0xf0
,
0x3d
,
0xf8
,
0x64
,
0xbc
,
0x20
,
0xef
,
0x7a
,
0xdd
,
0x38
,
0xb1
,
0xaf
,
0xbe
,
0xbc
,
0xc4
,
0xde
,
0x9d
,
0x9f
,
0x7f
,
0x33
,
0xf3
,
0x9b
,
0x9d
,
0xd9
,
0x80
,
0x75
,
0xeb
,
0x2c
,
0xdc
,
0x53
,
0x4e
,
0x83
,
0x3b
,
0x77
,
0x42
,
0xf9
,
0xa9
,
0x70
,
0x3d
,
0x8f
,
0x06
,
0xdd
,
0x45
,
0xc0
,
0x04
,
0xc3
,
0x66
,
0x68
,
0xeb
,
0x6a
,
0x5b
,
0x57
,
0xd9
,
0xac
,
0x63
,
0xf9
,
0xc5
,
0xe4
,
0xd6
,
0x09
,
0x84
,
0xfa
,
0x55
,
0x68
,
0xab
,
0xb5
,
0xba
,
0xcf
,
0xfc
,
0x99
,
0xfb
,
0x26
,
0x32
,
0x28
,
0x17
,
0x01
,
0xf5
,
0xa8
,
0xc3
,
0xa9
,
0x7e
,
0x26
,
0x3e
,
0xd2
,
0x36
,
0xd7
,
0x9f
,
0xb1
,
0xc8
,
0x70
,
0x92
,
0x30
,
0x70
,
0xe1
,
0x88
,
0x25
,
0x4f
,
0xf0
,
0xdd
,
0xd1
,
0x80
,
0xbb
,
0xcc
,
0xd7
,
0x4f
,
0x65
,
0xb3
,
0xff
,
0x29
,
0xc0
,
0x93
,
0x2b
,
0x97
,
0x0b
,
0xa2
,
0x3e
,
0xe4
,
0x84
,
0xfe
,
0xbe
,
0xa4
,
0x5c
,
0x60
,
0x13
,
0xca
,
0x9e
,
0x3b
,
0x77
,
0x85
,
0x69
,
0xb4
,
0x8d
,
0x4e
,
0x91
,
0xa8
,
0x05
,
0x1e
,
0x43
,
0x85
,
0xcd
,
0x66
,
0x9c
,
0x0a
,
0xb3
,
0xd0
,
0x36
,
0x3a
,
0x75
,
0x12
,
0xad
,
0xf0
,
0x3b
,
0xa8
,
0x72
,
0x16
,
0x88
,
0xf1
,
0xcd
,
0xbd
,
0x59
,
0x6c
,
0x1b
,
0x9d
,
0x83
,
0xde
,
0xa7
,
0xdd
,
0x34
,
0x29
,
0xba
,
0xa1
,
0xa7
,
0x11
,
0x0b
,
0x44
,
0x37
,
0xfc
,
0x79
,
0x71
,
0x4f
,
0x2a
,
0x5c
,
0x3e
,
0x43
,
0xde
,
0x99
,
0xeb
,
0x09
,
0x1a
,
0x98
,
0x25
,
0xc5
,
0xab
,
0x56
,
0x78
,
0x0e
,
0x20
,
0x79
,
0x59
,
0x30
,
0xa5
,
0x81
,
0x59
,
0x96
,
0xd4
,
0x9d
,
0x1c
,
0xd4
,
0xaf
,
0x43
,
0x3c
,
0xa9
,
0x73
,
0xfd
,
0x8a
,
0xdf
,
0xc2
,
0x9e
,
0x92
,
0x64
,
0x3c
,
0x61
,
0x53
,
0xca
,
0xcd
,
0x4a
,
0xbb
,
0xd8
,
0x39
,
0xe8
,
0x9d
,
0x28
,
0x2a
,
0xad
,
0xf0
,
0x48
,
0x89
,
0xd6
,
0x67
,
0x53
,
0x4a
,
0x76
,
0x15
,
0x3c
,
0x7c
,
0xe7
,
0xf6
,
0xaf
,
0x50
,
0xd3
,
0xf4
,
0x76
,
0x0f
,
0x2a
,
0x2a
,
0x78
,
0xdc
,
0x85
,
0xea
,
0xf5
,
0xf0
,
0xd5
,
0xf0
,
0xf5
,
0xcf
,
0xc3
,
0xc6
,
0x0e
,
0xd6
,
0xa0
,
0x34
,
0x3c
,
0xfb
,
0x61
,
0xd0
,
0x30
,
0xf0
,
0x10
,
0xf6
,
0xaf
,
0xce
,
0x46
,
0x3f
,
0x8e
,
0xc9
,
0xe0
,
0x6a
,
0x70
,
0x36
,
0x1a
,
0xbc
,
0x6c
,
0x14
,
0xec
,
0x8f
,
0xa1
,
0x1e
,
0x47
,
0x85
,
0x55
,
0x28
,
0x9e
,
0x8d
,
0xfa
,
0xea
,
0x93
,
0x97
,
0x83
,
0x51
,
0xbf
,
0x61
,
0xd8
,
0x7f
,
0x19
,
0xd0
,
0x4c
,
0x16
,
0x81
,
0x2f
,
0x98
,
0xcf
,
0x69
,
0x58
,
0x85
,
0x09
,
0x5b
,
0xfa
,
0x71
,
0x15
,
0xe4
,
0x02
,
0x11
,
0x4a
,
0x3e
,
0xfd
,
0x43
,
0xd7
,
0x40
,
0xbe
,
0x87
,
0x48
,
0xc1
,
0x84
,
0xe3
,
0x49
,
0xfd
,
0x8b
,
0x44
,
0x2d
,
0xf0
,
0x6b
,
0xa8
,
0x45
,
0xc9
,
0x71
,
0xb3
,
0xd4
,
0x2e
,
0x76
,
0x76
,
0x7b
,
0x47
,
0xc9
,
0x94
,
0x23
,
0x8f
,
0x24
,
0x86
,
0xd9
,
0xe7
,
0xd0
,
0x3a
,
0xa7
,
0x3a
,
0x12
,
0xa5
,
0x88
,
0x3e
,
0x13
,
0xa1
,
0x5f
,
0x67
,
0x4e
,
0x65
,
0x30
,
0xa1
,
0x5f
,
0x67
,
0x4e
,
0xd1
,
0x84
,
0x6a
,
0x74
,
0xa0
,
0x64
,
0x38
,
0x65
,
0xa2
,
0x97
,
0xb6
,
0x00
,
0x73
,
0x93
,
0x28
,
0xca
,
0x2b
,
0x8d
,
0xe9
,
0x33
,
0x28
,
0x85
,
0xc7
,
0x59
,
0xd2
,
0xec
,
0xf6
,
0x30
,
0x19
,
0xe7
,
0xa5
,
0x3f
,
0x63
,
0x44
,
0xda
,
0xf1
,
0x43
,
0xa8
,
0x87
,
0x78
,
0xbe
,
0x70
,
0x26
,
0x54
,
0x66
,
0x5b
,
0x27
,
0x0f
,
0x1b
,
0xf6
,
0xc5
,
0xaa
,
0xd7
,
0x3e
,
0xf3
,
0x05
,
0xf5
,
0xc5
,
0x76
,
0xf1
,
0x5f
,
0xc1
,
0x49
,
0x0a
,
0x53
,
0x94
,
0xc0
,
0x29
,
0x54
,
0xa3
,
0xd0
,
0x24
,
0x5b
,
0xa6
,
0xae
,
0x1a
,
0x65
,
0xff
,
0x6b
,
0x40
,
0xf3
,
0x7a
,
0x31
,
0x75
,
0x04
,
0xd5
,
0xa6
,
0x77
,
0x04
,
0xf5
,
0x14
,
0xca
,
0x72
,
0x2c
,
0x44
,
0x5a
,
0x1c
,
0x2a
,
0x6e
,
0x35
,
0x3b
,
0xfa
,
0xe1
,
0x2f
,
0x51
,
0x76
,
0x7c
,
0x06
,
0x95
,
0x3b
,
0xc7
,
0x5b
,
0x52
,
0x2e
,
0x85
,
0x88
,
0x55
,
0x8b
,
0x90
,
0x72
,
0xa6
,
0x90
,
0x08
,
0x81
,
0x2d
,
0xa8
,
0x4e
,
0x83
,
0xfb
,
0x71
,
0xb0
,
0xf4
,
0x65
,
0x93
,
0xd5
,
0x48
,
0x65
,
0x1a
,
0xdc
,
0x93
,
0xa5
,
0x8f
,
0x9f
,
0xc0
,
0xfe
,
0xd4
,
0xe5
,
0xce
,
0x8d
,
0x47
,
0xc7
,
0xb7
,
0x8c
,
0xbd
,
0xe5
,
0xb2
,
0xcf
,
0x6a
,
0x64
,
0x2f
,
0xda
,
0xbc
,
0x08
,
0xf7
,
0xec
,
0x0b
,
0x38
,
0x5a
,
0x0b
,
0x7f
,
0x5b
,
0x25
,
0xfe
,
0x34
,
0xe0
,
0x98
,
0x30
,
0xcf
,
0xbb
,
0x71
,
0x26
,
0x6f
,
0x73
,
0x68
,
0xb1
,
0x12
,
0x76
,
0xe1
,
0xdd
,
0x61
,
0x17
,
0x37
,
0xc3
,
0x5e
,
0x2d
,
0x6f
,
0x29
,
0x59
,
0xde
,
0xef
,
0xa1
,
0xb5
,
0x11
,
0xc5
,
0xb6
,
0x29
,
0xfd
,
0x67
,
0xc0
,
0xd1
,
0xa5
,
0xcf
,
0x85
,
0xe3
,
0x79
,
0x6b
,
0x19
,
0xc5
,
0x95
,
0x34
,
0x72
,
0x57
,
0xb2
,
0xf0
,
0x3e
,
0x95
,
0x2c
,
0x26
,
0x24
,
0xd1
,
0xfa
,
0x95
,
0x56
,
0xf4
,
0xcb
,
0x53
,
0xdd
,
0x64
,
0x4f
,
0x55
,
0xd6
,
0x7a
,
0x0a
,
0x3f
,
0x02
,
0x08
,
0xe8
,
0x92
,
0xd3
,
0xb1
,
0x24
,
0xaf
,
0xca
,
0xef
,
0xeb
,
0x72
,
0x67
,
0xe8
,
0xcc
,
0xa9
,
0x7d
,
0x09
,
0xc7
,
0xeb
,
0xc9
,
0x6f
,
0x2b
,
0xe4
,
0x2d
,
0xb4
,
0xae
,
0x7d
,
0x37
,
0x55
,
0xc9
,
0xb4
,
0xb3
,
0xb1
,
0x91
,
0x5b
,
0x21
,
0x25
,
0xb7
,
0x26
,
0x94
,
0x17
,
0xcb
,
0xe0
,
0x0d
,
0x8d
,
0xb4
,
0x52
,
0x0b
,
0xfb
,
0x15
,
0x98
,
0x9b
,
0x9e
,
0xb6
,
0x0d
,
0xfb
,
0x09
,
0x1c
,
0x9e
,
0x53
,
0xf1
,
0x93
,
0x3a
,
0x59
,
0x51
,
0xc0
,
0xf6
,
0x00
,
0x70
,
0x75
,
0xf3
,
0x81
,
0x3b
,
0xda
,
0x4a
,
0x72
,
0xeb
,
0x5b
,
0x59
,
0xe3
,
0x35
,
0xaa
,
0xf7
,
0x77
,
0x15
,
0x0e
,
0xf4
,
0x10
,
0x55
,
0x57
,
0x1e
,
0xba
,
0xb0
,
0xb7
,
0x7a
,
0x5b
,
0xe0
,
0xe7
,
0xd9
,
0x37
,
0xe2
,
0xda
,
0xb5
,
0x6e
,
0x3d
,
0xcb
,
0x03
,
0x55
,
0xa1
,
0xda
,
0x3b
,
0x5f
,
0x19
,
0xc8
,
0xa1
,
0xb1
,
0x3e
,
0xc4
,
0xf1
,
0x79
,
0x3a
,
0x47
,
0xc6
,
0xad
,
0x61
,
0x75
,
0xf3
,
0xc2
,
0xb5
,
0x5b
,
0xbc
,
0x93
,
0x72
,
0x26
,
0x27
,
0x2f
,
0x3e
,
0x4a
,
0x93
,
0x1c
,
0xf6
,
0xd6
,
0x69
,
0x6e
,
0x7c
,
0xec
,
0xf7
,
0x37
,
0xd8
,
0x4f
,
0xcc
,
0x38
,
0xcc
,
0x50
,
0x2b
,
0x6d
,
0x8e
,
0x5b
,
0x5f
,
0xe4
,
0xc2
,
0xc6
,
0xbe
,
0xe6
,
0x70
,
0x90
,
0x6c
,
0x1a
,
0xcc
,
0x20
,
0x48
,
0x9d
,
0x2b
,
0xd6
,
0x97
,
0xf9
,
0xc0
,
0xb1
,
0x3b
,
0x0e
,
0x8d
,
0xf5
,
0xe3
,
0x9e
,
0x55
,
0xc7
,
0x8c
,
0x06
,
0xcc
,
0xaa
,
0x63
,
0x56
,
0x17
,
0xd9
,
0x3b
,
0xe8
,
0x00
,
0x3c
,
0x74
,
0x00
,
0x3e
,
0xcd
,
0x2c
,
0x48
,
0xb2
,
0x71
,
0xac
,
0xce
,
0xe3
,
0xc0
,
0xd8
,
0xc5
,
0x02
,
0x3e
,
0x58
,
0x9b
,
0xe2
,
0x98
,
0x21
,
0x4d
,
0xfa
,
0x95
,
0x63
,
0x3d
,
0xcf
,
0x89
,
0xd6
,
0x1e
,
0x5f
,
0xc0
,
0x2f
,
0x35
,
0x0d
,
0xbe
,
0xa9
,
0xc8
,
0xff
,
0xd0
,
0xdf
,
0xfc
,
0x1f
,
0x00
,
0x00
,
0xff
,
0xff
,
0x76
,
0x9b
,
0x44
,
0xa7
,
0x14
,
0x0c
,
0x00
,
0x00
,
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment