Skip to content

Commit 4ab86ef

Browse files
committed
Add port hopping for hysteria2
1 parent 2874c38 commit 4ab86ef

File tree

10 files changed

+144
-98
lines changed

10 files changed

+144
-98
lines changed

docs/configuration/outbound/hysteria2.md

+33
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
---
2+
icon: material/new-box
3+
---
4+
5+
!!! quote "Changes in sing-box 1.11.0"
6+
7+
:material-plus: [server_ports](#server_ports)
8+
:material-plus: [hop_interval](#hop_interval)
9+
110
### Structure
211

312
```json
@@ -7,6 +16,10 @@
716

817
"server": "127.0.0.1",
918
"server_port": 1080,
19+
"server_ports": [
20+
"2080:3000"
21+
],
22+
"hop_interval": "",
1023
"up_mbps": 100,
1124
"down_mbps": 100,
1225
"obfs": {
@@ -22,6 +35,10 @@
2235
}
2336
```
2437

38+
!!! note ""
39+
40+
You can ignore the JSON Array [] tag when the content is only one item
41+
2542
!!! warning "Difference from official Hysteria2"
2643

2744
The official Hysteria2 supports an authentication method called **userpass**,
@@ -44,6 +61,22 @@ The server address.
4461

4562
The server port.
4663

64+
Ignored if `server_ports` is set.
65+
66+
#### server_ports
67+
68+
!!! question "Since sing-box 1.11.0"
69+
70+
Server port range list.
71+
72+
Conflicts with `server_port`.
73+
74+
#### hop_interval
75+
76+
Port hopping interval.
77+
78+
`30s` is used by default.
79+
4780
#### up_mbps, down_mbps
4881

4982
Max bandwidth, in Mbps.

docs/configuration/outbound/hysteria2.zh.md

+35
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
---
2+
icon: material/new-box
3+
---
4+
5+
!!! quote "sing-box 1.11.0 中的更改"
6+
7+
:material-plus: [server_ports](#server_ports)
8+
:material-plus: [hop_interval](#hop_interval)
9+
110
### 结构
211

312
```json
@@ -7,6 +16,10 @@
716

817
"server": "127.0.0.1",
918
"server_port": 1080,
19+
"server_ports": [
20+
"2080:3000"
21+
],
22+
"hop_interval": "",
1023
"up_mbps": 100,
1124
"down_mbps": 100,
1225
"obfs": {
@@ -22,6 +35,10 @@
2235
}
2336
```
2437

38+
!!! note ""
39+
40+
当内容只有一项时,可以忽略 JSON 数组 [] 标签
41+
2542
!!! warning "与官方 Hysteria2 的区别"
2643

2744
官方程序支持一种名为 **userpass** 的验证方式,
@@ -42,6 +59,24 @@
4259

4360
服务器端口。
4461

62+
如果设置了 `server_ports`,则忽略此项。
63+
64+
#### server_ports
65+
66+
!!! question "自 sing-box 1.11.0 起"
67+
68+
服务器端口范围列表。
69+
70+
`server_port` 冲突。
71+
72+
#### hop_interval
73+
74+
!!! question "自 sing-box 1.11.0 起"
75+
76+
端口跳跃间隔。
77+
78+
默认使用 `30s`
79+
4580
#### up_mbps, down_mbps
4681

4782
最大带宽。

go.mod

+5-5
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ require (
2929
github.com/sagernet/sing v0.6.0-beta.9
3030
github.com/sagernet/sing-dns v0.4.0-beta.1
3131
github.com/sagernet/sing-mux v0.3.0-alpha.1
32-
github.com/sagernet/sing-quic v0.4.0-alpha.4
32+
github.com/sagernet/sing-quic v0.4.0-beta.1
3333
github.com/sagernet/sing-shadowsocks v0.2.7
3434
github.com/sagernet/sing-shadowsocks2 v0.2.0
3535
github.com/sagernet/sing-shadowtls v0.2.0-alpha.2
@@ -43,11 +43,11 @@ require (
4343
github.com/stretchr/testify v1.9.0
4444
go.uber.org/zap v1.27.0
4545
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba
46-
golang.org/x/crypto v0.29.0
46+
golang.org/x/crypto v0.31.0
4747
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56
4848
golang.org/x/mod v0.20.0
4949
golang.org/x/net v0.31.0
50-
golang.org/x/sys v0.27.0
50+
golang.org/x/sys v0.28.0
5151
golang.zx2c4.com/wireguard/wgctrl v0.0.0-20230429144221-925a1e7659e6
5252
google.golang.org/grpc v1.63.2
5353
google.golang.org/protobuf v1.33.0
@@ -92,8 +92,8 @@ require (
9292
github.com/vishvananda/netns v0.0.4 // indirect
9393
github.com/zeebo/blake3 v0.2.3 // indirect
9494
go.uber.org/multierr v1.11.0 // indirect
95-
golang.org/x/sync v0.9.0 // indirect
96-
golang.org/x/text v0.20.0 // indirect
95+
golang.org/x/sync v0.10.0 // indirect
96+
golang.org/x/text v0.21.0 // indirect
9797
golang.org/x/time v0.7.0 // indirect
9898
golang.org/x/tools v0.24.0 // indirect
9999
golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 // indirect

go.sum

+11-11
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,8 @@ github.com/sagernet/sing-dns v0.4.0-beta.1 h1:W1XkdhigwxDOMgMDVB+9kdomCpb7ExsZfB
125125
github.com/sagernet/sing-dns v0.4.0-beta.1/go.mod h1:8wuFcoFkWM4vJuQyg8e97LyvDwe0/Vl7G839WLcKDs8=
126126
github.com/sagernet/sing-mux v0.3.0-alpha.1 h1:IgNX5bJBpL41gGbp05pdDOvh/b5eUQ6cv9240+Ngipg=
127127
github.com/sagernet/sing-mux v0.3.0-alpha.1/go.mod h1:FTcImmdfW38Lz7b+HQ+mxxOth1lz4ao8uEnz+MwIJQE=
128-
github.com/sagernet/sing-quic v0.4.0-alpha.4 h1:P9xAx3nIfcqb9M8jfgs0uLm+VxCcaY++FCqaBfHY3dQ=
129-
github.com/sagernet/sing-quic v0.4.0-alpha.4/go.mod h1:h5RkKTmUhudJKzK7c87FPXD5w1bJjVyxMN9+opZcctA=
128+
github.com/sagernet/sing-quic v0.4.0-beta.1 h1:n4/ZJWufF7TGV5VrCZ3K3HUIHYvYSzc1BGXQUFEQ/hk=
129+
github.com/sagernet/sing-quic v0.4.0-beta.1/go.mod h1:1UNObFodd8CnS3aCT53x9cigjPSCl3P//8dfBMCwBDM=
130130
github.com/sagernet/sing-shadowsocks v0.2.7 h1:zaopR1tbHEw5Nk6FAkM05wCslV6ahVegEZaKMv9ipx8=
131131
github.com/sagernet/sing-shadowsocks v0.2.7/go.mod h1:0rIKJZBR65Qi0zwdKezt4s57y/Tl1ofkaq6NlkzVuyE=
132132
github.com/sagernet/sing-shadowsocks2 v0.2.0 h1:wpZNs6wKnR7mh1wV9OHwOyUr21VkS3wKFHi+8XwgADg=
@@ -172,8 +172,8 @@ go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
172172
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba h1:0b9z3AuHCjxk0x/opv64kcgZLBseWJUpBw5I82+2U4M=
173173
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba/go.mod h1:PLyyIXexvUFg3Owu6p/WfdlivPbZJsZdgWZlrGope/Y=
174174
golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8=
175-
golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ=
176-
golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg=
175+
golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U=
176+
golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
177177
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8=
178178
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY=
179179
golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0=
@@ -182,23 +182,23 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v
182182
golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
183183
golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo=
184184
golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM=
185-
golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ=
186-
golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
185+
golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
186+
golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
187187
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
188188
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
189189
golang.org/x/sys v0.0.0-20220622161953-175b2fd9d664/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
190190
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
191191
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
192192
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
193193
golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
194-
golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s=
195-
golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
194+
golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
195+
golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
196196
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
197-
golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU=
197+
golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q=
198198
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
199199
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
200-
golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug=
201-
golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4=
200+
golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
201+
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
202202
golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ=
203203
golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
204204
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=

option/hysteria2.go

+7-5
Original file line numberDiff line numberDiff line change
@@ -111,11 +111,13 @@ type Hysteria2MasqueradeString struct {
111111
type Hysteria2OutboundOptions struct {
112112
DialerOptions
113113
ServerOptions
114-
UpMbps int `json:"up_mbps,omitempty"`
115-
DownMbps int `json:"down_mbps,omitempty"`
116-
Obfs *Hysteria2Obfs `json:"obfs,omitempty"`
117-
Password string `json:"password,omitempty"`
118-
Network NetworkList `json:"network,omitempty"`
114+
ServerPorts badoption.Listable[string] `json:"server_ports,omitempty"`
115+
HopInterval badoption.Duration `json:"hop_interval,omitempty"`
116+
UpMbps int `json:"up_mbps,omitempty"`
117+
DownMbps int `json:"down_mbps,omitempty"`
118+
Obfs *Hysteria2Obfs `json:"obfs,omitempty"`
119+
Password string `json:"password,omitempty"`
120+
Network NetworkList `json:"network,omitempty"`
119121
OutboundTLSOptionsContainer
120122
BrutalDebug bool `json:"brutal_debug,omitempty"`
121123
}

protocol/hysteria2/outbound.go

+3
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"net"
66
"os"
7+
"time"
78

89
"github.com/sagernet/sing-box/adapter"
910
"github.com/sagernet/sing-box/adapter/outbound"
@@ -70,6 +71,8 @@ func NewOutbound(ctx context.Context, router adapter.Router, logger log.ContextL
7071
Logger: logger,
7172
BrutalDebug: options.BrutalDebug,
7273
ServerAddress: options.ServerOptions.Build(),
74+
ServerPorts: options.ServerPorts,
75+
HopInterval: time.Duration(options.HopInterval),
7376
SendBPS: uint64(options.UpMbps * hysteria.MbpsToBps),
7477
ReceiveBPS: uint64(options.DownMbps * hysteria.MbpsToBps),
7578
SalamanderPassword: salamanderPassword,

test/go.mod

+5-5
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ require (
1515
github.com/sagernet/quic-go v0.48.2-beta.1
1616
github.com/sagernet/sing v0.6.0-beta.9
1717
github.com/sagernet/sing-dns v0.4.0-beta.1
18-
github.com/sagernet/sing-quic v0.4.0-alpha.4
18+
github.com/sagernet/sing-quic v0.4.0-beta.1
1919
github.com/sagernet/sing-shadowsocks v0.2.7
2020
github.com/sagernet/sing-shadowsocks2 v0.2.0
2121
github.com/spyzhov/ajson v0.9.4
@@ -103,12 +103,12 @@ require (
103103
go.uber.org/multierr v1.11.0 // indirect
104104
go.uber.org/zap v1.27.0 // indirect
105105
go4.org/netipx v0.0.0-20231129151722-fdeea329fbba // indirect
106-
golang.org/x/crypto v0.29.0 // indirect
106+
golang.org/x/crypto v0.31.0 // indirect
107107
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect
108108
golang.org/x/mod v0.20.0 // indirect
109-
golang.org/x/sync v0.9.0 // indirect
110-
golang.org/x/sys v0.27.0 // indirect
111-
golang.org/x/text v0.20.0 // indirect
109+
golang.org/x/sync v0.10.0 // indirect
110+
golang.org/x/sys v0.28.0 // indirect
111+
golang.org/x/text v0.21.0 // indirect
112112
golang.org/x/time v0.7.0 // indirect
113113
golang.org/x/tools v0.24.0 // indirect
114114
golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 // indirect

test/go.sum

+12-12
Original file line numberDiff line numberDiff line change
@@ -152,8 +152,8 @@ github.com/sagernet/sing-dns v0.4.0-beta.1 h1:W1XkdhigwxDOMgMDVB+9kdomCpb7ExsZfB
152152
github.com/sagernet/sing-dns v0.4.0-beta.1/go.mod h1:8wuFcoFkWM4vJuQyg8e97LyvDwe0/Vl7G839WLcKDs8=
153153
github.com/sagernet/sing-mux v0.3.0-alpha.1 h1:IgNX5bJBpL41gGbp05pdDOvh/b5eUQ6cv9240+Ngipg=
154154
github.com/sagernet/sing-mux v0.3.0-alpha.1/go.mod h1:FTcImmdfW38Lz7b+HQ+mxxOth1lz4ao8uEnz+MwIJQE=
155-
github.com/sagernet/sing-quic v0.4.0-alpha.4 h1:P9xAx3nIfcqb9M8jfgs0uLm+VxCcaY++FCqaBfHY3dQ=
156-
github.com/sagernet/sing-quic v0.4.0-alpha.4/go.mod h1:h5RkKTmUhudJKzK7c87FPXD5w1bJjVyxMN9+opZcctA=
155+
github.com/sagernet/sing-quic v0.4.0-beta.1 h1:n4/ZJWufF7TGV5VrCZ3K3HUIHYvYSzc1BGXQUFEQ/hk=
156+
github.com/sagernet/sing-quic v0.4.0-beta.1/go.mod h1:1UNObFodd8CnS3aCT53x9cigjPSCl3P//8dfBMCwBDM=
157157
github.com/sagernet/sing-shadowsocks v0.2.7 h1:zaopR1tbHEw5Nk6FAkM05wCslV6ahVegEZaKMv9ipx8=
158158
github.com/sagernet/sing-shadowsocks v0.2.7/go.mod h1:0rIKJZBR65Qi0zwdKezt4s57y/Tl1ofkaq6NlkzVuyE=
159159
github.com/sagernet/sing-shadowsocks2 v0.2.0 h1:wpZNs6wKnR7mh1wV9OHwOyUr21VkS3wKFHi+8XwgADg=
@@ -221,8 +221,8 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
221221
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
222222
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
223223
golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8=
224-
golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ=
225-
golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg=
224+
golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U=
225+
golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
226226
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8=
227227
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY=
228228
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
@@ -240,8 +240,8 @@ golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM=
240240
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
241241
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
242242
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
243-
golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ=
244-
golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
243+
golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
244+
golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
245245
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
246246
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
247247
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -252,16 +252,16 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
252252
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
253253
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
254254
golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
255-
golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s=
256-
golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
255+
golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
256+
golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
257257
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
258-
golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU=
259-
golang.org/x/term v0.26.0/go.mod h1:Si5m1o57C5nBNQo5z1iq+XDijt21BDBDp2bK0QI8e3E=
258+
golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q=
259+
golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM=
260260
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
261261
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
262262
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
263-
golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug=
264-
golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4=
263+
golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
264+
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
265265
golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ=
266266
golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
267267
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=

0 commit comments

Comments
 (0)